From: hickert Date: Tue, 19 Jun 2007 12:29:47 +0000 (+0000) Subject: Initial scalix plugin X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=c742134f3925bc3ac583d4a0d02b169b98a33a98;p=gosa.git Initial scalix plugin git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@6626 594d385d-05f5-0310-b6e9-bd551577e9d8 --- diff --git a/html/images/scalix.png b/html/images/scalix.png new file mode 100644 index 000000000..649e7bf89 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 index 000000000..9ac5eed2f Binary files /dev/null and b/html/images/scalix16.png differ diff --git a/plugins/admin/groups/acl_definition.inc b/plugins/admin/groups/acl_definition.inc index 184f64389..0bba710c6 100644 --- a/plugins/admin/groups/acl_definition.inc +++ b/plugins/admin/groups/acl_definition.inc @@ -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 index 000000000..7f41d7e7d --- /dev/null +++ b/plugins/personal/scalix/class_scalixAccount.inc @@ -0,0 +1,429 @@ +, + based on work by Cajus Pollmeier + \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= "\"\" ". + _("This account has no scalix extensions.").""; + + $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 index 000000000..353196217 --- /dev/null +++ b/plugins/personal/scalix/generic.tpl @@ -0,0 +1,97 @@ + + + + + + + + +
+

 {t}Generic{/t}

+ + + + + + + + + + + + + +
{$must}
+ +
+ +
+ +

 

+ + + +
+ {t}Scalix Administrator{/t} +
+ {t}Scalix Mailbox Administrator{/t} +
+ {t}hide this user entry in Scalix{/t} +
+
+ +

 

+ + + + + + + + + +
+ {t}Limit Outbound Mail{/t} +
+ {t}Limit Inbound Mail{/t} +
+ {t}Notify User{/t} +
+
+
+   + +

+ +
+ +   + +
+ + + + + diff --git a/plugins/personal/scalix/main.inc b/plugins/personal/scalix/main.inc new file mode 100644 index 000000000..f7c6aa6db --- /dev/null +++ b/plugins/personal/scalix/main.inc @@ -0,0 +1,133 @@ +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.= "

"; + + /* Are we in edit mode? */ + if (isset($_SESSION['edit'])){ + $display.= "\n"; + $display.= " "; + $display.= "\n"; + $info= "\"\" ".$ui->dn." "; + } else { + $info= "\"\" ".$ui->dn." "; + if (isset($editacl) && $editacl != "#none#"){ + $info.= "\"\" ". + _("Click the 'Edit' button below to change informations in this dialog"); + + $display.= "\n"; + } + $display.= "\n"; + } + $display.= "

\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: +?>