Code

Added new service management
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 6 Jun 2006 12:14:17 +0000 (12:14 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 6 Jun 2006 12:14:17 +0000 (12:14 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@3659 594d385d-05f5-0310-b6e9-bd551577e9d8

22 files changed:
html/images/status_restart.png [new file with mode: 0644]
html/images/status_restart_all.png [new file with mode: 0644]
html/images/status_restarting.png [new file with mode: 0644]
html/images/status_running.png [new file with mode: 0755]
html/images/status_start.png [new file with mode: 0755]
html/images/status_start_all.png [new file with mode: 0755]
html/images/status_stop.png [new file with mode: 0755]
html/images/status_stop_all.png [new file with mode: 0755]
html/images/status_stopped.png [new file with mode: 0755]
plugins/admin/systems/ServerService/ServiceAddDialog.tpl [new file with mode: 0755]
plugins/admin/systems/ServerService/back [new file with mode: 0644]
plugins/admin/systems/ServerService/class_ServerService.inc [new file with mode: 0644]
plugins/admin/systems/ServerService/class_ServiceAddDialog.inc [new file with mode: 0644]
plugins/admin/systems/ServerService/class_divListSystem.inc [new file with mode: 0644]
plugins/admin/systems/ServerService/class_goImapServer.inc [new file with mode: 0644]
plugins/admin/systems/ServerService/class_goMailServer.inc [new file with mode: 0644]
plugins/admin/systems/ServerService/class_goNtpServer.inc [new file with mode: 0644]
plugins/admin/systems/ServerService/contents.tpl [new file with mode: 0644]
plugins/admin/systems/ServerService/goImapServer.tpl [new file with mode: 0644]
plugins/admin/systems/ServerService/goMailServer.tpl [new file with mode: 0644]
plugins/admin/systems/ServerService/goNtpServer.tpl [new file with mode: 0644]
plugins/admin/systems/class_servDB.inc

diff --git a/html/images/status_restart.png b/html/images/status_restart.png
new file mode 100644 (file)
index 0000000..de65ee1
Binary files /dev/null and b/html/images/status_restart.png differ
diff --git a/html/images/status_restart_all.png b/html/images/status_restart_all.png
new file mode 100644 (file)
index 0000000..de65ee1
Binary files /dev/null and b/html/images/status_restart_all.png differ
diff --git a/html/images/status_restarting.png b/html/images/status_restarting.png
new file mode 100644 (file)
index 0000000..de65ee1
Binary files /dev/null and b/html/images/status_restarting.png differ
diff --git a/html/images/status_running.png b/html/images/status_running.png
new file mode 100755 (executable)
index 0000000..543710f
Binary files /dev/null and b/html/images/status_running.png differ
diff --git a/html/images/status_start.png b/html/images/status_start.png
new file mode 100755 (executable)
index 0000000..543710f
Binary files /dev/null and b/html/images/status_start.png differ
diff --git a/html/images/status_start_all.png b/html/images/status_start_all.png
new file mode 100755 (executable)
index 0000000..543710f
Binary files /dev/null and b/html/images/status_start_all.png differ
diff --git a/html/images/status_stop.png b/html/images/status_stop.png
new file mode 100755 (executable)
index 0000000..3240b29
Binary files /dev/null and b/html/images/status_stop.png differ
diff --git a/html/images/status_stop_all.png b/html/images/status_stop_all.png
new file mode 100755 (executable)
index 0000000..3240b29
Binary files /dev/null and b/html/images/status_stop_all.png differ
diff --git a/html/images/status_stopped.png b/html/images/status_stopped.png
new file mode 100755 (executable)
index 0000000..3240b29
Binary files /dev/null and b/html/images/status_stopped.png differ
diff --git a/plugins/admin/systems/ServerService/ServiceAddDialog.tpl b/plugins/admin/systems/ServerService/ServiceAddDialog.tpl
new file mode 100755 (executable)
index 0000000..386e1ee
--- /dev/null
@@ -0,0 +1,38 @@
+<div style="font-size: 18px;">
+       <div style="font-size: 18px;">
+               {t}Add a new service to this server.{/t}.
+       </div>
+</div>
+<br>
+<p class="seperator"><b>
+{t}This dialog allows you to add new services to the currenty edited server object. In the box below you can see all available services, services you have already in use are not shown.{/t} </b>
+<br>
+<br>
+</p>
+{if $Services} 
+
+<br>
+
+<b>{t}Please choose a service listed below.{/t}</b>
+<br>
+<br>
+<br>{t}Available services{/t} &nbsp;
+       <select name="ServiceName" >
+               {html_options options=$Services }
+       </select>
+{else}
+       <br>
+       {t}There are no more services available, if you think that there is a service missing. Please check your gosa configuration file.{/t}
+       <br>
+{/if}
+<br>
+<br>
+<p class="seperator">
+<p>
+<div style="width:100%; text-align:right;">
+    <input type='submit' name='SaveServiceAdd' value='{t}Save{/t}' {if !$Services} disabled {/if}>
+    &nbsp;
+    <input type='submit' name='CancelServiceAdd' value='{t}Cancel{/t}'>
+</div>
+</p>
+
diff --git a/plugins/admin/systems/ServerService/back b/plugins/admin/systems/ServerService/back
new file mode 100644 (file)
index 0000000..fbae155
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+
+class goMailServer extends plugin{
+       
+  var $cli_summary      = "This pluign is used within the ServerService Pluign \nand indicates that this server supports mailqueue listings and so on.";
+  var $cli_description  = "Some longer text\nfor help";
+  var $cli_parameters   = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+
+  /* This plugin only writes its objectClass */
+  var $objectclasses    = array("goMailServer");
+  
+  /* This class can't be assigned twice so it conflicts with itsself */
+  var $conflicts        = array("goMailServer");
+
+  var $DisplayName      = "";
+  var $dn               = NULL;
+  var $StatusFlag       = "goMailServerStatus";
+  var $attributes       = array("goMailServerStatus","description","goMailServerStatus","postfixHeaderSizeLimit",
+                                "postfixMailboxSizeLimit","postfixMessageSizeLimit",
+                                "postfixMydestinations","postfixMydomain","postfixMyhostname",
+                                "postfixMynetworks","postfixRelayhost","postfixTransportTable",
+                                "postfixSenderRestrictions","postfixRecipientRestrictions");
+
+  var $goMailServerStatus
+  var $postfixHeaderSizeLimit
+  var $postfixMailboxSizeLimit
+  var $postfixMessageSizeLimit
+  var $postfixMydestinations
+  var $postfixMydomain
+  var $postfixMyhostname
+  var $postfixMynetworks
+  var $postfixRelayhost
+  var $postfixTransportTable
+  var $postfixSenderRestrictions
+  var $postfixRecipientRestrictions 
+
+  function goMailServer($config,$dn)
+  {
+    plugin::plugin($config,$dn);
+    $this->DisplayName = _("Flag server as mail server.");
+    $this->is_account = true;
+  }
+
+  function execute()
+  { 
+    /* this class can't be executed- It represents only a flag */
+    return;
+  }
+
+  function getListEntry()
+  {
+    $flag = $this->StatusFlag;
+    $fields['Status']     = $this->$flag;
+    $fields['Message']    = _("Flag server as mail server");
+    $fields['AllowStart'] = true;
+    $fields['AllowStop']  = true;
+    $fields['AllowReset'] = true;
+    $fields['AllowRemove']= true;
+    $fields['AllowEdit']  = true;
+    return($fields);
+  }
+
+  function remove_from_parent()
+  {
+    plugin::remove_from_parent();
+    /* Check if this is a new entry ... add/modify */
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cat($this->dn,array("objectClass"));
+    if($ldap->count()){
+      $ldap->cd($this->dn);
+      $ldap->modify($this->attrs);
+    }else{
+      $ldap->cd($this->dn);
+      $ldap->add($this->attrs);
+    }
+    show_ldap_error($ldap->get_error());
+  }
+
+  function save()
+  {
+    plugin::save();
+    /* Check if this is a new entry ... add/modify */
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cat($this->dn,array("objectClass"));
+    if($ldap->count()){
+      $ldap->cd($this->dn);
+      $ldap->modify($this->attrs);
+    }else{
+      $ldap->cd($this->dn);
+      $ldap->add($this->attrs);
+    }
+    show_ldap_error($ldap->get_error());
+  }
+
+
+   /* Directly save new status flag */
+  function setStatus($value)
+  {
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->dn);
+    $ldap->cat($this->dn,array("objectClass"));
+
+    if($ldap->count()){
+      $attrs =array();
+      $tmp = $ldap->fetch();
+      for($i = 0; $i < $tmp['objectClass']['count']; $i ++){
+        $attrs['objectClass'][] = $tmp['objectClass'][$i];
+      }
+      $flag = $this->StatusFlag;
+      $attrs[$flag] = $value;
+      $this->$flag = $value;
+      $ldap->modify($attrs);
+      show_ldap_error($ldap->get_error());
+    }
+  }
+
+
+  function check(){ return array();}
+  function save_object()
+  {
+    plugin::save_object();  
+  }
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>
diff --git a/plugins/admin/systems/ServerService/class_ServerService.inc b/plugins/admin/systems/ServerService/class_ServerService.inc
new file mode 100644 (file)
index 0000000..9f9747a
--- /dev/null
@@ -0,0 +1,305 @@
+<?php
+
+define("START_SERVICE",1);
+define("STOP_SERVICE",2);
+define("RESET_SERVICE",3);
+
+define("SERVICE_STOPPED","stopped");
+define("SERVICE_STARTED","started");
+define("SERVICE_RESETTED","resetted");
+
+define("ALL_SERVICES",100);
+
+class ServerService extends plugin
+{
+  /* CLI vars */
+  var $cli_summary      = "Manage server services";
+  var $cli_description  = "Managing services by adding,removing and configuring services. Allows to start/stop used services.";
+  var $cli_parameters   = array("config"=>"Config object" , "dn"=>"Object dn");
+
+  /* attribute list for save action */
+  var $ignore_account   = TRUE;
+  var $attributes       = array();
+  var $objectclasses    = array();
+
+  var $divList          = NULL;
+  var $dialog           = NULL;       // Contains dialog object if a dialog is opened 
+
+  var $plugins          = array();
+  var $pluign_names     = array();
+
+  var $current          = "";
+  var $backup           = NULL;
+  var $acl              ;
+
+  function ServerService ($config, $dn)
+  {
+    plugin::plugin($config);
+    $this->dn= $dn;
+    $ui= get_userinfo();
+    $this->acl= get_permissions ($ui->dn, $ui->subtreeACL);
+
+    foreach ($config->data['TABS']['SERVERSERVICE'] as $plug){
+      $name= $plug['CLASS'];
+      $this->plugin_names[]= $name;
+      $this->plugins[$name]= new $name($config, $dn);
+      $this->plugins[$name]->acl= get_module_permission($this->acl, "$name", $ui->dn);
+    }
+    
+    $this->divList = new divListSystemService($config,$this);
+       }
+
+
+  function execute()
+  {
+    /* Variable initialisation */  
+    $s_action = "";
+    $s_entry  = "";
+
+    /* Walk through posts and check if there are some introductions for us */
+    $PossiblePosts = array("addNewService"  => "", 
+                           "startServices"  => "",
+                           "stopServices"   => "",
+                           "resetServices"  => "",
+                           "removeServices" => "",
+
+                           "StartSingleService"  => "/^StartSingleService_(.*)_[xy]$/",
+                           "StopSingleService"   => "/^StopSingleService_(.*)_[xy]$/",
+                           "ResetSingleService"  => "/^ResetSingleService_(.*)_[xy]$/",
+                           "RemoveSingleService" => "/^RemoveSingleService_(.*)_[xy]$/",
+                           "EditSingleService"   => "/^EditSingleService_(.*)_[xy]$/");
+
+  
+    $once = true;
+    foreach($_POST as $name => $value){
+      foreach($PossiblePosts as $pregCheck => $idPreg) {
+        if(preg_match("/^".$pregCheck."/",$name) && $once){
+          $once     = false;
+          $s_action = $pregCheck;
+          
+          if(!empty($idPreg)){
+            $s_entry = preg_replace($idPreg,"\\1",$name);
+          }
+        }
+      }
+    }
+
+
+    /* Handle state changes for services */
+    $map =  array( "  startServices"          => array("type" => START_SERVICE , "service" => ALL_SERVICES),
+                      "stopServices"          => array("type" => STOP_SERVICE  , "service" => ALL_SERVICES),
+                      "resetServices"         => array("type" => RESET_SERVICE , "service" => ALL_SERVICES),
+                      "StartSingleService"    => array("type" => START_SERVICE , "service" => $s_entry),
+                      "StopSingleService"     => array("type" => STOP_SERVICE , "service" => $s_entry),
+                      "ResetSingleService"    => array("type" => RESET_SERVICE , "service" => $s_entry));
+    if(isset($map[$s_action])){
+      $type     = $map[$s_action]['type'];
+      $service  = $map[$s_action]['service'];
+      $this->ServiceStatusUpdate($type,$service);
+    }
+
+
+    /* Open service add dialog */
+    if($s_action == "addNewService"){
+      $this->dialog = new ServiceAddDialog($this->config,$this->dn,$this);
+    }
+
+
+    /* Remove service */
+    if($s_action == "RemoveSingleService"){
+      $this->plugins[$s_entry]->is_account= false;
+      $this->plugins[$s_entry] = NULL;
+      $this->plugins[$s_entry] = new $s_entry($this->config,$this->dn);
+      $this->plguins[$s_entry]->acl = $this->acl;
+      $this->plugins[$s_entry]->is_account = false;
+    }
+
+
+    /* Edit a service and make a backup from all attributes, 
+       to be able to restore old values after aborting dialog */ 
+    if($s_action == "EditSingleService"){
+      $this->backup   = get_object_vars($this->plugins[$s_entry]);
+      $this->dialog   = $this->plugins[$s_entry];
+      $this->current  = $s_entry;
+    }
+
+   
+    /* Abort service add */
+    if(isset($_POST['CancelServiceAdd'])){
+      $this->dialog   = NULL;
+      $this->backup   = NULL;
+      $this->current  = "";
+    }
+
+    /* Abort dialog 
+       Restore vars with values before editing */
+    if(isset($_POST['CancelService'])){
+      foreach($this->backup as $name => $value){
+        $this->plugins[$this->current]->$name = $value;
+      }
+      $this->dialog   = NULL;
+      $this->backup   = NULL;
+      $this->current  = ""; 
+    }
+  
+
+    /* Abort dialog */
+    if(isset($_POST['SaveService'])){
+
+      $msgs = $this->dialog->check();
+      if(count($msgs)){
+        foreach($msgs as $msg){
+          print_red($msg);
+        }
+      }else{
+        $this->plugins[$this->current] = $this->dialog;
+        $this->current = "";
+        $this->dialog = NULL;
+        $this->backup = NULL;
+      }
+    }
+
+
+    /* Abort dialog */
+    if(isset($_POST['SaveServiceAdd'])){
+      $serv = $_POST['ServiceName'];    
+      $this->plugins[$serv]->is_account = true;
+      $this->dialog  = $this->plugins[$serv];
+      $this->current = $serv;
+    }
+
+
+    /* There is currently a subdialog open, display this dialog */
+    if($this->dialog != NULL){
+      $this->dialog->save_object();
+      return($this->dialog->execute());
+    }
+
+
+    /* Dispaly services overview */
+    $this->divList->execute();
+    $list = array();
+    foreach($this->plugins as $name => $obj){
+      if($obj->is_account){
+        $list[$name] = $obj->getListEntry(); 
+      }
+    }
+    $this->divList -> setEntries($list);
+    return($this->divList->Draw());
+  }
+
+
+  /* Get all used services 
+      CLASSNAME => _($this->plugins[*]->DisplayName);   */
+  function getAllUsedServices()
+  {
+    $ret = array();
+    foreach($this->plugins as $name => $obj){
+      if($obj->is_account){
+        if(isset($obj->DisplayName)){
+          $ret[$name] = $obj->DisplayName;
+        }else{
+          $ret[$name] = $name;
+        }
+      }
+    }
+    return($ret);
+  }
+
+
+  /* Get all unused services 
+      CLASSNAME => _($this->plugins[*]->DisplayName);  */
+  function getAllUnusedServices()
+  {
+    $tmp = $this->getAllUsedServices();
+    $pool_of_ocs =array();
+    foreach($tmp as $name => $value){
+      if(isset($this->plugins[$name]->conflicts)){
+        $pool_of_ocs = array_merge($pool_of_ocs,$this->plugins[$name]->conflicts);
+      }
+    }
+   
+    $this->plugins['goMailServer']->is_acount= true;
+    $ret = array();
+    foreach($this->plugins as $name => $obj){
+
+      /* Skip all pluigns that will lead into conflicts */
+      $skip = false;
+      if(isset($obj->conflicts)){
+        foreach($obj->conflicts as $oc){
+          if(in_array_ics($oc,$pool_of_ocs)){
+            $skip = true;
+          }
+        }
+      }
+      if(!$skip){
+        if(isset($obj->DisplayName)){
+          $ret[$name] = $obj->DisplayName;
+        }else{
+          $ret[$name] = $name;
+        }
+      }
+    }
+    return($ret);
+  }
+  /* This function sets the status var for each used 
+     service && calls an external hook if specified in gosa.conf*/
+  function ServiceStatusUpdate($method , $service)
+  {
+    $action = "";
+    if($method == START_SERVICE){
+      $action = SERVICE_STARTED;
+    }elseif($method== STOP_SERVICE){
+      $action = SERVICE_STOPPED;
+    }elseif($method == RESET_SERVICE){
+      $action = SERVICE_RESETTED;
+    }else{
+      print_red(sprintf(_("The specified method '%s' can't executed for services."),$action));
+      return;
+    }
+    
+    if($service == ALL_SERVICES){
+      foreach($this->plugins as $name => $obj){
+        $this->plugins[$name]->setStatus($action);
+      }
+    }else{
+      $this->plugins[$service]->setStatus($action);
+    }
+  }
+
+
+  function check()
+  {
+    $message = plugin::check();
+    return $message;
+  }
+
+
+  function save_object()
+  {
+    foreach($this->plugins as $name => $obj){
+      if($obj->is_account){
+        $this->plugins[$name]->save_object();
+      }
+    }
+  }
+
+  function save()
+  {
+    foreach($this->plugins as $name => $obj){
+      if($this->plugins[$name]->is_account){
+        $this->plugins[$name]->save();
+      }else{
+        $this->plugins[$name]->remove_from_parent();
+      }
+    }
+  }
+  
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>
diff --git a/plugins/admin/systems/ServerService/class_ServiceAddDialog.inc b/plugins/admin/systems/ServerService/class_ServiceAddDialog.inc
new file mode 100644 (file)
index 0000000..a5a284e
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+class ServiceAddDialog extends plugin{
+
+  var $cli_summary      = "This dialog is used to add services";
+  var $cli_description  = "Some longer text\nfor help";
+  var $cli_parameters   = array("config"=>"Config object" , "dn"=>"Object dn");
+
+  /* This plugin does not have any ocs */
+  var $objectclasses    = array();
+  var $parent           = NULL;
+
+  function ServiceAddDialog($config,$dn,$parent)
+  {
+    plugin::plugin($config);
+    $this->parent = $parent;
+  }
+
+  function execute()
+  {
+    $smarty = get_smarty();
+    $smarty->assign("Services",$this->parent->getAllUnusedServices());
+    return($smarty->fetch(get_template_path("ServiceAddDialog.tpl", TRUE,dirname(__FILE__))));
+ }
+
+  function check(){ return array();}
+  function save_object(){;}
+  function save(){}
+
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>
diff --git a/plugins/admin/systems/ServerService/class_divListSystem.inc b/plugins/admin/systems/ServerService/class_divListSystem.inc
new file mode 100644 (file)
index 0000000..8fdac79
--- /dev/null
@@ -0,0 +1,127 @@
+<?php
+
+class divListSystemService extends MultiSelectWindow
+{
+  /* CheckBoxes, to change default values modify $this->AddCheckBox */
+  var $parent             ;
+  var $ui                 ;
+
+  function divListSystemService ($config,$parent)
+  {
+    MultiSelectWindow::MultiSelectWindow($config,"SystemService");
+    
+    $this->parent       = $parent;
+    $this->ui           = get_userinfo();
+
+    /* Set list strings */
+    $this->SetTitle(_("Installed services"));
+    $this->SetSummary(_("Installed services"));
+
+    /* Result page will look like a headpage */
+    $this->SetHeadpageMode();
+    $this->SetInformation(_("This menu allows you to add, remove and configure the properties of a specific service."));
+
+    /* Disable buttonsm */
+    $this->EnableCloseButton(false);
+    $this->EnableSaveButton (false);
+
+    /* set Page header */
+    $this->AddHeader(array("string"=>"&nbsp;","attach"=>"style='width:20px;'"));
+    $this->AddHeader(array("string"=>_("Service name")));
+    $this->AddHeader(array("string"=>_("Actions"),"attach"=>"style='width:100px;border-right:0px;'"));
+    $this->HideFilterPart();
+    $this->SetHeight(500);
+  }
+
+  function GenHeader()
+  {
+    /* Prepare departments,
+       which are shown in the listbox on top of the listbox
+     */
+    $options= "";
+    foreach ($this->config->idepartments as $key => $value){
+      if ($this->selectedBase == $key){
+        $options.= "<option selected='selected' value='$key'>$value</option>";
+      } else {
+        $options.= "<option value='$key'>$value</option>";
+      }
+    }
+    $listhead = "<div style='background:#F0F0F9;padding:5px;'>".
+    " <input class='center' type='image' align='middle' src='images/select_new_server.png' class='center' 
+        name='addNewService' alt='"._("Add service")."' title='"._("Add new service")."'>&nbsp;".
+    " <input class='center' type='image' align='middle' src='images/status_start_all.png' class='center'
+        name='startServices' alt='"._("Start all")."' title='"._("Start all services")."'>&nbsp;".
+    " <input class='center' type='image' align='middle' src='images/status_stop_all.png'  class='center'   
+        name='stopServices' alt='"._("Stop service")."' title='"._("Stop all services")."'>&nbsp;".
+    " <input class='center' type='image' align='middle' src='images/status_restart_all.png'    class='center'
+        name='resetServices' alt='"._("Reset service")."' title='"._("Reset all services")."'>&nbsp;".
+    "</div>";
+    $this->SetListHeader($listhead);
+  }
+
+  function execute()
+  {
+    $this->ClearElementsList();
+    $this->GenHeader();
+  }
+
+  function setEntries($list)
+  {
+    foreach($list as $name => $entry){
+      switch($entry['Status']){
+        case ''      : $str ="";break;
+        case SERVICE_STOPPED  : $str ="<img src='images/status_stopped.png' title='"._("Stopped")."'>"; break;
+        case SERVICE_STARTED  : $str ="<img src='images/status_running.png' title='"._("Started")."'>"; break;
+        case SERVICE_RESETTED : $str ="<img src='images/status_restarting.png' title='"._("Restarting")."' alt='R'>"; break;
+        default: $str= "<img src='images/select_user.png' alt='".$entry['Status']."' title='"._("User status")." : ".$entry['Status']."'>";
+      }
+
+      $field1 = array("string" => $str ,"attach" => "style='width:20px;'");
+      $field2 = array("string" => $entry['Message'] );
+
+      $actions ="";
+      if($entry['AllowStart']){
+        $actions .= "&nbsp;<input type='image' name='StartSingleService_".$name."' src='images/status_start.png'>";
+      }else{
+        $actions .= "&nbsp;<img src='images/empty' width='16' alt=''>";
+      }
+      if($entry['AllowStart']){
+        $actions .= "&nbsp;<input type='image' name='StopSingleService_".$name."' src='images/status_stop.png'>";
+      }else{
+        $actions .= "&nbsp;<img src='images/empty' width='16' alt=''>";
+      }
+      if($entry['AllowStart']){
+        $actions .= "&nbsp;<input type='image' name='ResetSingleService_".$name."' src='images/status_restart.png'>";
+      }else{
+        $actions .= "&nbsp;<img src='images/empty' width='16' alt=''>";
+      }
+      if($entry['AllowEdit']){
+        $actions .= "&nbsp;<input type='image' name='EditSingleService_".$name."' src='images/edit.png'>";
+      }else{
+        $actions .= "&nbsp;<img src='images/empty' width='16' alt=''>";
+      }
+      if($entry['AllowRemove']){
+        $actions .= "&nbsp;<input type='image' name='RemoveSingleService_".$name."' src='images/edittrash.png'>";
+      }else{
+        $actions .= "&nbsp;<img src='images/empty' width='16' alt=''>";
+      }
+
+      $field3 = array("string" => $actions ,"attach" => "style='width:100px;border-right:0px;'");
+      $this->AddElement(array($field1,$field2,$field3));
+    }
+  }
+
+  function Save()
+  {
+    MultiSelectWindow :: Save();  
+  }
+
+  function save_object()
+  {
+    /* Save automatic created POSTs like regex, checkboxes */
+    MultiSelectWindow :: save_object();   
+  }
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>
diff --git a/plugins/admin/systems/ServerService/class_goImapServer.inc b/plugins/admin/systems/ServerService/class_goImapServer.inc
new file mode 100644 (file)
index 0000000..a8ca0e0
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+
+class goImapServer extends plugin{
+       
+  var $cli_summary      = "This pluign is used within the ServerService Pluign \nand indicates that this server supports mailqueue listings and so on.";
+  var $cli_description  = "Some longer text\nfor help";
+  var $cli_parameters   = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+
+  /* This plugin only writes its objectClass */
+  var $objectclasses    = array("goImapServer");
+  
+  /* This class can't be assigned twice so it conflicts with itsself */
+  var $conflicts        = array("goImapServer");
+
+  var $DisplayName      = "";
+  var $dn               = NULL;
+  var $StatusFlag       = "goImapServerStatus";
+  var $attributes       = array("goImapServerStatus",
+                                "goImapName","goImapConnect","goImapAdmin","goImapPassword",
+                                "goImapSieveServer","goImapSievePort",
+                                "cyrusImap","cyrusImapSSL","cyrusPop3","cyrusPop3SSL");
+
+  var $cn;
+
+  var $goImapName           = "";
+  var $goImapConnect        = "";
+  var $goImapAdmin          = "";
+  var $goImapPassword       = "";
+  
+  var $goImapSieveServer    = "";
+  var $goImapSievePort      = "";
+  
+  var $goImapServerStatus   = "";
+  
+  var $cyrusImap            = false;
+  var $cyrusImapSSL         = false;
+  var $cyrusPop3            = false;
+  var $cyrusPop3SSL         = false;
+
+  var $acl; 
+
+  var $Actions              = array();
+  function goImapServer($config,$dn)
+  {
+    plugin::plugin($config,$dn);
+  
+    $this->DisplayName = _("Cyrus service");
+
+    $this->Actions = array( SERVICE_STOPPED=>SERVICE_STOPPED,
+                            SERVICE_STARTED => SERVICE_STARTED,
+                            SERVICE_RESETTED=>SERVICE_RESETTED,
+                            "repair_database"=>_("Repair database"));
+    
+  }
+
+  function execute()
+  { 
+    $smarty = get_smarty();
+  
+    /* set new status */
+    if(isset($_POST['ExecAction'])){
+      if(isset($this->Actions[$_POST['action']])){
+        $this->setStatus($_POST['action']);
+      }
+    }
+
+    foreach($this->attributes as $attr){
+      $smarty->assign($attr,$this->$attr);  
+      $smarty->assign($attr."ACL",chkacl($this->acl,$attr));  
+    }
+    $smarty->assign("Actions",$this->Actions);
+    return($smarty->fetch(get_template_path("goImapServer.tpl",TRUE,dirname(__FILE__))));
+  }
+
+  function getListEntry()
+  {
+    $flag = $this->StatusFlag;
+    $fields['Status']     = $this->$flag;
+    $fields['Message']    = _("Cyrus service");
+    $fields['AllowStart'] = true;
+    $fields['AllowStop']  = true;
+    $fields['AllowReset'] = true;
+    $fields['AllowRemove']= true;
+    $fields['AllowEdit']  = true;
+    return($fields);
+  }
+
+  function remove_from_parent()
+  {
+    plugin::remove_from_parent();
+    /* Check if this is a new entry ... add/modify */
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cat($this->dn,array("objectClass"));
+    if($ldap->count()){
+      $ldap->cd($this->dn);
+      $ldap->modify($this->attrs);
+    }else{
+      $ldap->cd($this->dn);
+      $ldap->add($this->attrs);
+    }
+    show_ldap_error($ldap->get_error());
+  }
+
+  function save()
+  {
+    $this->goImapSieveServer = $this->cn;
+    plugin::save();
+    /* Check if this is a new entry ... add/modify */
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cat($this->dn,array("objectClass"));
+    if($ldap->count()){
+      $ldap->cd($this->dn);
+      $ldap->modify($this->attrs);
+    }else{
+      $ldap->cd($this->dn);
+      $ldap->add($this->attrs);
+    }
+    show_ldap_error($ldap->get_error());
+  }
+
+
+   /* Directly save new status flag */
+  function setStatus($value)
+  {
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->dn);
+    $ldap->cat($this->dn,array("objectClass","goImapName","goImapConnect","goImapAdmin","goImapPassword"));
+
+    if($ldap->count()){
+
+      $attrs =array();
+      foreach(array("goImapName","goImapConnect","goImapAdmin","goImapPassword") as $required){
+        if(!isset($attrs[$required])){
+          if(empty($this->$required)){
+            print_red(_("Can't set new status while there are blank option within generic configuration part."));
+            return;
+          }else{
+            $attrs[$required] = $this->$required;
+          }
+        }else{
+          $attrs[$required] = $attrs[$required][0];
+        }
+      }
+
+      $tmp = $ldap->fetch();
+      for($i = 0; $i < $tmp['objectClass']['count']; $i ++){
+        $attrs['objectClass'][] = $tmp['objectClass'][$i];
+      }
+      if(!in_array("goImapServer",$attrs['objectClass'])){
+        $attrs['objectClass'][] = "goImapServer";
+      }
+      $flag = $this->StatusFlag;
+      $attrs[$flag] = $value;
+      $this->$flag = $value;
+      $ldap->modify($attrs);
+      show_ldap_error($ldap->get_error());
+    }
+  }
+
+
+  function check()
+  { 
+    $message = plugin::check();
+    if(empty($this->goImapName)){
+      $message[] =_("Please specify a server identifier.");
+    }  
+    if(empty($this->goImapConnect)){
+      $message[] =_("Please specify a connect url.");
+    }  
+    if(empty($this->goImapAdmin)){
+      $message[] =_("Please specify an admin user.");
+    }  
+    if(empty($this->goImapPassword)){
+      $message[] =_("Please specify a password for the admin user.");
+    } 
+
+    /* Check connect string */
+    if (!preg_match('/^\{[^:]+:[0-9]+.*\}$/', $this->goImapConnect)){
+      $message[]= sprintf(_("The imap connect string needs to be in the form '%s'."),
+          '{server-name:port/options}');
+    }
+    if (!preg_match('/^[0-9]+$/', $this->goImapSievePort)){
+      $message[]= _("The sieve port needs to be numeric.");
+    }
+    return ($message);
+  }
+
+
+  function save_object()
+  {
+    if(isset($_POST['goImapServerPosted'])){
+      plugin::save_object(); 
+
+      foreach(array("cyrusImap","cyrusImapSSL","cyrusPop3","cyrusPop3SSL") as $checkbox) { 
+        if(!isset($_POST[$checkbox])){
+          $this->$checkbox = false;
+        }else{
+          $this->$checkbox = true;
+        }
+      }
+    }
+  }
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>
diff --git a/plugins/admin/systems/ServerService/class_goMailServer.inc b/plugins/admin/systems/ServerService/class_goMailServer.inc
new file mode 100644 (file)
index 0000000..168b48a
--- /dev/null
@@ -0,0 +1,689 @@
+<?php
+
+class goMailServer extends plugin{
+       
+  var $cli_summary      = "This pluign is used within the ServerService Pluign \nand indicates that this server supports mailqueue listings and so on.";
+  var $cli_description  = "Some longer text\nfor help";
+  var $cli_parameters   = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+
+  /* This plugin only writes its objectClass */
+  var $objectclasses    = array("goMailServer");
+
+  /* This class can't be assigned twice so it conflicts with itsself */
+  var $conflicts        = array("goMailServer");
+
+  var $DisplayName      = "";
+  var $dn               = NULL;
+  var $StatusFlag       = "goMailServerStatus";
+  var $attributes       = array("goMailServerStatus","description","postfixHeaderSizeLimit",
+      "postfixMailboxSizeLimit","postfixMessageSizeLimit",
+      "postfixMyDestinations","postfixMyDomain","postfixMyhostname",
+      "postfixMyNetworks","postfixRelayhost","postfixTransportTable",
+      "postfixSenderRestrictions","postfixRecipientRestrictions");
+
+  var $goMailServerStatus               ;
+  var $postfixHeaderSizeLimit           = 0;
+  var $postfixMailboxSizeLimit          = 0;
+  var $postfixMessageSizeLimit          = 0;
+  var $postfixMyDestinations            = array();
+  var $postfixMyDomain                  = "";
+  var $postfixMyhostname                = "";
+  var $postfixMyNetworks                = array();
+  var $postfixRelayhost                 = "";
+  var $postfixTransportTable            = array();
+  var $postfixSenderRestrictions        = array();
+  var $postfixRecipientRestrictions     = array();
+  var $description                      = "";
+  var $RestrictionFilters               = array();
+  var $TransportProtocols               = array(); 
+  var $Actions                          = array();
+
+  function goMailServer($config,$dn)
+  {
+    plugin::plugin($config,$dn);
+    $this->DisplayName = _("Postfix service");
+
+    $this->Actions = array( SERVICE_STOPPED=>SERVICE_STOPPED,
+                            SERVICE_STARTED => SERVICE_STARTED,
+                            SERVICE_RESETTED=>SERVICE_RESETTED, 
+                            "mailqueue"=>"mailqueue");
+
+
+    /* Fill  RestrictionFilters   TransportProtocols  from external hooks */
+    $str = $this->config->data['TABS']['SERVERSERVICE'];
+    $this->TransportProtocols =array("smtp"=>"SMTP");
+    $this->RestrictionFilters = array("FILTER"=>"FILTER"); 
+    foreach(array("ADDITIONALRESTRICTIONFILTERS"=>"RestrictionFilters",
+            "ADDITIONALPROTOCOLLS"        =>"TransportProtocols") as $file => $var){
+      $file = search_config($this->config->data,"goMailServer",$file);
+      if((isset($file)) && is_readable($file)){
+        $tmp = file_get_contents($file);
+        $tmp2= split("\n",$tmp);
+        foreach($tmp2 as $entry){
+          if(empty($entry)) continue;
+          if(preg_match("/:/",$entry)){
+            $tmp3 = split(":",$entry);
+            $r = $this->$var;
+            $r[$tmp3[0]]=$tmp3[1];
+            $this->$var = $r;
+          }else{
+            $r = $this->$var;
+            $r[$entry] =$entry;
+            $this->$var = $r;
+          }
+        }
+      }
+    }
+
+
+    /* Get postfix my networks */
+    $this->postfixMyNetworks = array();
+    if(isset($this->attrs['postfixMyNetworks'][0])){
+      $tmp = split(",",$this->attrs['postfixMyNetworks'][0]);
+      foreach($tmp as $str){
+        if(!empty($str)){
+          $this->postfixMyNetworks[base64_encode($str)] = $str;
+        }
+      }
+    }
+
+
+    /* Create full name */
+    if(isset($this->attrs['postfixMyDomain'][0])){
+      $this->postfixMyhostname .= ".".$this->attrs['postfixMyDomain'][0];
+    }
+  
+
+    /* Get postfix my domains */
+    $this->postfixMyDestinations = array(); 
+    if(isset($this->attrs['postfixMyDestinations'][0])){
+      unset($this->attrs['postfixMyDestinations']['count']);
+      foreach($this->attrs['postfixMyDestinations'] as $str){
+        $this->postfixMyDestinations[base64_encode($str)] = $str;
+      }
+    }
+
+
+    /* Get transport tables */
+    $this->postfixTransportTable = array();
+    if(isset($this->attrs['postfixTransportTable'])){
+      $tmp = array();
+      unset($this->attrs['postfixTransportTable']['count']);
+      foreach($this->attrs['postfixTransportTable'] as $entry){ 
+        $nr  = preg_replace("/:.*$/","",$entry);
+        $rest= trim(preg_replace("/^[^:]+:/","",$entry));
+        $src = preg_replace("/ .*$/","",$rest);
+        $rest= preg_replace("/^[^ ]+ /","",$rest);
+        $dst = preg_replace("/^.*:/","",$rest); 
+        $prt = preg_replace("/:.*$/","",$rest);
+      
+        $tmp[$nr]['src'] = $src;
+        $tmp[$nr]['dst'] = $dst;
+        $tmp[$nr]['prt'] = $prt;
+        
+      }
+      ksort($tmp);
+      foreach($tmp as $entry){
+        $this->postfixTransportTable[] = $entry;
+      }
+    }
+   
+
+    /* Get sender restrictions */
+    $this->postfixSenderRestrictions = array();
+    if(isset($this->attrs['postfixSenderRestrictions'])){
+      unset($this->attrs['postfixSenderRestrictions']['count']);
+      foreach($this->attrs['postfixSenderRestrictions'] as $entry){
+        $nr  = preg_replace("/:.*$/","",$entry);
+        $rest= trim(preg_replace("/^[^:]+:/","",$entry));
+        $src = preg_replace("/ .*$/","",$rest);
+        $rest= preg_replace("/^[^ ]+ /","",$rest);
+        $dst = preg_replace("/^.* /","",$rest);
+        $prt = preg_replace("/ .*$/","",$rest);
+        $tmp[$nr]['src'] = $src;
+        $tmp[$nr]['dst'] = $dst;
+        $tmp[$nr]['filter'] = $prt;
+      }
+      ksort($tmp);
+      foreach($tmp as $entry){
+        $this->postfixSenderRestrictions[] = $entry;
+      }
+    }
+
+    /* Get sender restrictions */
+    $this->postfixRecipientRestrictions = array();
+    if(isset($this->attrs['postfixRecipientRestrictions'])){
+      unset($this->attrs['postfixRecipientRestrictions']['count']);
+      foreach($this->attrs['postfixRecipientRestrictions'] as $entry){
+        $nr  = preg_replace("/:.*$/","",$entry);
+        $rest= trim(preg_replace("/^[^:]+:/","",$entry));
+        $src = preg_replace("/ .*$/","",$rest);
+        $rest= preg_replace("/^[^ ]+ /","",$rest);
+        $dst = preg_replace("/^.* /","",$rest);
+        $prt = preg_replace("/ .*$/","",$rest);
+        $tmp[$nr]['src'] = $src;
+        $tmp[$nr]['dst'] = $dst;
+        $tmp[$nr]['filter'] = $prt;
+      }
+      ksort($tmp);
+      foreach($tmp as $entry){
+        $this->postfixRecipientRestrictions[] = $entry;
+      }
+    }
+
+  }
+
+  function execute()
+  { 
+    $smarty   = get_smarty();
+    $delAr    = array( "TranslationDel_"=>"TranslationDel",
+                    "SenderRestrictDel_"=>"SenderRestrictDel",
+                    "RecipientRestrictDel_"=>"RecipientRestrictDel");
+   
+    $once     = true;
+    $s_action = "";
+    $s_entry  = "";
+  
+    /* Check posts for some intruductions */
+    foreach($_POST as $name => $value){
+      foreach($delAr as $preg => $type){
+        if((preg_match("/^".$preg."/",$name)) && ($once)){
+          $once = false;
+          $s_action = $type; 
+          $s_entry = preg_replace("/^".$preg."/","",$name);
+          $s_entry = preg_replace("/_[xy]$/","",$s_entry);
+        }
+      }
+  
+
+      if(preg_match("/^TranslationUp_/",$name) && $once){
+        $once = false;
+        $key = preg_replace("/^TranslationUp_/","",$name);
+        $key = preg_replace("/_[xy]$/","",$key);
+        $this->postfixTransportTable = $this->ArrayUp($key,$this->postfixTransportTable) ;
+      }
+      if(preg_match("/^TranslationDown_/",$name) && $once){
+        $once = false;
+        $key = preg_replace("/^TranslationDown_/","",$name);
+        $key = preg_replace("/_[xy]$/","",$key);
+        $this->postfixTransportTable = $this->ArrayDown($key,$this->postfixTransportTable) ;
+      }
+      if(preg_match("/^SenderRestrictUp_/",$name) && $once){
+        $once = false;
+        $key = preg_replace("/^SenderRestrictUp_/","",$name);
+        $key = preg_replace("/_[xy]$/","",$key);
+        $this->postfixSenderRestrictions = $this->ArrayUp($key,$this->postfixSenderRestrictions) ;
+      }
+      if(preg_match("/^SenderRestrictDown_/",$name) && $once){
+        $once = false;
+        $key = preg_replace("/^SenderRestrictDown_/","",$name);
+        $key = preg_replace("/_[xy]$/","",$key);
+        $this->postfixSenderRestrictions = $this->ArrayDown($key,$this->postfixSenderRestrictions) ;
+      }
+      if(preg_match("/^RecipientRestrictUp_/",$name) && $once){
+        $once = false;
+        $key = preg_replace("/^RecipientRestrictUp_/","",$name);
+        $key = preg_replace("/_[xy]$/","",$key);
+        $this->postfixRecipientRestrictions = $this->ArrayUp($key,$this->postfixRecipientRestrictions) ;
+      }
+      if(preg_match("/^RecipientRestrictDown_/",$name) && $once){
+        $once = false;
+        $key = preg_replace("/^RecipientRestrictDown_/","",$name);
+        $key = preg_replace("/_[xy]$/","",$key);
+        $this->postfixRecipientRestrictions = $this->ArrayDown($key,$this->postfixRecipientRestrictions) ;
+      }
+    }
+
+
+    /* Add delete my network entry */
+    if((isset($_POST['AddpostfixMyNetworks'])) && (!empty($_POST['NewString_postfixMyNetworks']))){
+      $str = $_POST['NewString_postfixMyNetworks'];
+      $this->postfixMyNetworks[base64_encode($str)] = $str;
+    }
+
+    if((isset($_POST['DelpostfixMyNetworks'])) && (count($_POST['Select_postfixMyNetworks']))){
+      foreach($_POST['Select_postfixMyNetworks'] as $str ){
+        unset($this->postfixMyNetworks[$str]);
+      }
+    }
+
+
+    /* Add delete my domain entry */
+    if((isset($_POST['AddpostfixMyDestinations'])) && (!empty($_POST['NewString_postfixMyDestinations']))){
+      $str = $_POST['NewString_postfixMyDestinations'];
+      $this->postfixMyDestinations[base64_encode($str)] = $str;
+    }
+
+    if((isset($_POST['DelpostfixMyDestinations'])) && (count($_POST['Select_postfixMyDestinations']))){
+      foreach($_POST['Select_postfixMyDestinations'] as $str ){
+        unset($this->postfixMyDestinations[$str]);
+      }
+    }
+
+
+    /* Add sender restriction */
+    if(($s_action == "SenderRestrictDel") && (isset($this->postfixSenderRestrictions[$s_entry]))){
+      unset($this->postfixSenderRestrictions[$s_entry]);
+    }
+
+    if(isset($_POST['AddpostfixSenderRestrictions'])){
+      $src      = $_POST['Source_postfixSenderRestrictions'];
+      $dst      = $_POST['Destination_postfixSenderRestrictions'];
+      $Filter   = $_POST['SenderRestrictionFilter'];
+      $tmp['src']     = $src;
+      $tmp['dst']     = $dst;
+      $tmp['filter']  = $Filter;
+      $this->postfixSenderRestrictions[] = $tmp;
+    }
+
+
+    /* Add sender restriction */
+    if(($s_action == "RecipientRestrictDel") && (isset($this->postfixRecipientRestrictions[$s_entry]))){
+      unset($this->postfixRecipientRestrictions[$s_entry]);
+    }
+
+    if(isset($_POST['AddpostfixRecipientRestrictions'])){
+      $src      = $_POST['Source_postfixRecipientRestrictions'];
+      $dst      = $_POST['Destination_postfixRecipientRestrictions'];
+      $Filter   = $_POST['RecipientRestrictionFilter'];
+      $tmp['src']     = $src;
+      $tmp['dst']     = $dst;
+      $tmp['filter']  = $Filter;
+      $this->postfixRecipientRestrictions[] = $tmp;
+    }
+
+
+    /* Handle transports */
+    if(($s_action == "TranslationDel") && (isset($this->postfixTransportTable[$s_entry]))){
+      unset($this->postfixTransportTable[$s_entry]);
+    }
+    
+    if(isset($_POST['AddpostfixTransportTable'])){
+      $src = trim($_POST['Source_postfixTransportTable']);  
+      $dst = trim($_POST['Destination_postfixTransportTable']);    
+      $prt = trim($_POST['TransportProtocol']);
+
+      if((!empty($src)) && (!empty($dst))){
+        if(preg_match("/:/",$dst)){
+          $tmp = split("\:",$dst);
+          $port = trim($tmp[1]);
+          $ip   = trim($tmp[0]);
+    
+          if((is_ip($ip)) && (is_numeric($port))){
+            $dst = "[".$ip."]:".$port;
+          }
+        }
+        if(is_ip($dst)){
+          $dst = "[".$dst."]";
+        }
+        $tmp2 ['src'] = $src;
+        $tmp2 ['dst'] = $dst;
+        $tmp2 ['prt'] = $prt;
+
+        $this->postfixTransportTable[] = $tmp2;  
+      } 
+    }
+
+
+    /* Set attributes */
+    foreach($this->attributes as $attr){
+      $smarty->assign($attr,$this->$attr);
+    }
+
+
+    /* Create divList for translation tables */
+    $divTranslation = new divSelectBox("TransportProtocols");
+    $divTranslation->SetHeight(110);
+    foreach($this->postfixTransportTable as $key => $entry){
+      $img = "";
+
+      if($key != 0){
+        $img.= "<input type='image' src='images/sort_up.png' name='TranslationUp_".$key."' class='center'>&nbsp;";      
+      }else{
+        $img.= "<img src='images/empty.png' style='width:10px;'>";
+      }
+      if(($key+1) < count($this->postfixTransportTable)){
+        $img.= "<input type='image' src='images/sort_down.png' name='TranslationDown_".$key."' class='center'>&nbsp;";      
+      }else{
+        $img.= "<img src='images/empty.png' style='width:10px;'>";
+      }
+
+      $img.= "<input type='image' src='images/edittrash.png' name='TranslationDel_".$key."' class='center'>&nbsp;";      
+      $field1 = array("string"=> $entry['src']);
+      $field2 = array("string"=> $entry['dst']);
+      $field3 = array("string"=> $entry['prt'],"attach"=>"style='width:120px;'");
+      $field4 = array("string"=> $img, "attach"=>"style='border-right:0px;width:40px;'");
+      $divTranslation->AddEntry(array($field1,$field2,$field3,$field4,));
+    }
+    $smarty->assign("Div_postfixTransportTable" ,$divTranslation->DrawList());
+
+
+    /* Create divList for sender restrictions */
+    $DivSenderRestrict = new divSelectBox("postfixSenderRestrictions");
+    $DivSenderRestrict->SetHeight(110);
+    foreach($this->postfixSenderRestrictions as $key => $entry){
+      $img ="";
+
+      if($key != 0){
+        $img.= "<input type='image' src='images/sort_up.png' name='SenderRestrictUp_".$key."' class='center'>&nbsp;";      
+      }else{
+        $img.= "<img src='images/empty.png' style='width:10px;'>";
+      }
+      if(($key+1) < count($this->postfixSenderRestrictions)){
+        $img.= "<input type='image' src='images/sort_down.png' name='SenderRestrictDown_".$key."' class='center'>&nbsp;";      
+      }else{
+        $img.= "<img src='images/empty.png' style='width:10px;'>";
+      }
+
+      $img.= "<input type='image' src='images/edittrash.png' name='SenderRestrictDel_".$key."' class='center'>&nbsp;";     
+      $field1 = array("string"=> $entry['src']);
+      $field2 = array("string"=> $entry['dst']);
+      $field3 = array("string"=> $entry['filter'],"attach"=>"style='width:100px;'");
+      $field4 = array("string"=> $img, "attach"=>"style='border-right:0px;width:40px;'");
+      $DivSenderRestrict->AddEntry(array($field1,$field2,$field3,$field4,));
+    }
+    $smarty->assign("Div_postfixSenderRestrictions" ,$DivSenderRestrict->DrawList());
+
+
+    /* Create divList for translation tables */
+    $DivRecipientRestrict = new divSelectBox("postfixRecipientRestrictions");
+    $DivRecipientRestrict->SetHeight(110);
+    foreach($this->postfixRecipientRestrictions as $key => $entry){
+      $img = "";
+      if($key != 0){
+        $img.= "<input type='image' src='images/sort_up.png' name='RecipientRestrictUp_".$key."' class='center'>&nbsp;";      
+      }else{
+        $img.= "<img src='images/empty.png' style='width:10px;'>";
+      }
+      if(($key+1) < count($this->postfixRecipientRestrictions)){
+        $img.= "<input type='image' src='images/sort_down.png' name='RecipientRestrictDown_".$key."' class='center'>&nbsp;";      
+      }else{
+        $img.= "<img src='images/empty.png' style='width:10px;'>";
+      }
+      $img.= "<input type='image' src='images/edittrash.png' name='RecipientRestrictDel_".$key."' class='center'>&nbsp;";      
+      $field1 = array("string"=> $entry['src']);
+      $field2 = array("string"=> $entry['dst']);
+      $field3 = array("string"=> $entry['filter'],"attach"=>"style='width:100px;'");
+      $field4 = array("string"=> $img, "attach"=>"style='border-right:0px;width:40px;'");
+      $DivRecipientRestrict->AddEntry(array($field1,$field2,$field3,$field4,));
+    }
+    $smarty->assign("Div_postfixRecipientRestrictions" ,$DivRecipientRestrict->DrawList());
+
+    
+    /* set new status */
+    if(isset($_POST['ExecAction'])){
+      if(isset($this->Actions[$_POST['action']])){
+        $this->setStatus($_POST['action']);
+      }
+    }
+
+
+    $smarty->assign("TransportProtocols",           $this->TransportProtocols);
+    $smarty->assign("Actions",                      $this->Actions);
+    $smarty->assign("RestrictionFilters",           $this->RestrictionFilters);
+    $smarty->assign("postfixTransportTable" ,       $this->getTransports());
+    $smarty->assign("postfixSenderRestrictions" ,   $this->getSenderRestrictions());
+    $smarty->assign("postfixRecipientRestrictions" ,$this->getRecipientRestrictions());
+
+    return($smarty->fetch(get_template_path("goMailServer.tpl",TRUE,dirname(__FILE__))));
+  }
+
+  /* return transports formated for select box */ 
+  function getTransports()
+  {
+    $ret = array();
+    foreach($this->postfixTransportTable as $key => $vals){
+      $ret[$key] = $vals['src']." -> ".$vals['prt'].":".$vals['dst'];
+    }
+    return($ret);
+  }
+
+
+  /* return sender restriction formated for select box */ 
+  function getSenderRestrictions()
+  {
+    $ret = array();
+    foreach($this->postfixSenderRestrictions as $key => $vals){
+      $ret[$key] = $vals['src']." ".$vals['filter']." ".$vals['dst'];
+    }
+    return($ret);
+  }
+
+
+  /* return recipient restriction formated for select box */ 
+  function getRecipientRestrictions()
+  {
+    $ret = array();
+    foreach($this->postfixRecipientRestrictions as $key => $vals){
+      $ret[$key] = $vals['src']." ".$vals['filter']." ".$vals['dst'];
+    }
+    return($ret);
+  }
+
+
+  /* Return list entry */
+  function getListEntry()
+  {
+    $flag = $this->StatusFlag;
+    $fields['Status']     = $this->$flag;
+    $fields['Message']    = _("Flag server as mail server");
+    $fields['AllowStart'] = true;
+    $fields['AllowStop']  = true;
+    $fields['AllowReset'] = true;
+    $fields['AllowRemove']= true;
+    $fields['AllowEdit']  = true;
+    return($fields);
+  }
+
+
+  function remove_from_parent()
+  {
+    plugin::remove_from_parent();
+    /* Check if this is a new entry ... add/modify */
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cat($this->dn,array("objectClass"));
+    if($ldap->count()){
+      $ldap->cd($this->dn);
+      $ldap->modify($this->attrs);
+    }else{
+      $ldap->cd($this->dn);
+      $ldap->add($this->attrs);
+    }
+    show_ldap_error($ldap->get_error());
+  }
+
+
+  function save()
+  {
+    plugin::save();
+    
+    /* Fix transport table*/
+    $i = 0 ; 
+    $this->attrs['postfixTransportTable'] = array();
+    foreach($this->postfixTransportTable as $key => $entry){
+      $this->attrs['postfixTransportTable'][] = $i.": ".$entry['src']." ".$entry['prt'].":".$entry['dst'];
+      $i ++;
+    }
+
+
+    /* Fix sender restrictions */
+    $i = 0;
+    $this->attrs['postfixSenderRestrictions'] =array();
+    foreach($this->postfixSenderRestrictions as $key => $entry){
+      $this->attrs['postfixSenderRestrictions'][] = $i.": ".$entry['src']." ".$entry['filter']." ".$entry['dst']; 
+      $i ++;  
+    }
+  
+  
+    /* Fix recipient restrictions */
+    $i = 0;
+    $this->attrs['postfixRecipientRestrictions'] =array();
+    foreach($this->postfixRecipientRestrictions as $key => $entry){
+      $this->attrs['postfixRecipientRestrictions'][] = $i.": ".$entry['src']." ".$entry['filter']." ".$entry['dst']; 
+      $i ++;  
+    }
+
+
+    /* Fix mydomains */
+    $this->attrs['postfixMyDestinations']  = array();
+    foreach($this->postfixMyDestinations as $entry){
+      $this->attrs['postfixMyDestinations'][] =$entry;
+    }
+
+
+    /* Fix mydomains */
+    if(count($this->postfixMyNetworks)){
+      $this->attrs['postfixMyNetworks']  = "";
+      foreach($this->postfixMyNetworks as $entry){
+        $this->attrs['postfixMyNetworks'] .=$entry.",";
+      }
+    }else{
+      $this->attrs['postfixMyNetworks']  = array();
+    }
+
+    $this->attrs['postfixMyNetworks'] = preg_replace("/,$/","",$this->attrs['postfixMyNetworks']);
+
+    $this->attrs['postfixMyhostname'] = preg_replace("/\..*$/","",$this->postfixMyhostname);
+    $this->attrs['postfixMyDomain']   = preg_replace("/^[^\.]+\./","",$this->postfixMyhostname);
+    /* Check if this is a new entry ... add/modify */
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cat($this->dn,array("objectClass"));
+    if($ldap->count()){
+      $ldap->cd($this->dn);
+      $ldap->modify($this->attrs);
+    }else{
+      $ldap->cd($this->dn);
+      $ldap->add($this->attrs);
+    }
+    show_ldap_error($ldap->get_error());
+  }
+
+
+  /* Directly save new status flag */
+  function setStatus($value)
+  {
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->dn);
+    $ldap->cat($this->dn,array("objectClass"));
+
+    if($ldap->count()){
+
+      $attrs =array();
+      $tmp = $ldap->fetch();
+      for($i = 0; $i < $tmp['objectClass']['count']; $i ++){
+        $attrs['objectClass'][] = $tmp['objectClass'][$i];
+      }
+      if(!in_array("goMailServer",$attrs['objectClass'])){
+        $attrs['objectClass'][] = "goMailServer";
+      }
+
+      $flag = $this->StatusFlag;
+      $attrs[$flag] = $value;
+      $this->$flag = $value;
+      $ldap->modify($attrs);
+      show_ldap_error($ldap->get_error());
+    }
+  }
+
+
+  function check()
+  { 
+    $message =plugin::check();
+    
+    if(!is_numeric($this->postfixHeaderSizeLimit)){
+      $message[] = _("Please specify a numeric value for header size limit.");
+    }
+
+    if(!is_numeric($this->postfixMailboxSizeLimit)){
+      $message[] = _("Please specify a numeric value for mailbox size limit.");
+    }
+
+    if(!is_numeric($this->postfixMessageSizeLimit)){
+      $message[] = _("Please specify a numeric value for message size limit.");
+    }
+
+    return $message;
+  }
+
+
+  /* Combine new array */
+  function combineArrays($ar0,$ar1,$ar2)
+  {
+    $ret = array();
+    if(is_array($ar0))
+    foreach($ar0 as $ar => $a){
+        $ret[]=$a;
+    }
+    if(is_array($ar1))
+    foreach($ar1 as $ar => $a){
+        $ret[]=$a;
+    }
+    if(is_array($ar2))
+    foreach($ar2 as $ar => $a){
+        $ret[]=$a;
+    }
+    return($ret);
+  }
+
+
+  function getpos($atr,$attrs)
+  {
+    $i = 0;
+    foreach($attrs as $attr => $name)    {
+      $i++;
+      if($attr == $atr){
+        return($i);
+      }
+    }
+
+    return(-1);
+  }
+
+
+  /* TRansports the geiven Arraykey one position up*/
+  function ArrayUp($atr,$attrs)
+  {
+    $ret = $attrs;
+    $pos = $this->getpos($atr,$attrs) ;
+    $cn = count($attrs);
+    if(!(($pos == -1)||($pos == 1))){
+      $before = array_slice($attrs,0,($pos-2));
+      $mitte  = array_reverse(array_slice($attrs,($pos-2),2));
+      $unten  = array_slice($attrs,$pos);
+      $ret = array();
+      $ret = $this->combineArrays($before,$mitte,$unten);
+    }
+    return($ret);
+  }
+
+
+  /* TRansports the geiven Arraykey one position up*/
+  function ArrayDown($atr,$attrs)
+  {
+    $ret = $attrs;
+    $pos = $this->getpos($atr,$attrs) ;
+    $cn = count($attrs);
+    if(!(($pos == -1)||($pos == $cn))){
+      $before = array_slice($attrs,0,($pos-1));
+      $mitte  = array_reverse(array_slice($attrs,($pos-1),2));
+      $unten  = array_slice($attrs,($pos+1));
+      $ret = array();
+      $ret = $this->combineArrays($before,$mitte,$unten);
+    }
+    return($ret);
+  }
+
+
+  function save_object()
+  {
+    plugin::save_object();  
+  }
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>
diff --git a/plugins/admin/systems/ServerService/class_goNtpServer.inc b/plugins/admin/systems/ServerService/class_goNtpServer.inc
new file mode 100644 (file)
index 0000000..dd05d15
--- /dev/null
@@ -0,0 +1,143 @@
+<?php
+
+class goNtpServer extends plugin{
+       
+  var $cli_summary      = "This pluign is used within the ServerService Pluign \nand indicates that this server supports NTP service.";
+  var $cli_description  = "Some longer text\nfor help";
+  var $cli_parameters   = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+
+  /* This plugin only writes its objectClass */
+  var $objectclasses    = array("goNtpServer");
+  var $attributes       = array("goTimeSource","goNtpServerStatus");
+  var $StatusFlag       = "goNtpServerStatus";
+  /* This class can't be assigned twice so it conflicts with itsself */
+  var $conflicts        = array("goNtpServer");
+
+  var $DisplayName      = "";
+  var $dn               = NULL;
+  var $goTimeSource     = array();
+  var $goNtpServerStatus= "";
+  var $acl;
+  function goNtpServer($config,$dn)
+  {
+    plugin::plugin($config,$dn);
+    $this->DisplayName = _("NTP Service");
+    
+    /* Load arrays */
+    $tmp = array();
+    if (isset($this->attrs['goTimeSource'])){
+      for ($i= 0; $i<$this->attrs['goTimeSource']['count']; $i++){
+        $tmp[$this->attrs['goTimeSource'][$i]]= $this->attrs['goTimeSource'][$i];
+      }
+    }
+    $this->goTimeSource= $tmp;
+  }
+
+
+  function execute()
+  { 
+    $smarty = get_smarty(); 
+
+     /* Here we add a new entry  */
+    if(isset($_POST['NewNTPAdd']) && $_POST['NewNTPExport'] != "") {
+      $this->goTimeSource[$_POST['NewNTPExport']]= $_POST['NewNTPExport'];
+      asort($this->goTimeSource);
+    }
+
+    /* Deleting an Entry, is a bit more complicated than adding one*/
+    if(isset($_POST['DelNTPEnt'])) {
+      foreach ($_POST['goTimeSource'] as $entry){
+        if (isset($this->goTimeSource[$entry])){
+          unset($this->goTimeSource[$entry]);
+        }
+      }
+    }
+
+    $smarty->assign("goNtpServerACL",chkacl($this->acl,"goNtpServer")) ;
+    $smarty->assign("goTimeSource" , $this->goTimeSource); 
+    return($smarty->fetch(get_template_path("goNtpServer.tpl",TRUE,dirname(__FILE__))));
+  }
+
+
+  function getListEntry()
+  {
+    $flag = $this->StatusFlag;
+    $fields['Status']      = $this->$flag;
+    $fields['Message']    = _("NTP service");
+    $fields['AllowStart'] = true;
+    $fields['AllowStop']  = true;
+    $fields['AllowReset'] = true;
+    $fields['AllowRemove']= true;
+    $fields['AllowEdit']  = true;
+    return($fields);
+  }
+
+
+  function remove_from_parent()
+  {
+    plugin::remove_from_parent();
+    /* Check if this is a new entry ... add/modify */
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cat($this->dn,array("objectClass"));
+    if($ldap->count()){
+      $ldap->cd($this->dn);
+      $ldap->modify($this->attrs);
+    }else{
+      $ldap->cd($this->dn);
+      $ldap->add($this->attrs);
+    }
+    show_ldap_error($ldap->get_error());
+  }
+
+
+  function save()
+  {
+    if(!$this->is_account) return;
+    plugin::save();
+    /* Check if this is a new entry ... add/modify */
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cat($this->dn,array("objectClass"));
+    if($ldap->count()){
+      $ldap->cd($this->dn);
+      $ldap->modify($this->attrs);
+    }else{
+      $ldap->cd($this->dn);
+      $ldap->add($this->attrs);
+    }
+    show_ldap_error($ldap->get_error());
+  }
+
+
+  /* Directly save new status flag */
+  function setStatus($value)
+  {
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->dn);
+    $ldap->cat($this->dn,array("objectClass"));
+      
+    if($ldap->count()){
+      $attrs =array();
+      $tmp = $ldap->fetch();
+      for($i = 0; $i < $tmp['objectClass']['count']; $i ++){
+        $attrs['objectClass'][] = $tmp['objectClass'][$i];
+      }    
+      if(!in_array("goNtpServer",$attrs['objectClass'])){
+        $attrs['objectClass'][] = "goNtpServer";
+      }
+
+      $flag = $this->StatusFlag;
+      $attrs[$flag] = $value;
+      $this->$flag = $value;
+      $ldap->modify($attrs);
+      show_ldap_error($ldap->get_error());
+    }    
+  }
+  
+  function check(){ return array();}
+  
+function save_object(){;}
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>
diff --git a/plugins/admin/systems/ServerService/contents.tpl b/plugins/admin/systems/ServerService/contents.tpl
new file mode 100644 (file)
index 0000000..001d50d
--- /dev/null
@@ -0,0 +1 @@
+{$Kekse} sind gesund
diff --git a/plugins/admin/systems/ServerService/goImapServer.tpl b/plugins/admin/systems/ServerService/goImapServer.tpl
new file mode 100644 (file)
index 0000000..774cf33
--- /dev/null
@@ -0,0 +1,89 @@
+<b>{t}Generic{/t}</b>
+<br>
+<table width="100%">
+       <tr>
+               <td style='width:50%;'>
+                       <table summary="">
+                               <tr>
+                                       <td>{t}Server identifier{/t}
+                                       </td>
+                                       <td><input name="goImapName" id="goImapName" size=40 maxlength=60 {$goImapNameACL} value="{$goImapName}" >
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Connect URL{/t}
+                                       </td>
+                                       <td><input name="goImapConnect" id="goImapConnect" size=40 maxlength=60 {$goImapConnectACL} value="{$goImapConnect}" >
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Admin user{/t}
+                                       </td>
+                                       <td><input name="goImapAdmin" id="goImapAdmin" size=30 maxlength=60 {$goImapAdminACL} value="{$goImapAdmin}" >
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Password{/t}
+                                       </td>
+                                       <td><input type=password name="goImapPassword" id="goImapPassword" size=30 maxlength=60 {$goImapPasswordACL} value="{$goImapPassword}" >
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Sieve port{/t}
+                                       </td>
+                                       <td><input name="goImapSievePort" id="goImapSievePort" size=10 maxlength=30 {$goImapSievePortACL} value="{$goImapSievePort}">
+                                       </td>
+                               </tr>
+                       </table>
+               </td>
+               <td style="border-left:1px solid #A0A0A0;vertical-align:top;">
+                       <table>
+                               <tr>
+                                       <td>{t}Start IMAP service{/t}
+                                       </td>
+                                       <td>
+                                               <input type='checkbox' name='cyrusImap' value=1 {if $cyrusImap} checked {/if} {$cyrusImapACL}> 
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Start IMAP SSL service{/t}
+                                       </td>
+                                       <td>
+                                               <input type='checkbox' name='cyrusImapSSL' value=1 {if $cyrusImapSSL} checked {/if} {$cyrusImapSSLACL}> 
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Start POP3 service{/t}
+                                       </td>
+                                       <td>
+                                               <input type='checkbox' name='cyrusPop3' value=1 {if $cyrusPop3} checked {/if} {$cyrusPop3ACL}> 
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Start POP3 SSL service{/t}
+                                       </td>
+                                       <td>
+                                               <input type='checkbox' name='cyrusPop3SSL' value=1 {if $cyrusPop3SSL} checked {/if} {$cyrusPop3SSLACL}> 
+                                       </td>
+                               </tr>
+                       </table>
+               </td>
+       </tr>
+</table>
+<p class="seperator">&nbsp;</p>
+<p>
+<br>
+<input type="hidden" value="1" name="goImapServerPosted">
+<select name="action" title={t}{/t}>
+    {html_options options=$Actions selected=$goImapServerStatus}
+</select>
+<input type='submit' name='ExecAction' title='{t}Set status{/t}' value='{t}Execute{/t}'>
+
+<p class="seperator">&nbsp;</p>
+<p>
+<div style="width:100%; text-align:right;">
+    <input type='submit' name='SaveService' value='{t}Save{/t}'>
+    &nbsp;
+    <input type='submit' name='CancelService' value='{t}Cancel{/t}'>
+</div>
+</p>
diff --git a/plugins/admin/systems/ServerService/goMailServer.tpl b/plugins/admin/systems/ServerService/goMailServer.tpl
new file mode 100644 (file)
index 0000000..b29b3e1
--- /dev/null
@@ -0,0 +1,152 @@
+<img src='images/mail.png'><b>{t}Generic{/t}</b>
+<br><br>
+{t}Visible full qualified hostname{/t}&nbsp;<input type="text" name='postfixMyhostname' value='{$postfixMyhostname}' title='{t}The full qualified host name.{/t}'>
+<table  style="width:100%;">
+       <tr>
+               <td width="50%">
+                       <table >
+                               <tr>
+                                       <td>{t}Max mail header size{/t}
+                                       </td>
+                                       <td>
+                                               <input type="text" name='postfixHeaderSizeLimit' value='{$postfixHeaderSizeLimit}' 
+                                                                       title='{t}This value specifies the maximal header size.{/t}'>&nbsp;{t}KB{/t}
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Max mailbox size{/t}
+                                       </td>
+                                       <td>
+                                               <input type="text" name='postfixMailboxSizeLimit' value='{$postfixMailboxSizeLimit}' 
+                                                                       title='{t}Defines the maximal size of mail box.{/t}'>&nbsp;{t}KB{/t}
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Max message size{/t}
+                                       </td>
+                                       <td>
+                                               <input type="text" name='postfixMessageSizeLimit' value='{$postfixMessageSizeLimit}' 
+                                                                       title='{t}Specify the maximal size of a message.{/t}'>&nbsp;{t}KB{/t}
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>{t}Relay host{/t}
+                                       </td>
+                                       <td>
+                                               <input type="text" name='postfixRelayhost' value='{$postfixRelayhost}' 
+                                                                       title='{t}Relay messages to following host.{/t}'>
+                                       </td>
+                               </tr>
+                       </table>
+               </td>
+               <td style="border-left:1px solid #A0A0A0; ">
+                       <table style="width:100%;">
+                               <tr>
+                                       <td>
+                                               {t}Local networks{/t}<br>
+                                               <select name='Select_postfixMyNetworks[]' multiple size=6 style='width:100%;' title='{t}Postfix networks{/t}'>
+                                                       {html_options options=$postfixMyNetworks}
+                                               </select>
+                                               <input type="text" name="NewString_postfixMyNetworks" value="">
+                                               <input type="submit" name="AddpostfixMyNetworks" value="{t}Add{/t}">
+                                               <input type="submit" name="DelpostfixMyNetworks" value="{t}Remove{/t}">
+                                       </td>
+                               </tr>
+                       </table>
+               </td>
+       </tr>
+       <tr>
+               <td colspan="2">
+                       <p class='seperator'>&nbsp;</p>
+               </td>
+       </tr>   
+       <tr>
+               <td>
+                         <table style="width:100%;">
+                <tr>
+                    <td>
+                        {t}Domains and routing{/t}<br>
+                        <select name='Select_postfixMyDestinations[]' multiple size=6 style='width:100%;' title='{t}Postfix is responsilbe for the follwing domains.{/t}'>
+                            {html_options options=$postfixMyDestinations}
+                        </select>
+                        <input type="text" name="NewString_postfixMyDestinations" value="">
+                        <input type="submit" name="AddpostfixMyDestinations" value="{t}Add{/t}">
+                        <input type="submit" name="DelpostfixMyDestinations" value="{t}Remove{/t}">
+                    </td>
+                </tr>
+            </table>
+               </td>
+               <td style="border-left:1px solid #A0A0A0; ">
+                         <table style="width:100%;">
+                <tr>
+                    <td>
+                        {t}Transports{/t}<br>
+                                               {$Div_postfixTransportTable}
+                        <input type="text" name="Source_postfixTransportTable" value="">
+                        <select name='TransportProtocol' title='{t}Select a transport protocoll.{/t}'>
+                            {html_options options=$TransportProtocols}
+                        </select>
+                        <input type="text" name="Destination_postfixTransportTable" value="">
+                        <input type="submit" name="AddpostfixTransportTable" value="{t}Add{/t}">
+                    </td>
+                </tr>
+            </table>
+               </td>
+       </tr>
+       <tr>
+               <td colspan="2">
+                       <p class='seperator'>&nbsp;</p>
+               </td>
+       </tr>   
+       <tr>
+               <td>
+            <table style="width:100%;">
+                <tr>
+                    <td>
+                        {t}Restrictions for sender{/t}<br>
+                                               {$Div_postfixSenderRestrictions}
+                        <input type="text" name="Source_postfixSenderRestrictions" value="">
+                        <select name='SenderRestrictionFilter' title='{t}Restriction filter{/t}'>
+                            {html_options options=$RestrictionFilters}
+                        </select>
+                        <input type="text" name="Destination_postfixSenderRestrictions" value="">
+                        <input type="submit" name="AddpostfixSenderRestrictions" value="{t}Add{/t}">
+                    </td>
+                </tr>
+            </table>
+               </td>
+               <td style="border-left:1px solid #A0A0A0;">
+            <table style="width:100%;">
+                <tr>
+                    <td>
+                        {t}Restrictions for recipient{/t}<br>
+                                               {$Div_postfixRecipientRestrictions}
+                        <input type="text" name="Source_postfixRecipientRestrictions" value="">
+                        <select name='RecipientRestrictionFilter' title='{t}Restriction filter{/t}'>
+                            {html_options options=$RestrictionFilters}
+                        </select>
+                        <input type="text" name="Destination_postfixRecipientRestrictions" value="">
+                        <input type="submit" name="AddpostfixRecipientRestrictions" value="{t}Add{/t}">
+                                               
+                    </td>
+                </tr>
+            </table>
+               </td>
+       </tr>   
+</table>
+
+<br><br>
+<select name="action" title={t}{/t}>
+       {html_options options=$Actions selected=$goMailServerStatus}    
+</select>
+<input type='submit' name='ExecAction' title='{t}Set status{/t}' value='{t}Execute{/t}'>
+
+<p class="seperator">&nbsp;</p>
+<p>
+<div style="width:100%; text-align:right;">
+    <input type='submit' name='SaveService' value='{t}Save{/t}'>
+    &nbsp;
+    <input type='submit' name='CancelService' value='{t}Cancel{/t}'>
+</div>
+</p>
+
diff --git a/plugins/admin/systems/ServerService/goNtpServer.tpl b/plugins/admin/systems/ServerService/goNtpServer.tpl
new file mode 100644 (file)
index 0000000..4a3c0d1
--- /dev/null
@@ -0,0 +1,26 @@
+<br>
+<b>{t}Time server{/t}</b>
+<br>
+<table summary="" style="width:100%">
+<tr>
+ <td>
+       <select style="width:100%;" id="goTimeEntry" name="goTimeSource[]" {$goNtpServerACL}  size=8 multiple>
+               {html_options values=$goTimeSource output=$goTimeSource}
+               <option disabled>&nbsp;</option>
+       </select>
+<br>
+       <input type="text" name="NewNTPExport"  id="NewNTPExportId">
+       <input type="submit"    value="{t}Add{/t}"      name="NewNTPAdd"  {$goNtpServerACL} id="NewNTPAddId">
+       <input type="submit"    value="{t}Delete{/t}"   name="DelNTPEnt"  {$goNtpServerACL} id="DelNTPEntId">
+</td>
+</tr>
+</table>
+
+<p class="seperator">&nbsp;</p>
+<p>
+<div style="width:100%; text-align:right;">
+       <input type='submit' name='SaveService' value='{t}Save{/t}'>
+       &nbsp; 
+       <input type='submit' name='CancelService' value='{t}Cancel{/t}'> 
+</div>
+</p>
index 6d4e25bc79449849a299a29c62723b6bebefe22c..f7bd9b61817c3d017461b9e8d9242c76a2869a34 100644 (file)
@@ -39,11 +39,8 @@ class servdb extends plugin
                          "goLogAdmin", "goLogPassword", "goFonAdmin", "goFonPassword",
                          "goFonAreaCode", "goFonCountryCode","goGlpiAdmin","goGlpiDatabase","goGlpiPassword");
   var $objectclasses= array("top", "goServer");
-  var $additionaloc= array("goImapServer" => array("goImapName", "goImapConnect",
-                                                "goImapAdmin", "goImapPassword",
-                                                "goImapSieveServer", 
-                                                "goImapSievePort"),
-                          "goKrbServer" => array("goKrbRealm", "goKrbAdmin",
+  var $additionaloc= array(
+                         "goKrbServer" => array("goKrbRealm", "goKrbAdmin",
                                                 "goKrbPassword"),
                           "goFaxServer" => array("goFaxAdmin", "goFaxPassword"),
                           "goLogDBServer" => array("goLogAdmin", "goLogPassword"),
@@ -139,7 +136,7 @@ class servdb extends plugin
     }
 
     /* All fields are marked as *must* */
-    if (in_array("goImapServer", $this->objectclasses)){
+    if (1 == 0 && in_array("goImapServer", $this->objectclasses)){
       foreach (array("goImapAdmin", "goImapName") as $attr){
         if ($this->$attr == "" || preg_match("/ /", $this->$attr)){
           $message[]= sprintf(_("The attribute '%s' is empty or contains invalid characters."), $attr);