X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fsieve%2Fclass_sieveManagement.inc;h=ba01e0cf3aaa0bbe50a4a26b2d617e99b4afca3a;hb=0d96e184dc6107bff6f32f24b4cda64ddd01c35a;hp=be2ef4ed93186acec0ffbf64bfe82fc5a4de5d48;hpb=34a70d4d93be0e0a8e2de41162ea1ad6d2961081;p=gosa.git diff --git a/include/sieve/class_sieveManagement.inc b/include/sieve/class_sieveManagement.inc index be2ef4ed9..ba01e0cf3 100644 --- a/include/sieve/class_sieveManagement.inc +++ b/include/sieve/class_sieveManagement.inc @@ -31,7 +31,7 @@ class sieveManagement extends plugin { var $parent = NULL; var $scripts= array(); - + var $uattrib = "uid"; var $current_script = -1; var $current_handler = NULL; var $script_to_delete =-1; @@ -41,7 +41,7 @@ class sieveManagement extends plugin var $create_script = FALSE; /* To add new elements we need to know - * Where to the element -> add_new_id + * Where to add the element -> add_new_id * Whould we add above or below this id -> add_above_below * What kind of element should we add -> add_element_type */ @@ -58,17 +58,19 @@ class sieveManagement extends plugin /* Initialize the class and load all sieve scripts * try to parse them and display errors */ - function sieveManagement($config,$dn,$parent) + function sieveManagement($config,$dn,$parent,$uattrib) { + /* Check given parameter */ + if(!isset($parent->$uattrib)){ + trigger_error("Sieve Management implementation error. Parameter 4 must be part of the given parent element."); + } + + $this->uattrib = $uattrib; $this->parent = $parent; plugin::plugin($config,$dn); - /* Get sieve */ + /* Get sieve, if this fail abort class initialization */ if(!$this->sieve_handle = $this->get_sieve()){ - print_red( - sprintf( - _("Can't log into SIEVE server. Server says '%s'."), - to_string($this->Sieve_Error))); return; } @@ -122,7 +124,7 @@ class sieveManagement extends plugin } - /* Return a sieve class hanlde, + /* Return a sieve class handle, * false if login fails */ function get_sieve() @@ -133,16 +135,18 @@ class sieveManagement extends plugin $cfg= $this->config->data['SERVERS']['IMAP'][$this->parent->gosaMailServer]; $this->Sieve_Error = ""; + $uattrib = $this->uattrib; + /* Log into the mail server */ $this->sieve_handle= new sieve( $cfg["sieve_server"], $cfg["sieve_port"], - $this->parent->uid, + $this->parent->$uattrib, $cfg["password"], $cfg["admin"]); /* Try to login */ - if (!$this->sieve_handle->sieve_login()){ + if (!@$this->sieve_handle->sieve_login()){ $this->Sieve_Error = $this->sieve_handle->error_raw; return(FALSE); } @@ -187,31 +191,35 @@ class sieveManagement extends plugin } /* Check given name */ - $err = ""; + $err = false; /* Is given name in lower case characters ? */ if(isset($_POST['create_script_save'])){ if(!strlen($name)){ - $err = _("You should specify a name for your new script."); + $err =true; + print_red(_("You should specify a name for your new script.")); } /* Is given name in lower case characters ? */ if($name != strtolower($name)){ - $err = _("Only lower case names are allowed here."); + $err =true; + print_red(_("Only lower case names are allowed.")); } /* Only chars are allowed here */ if(preg_match("/[^a-z]/i",$name)){ - $err = _("Only a-z are allowed in script names."); + $err =true; + print_red(_("Only alphabetical characters are allowed in script names.")); } $tmp = $this->get_used_script_names(); if(in_array_ics($name,$tmp)){ - $err =_("The specified name is already in use."); + $err =true; + print_red(_("The specified name is already in use.")); } } /* Create script if everything is ok */ - if($this->create_script && isset($_POST['create_script_save']) && $err == "" ){ + if($this->create_script && isset($_POST['create_script_save']) && !$err){ /* Close dialog */ $this->create_script = FALSE; @@ -248,7 +256,6 @@ class sieveManagement extends plugin /* Display dialog to enter new script name */ $smarty = get_smarty(); $smarty->assign("NewScriptName",$name); - $smarty->assign("Error",$err); return($smarty->fetch(get_template_path("templates/create_script.tpl",TRUE,dirname(__FILE__)))); } } @@ -375,7 +382,9 @@ class sieveManagement extends plugin } /* Save currently edited sieve script. */ - if($this->parent->acl_is_writeable("sieveManagement") && isset($_POST['save_sieve_changes'])){ + if($this->parent->acl_is_writeable("sieveManagement") && + isset($_POST['save_sieve_changes']) && + is_object($this->current_handler)){ $chk = $this->current_handler->check(); if(!count($chk)){ @@ -396,7 +405,9 @@ class sieveManagement extends plugin print_red($p->status_text);; } }else{ - print_red(_("Please fix all errors before saving.")); + foreach($chk as $msgs){ + print_red(sprintf(_("Please fix all errors before saving. Last error was : %s"),$msgs)); + } } } @@ -422,7 +433,7 @@ class sieveManagement extends plugin $file = $_FILES['Script_To_Import']; if($file['size'] == 0){ - print_red(_("Specified file seams to empty.")); + print_red(_("Specified file seems to be empty.")); }elseif(!file_exists($file['tmp_name'])){ print_red(_("Upload failed, somehow nothing was uploaded or the temporary file can't be accessed.")); }elseif(!is_readable ($file['tmp_name'])){ @@ -557,7 +568,7 @@ class sieveManagement extends plugin if(!$else_found && (!(get_class($obj) == "sieve_if" && $elsif_found))){ $element_types['sieve_else'] = _("Else"); } - $element_types['sieve_elsif'] = _("Else if"); + $element_types['sieve_elsif'] = _("Else If"); } } } @@ -627,23 +638,17 @@ class sieveManagement extends plugin $field1 = array("string" => " ", "attach" => "style='width:20px;'"); if($active){ - $field1 = array("string" => ""._("Active")."", + $field1 = array("string" => ""._("Active")."", "attach" => "style='width:20px;'"); } $field2 = array("string" => $script['NAME']); $field3 = array("string" => $script['MSG']); - $field4 = array("string" => _("Script length")." : ".strlen($script['SCRIPT'])); - - if($edited){ - $field5 = array("string" => ""._("Edited")."", - "attach" => "style='width:30px;'"); - }else{ - $field5 = array("string" => "", - "attach" => "style='width:30px;'"); - } + $field4 = array("string" => _("Script length").": ".strlen($script['SCRIPT'])); if($this->parent->acl_is_writeable("sieveManagement")){ - $del = ""; + $del = ""; }else{ $del = " "; } @@ -651,24 +656,35 @@ class sieveManagement extends plugin if($active || $script['IS_NEW'] || !$this->parent->acl_is_writeable("sieveManagement")){ $activate = " "; }else{ - $activate = ""; + $activate = ""; } - $field6 = array("string" => $activate."".$del); - $List ->AddEntry(array($field1,$field2,$field3,$field4,$field5,$field6)); + $field6 = array("string" => $activate."".$del, + "attach" => "style='border-right:0px; width:70px;'"); + $List->AddEntry(array($field1,$field2,$field3,$field4,$field6)); } - - $display ="

