Code

Initial scalix plugin
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 19 Jun 2007 12:29:47 +0000 (12:29 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 19 Jun 2007 12:29:47 +0000 (12:29 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@6626 594d385d-05f5-0310-b6e9-bd551577e9d8

html/images/scalix.png [new file with mode: 0644]
html/images/scalix16.png [new file with mode: 0644]
plugins/admin/groups/acl_definition.inc
plugins/personal/scalix/class_scalixAccount.inc [new file with mode: 0644]
plugins/personal/scalix/generic.tpl [new file with mode: 0644]
plugins/personal/scalix/main.inc [new file with mode: 0644]

diff --git a/html/images/scalix.png b/html/images/scalix.png
new file mode 100644 (file)
index 0000000..649e7bf
Binary files /dev/null and b/html/images/scalix.png differ
diff --git a/html/images/scalix16.png b/html/images/scalix16.png
new file mode 100644 (file)
index 0000000..9ac5eed
Binary files /dev/null and b/html/images/scalix16.png differ
index 184f643895a7f37e2cde958e6e5d47874627a438..0bba710c6043c4567ac142d8c80fbf253a217359 100644 (file)
@@ -442,5 +442,18 @@ $ACLD['phonequeue'] = array( "create","goFonTimeOut","goFonMaxLen","goFonAnnounc
       "telephoneNumber","goFonQueueLanguage","goFonQueueStrategy","goFonQueueAnnounceHoldtime","goFonQueueAnnounce","goFonDialOption","goFonQueueRetry");                                      
 $ACLD['goFonMacro']    =array("goFonMacro","edit","delete");
 $ACLD['mailogroup']    = array("create");
+$ACLD['scalix']        = array(
+               "scalixMailnode"                        => _("Scalix Mail node"),
+               "scalixMailboxClass"            => _("Mailbox class"),
+               "scalixServerLanguage"          => _("Server language"),
+               "scalixAdministrator"           => _("Administrator"),
+               "scalixMailboxAdministrator"=> _("Mailbox administrator"),
+               "scalixHideUserEntry"           => _("Hide user entry in Scalix"),
+               "scalixLimitMailboxSize"        => _("Mailbox size limitations"),
+               "scalixLimitOutboundMail"       => _("Limit outbound"),
+               "scalixLimitInboundMail"        => _("Limit inbound"),
+               "scalixLimitNotifyUser"         => _("Notify user"),
+               "scalixEmailAddress"            => _("Scalix email addresses"));
 
 ?>
diff --git a/plugins/personal/scalix/class_scalixAccount.inc b/plugins/personal/scalix/class_scalixAccount.inc
new file mode 100644 (file)
index 0000000..7f41d7e
--- /dev/null
@@ -0,0 +1,429 @@
+<?php
+/*! \brief   scalix plugin
+  \author  Jörn Dreyer <gosa.jfd@butonic.de>,
+           based on work by Cajus Pollmeier <pollmeier@gonicus.de>
+  \version 0.01
+  \date    20.10.2006
+
+  This class provides the functionality to read and write all attributes
+  relevant for scalixAccounts from/to the LDAP. It does syntax checking
+  and displays the formulars required.
+ */
+
+class scalixAccount extends plugin
+{
+  /* Definitions */
+  var $plHeadline   = "Scalix";
+  var $plDescription= "This does something";
+
+  /* CLI vars */
+  var $cli_summary    = "Manage users scalix account";
+  var $cli_description= "Some longer text\nfor help";
+  var $cli_parameters = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+
+  /* plugin specific values - scalixUserClass */
+  /* MUST */
+  var $scalixScalixObject= TRUE; //TRUE or FALSE
+  var $scalixMailnode= "";
+  /* INDIRECT MUST, scalix will complain if no email was specified */
+  
+  /* MAY */
+  var $scalixAdministrator= FALSE;
+  var $scalixMailboxAdministrator = FALSE;
+  var $scalixServerLanguage= "";
+  var $scalixEmailAddress= array();
+  var $scalixLimitMailboxSize= "";
+  var $scalixLimitOutboundMail= FALSE;
+  var $scalixLimitInboundMail= FALSE;
+  var $scalixLimitNotifyUser= FALSE;
+  var $scalixHideUserEntry= FALSE;
+  var $scalixMailboxClass= "";
+
+  var $default_permissions= "none";
+  var $member_permissions= "post";
+  var $members= array();
+  var $admins= array();
+  var $vacations= array();
+  var $perms= array( "lrs" => "read", "lrsp" => "post", "lrsip" => "append",
+      "lrswipcd" => "write", "lrswipcda" => "all" );
+
+  /* attribute list for save action */
+  var $attributes= array("scalixMailnode", "scalixServerLanguage", "scalixLimitMailboxSize", "scalixMailboxClass");
+  var $fakeBooleanAttributes= array("scalixAdministrator", "scalixMailboxAdministrator", "scalixLimitOutboundMail", "scalixLimitInboundMail", "scalixLimitNotifyUser", "scalixHideUserEntry");
+  var $objectclasses= array("scalixUserClass");
+
+
+  /* constructor, if 'dn' is set, the node loads the given
+     'dn' from LDAP */
+  function scalixAccount ($config, $dn= NULL)
+  {
+    /* dn shouldn't be NULL */
+    if($dn == NULL){
+      trigger_error("Initialising scalixAccount without valid dn.");
+    }
+
+    /* Load bases attributes */
+    plugin::plugin($config, $dn);
+
+    /* Load attributes */
+    if ($dn != "new"){
+
+      $this->uid = $this->attrs['uid'];
+       
+      foreach ($this->fakeBooleanAttributes as $val){
+        if (isset($this->attrs["$val"][0])&&$this->attrs["$val"][0]=="TRUE"){
+          $this->$val = TRUE;
+        } else {
+          $this->$val = FALSE;
+        }
+      }
+
+      /* Load attributes containing arrays */
+      foreach (array("scalixEmailAddress") as $val){
+        if (isset($this->attrs["$val"]["count"])){
+          for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){
+            array_push($this->$val, $this->attrs["$val"][$i]);
+          }
+        }
+      }
+    }
+
+    /* Save initial account state */
+    $this->initially_was_account= $this->is_account;
+  }
+
+
+  function execute()
+  {
+    /* Call parent execute */
+    plugin::execute();
+
+    /* Load templating engine */
+    $smarty= get_smarty();
+    $display= "";
+
+    /* Do we need to flip is_account state? */
+    if (isset($_POST['modify_state'])){
+      $this->is_account= !$this->is_account;
+    }
+
+    /* Show main page */
+    $mailboxClasses = array("", "LIMITED", "FULL");
+    $serverLanguages= array("", "GERMAN", "ENGLISH");
+
+    /* Do we represent a valid account? */
+    if (!$this->is_account && $this->parent == NULL){
+      $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\">&nbsp;<b>".
+        _("This account has no scalix extensions.")."</b>";
+
+      $display.= back_to_main();
+      return ($display);
+    }
+
+    /* Show tab dialog headers */
+    if ($this->parent != NULL){
+      if ($this->is_account){
+        $display= $this->show_header(_("Remove scalix account"),
+            _("This account has scalix synchronization enabled. You can disable it by clicking below."));
+      } else {
+        $display= $this->show_header(_("Create scalix account"), _("This account has scalix synchronization disabled. You can enable it by clicking below."));
+        return ($display);
+      }
+    }
+
+    /* Trigger forward add dialog? */
+    if (isset($_POST['add_local_forwarder'])){
+      $this->forward_dialog= TRUE;
+      $this->dialog= TRUE;
+    }
+
+    /* Cancel forward add dialog? */
+    if (isset($_POST['add_locals_cancel'])){
+      $this->forward_dialog= FALSE;
+      $this->dialog= FALSE;
+    }
+
+    /* Add email addresses */
+    if (isset($_POST['add_email'])){
+      if ($_POST['email_address'] != "" &&
+          chkacl ($this->acl, "scalixEmailAddress") == ""){
+
+        $valid= FALSE;
+        if (!is_email($_POST['email_address'])){
+          if ($this->is_template){
+            if (!(is_email($_POST['email_address'], TRUE))){
+              print_red (_("You're trying to add an invalid email address to the list of alternate addresses."));
+            } else {
+              $valid= TRUE;
+            }
+          } else {
+            print_red (_("You're trying to add an invalid email address to the list of alternate addresses."));
+          }
+
+        } else {
+          $valid= TRUE;
+        }
+
+        if ($valid && ($user= $this->addEmail ($_POST['email_address'])) != ""){
+          $ui= get_userinfo();
+          if ($user != $ui->username){
+            print_red (_("The address you're trying to add is already used by user")." '$user'.");
+          }
+        }
+      }
+    }
+
+    /* Delete email addresses */
+    if (isset($_POST['delete_email']) && isset ($_POST['emails_list'])){
+      if (count($_POST['emails_list']) &&
+          chkacl ($this->acl, "scalixEmailAddress") == ""){
+
+        $this->delEmail ($_POST['emails_list']);
+      }
+    }
+
+    $smarty->assign("mailboxClasses", $mailboxClasses);
+    $smarty->assign("serverLanguages", $serverLanguages);
+    foreach(array("perms", "scalixScalixObject", "scalixMailnode", "scalixAdministrator", "scalixMailboxAdministrator",
+      "scalixServerLanguage", "scalixLimitMailboxSize", "scalixLimitOutboundMail", "scalixEmailAddress",
+      "scalixLimitInboundMail", "scalixLimitNotifyUser", "scalixHideUserEntry", "scalixMailboxClass") as $val){
+
+      $smarty->assign("$val", $this->$val);
+      $smarty->assign("$val"."ACL", chkacl($this->acl, "$val"));
+    }
+
+    /* Fill checkboxes */
+    if ($this->scalixAdministrator) {
+      $smarty->assign("scalixAdministrator", "checked");
+    } else {
+      $smarty->assign("scalixAdministrator", "");
+    }
+    if ($this->scalixMailboxAdministrator) {
+      $smarty->assign("scalixMailboxAdministrator", "checked");
+    } else {
+      $smarty->assign("scalixMailboxAdministrator", "");
+    }
+    if ($this->scalixLimitOutboundMail) {
+      $smarty->assign("scalixLimitOutboundMail", "checked");
+    } else {
+      $smarty->assign("scalixLimitOutboundMail", "");
+    }
+    if ($this->scalixLimitInboundMail) {
+      $smarty->assign("scalixLimitInboundMail", "checked");
+    } else {
+      $smarty->assign("scalixLimitInboundMail", "");
+    }
+    if ($this->scalixLimitNotifyUser) {
+      $smarty->assign("scalixLimitNotifyUser", "checked");
+    } else {
+      $smarty->assign("scalixLimitNotifyUser", "");
+    }
+    if ($this->scalixHideUserEntry) {
+      $smarty->assign("scalixHideUserEntry", "checked");
+    } else {
+      $smarty->assign("scalixHideUserEntry", "");
+    }
+
+    $display.= $smarty->fetch (get_template_path('generic.tpl', TRUE, dirname(__FILE__)));
+    return ($display);
+  }
+
+
+  /* remove object from parent */
+  function remove_from_parent()
+  {
+    /* Cancel if there's nothing to do here */
+    if (!$this->initially_was_account){
+      return;
+    }
+    
+    /* include global link_info */
+    $ldap= $this->config->get_ldap_link();
+
+    /* Remove and write to LDAP */
+    plugin::remove_from_parent();
+
+    /* Zero arrays */
+    $this->attrs['scalixEmailAddress']= array();
+
+    /* Unset fake boolean attributes from entry */
+    foreach ($this->fakeBooleanAttributes as $val){
+      $this->attrs["$val"]= array();
+    }
+
+    /*unset scalixScalixObject*/
+    $this->attrs['scalixScalixObject']=array();
+
+    @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,$this->attributes, "Save");
+    $ldap->cd($this->dn);
+    $ldap->modify($this->attrs);
+    show_ldap_error($ldap->get_error());
+
+    /* Optionally execute a command after we're done */
+    $this->handle_post_events("remove");
+  }
+
+
+  /* Save data to object */
+  function save_object()
+  {
+    if (isset($_POST['scalixTab'])){
+
+      /* Save ldap attributes */
+      plugin::save_object();
+
+      /* Save fakeBooleanAttributes*/
+      foreach ($this->fakeBooleanAttributes as $val){
+        if (chkacl ($this->acl, "$val") == "") {
+          if( isset ($_POST["$val"])) {
+            $data = TRUE;
+          } else {
+            $data = FALSE;
+          }
+          if ($this->$val != $data){
+            $this->is_modified= TRUE;
+          }
+
+          $this->$val= $data;
+        }
+      }
+    }
+  }
+
+
+  /* Save data to LDAP, depending on is_account we save or delete */
+  function save()
+  {
+    $ldap= $this->config->get_ldap_link();
+
+    /* Call parents save to prepare $this->attrs */
+    plugin::save();
+
+    /* Save arrays */
+    $this->attrs['scalixEmailAddress']= $this->scalixEmailAddress;    
+    
+    /* Save boolean vars ... the scalix schema expects them as strings */
+    $this->attrs['scalixScalixObject'] = $this->scalixScalixObject?"TRUE":"FALSE";
+    $this->attrs['scalixAdministrator'] = $this->scalixAdministrator?"TRUE":"FALSE";
+    $this->attrs['scalixMailboxAdministrator'] = $this->scalixMailboxAdministrator?"TRUE":"FALSE";
+    $this->attrs['scalixLimitOutboundMail'] = $this->scalixLimitOutboundMail?"TRUE":"FALSE";
+    $this->attrs['scalixLimitInboundMail'] = $this->scalixLimitInboundMail?"TRUE":"FALSE";
+    $this->attrs['scalixLimitNotifyUser'] = $this->scalixLimitNotifyUser?"TRUE":"FALSE";
+    $this->attrs['scalixHideUserEntry'] = $this->scalixHideUserEntry?"TRUE":"FALSE";
+
+    /* Remove Mailquota if = "" */
+    if((isset($this->attrs['scalixLimitMailboxSize']))&&($this->attrs['scalixLimitMailboxSize']=="")) {
+      $this->attrs['scalixLimitMailboxSize']=array();
+    }
+
+    /* Save data to LDAP */
+    $ldap->cd($this->dn);
+    $ldap->modify($this->attrs);
+    show_ldap_error($ldap->get_error());
+
+    /* Optionally execute a command after we're done */
+    if ($this->initially_was_account == $this->is_account){
+      if ($this->is_modified){
+        $this->handle_post_events("modify");
+      }
+    } else {
+      $this->handle_post_events("add");
+    }
+
+  }
+
+  /* Check formular input */
+  function check()
+  {
+    $ldap= $this->config->get_ldap_link();
+
+    $message= array();
+
+    if(empty($this->scalixMailnode)){
+      $message[]= _("There is no scalix mailnode specified.");
+    }
+    if(empty($this->scalixScalixObject)){
+      $message[]= _("scalixScalixObject must be set!");
+    }
+
+    $ldap->cd($this->config->current['BASE']);
+    foreach($this->scalixEmailAddress as $k => $mail) {        
+      $ldap->search ("(&(!(objectClass=gosaUserTemplate))(objectClass=scalixUserClass)(|(scalixEmailAddress=".
+        $mail."))(!(uid=".$this->uid."))(!(cn=".$this->uid.")))", array("uid"));
+      if ($ldap->count() != 0){
+        $message[]= _("The email address '$mail' you've entered is already in use.");
+      }
+    }
+
+    /* Check quota */
+    if ($this->scalixLimitMailboxSize != '' && chkacl ($this->acl, "scalixLimitMailboxSize") == ""){
+      if (!is_numeric($this->scalixLimitMailboxSize)) {
+        $message[]= _("Value in 'Limit Mailbox size' is not valid.");
+      } else {
+        $this->scalixLimitMailboxSize= (int) $this->scalixLimitMailboxSize;
+      }
+    }
+
+    return ($message);
+  }
+
+  /* Adapt from template, using 'dn' */
+  function adapt_from_template($dn)
+  {
+    plugin::adapt_from_template($dn);
+
+    foreach (array("scalixEmailAddress") as $val){
+      $this->$val= array();
+      if (isset($this->attrs["$val"]["count"])){
+        for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){
+          $value= $this->attrs["$val"][$i];
+          foreach (array("sn", "givenName", "uid") as $repl){
+            if (preg_match("/%$repl/i", $value)){
+              $value= preg_replace ("/%$repl/i", $this->parent->$repl, $value);
+            }
+          }
+          array_push($this->$val, strtolower(rewrite($value)));
+        }
+      }
+    }
+    $this->mail= strtolower(rewrite($this->mail));
+  }
+
+  function addEmail($address)
+  {
+    $ldap= $this->config->get_ldap_link();
+
+    $address= strtolower($address);
+
+    /* Is this address already assigned in LDAP? */
+    $ldap->cd ($this->config->current['BASE']);
+    $ldap->search ("(&(objectClass=scalixUserClass)(|(scalixEmailAddress=$address)".
+        "(scalixEmailAddress=$address)))", array("uid"));
+
+    if ($ldap->count() > 0){
+      $attrs= $ldap->fetch ();
+      return ($attrs["uid"][0]);
+    }
+
+    /* Add to list of alternates */
+    if (!in_array($address, $this->scalixEmailAddress)){
+      $this->scalixEmailAddress[]= $address;
+      $this->is_modified= TRUE;
+    }
+
+    //sort ($this->scalixEmailAddress); //scalix makes the first email the destination, all others can receive
+    reset ($this->scalixEmailAddress);
+
+    return ("");
+  }
+
+
+  function delEmail($addresses)
+  {
+    $this->scalixEmailAddress= array_remove_entries ($addresses, $this->scalixEmailAddress);
+    $this->is_modified= TRUE;
+  }
+}
+
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>
diff --git a/plugins/personal/scalix/generic.tpl b/plugins/personal/scalix/generic.tpl
new file mode 100644 (file)
index 0000000..3531962
--- /dev/null
@@ -0,0 +1,97 @@
+<table summary="" style="width:100%; vertical-align:top; text-align:left;" cellpadding="0" border="0">
+ <tr>
+  <td style="width:50%; vertical-align:top;">
+   <h2><img class="center" alt="" align="middle" src="images/rightarrow.png" />&nbsp;{t}Generic{/t}</h2>
+   <table summary="">
+    <tr>
+     <td><label for="scalixMailnode">{t}Scalix Mailnode{/t}</label>{$must}</td>
+     <td><input id="scalixMailnode" name="scalixMailnode" size=35 maxlength=65 {$scalixMailnodeACL} value="{$scalixMailnode}"></td>
+    </tr>
+    <tr>
+     <td><label for="scalixMailboxClass">{t}scalixMailboxClass{/t}</label></td>
+     <td>
+      <select size="1" id="scalixMailboxClass" name="scalixMailboxClass" {$scalixMailboxClassACL} 
+                       title="{t}Limited users con not make use of the group calendar functionality in Scalix{/t}">
+                   {html_options values=$mailboxClasses output=$mailboxClasses selected=$scalixMailboxClass}
+      </select>
+     </td>
+    </tr>
+    <tr>
+     <td><label for="scalixServerLanguage">{t}scalixServerLanguage{/t}</label></td>
+     <td>
+      <select size="1" id="scalixServerLanguage" name="scalixServerLanguage" {$scalixServerLanguageACL} 
+                       title="{t}TODO{/t}">
+                   {html_options values=$serverLanguages output=$serverLanguages selected=$scalixServerLanguage}
+      </select>
+     </td>
+    </tr>
+   </table>
+   
+   <p class="seperator">&nbsp;</p>
+   
+   <table summary="">
+    <tr>
+     <td>
+         <input type=checkbox name="scalixAdministrator" value="1" {$scalixAdministrator}
+          {$scalixAdministratorACL} title="{t}TODO{/t}"> {t}Scalix Administrator{/t}
+         <br>
+         <input type=checkbox name="scalixMailboxAdministrator" value="1" {$scalixMailboxAdministrator}
+          {$scalixMailboxAdministratorACL} title="{t}TODO{/t}"> {t}Scalix Mailbox Administrator{/t}
+         <br>
+         <input type=checkbox name="scalixHideUserEntry" value="1" {$scalixHideUserEntry}
+          {$scalixHideUserEntryACL} title="{t}TODO{/t}"> {t}hide this user entry in Scalix{/t}
+         <br>
+   </table>
+   
+   <p class="seperator">&nbsp;</p>
+   
+   <table summary="">
+    <tr>
+     <td><label for="scalixLimitMailboxSize">{t}Limit Mailbox Size{/t}</label></td>
+     <td><input id="scalixLimitMailboxSize" name="scalixLimitMailboxSize" size=35 maxlength=65 {$scalixLimitMailboxSizeACL} value="{$scalixLimitMailboxSize}"></td>
+    </tr>
+    <tr>
+     <td >
+         <input type=checkbox name="scalixLimitOutboundMail" value="1" {$scalixLimitOutboundMail}
+          {$scalixLimitOutboundMailACL} title="{t}As Sanction on Mailbox quota overuse, stop user from sending mail.{/t}"> {t}Limit Outbound Mail{/t}
+         <br>
+         <input type=checkbox name="scalixLimitInboundMail" value="1" {$scalixLimitInboundMail}
+          {$scalixLimitInboundMailACL} title="{t}As Sanction on Mailbox quota overuse, stop user from receiving mail.{/t}"> {t}Limit Inbound Mail{/t}
+         <br>
+         <input type=checkbox name="scalixLimitNotifyUser" value="1" {$scalixLimitNotifyUser}
+          {$scalixLimitNotifyUserACL} title="{t}As Sanction on Mailbox quota overuse, notify the User by eMail.{/t}"> {t}Notify User{/t}
+         <br>
+     </td>
+    </tr>
+   </table>
+  </td>
+
+  <td style="border-left:1px solid #A0A0A0">
+   &nbsp;
+  </td>
+
+  <td style="vertical-align:top;">
+   <h2><img class="center" alt="" align="middle" src="images/envelope.png" /><label for="emails_list"> {t}Scalix email addresses{/t}</label></h2>
+   <select id="emails_list" style="width:100%;height:100px;" name="emails_list[]" size="15"
+                multiple title="{t}List of scalix email addresses{/t}" {$scalixEmailAddressACL}>
+            {html_options values=$scalixEmailAddress output=$scalixEmailAddress}
+                       <option disabled>&nbsp;</option>
+   </select>
+   <br />
+   <input name="email_address" size="30" align="middle" maxlength="65" {$scalixEmailAddressACL} value="">
+   <input type=submit value="{t}Add{/t}" name="add_email"
+       {$scalixEmailAddressACL}>&nbsp;
+   <input type=submit value="{t}Delete{/t}" name="delete_email"
+       {$scalixEmailAddressACL}>
+  </td>
+ </tr>
+</table>
+
+<input type="hidden" name="scalixTab" value="scalixTab">
+
+<!-- Place cursor -->
+<script language="JavaScript" type="text/javascript">
+  <!-- // First input field on page
+  document.mainform.scalixMailnode.focus();
+  -->
+</script>
diff --git a/plugins/personal/scalix/main.inc b/plugins/personal/scalix/main.inc
new file mode 100644 (file)
index 0000000..f7c6aa6
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+/*
+   This code is part of GOsa (https://gosa.gonicus.de)
+   Copyright (C) 2006  Jörn Dreyer, based on work by
+                       Cajus Pollmeier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+if (!$remove_lock){
+  /* Reset requested? */
+  if (isset($_POST['edit_cancel']) || 
+      (isset($_GET['reset']) && $_GET['reset'] == 1)){
+    del_lock ($ui->dn);
+    sess_del ('edit');
+    sess_del ('scalixAccount');
+  }
+
+  /* Create mail object on demand */
+  if (!isset($_SESSION['scalixAccount']) || (isset($_GET['reset']) && $_GET['reset'] == 1)){
+    $_SESSION['scalixAccount']= new scalixAccount ($config, $ui->dn);
+  }
+  $scalixAccount= $_SESSION['scalixAccount'];
+
+  /* save changes back to object */
+  if (isset ($_SESSION['edit'])){
+    $scalixAccount->save_object ();
+  }
+
+  /* Enter edit mode? */
+  if (isset($_POST['edit'])){
+
+    /* Check locking */
+    if (($username= get_lock($ui->dn)) != ""){
+      $_SESSION['back_plugin']= $plug;
+      gen_locked_message ($username, $ui->dn);
+      exit ();
+    }
+
+    /* Lock the current entry */
+    add_lock ($ui->dn, $ui->dn);
+    $_SESSION['dn']= $ui->dn;
+    $_SESSION['edit']= TRUE;
+  }
+
+  /* Adjust acl's to mode */
+  if (isset($_SESSION['edit'])){
+    $acl= get_permissions ($ui->dn, $ui->subtreeACL);
+    $scalixAccount->acl= get_module_permission($acl, "scalix", $ui->dn);
+  } else {
+    $acl= get_permissions ($ui->dn, $ui->subtreeACL);
+    $editacl= get_module_permission($acl, "scalix", $ui->dn);
+    $scalixAccount->acl= "#none#";
+  }
+
+  /* save changes to LDAP and disable edit mode */
+  if (isset($_POST['edit_finish'])){
+
+    /* Perform checks */
+    $message= $scalixAccount->check ();
+
+    /* No errors, save object */
+    if (count ($message) == 0){
+      $scalixAccount->save ();
+      gosa_log ("User/scalix object'".$ui->dn."' has been saved");
+      $scalixAccount->acl= "#none#";
+      del_lock ($ui->dn);
+      sess_del ('edit');
+
+      /* Store object */
+      $_SESSION['scalixAccount']= $scalixAccount;
+    } else {
+      /* Errors found, show message */
+      show_errors ($message);
+    }
+  }
+
+  /* Execute formular */
+  $display= $scalixAccount->execute ();
+
+  /* Store changes  in session */
+  if (isset ($_SESSION['edit'])){
+    $_SESSION['scalixAccount']= $scalixAccount;
+  }
+
+ /* Show page footer depending on the mode */
+  if ($scalixAccount->is_account){
+
+    $display.= "<p class=\"plugbottom\">";
+
+    /* Are we in edit mode? */
+    if (isset($_SESSION['edit'])){
+      $display.= "<input type=submit name=\"edit_finish\" value=\""._("Save")."\">\n";
+      $display.= "&nbsp;";
+      $display.= "<input type=submit name=\"edit_cancel\" value=\""._("Cancel")."\">\n";
+      $info= "<img alt=\"\" align=\"middle\" src=\"".get_template_path('images/closedlock.png').
+             "\"> ".$ui->dn."&nbsp;";
+    } else {
+      $info= "<img alt=\"\" align=\"middle\" src=\"".get_template_path('images/openlock.png').
+             "\"> ".$ui->dn."&nbsp;";
+      if (isset($editacl) && $editacl != "#none#"){
+        $info.= "<img alt=\"\" align=\"middle\" src=\"".get_template_path('images/lamp.png')."\"> ".
+                _("Click the 'Edit' button below to change informations in this dialog");
+
+        $display.= "<input type=submit name=\"edit\" value=\""._("Edit")."\">\n";
+      }
+      $display.= "<input type=\"hidden\" name=\"ignore\">\n";
+    }
+    $display.= "</p>\n";
+  }
+
+
+  $info= "";
+
+  /* Page header*/
+  $display= print_header(get_template_path('images/scalix.png'), _("User scalixsettings"), $info).$display;
+
+}
+
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>