summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7fe2225)
raw | patch | inline | side by side (parent: 7fe2225)
author | hzerres <hzerres@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Thu, 16 Sep 2010 12:47:02 +0000 (12:47 +0000) | ||
committer | hzerres <hzerres@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Thu, 16 Sep 2010 12:47:02 +0000 (12:47 +0000) |
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@19713 594d385d-05f5-0310-b6e9-bd551577e9d8
gosa-plugins/groupware/personal/groupware/class_groupware.inc | [deleted file] | patch | blob | history |
diff --git a/gosa-plugins/groupware/personal/groupware/class_groupware.inc b/gosa-plugins/groupware/personal/groupware/class_groupware.inc
+++ /dev/null
@@ -1,1107 +0,0 @@
-<?php
-/*
- * This code is part of GOsa (https://gosa.gonicus.de)
- * Copyright (C) 2008 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
- */
-
-
-class groupware extends plugin
-{
- var $plHeadline = "Mail";
- var $plDescription = "GOsa mail extension.";
- var $view_logged = FALSE;
-
- var $accountInitialized = FALSE;
- var $rpcError = FALSE;
- var $rpcErrorMessage = "";
-
- var $attributes = array(
- "mailAddress", "mailLocation", "quotaUsage", "quotaSize", "alternateAddresses",
- "forwardingAddresses", "vacationEnabled", "vacationStart", "vacationStop",
- "vacationMessage", "mailBoxWarnLimitEnabled", "mailBoxWarnLimitValue",
- "mailBoxSendSizelimitEnabled", "mailBoxSendSizelimitValue", "mailBoxHardSizelimitEnabled",
- "mailBoxHardSizelimitValue", "mailBoxAutomaticRemovalEnabled", "mailBoxAutomaticRemovalValue",
- "localDeliveryOnly", "dropOwnMails");
-
-
- var $enabledFeatures = array();
-
- var $flagAttributes = array("vacationEnabled","mailBoxWarnLimitEnabled","mailBoxSendSizelimitEnabled",
- "mailBoxHardSizelimitEnabled","mailBoxAutomaticRemovalEnabled","localDeliveryOnly","dropOwnMails");
-
- var $mailAddressSelectDialog = NULL;
- var $filterManager = NULL;
- var $filterRules = array();
- var $vacationTemplates = array();
-
- //the dropdown
- var $mailLocations = array();
-
- var $mailAddress = "";
- var $mailLocation = "";
- var $quotaUsage = 0;
- var $quotaSize = 0;
- var $alternateAddresses = array();
- var $forwardingAddresses = array();
- var $vacationEnabled = FALSE;
- var $vacationStart = 0;
- var $vacationStop = 0;
- var $vacationMessage = "";
- var $mailBoxWarnLimitEnabled = FALSE;
- var $mailBoxWarnLimitValue = 100;
- var $mailBoxSendSizelimitEnabled = FALSE;
- var $mailBoxSendSizelimitValue = 100;
- var $mailBoxHardSizelimitEnabled = FALSE;
- var $mailBoxHardSizelimitValue = 100;
- var $mailBoxAutomaticRemovalEnabled = FALSE;
- var $mailBoxAutomaticRemovalValue = 100;
- var $localDeliveryOnly = FALSE;
- var $dropOwnMails = FALSE;
-
- var $groupwareDao = null;
-
- /*! \brief
- */
- function __construct ($config, $dn= NULL)
- {
- plugin::plugin($config,$dn);
-
- // Get attributes from parent object
- foreach(array("uid","cn") as $attr){
- if(isset($this->parent->by_object['group']) && isset($this->parent->by_object['group']->$attr)){
- $this->$attr = &$this->parent->by_object['group']->$attr;
- }elseif(isset($this->attrs[$attr])){
- $this->$attr = $this->attrs[$attr][0];
- }
- }
- // Initialize the plugin using rpc.
- $this->init();
- }
-
-
- /*! \brief Try to execute a function on the gosa backend using json-rpc.
- * This method also takes care about errors and sets the required
- * class members, such as rpcError and rpcErrorMessage.
- * @param String function The name of the function to call.
- * @param Mixed args[0-n] The parameter to use.
- * @return Mixed The result of the function call on success else NULL.
- */
- function rpcExec($function)
- {
- $params = func_get_args();
- unset($params[0]);
- //echo "------<br>Calling function:".$function." Params".var_dump($params)."<br>";
-
- $rpc = $this->config->getRpcHandle();
-
- $res = call_user_func_array(array($rpc,$function),array_values($params));
- $this->rpcError = !$rpc->success();
- if($this->rpcError){
- $this->rpcErrorMessage = $rpc->get_error();
- return(NULL);
- }
- return($res);
- }
-
-
- /*! \brief TODO: comment
- */
- public function isFeatureEnabled($featureName)
- {
- if(isset($this->enabledFeatures[$featureName]) && $this->enabledFeatures[$featureName]){
- return TRUE;
- }
- return FALSE;
- }
-
-
- /*! \brief Try initialize the groupware account.
- * This method fetches all required information to manage the
- * account using the GOsa gui.
- */
- function init()
- {
- // Detect feature availability and enable/disable services correspondingly.
- $this->groupwareDao = new groupware_dao($this);
-
- $features = array();
- //feature names with a list of groupware function that must be availabele
- //these groupware functions are not the rpc functions, because they are asked from the groupware server
- $featureReq = array(
- "primaryMail" => array(
- 'acctGetPrimaryMailAddress'),
- "quotaUsage" => array(
- 'acctGetQuota'),
- "quotaSize" => array(
- 'acctSetQuota','acctGetQuota'),
- "mailLocations" => array(
- 'getMailboxLocations'),
- "mailFilter" => array("_off",
- 'acctDelFilter','acctGetFilters','acctSetFilters','acctSetFilters'),
- "alternateAddresses" => array(
- 'acctDelAlternateMailAddress','acctSetAlternateMailAddresses',
- 'acctAddAlternateMailAddress','acctGetAlternateMailAddresses'),
- "forwardingAddresses" => array(
- 'acctAddMailForwardAddress','acctDelMailForwardAddress',
- 'acctGetMailForwardAddresses','acctSetMailForwardAddresses'),
- "vacationMessage" => array("_off",
- 'acctDelFilter','acctGetFilters','acctSetFilters','acctSetFilters'),
- "mailBoxWarnLimit" => array(
- 'acctSetQuota','acctGetQuota'),
- "mailBoxSendSizelimit" => array(
- 'acctSetQuota','acctGetQuota'),
- "mailBoxHardSizelimit" => array(
- 'acctSetQuota','acctGetQuota'),
- "mailBoxAutomaticRemoval" => array("_off",
- 'acctSetQuota','acctGetQuota'),
- "localDeliveryOnly" => array( "_off",
- 'acctDelFilter','acctGetFilters','acctSetFilters','acctSetFilters'),
- "dropOwnMails" => array( "_off",
- 'acctDelFilter','acctGetFilters','acctSetFilters','acctSetFilters'));
-
- // Check if all required methods cann be called!
- foreach($featureReq as $name => $requires){
- $active = TRUE;
- foreach($requires as $methodName){
- $active &= $this->groupwareDao->gwFeatureAvailable($methodName);
- }
- $this->enabledFeatures[$name] = $active;
- }
- // Get rpc handle to fetch account info and feature availability.
- $status = $this->rpcExec('gwAcctExists', $this->uid);
- if($status !== NULL){
- $response = $this->groupwareDao->getComprehensiverUser($this->uid);
-
- $this->mapComprehensiveUserData($response);
- $this->initially_was_account = $this->is_account = $status;
-
- $this->accountInitialized = TRUE;
- }
- // Set vacation start/stop if not set alreasy
- $this->vacationStart = time();
- $this->vacationStop = time() + (14 * 60*60*24);
-
- // Prepare vacation start/stop time to be initially valid.
- $this->vacationStart= date('d.m.Y', $this->vacationStart);
- $this->vacationStop= date('d.m.Y', $this->vacationStop);
- }
-
-
- /*! \brief Generates the HTML user interface for the groupware plugin
- * and take of several ui actions like adding or removing
- * forward addresses, filters and the account itself.
- */
- function execute()
- {
- // Register plugin execution
- $display = plugin::execute();
-
- // Log plugin execution.
- if($this->is_account && !$this->view_logged){
- $this->view_logged = TRUE;
- new log("view","users/".get_class($this),$this->dn);
- }
-
- // Check if we were able to initialize the account already.
- if(!$this->accountInitialized){
- $this->init();
- if(!$this->accountInitialized){
- $smarty = get_smarty();
- $smarty->assign("initFailed", !$this->accountInitialized);
- return($smarty->fetch(get_template_path("generic.tpl",TRUE,dirname(__FILE__))));
- }
- }
-
- // Check if we were able to initialize the account already.
- if($this->rpcError){
- $smarty = get_smarty();
- $smarty->assign("initFailed", !$this->accountInitialized);
- $smarty->assign("rpcError", $this->rpcError);
- return($smarty->fetch(get_template_path("generic.tpl",TRUE,dirname(__FILE__))));
- }
-
- /****************
- Filter editor
- ****************/
-
- if(isset($_POST['filterManager_cancel'])) $this->filterManager = NULL;
- if(isset($_POST['filterManager_ok'])){
- $this->filterManager->save_object();
- $msgs = $this->filterManager->check();
- if(count($msgs)){
- msg_dialog::displayChecks($msgs);
- }else{
- $this->filterRules = $this->filterManager->save();
- $this->filterManager = NULL;
- }
- }
- if(isset($_POST['configureFilter'])){
- $this->filterManager = new filterManager($this->config, $this,$this->filterRules);
- $this->filterManager->acl_base = $this->acl_base;
- $this->filterManager->acl_category = $this->acl_category;
- }
- $this->dialog = FALSE;
- if($this->filterManager instanceOf filterManager){
- $this->filterManager->save_object();
- $this->dialog = TRUE;
- return($this->filterManager->execute());
- }
-
- /****************
- Account status
- ****************/
-
- if(isset($_POST['modify_state'])){
- if($this->is_account && $this->acl_is_removeable()){
- $this->is_account= FALSE;
- }elseif(!$this->is_account && $this->acl_is_createable()){
- $this->is_account= TRUE;
- }
- }
- if(!$this->multiple_support_active){
- if (!$this->is_account && $this->parent === NULL){
- $display= "<img alt=\"\" src=\"images/small-error.png\" align=\"middle\"> <b>".
- msgPool::noValidExtension(_("Mail"))."</b>";
- $display.= back_to_main();
- return ($display);
- }
- if ($this->parent !== NULL){
- if ($this->is_account){
- $display= $this->show_disable_header(msgPool::removeFeaturesButton(_("Mail")),msgPool::featuresEnabled(_("Mail")));
- } else {
- $display= $this->show_enable_header(msgPool::addFeaturesButton(_("Mail")),msgPool::featuresDisabled(_("Mail")));
- return ($display);
- }
- }
- }
-
- /****************
- Forward addresses
- ****************/
-
- // Display dialog to select a local fowarder
- if (isset($_POST['addLocalForwardingAddress'])){
- $this->mailAddressSelectDialog= new mailAddressSelect($this->config, get_userinfo());
- $this->dialog= TRUE;
- }
-
- // Close dialogs, action was canceled
- if (isset($_POST['mailAddressSelect_cancel'])){
- $this->mailAddressSelectDialog= FALSE;
- $this->dialog= FALSE;
- }
-
- // Append selected forwarding addresses now.
- if (isset($_POST['mailAddressSelect_save']) && $this->mailAddressSelectDialog instanceOf mailAddressSelect){
- if($this->acl_is_writeable("forwardingAddresses")){
- $list = $this->mailAddressSelectDialog->save();
- foreach ($list as $entry){
- $val = $entry['mail'][0];
- if (!in_array ($val, $this->alternateAddresses) && $val != $this->mailAddress){
- $this->addForwarder($val);
- $this->is_modified= TRUE;
- }
- }
- $this->mailAddressSelectDialog= FALSE;
- $this->dialog= FALSE;
- } else {
- msg_dialog::display(_("Error"), _("Please select an entry!"), ERROR_DIALOG);
- }
- }
-
- // Display the address selection dialog.
- if($this->mailAddressSelectDialog instanceOf mailAddressSelect){
- $used = array();
- $used['mail'] = array_values($this->alternateAddresses);
- $used['mail'] = array_merge($used['mail'], array_values($this->forwardingAddresses));
- $used['mail'][] = $this->mailAddress;
-
- // Build up blocklist
- session::set('filterBlacklist', $used);
- return($this->mailAddressSelectDialog->execute());
- }
-
- // Add manually inserted forwarding address.
- if (isset($_POST['addForwardingAddress'])){
- if ($_POST['forwardingAddressInput'] != ""){
- $address= get_post('forwardingAddressInput');
- $valid= FALSE;
- if (!tests::is_email($address)){
- if (!tests::is_email($address, TRUE)){
- if ($this->is_template){
- $valid= TRUE;
- } else {
- msg_dialog::display(_("Error"), msgPool::invalid(_("Mail address"),
- "","","your-address@your-domain.com"),ERROR_DIALOG);
- }
- }
- } elseif ($address == $this->mailAddress || in_array($address, $this->alternateAddresses)) {
- msg_dialog::display(_("Error"),_("Cannot add primary address to the list of forwarders!") , ERROR_DIALOG);
- } else {
- $valid= TRUE;
- }
- if ($valid){
- if($this->acl_is_writeable("forwardingAddresses")){
- $this->addForwarder ($address);
- $this->is_modified= TRUE;
- }
- }
- }
- }
- if (isset($_POST['deleteForwardingAddress'])){
- $this->delForwarder ($_POST['forwardingAddressList']);
- }
-
- /****************
- Alternate addresses
- ****************/
- // Add manually inserted alternate mail address.
- if (isset($_POST['addAlternateAddress'])){
- $valid= FALSE;
- if (!tests::is_email($_POST['alternateAddressInput'])){
- if ($this->is_template){
- if (!(tests::is_email($_POST['alternateAddressInput'], TRUE))){
- msg_dialog::display(_("Error"),msgPool::invalid(_("Mail address"),
- "","","your-domain@your-domain.com"),ERROR_DIALOG);
- } else {
- $valid= TRUE;
- }
- } else {
- msg_dialog::display(_("Error"),msgPool::invalid(_("Mail address"),
- "","","your-domain@your-domain.com"),ERROR_DIALOG);
- }
- } else {
- $valid= TRUE;
- }
- if ($valid && ($user= $this->addAlternate (get_post('alternateAddressInput'))) != ""){
- $ui= get_userinfo();
- $addon= "";
- if ($user[0] == "!") {
- $addon= sprintf(_("Address is already in use by group '%s'."), mb_substr($user, 1));
- } else {
- $addon= sprintf(_("Address is already in use by user '%s'."), $user);
- }
- msg_dialog::display(_("Error"), msgPool::duplicated(_("Mail address"))."<br><br><i>".
- "$addon</i>", ERROR_DIALOG);
- }
- }
-
- // Remove alternate mail address.
- if (isset($_POST['deleteAlternateAddress']) && isset($_POST['alternateAddressList'])){
- $this->delAlternate ($_POST['alternateAddressList']);
- }
-
-
- /****************
- SMARTY- Assign smarty variables
- ****************/
-
- $smarty = get_smarty();
- foreach($this->attributes as $attr){
-
- $smarty->assign($attr, $this->$attr);
- }
-
- $plInfo = $this->plInfo();
- foreach($plInfo['plProvidedAcls'] as $acl => $name){
- $smarty->assign($acl."ACL", $this->getacl($acl));
- }
- foreach($this->enabledFeatures as $feature => $state){
- $smarty->assign($feature."_isActive", $state);
- }
-
- $smarty->assign("mailLocations", $this->mailLocations);
- if (count($this->vacationTemplates)){
- $smarty->assign("displayTemplateSelector", "true");
- $smarty->assign("vacationTemplate", set_post($this->vacationTemplate));
- $smarty->assign("vacationTemplates", set_post($this->vacationTemplates));
- $smarty->assign("template", set_post(get_post('vacation_template')));
- } else {
- $smarty->assign("displayTemplateSelector", "false");
- }
-
- $smarty->assign("initFailed", !$this->accountInitialized);
- $smarty->assign("rpcError", $this->rpcError);
- $smarty->assign("rpcErrorMessage", $this->rpcErrorMessage);
-
- return($display.$smarty->fetch(get_template_path("generic.tpl",TRUE,dirname(__FILE__))));
- }
-
-
- /*! \brief This method handles potential _POST and _GET values.
- * It captures modifcations from the ui, like changing
- * the mailAddress.
- * This method respects the attribute permissions.
- */
- function save_object()
- {
- if(isset($_POST['groupwarePluginPosted'])){
-
- // We ran into a communication error with the backend.
- // Try a simple communication operation with the backend
- // again and let us see if it works.
- if(isset($_POST['retry'])){
- $this->rpcExec('gwGetCapabilities');
- }
-
- // Get ui modifications and store them in the class.
- $testAttrs = array("mailAddress","mailLocation","quotaUsage","quotaSize",
- "alternateAddresses","forwardingAddresses","vacationEnabled","vacationStart",
- "vacationStop","vacationMessage");
- foreach($testAttrs as $attr){
- if(isset($_POST[$attr]) && $this->acl_is_writeable($attr)){
- $this->$attr = get_post($attr);
- }
- }
-
- // Detect checkbox states
- $checkAttrs = array("mailBoxWarnLimit","mailBoxSendSizelimit",
- "mailBoxHardSizelimit","mailBoxAutomaticRemoval");
- foreach($checkAttrs as $boxname){
- if($this->acl_is_writeable($boxname)){
- $v = $boxname."Value";
- $e = $boxname."Enabled";
- $this->$e = isset($_POST[$e]);
- if($this->$e){
- $this->$v = get_post($v);
- }
- }
- }
-
- // Get posted flag changes
- $flagAttrs = array("localDeliveryOnly","dropOwnMails");
- foreach($flagAttrs as $attr){
- $this->$attr = isset($_POST[$attr]);
- }
- }
- }
-
-
- /*! \brief Parse vacation templates and build up an array
- * containing 'filename' => 'description'.
- * Used to fill vacation dropdown box.
- * @return Array All useable vacation templates.
- */
- function get_vacation_templates()
- {
- $vct = array();
- if ($this->config->get_cfg_value("core","vacationTemplateDirectory") != ""){
- $dir= $this->config->get_cfg_value("core","vacationTemplateDirectory");
- if (is_dir($dir) && is_readable($dir)){
- $dh = opendir($dir);
- while($file = readdir($dh)){
- $description= "";
- if (is_file($dir."/".$file)){
- $fh = fopen($dir."/".$file, "r");
- $line= fgets($fh, 256);
- if (!preg_match('/^DESC:/', $line)){
- msg_dialog::display(_("Configuration error"), sprintf(_("No DESC tag in vacation template '%s'!"), $file), ERROR_DIALOG);
- }else{
- $description= trim(preg_replace('/^DESC:\s*/', '', $line));
- }
- fclose ($fh);
- }
- if ($description != ""){
- $vct["$dir/$file"]= $description;
- }
- }
- closedir($dh);
- }
- }
- return($vct);
- }
-
-
- /*! \brief Adds the given mail address to the list of mail forwarders
- */
- function addForwarder($address)
- {
- if(empty($address)) return;
- if($this->acl_is_writeable("forwardingAddresses")){
- $this->forwardingAddresses[]= $address;
- $this->forwardingAddresses= array_unique ($this->forwardingAddresses);
- sort ($this->forwardingAddresses);
- reset ($this->forwardingAddresses);
- $this->is_modified= TRUE;
- }else{
- msg_dialog::display(_("Permission error"), _("You have no permission to modify these addresses!"), ERROR_DIALOG);
- }
- }
-
-
- /*! \brief Removes the given mail address from the list of mail forwarders
- */
- function delForwarder($addresses)
- {
- if($this->acl_is_writeable("forwardingAddresses")){
- $this->forwardingAddresses= array_remove_entries ($addresses, $this->forwardingAddresses);
- $this->is_modified= TRUE;
- }else{
- msg_dialog::display(_("Permission error"), _("You have no permission to modify these addresses!"), ERROR_DIALOG);
- }
- }
-
-
- /*! \brief Add given mail address to the list of alternate adresses ,
- * check if this mal address is used, skip adding in this case
- */
- function addAlternate($address)
- {
- if(empty($address)) return;
- if($this->acl_is_writeable("alternateAddresses")){
- $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=gosaUserTemplate))(objectClass=gosaMailAccount)(|(mail=$address)".
- "(alias=$address)(gosaMailAlternateAddress=$address)))", array("uid", "cn"));
- if ($ldap->count() > 0){
- $attrs= $ldap->fetch ();
- if (!isset($attrs["uid"])) {
- return ("!".$attrs["cn"][0]);
- }
- return ($attrs["uid"][0]);
- }
- if (!in_array($address, $this->alternateAddresses)){
- $this->alternateAddresses[]= $address;
- $this->is_modified= TRUE;
- }
- sort ($this->alternateAddresses);
- reset ($this->alternateAddresses);
- return ("");
- }else{
- msg_dialog::display(_("Permission error"), _("You have no permission to modify these addresses!"), ERROR_DIALOG);
- }
- }
-
-
- /*! \brief Removes the given mail address from the alternate addresses list
- */
- function delAlternate($addresses)
- {
- if($this->acl_is_writeable("alternateAddresses")){
- $this->alternateAddresses= array_remove_entries ($addresses,$this->alternateAddresses);
- $this->is_modified= TRUE;
- }else{
- msg_dialog::display(_("Permission error"), _("You have no permission to modify these addresses!"), ERROR_DIALOG);
- }
- }
-
-
- /*! \brief Prepare importet vacation string. \
- * Replace placeholder like %givenName a.s.o.
- * @param string Vacation string
- * @return string Completed vacation string
- */
- private function prepare_vacation_template($contents)
- {
- /* Replace attributes */
- $attrs = array();
- $obj = NULL;
- if(isset($this->parent->by_object['user'])){
- $attrs = $this->parent->by_object['user']->attributes;
- $obj = $this->parent->by_object['user'];
- }else{
- $obj = new user($this->config,$this->dn);
- $attrs = $obj->attributes;
- }
- if($obj){
-
- /* Replace vacation start and end time */
- if($this->enabledFeatures['vacationMessage']){
- if(preg_match("/%start/",$contents)){
- $contents = preg_replace("/%start/",$this->vacationStart,$contents);
- }
- if(preg_match("/%end/",$contents)){
- $contents = preg_replace("/%end/",$this->vacationStop,$contents);
- }
- }else{
- if(preg_match("/%start/",$contents)){
- $contents = preg_replace("/%start/", _("unknown"),$contents);
- }
- if(preg_match("/%end/",$contents)){
- $contents = preg_replace("/%end/", _("unknown"), $contents);
- }
- }
-
- foreach ($attrs as $val){
-
- // We can only replace strings here
- if(!is_string($obj->$val)) continue;
-
- if(preg_match("/dateOfBirth/",$val)){
- if($obj->use_dob){
- $contents= preg_replace("/%$val/",date("Y-d-m",$obj->dateOfBirth),$contents);
- }
- }else {
- $contents= preg_replace("/%$val/",
- $obj->$val, $contents);
- }
-
- }
- }
- $contents = ltrim(preg_replace("/^DESC:.*$/m","",$contents),"\n ");
- return($contents);
- }
-
-
- /*! \brief Remove the account form the groupware server completely.
- */
- function remove_from_parent()
- {
- // Get rpc handle to remove the account
- if($this->initially_was_account){
- if($this->rpcExec('gwAcctDel', $this->uid) === NULL){
- msg_dialog::display(_("Error"), _("Groupware account removal failed!"), ERROR_DIALOG);
- }
- }
- }
-
-
- /* \brief Persists the values of this plugin to the groupware server.
- * Save method is called on "apply" and "ok" in the Gosa Frontend.
- * All other actions will update values in the form or
- * cancel and therefore discard the changes so far.
- */
- function save()
- {
- // Get rpc handle to create or update the account
- if(!$this->initially_was_account){
- if($this->rpcExec('gwAcctAdd', $this->uid, $this->mailAddress) === NULL){
- msg_dialog::display(_("Error"), _("Groupware account creation failed!"), ERROR_DIALOG);
- }
- }
-
- // Save the primary Email Address.
- if(!empty($this->mailAddress)){
- $this->groupwareDao->save("primaryMail", $this->uid, $this->mailAddress);
- }
-
- // Save alternateAddresses and forwarding.
- if(isset($this->alternateAddresses) && is_array($this->alternateAddresses)){
- $this->groupwareDao->save("alternateAddresses", $this->uid, $this->alternateAddresses);
- }
- if(isset($this->forwardingAddresses) && is_array($this->forwardingAddresses)){
- $this->groupwareDao->save("forwardingAddresses", $this->uid, $this->forwardingAddresses);
- }
-
- // Save the quota
- if(true){
- $quota = array( "warn_limit" => $this->mailBoxWarnLimitValue,
- "send_limit" => $this->mailBoxSendSizelimitValue,
- "hard_limit" => $this->mailBoxHardSizelimitValue,
- "hold" => $this->quotaSize,
- "usage" => $this->quotaUsage);
- $this->groupwareDao->save("quotaSize", $this->uid, $quota);
- }
-
- // TODO: save Mailbox location
- }
-
-
- /*! \brief Check given values
- */
- function check()
- {
- // TODO: Remove all echo Messages
- $messages = plugin::check();
-
- //Check the dates
-
- // TODO: check only if features are enabled.
-
- //required vacationEnabled
- if($this->vacationEnabled){
- if(!tests::is_date($this->vacationStart)){
- $messages[] = msgPool::invalid(_("Vacation start date"),$this->vacationStart , "", "01.03.2010");
- }
- if(!tests::is_date($this->vacationStop)){
- $messages[] = msgPool::invalid(_("Vacation stop date"),$this->vacationStop , "", "01.03.2010");
- }
- $diff = tests::compareDate($this->vacationStart, $this->vacationStop);
-
- if($diff>=0){
- $messages[] = msgPool::invalid(_("Vacation dates"));
- }
- }
- if(!tests::is_email ($this->mailAddress)){
- $messages[] = msgPool::invalid(_("Mail address"),$this->mailAddress , "", "user@excom.intranet.gonicus.de");
- }
-
- if(isset($this->forwardingAddresses) && is_array($this->forwardingAddresses)){
- foreach($this->forwardingAddresses as $fAddress){
- if(!tests::is_email ($fAddress)){
- $messages[] = msgPool::invalid(_("Alternate address"),$fAddress, "",
- "user@excom.intranet.gonicus.de");
- }
- if($fAddress == $this->mailAddress){
- $messages[] = _("The primary address cannot be used as alternative address!");
- }
- }
- }
- if(isset($this->alternateAddresses) && is_array($this->alternateAddresses)){
- foreach($this->alternateAddresses as $fAddress){
- if(!tests::is_email ($fAddress)){
- $messages[] = msgPool::invalid(_("Forward address"),$fAddress, "", "user@excom.intranet.gonicus.de");
- }
- if($fAddress == $this->mailAddress){
- $messages[] = _("The primary address cannot be used as forward address!");
- }
- }
- }
-
- // TODO: Checks for quota and Locations?
- return($messages);
- }
-
-
- /*! \brief ACL settings
- */
- static function plInfo()
- {
- return (array(
- "plShortName" => _("Groupware"),
- "plDescription" => _("Groupware settings"),
- "plSelfModify" => TRUE,
- "plDepends" => array("user"), // This plugin depends on
- "plPriority" => 4, // Position in tabs
- "plSection" => array("personal" => _("My account")),
- "plCategory" => array("users"),
- "plOptions" => array(),
- "plProvidedAcls" => array(
- "mailAddress" => _("Mail address"),
- "mailLocation" => _("Mail location"),
- "quotaUsage" => _("Quota usage"),
- "mailFilter" => _("Mail filter"),
- "quotaSize" => _("Quota size"),
- "alternateAddresses" => _("Alternate mail addresses"),
- "forwardingAddresses" => _("Forwarding mail addresses"),
- "vacationEnabled" => _("Vaction switch"),
- "vacationStart" => _("Vacation start time"),
- "vacationStop" => _("Vacation stop time"),
- "vacationMessage" => _("Vacation message"),
- "mailBoxWarnLimit" => _("Warn sizelimit"),
- "mailBoxSendSizelimit" => _("Send sizelimit"),
- "mailBoxHardSizelimit" => _("Hard sizelimit"),
- "mailBoxAutomaticRemoval" => _("Automatic mail removal"),
- "localDeliveryOnly" => _("Local delivery only"),
- "dropOwnMails" => _("Drop own mails")
- )
- ));
- }
-
-
- /*! \brief Maps the resultset fetched from the Dao to the class variables
- * of the plugin.
- */
- function mapComprehensiveUserData($callBackMap)
- {
- $map = array(
- "mailLocations" => "mailLocations",
- "mailAddress" => "primaryMail",
- "mailLocation" => "mailLocation",
- "quotaUsage" => "quotaUsage",
- "quotaSize" => "quotaSize",
- "alternateAddresses" => "alternateAddresses",
- "forwardingAddresses" => "forwardingAddresses",
- "vacationEnabled" => "vacationEnabled",
- "vacationStart" => "vacationStart",
- "vacationStop" => "vacationStop",
- "vacationMessage" => "vacationMessage",
- "mailBoxWarnLimitEnabled" => "mailBoxWarnLimitEnabled",
- "mailBoxWarnLimitValue" => "mailBoxWarnLimitValue",
- "mailBoxSendSizelimitEnabled" => "mailBoxSendSizelimitEnabled",
- "mailBoxSendSizelimitValue" => "mailBoxSendSizelimitValue",
- "mailBoxHardSizelimitEnabled" => "mailBoxHardSizelimitEnabled",
- "mailBoxHardSizelimitValue" => "mailBoxHardSizelimitValue",
- "mailBoxAutomaticRemovalEnabled" => "mailBoxAutomaticRemovalEnabled",
- "mailBoxAutomaticRemovalValue" => "mailBoxAutomaticRemovalValue",
- "localDeliveryOnly" => "localDeliveryOnly",
- "dropOwnMails" => "dropOwnMails");
-
- // Map values from source array to class members
- foreach($map as $target => $source){
- if(isset($callBackMap[$source])){
- $this->$target = $callBackMap[$source];
- }
- }
- }
-}
-
-
-/*! \brief Data Access Object for groupwares
- */
-class groupware_dao{
-
- /* TODO: Remove the debug
- * use the debug functions fo the Gosa installation instead.
- * function_debug
- * (got ot remove the following variable, the function debug and all calls to it)
- */
- private $debug = true;
-
- private $availableMethods;
- private $availableProperties;
- private $accountLocations;
-
- private $groupwarePluginRef = False;
-
- private static $gwFeatures = array(
- "primaryMail" => array( "get"=>"gwAcctGetPrimaryMailAddress",
- "save"=>"gwAcctSetPrimaryMailAddress"),
- "mailLocations" => array("get"=>"gwGetMailboxLocations"),
- "quotaSize" =>array( "get"=>"gwAcctGetQuota",
- "save"=>"gwAcctSetQuota",
- "delete"=>"gwAcctSetQuota"),
- "mailFilter" =>array( "get"=>"gwAcctGetFilters",
- "save"=>"gwAcctSetFilters",
- "delete"=>"gwAcctDelFilter"),
- "alternateAddresses" =>array( "get"=>"gwAcctGetAlternateMailAddresses",
- "save"=>"gwAcctSetAlternateMailAddresses",
- "delete"=>"gwAcctDelAlternateMailAddress"),
- "forwardingAddresses" =>array( "get"=>"gwAcctGetMailForwardAddresses",
- "save"=>"gwAcctSetMailForwardAddresses",
- "delete"=>"gwAcctDelMailForwardAddress"),
- "vacationMessage" =>array( "get"=>"gwAcctGetOutOfOfficeReply",
- "save"=>"gwAcctSetOutOfOfficeReply",
- "delete"=>"gwAcctDelOutOfOfficeReply"),
- "mailBoxWarnLimit" =>array( "get"=>"",
- "save"=>"",
- "delete"=>""),
- "mailBoxSendSizelimit" =>array( "get"=>"gwAcctGetQuota",
- "save"=>"gwAcctSetQuota",
- "delete"=>"gwAcctDelQuota"),
- "mailBoxHardSizelimit" =>array( "get"=>"gwAcctGetMailLimit",
- "save"=>"gwAcctSetMailLimit",
- "delete"=>"gwAcctDelMailLimit"),
- "mailBoxAutomaticRemoval" =>array( "get"=>"",
- "save"=>"",
- "delete"=>""),
- "localDeliveryOnly" =>array( "get"=>"",
- "save"=>"",
- "delete"=>""),
- "dropOwnMails" =>array( "get"=>"",
- "save"=>"",
- "delete"=>""),
- "accountProperties" => array("get"=>"gwAcctGetProperties",
- "save"=>"gwAcctSetProperties",
- "delete"=>"gwAcctDelProperties")
-
- );
-
-
- /*! \brief Constructor sets the connection to the rpc service
- * initializes the class
- */
- function __construct(&$pluginRef)
- {
- $this->groupwarePluginRef = &$pluginRef;
-
- // TODO: Remove all echos
-
- $this->init();
- }
-
-
- /*! \brief Gets the capabilities of the server
- * builds an array with availbale features and knows how to call get, save, delete functions of
- * groupware rpc.
- */
- public function init()
- {
- $this->availableMethods = $this->groupwarePluginRef->rpcExec('gwGetCapabilities');
- //$this->availableProperties = $this->groupwarePluginRef->rpcExec('gwGetSupportedProperties');
- //$this->debug("availableProperties on init:", $this->availableProperties);
-
- }
-
-
- /*! \brief Generic saving method for all features defined in $gwFeatures
- * which are the available features.
- */
- public function save($feature, $uid, $valueArray)
- {
- $function = groupware_dao::$gwFeatures[$feature]["save"];
- if(is_array($valueArray)){
- $valueArray = array_merge(array($function, $uid), $valueArray);
- }else{
- $valueArray = array($function, $uid, $valueArray);
- }
- $this->debug("SAVING (feature, value)", $valueArray);
- $result = call_user_func_array(array($this->groupwarePluginRef, 'rpcExec'), $valueArray);
- return $result;
- }
-
-
- /*! \brief generic get method for all features defined in $gwFeatures
- * which are the available features.
- */
- public function get($feature, $valueArray)
- {
- // TODO: Check if feture available ? get and return the result.
- $function = groupware_dao::$gwFeatures[$feature]["get"];
- if(is_array($valueArray)){
- $valueArray = array_merge(array($function), $valueArray);
- }else{
- $valueArray = array($function, $valueArray);
- }
-
- $result = call_user_func_array(array($this->groupwarePluginRef, 'rpcExec'), $valueArray);
- return $result;
- }
-
-
- /*! \brief generic delete function for all features defined in $gwFeatures
- * which are the available features.
- *
- * NOT YET IMPLEMENTED
- */
- public function del($feature, $valueArray)
- {
- // TODO: check if feture available del and return the result.
-
- echo "deletion of values is not implemented yet";
- /*
- $function = groupware_dao::$gwFeatures[$feature]["delete"];
- $valueArray = array_merge(array($function), $valueArray);
- $result = call_user_func_array(array($this->groupwarePluginRef, 'rpcExec'), $valueArray);
- return $result;
- */
- }
-
-
- /*! \brief determine availability of features.
- *
- * @param methodName
- * @return boolean
- */
- public function gwFeatureAvailable($methodName)
- {
- return(isset($this->availableMethods[$methodName]) && ($this->availableMethods[$methodName]));
- }
-
-
- /*! \brief comprehensive user info will dessolve into one groupware call later
- * right now it will get all data of the features that are available in the plugin.
- * @param int $uid
- * @return assoc array "feature" => "gwValue";
- */
- public function getComprehensiverUser( $uid)
- {
- //$hi = $this->groupwarePluginRef->rpcExec('gwGetCapabilities');
- $resultArr = array();
-
- if($this->groupwarePluginRef->isFeatureEnabled("primaryMail")){
- $resultArr["primaryMail"] = $this->get("primaryMail", array($uid));
- }
-
- if($this->groupwarePluginRef->isFeatureEnabled("alternateAddresses")){
- $resultArr["alternateAddresses"] = $this->get("alternateAddresses", array($uid));
- }
-
- if($this->groupwarePluginRef->isFeatureEnabled("forwardingAddresses")){
- $resultArr["forwardingAddresses"] = $this->get("forwardingAddresses", array($uid));
- }
-
- if($this->groupwarePluginRef->isFeatureEnabled("forwardingAddresses")){
- $resultArr["forwardingAddresses"] = $this->get("forwardingAddresses", array($uid));
- }
-
- // Location dropdownlist - only readable
- if($this->groupwarePluginRef->isFeatureEnabled("mailLocations")){
- $resultArr["mailLocations"] = $this->groupwarePluginRef->rpcExec('gwGetMailboxLocations');
- $resultArr["mailLocation"] = $this->groupwarePluginRef->rpcExec('gwAcctGetLocation',array($uid));
- }
-
-
- //TODO: getLocation muss ebenfalls geholt werden
-
- // Quota quotaUsage, quotaSize
- if($this->groupwarePluginRef->isFeatureEnabled("quotaSize") ||
- $this->groupwarePluginRef->isFeatureEnabled("quotaUsage") ||
- $this->groupwarePluginRef->isFeatureEnabled("mailBoxWarnLimit") ||
- $this->groupwarePluginRef->isFeatureEnabled("mailBoxSendSizelimit") ||
- $this->groupwarePluginRef->isFeatureEnabled("mailBoxHardSizelimit")){
-
- // Usage is a Mapi function which is not yet
-
- // TODO: Remove the following dummy and enable the qota fetch from groupware
-
- echo "Quota function not yet implemented on server side!!";
- //$quota = $this->get("quotaSize", array($uid));
- $quota = array( "warn_limit" => 1008,
- "send_limit" => 108,
- "hard_limit" => 1108,
- "hold" => 508,
- "usage" => 1108);
- $resultArr["quotaSize"] = $quota["usage"];
- $resultArr["quotaSize"] = $quota["hold"];
- if($quota["warn_limit"] > 0){
- $resultArr["mailBoxWarnLimitEnabled"] = true;
- $resultArr["mailBoxWarnLimitValue"] = $quota["warn_limit"];
- }else{
- $resultArr["mailBoxWarnLimitEnabled"] = false;
- $resultArr["mailBoxWarnLimitValue"] = 0;
- }
- if($quota["send_limit"] > 0){
- $resultArr["mailBoxSendSizelimitEnabled"] = True;
- $resultArr["mailBoxSendSizelimitValue"] = $quota["send_limit"];
- }else{
- $resultArr["mailBoxSendSizelimitEnabled"] = FALSE;
- $resultArr["mailBoxSendSizelimitValue"] = 0;
- }
- if($quota["hard_limit"] > 0){
- $resultArr["mailBoxHardSizelimitEnabled"] = True;
- $resultArr["mailBoxHardSizelimitValue"] = $quota["hard_limit"];
- }else{
- $resultArr["mailBoxHardSizelimitEnabled"] = FALSE;
- $resultArr["mailBoxHardSizelimitValue"] = 0;
- }
- }
-
- //this function seems to be broken on the server.
- //addding dummy
-
- if($this->groupwarePluginRef->isFeatureEnabled("vacationMessage")){
-
- $vacMessage = $this->get("vacationMessage", array($uid));
- //$resultArr["vacationMessage"] = "dummy Vacation message - (getOutOfOfficeReply currently throws errors )";
- }
-
- $this->debug("getComprehensiverUser:", $resultArr);
- return $resultArr;
- }
-
-
- /*! \brief TODO: remove all debug functions.
- */
- public function debug($name, $message)
- {
- if($this->debug){
- echo"<b>".$name."</b>";
- if(is_array($message)){
- echo "<pre>";
- print_r($message);
- echo "</pre>";
- }else{
- echo "$message";
- }
- }
- }
-}
-?>