Sieve script management

"; - $display .= _("Be careful. All your changes will be saved directly to sieve, if you use the save button below."); - $display .= "
"; - $display .= $List->DrawList(); - - $display .= "

\n"; - $display .= "\n"; - $display .= " \n"; - $display .= "\n"; - $display .= "

"; - return($display);; + + $List->SetHeight(400); + + /* If the uattrib is empty (Attribute to use for authentification with sieve) + * Display a message that the connection can't be established. + */ + $uattrib = $this->uattrib; + $smarty = get_smarty(); + + if(!$this->get_sieve()){ + $smarty->assign("Sieve_Error",sprintf( + _("Can't log into SIEVE server. Server says '%s'."), + to_string($this->Sieve_Error))); + }else{ + $smarty->assign("Sieve_Error",""); + } + + $smarty->assign("uattrib_empty",empty($this->parent->$uattrib)); + $smarty->assign("List",$List->DrawList()); + return($smarty->fetch(get_template_path("templates/management.tpl",TRUE,dirname(__FILE__)))); } @@ -688,7 +704,9 @@ class sieveManagement extends plugin } $tmp = get_declared_classes(); if(!in_array($type,$tmp)){ - trigger_error("Can't add new element, given \$class=".$class." does not exists."); + if(!empty($type)){ + trigger_error("Can't add new element, given \$class=".$class." does not exists."); + } return(FALSE); } if(!is_object($this->current_handler) || get_class($this->current_handler) != "My_Parser"){ @@ -696,6 +714,72 @@ class sieveManagement extends plugin return(FALSE); } + /* These element types are allowed to be added here */ + $element_types= array( + "sieve_keep" => _("Keep"), + "sieve_comment" => _("Comment"), + "sieve_fileinto" => _("File into"), + "sieve_keep" => _("Keep"), + "sieve_discard" => _("Discard"), + "sieve_redirect" => _("Redirect"), + "sieve_reject" => _("Reject"), + "sieve_require" => _("Require"), + "sieve_stop" => _("Stop"), + "sieve_vacation" => _("Vacation message"), + "sieve_if" => _("If")); + + /* Check if we should add else/elsif to the select box + * or not. We can't add else twice!. + */ + + /* Get posistion of the current element + */ + foreach($this->current_handler->tree_->pap as $key => $obj){ + + if($obj->object_id == $id && in_array(get_class($obj),array("sieve_if","sieve_elsif"))){ + + /* Get block start/end */ + $end_id = $this->current_handler->tree_->get_block_end($key); + $else_found = FALSE; + $elsif_found = FALSE; + + /* Check if there is already an else in this block + */ + for($i = $key ; $i < $end_id ; $i ++){ + if(get_class($this->current_handler->tree_->pap[$i]) == "sieve_else"){ + $else_found = TRUE; + } + if(get_class($this->current_handler->tree_->pap[$i]) == "sieve_elsif"){ + $elsif_found = TRUE; + } + } + + if($this->add_above_below == "below"){ + + /* Only allow adding 'else' if there is currently + * no 'else' statement. And don't allow adding + * 'else' before 'elseif' + */ + if(!$else_found && (!(get_class($obj) == "sieve_if" && $elsif_found))){ + $element_types['sieve_else'] = _("Else"); + } + $element_types['sieve_elsif'] = _("Else If"); + }else{ + + /* Allow adding elsif above elsif */ + if(in_array(get_class($obj),array("sieve_elsif"))){ + $element_types['sieve_elsif'] = _("Else If"); + } + } + } + } + + if(!isset($element_types[$type])){ + print_red(sprintf(_("Can't add the specified element at the given position."))); + return; + } + + /* Create elements we should add * -Some element require also surrounding block elements */ @@ -837,15 +921,19 @@ class sieveManagement extends plugin foreach($data as $key => $obj){ if(isset($obj->object_id) && preg_match("/^Add_Object_Top_".$obj->object_id."_/",$name) && $once){ $once = FALSE; - $this->add_new_element = TRUE; + $this->add_element_type = $_POST['element_type_'.$obj->object_id]; + $this->add_new_element = FALSE; $this->add_new_id = $obj->object_id; $this->add_above_below = "above"; + $this->add_new_element_to_current_script($this->add_element_type,$this->add_new_id,$this->add_above_below); } if(isset($obj->object_id) && preg_match("/^Add_Object_Bottom_".$obj->object_id."_/",$name) && $once){ $once = FALSE; - $this->add_new_element = TRUE; + $this->add_element_type = $_POST['element_type_'.$obj->object_id]; + $this->add_new_element = FALSE; $this->add_new_id = $obj->object_id; $this->add_above_below = "below"; + $this->add_new_element_to_current_script($this->add_element_type,$this->add_new_id,$this->add_above_below); } if(isset($obj->object_id) && preg_match("/^Remove_Object_".$obj->object_id."_/",$name) && $once){ @@ -942,6 +1030,7 @@ class sieveManagement extends plugin sprintf( _("Can't log into SIEVE server. Server says '%s'."), to_string($this->Sieve_Error))); + return; } $everything_went_fine = TRUE;