Code

Updated groupGeneric
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 25 Mar 2008 13:39:07 +0000 (13:39 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 25 Mar 2008 13:39:07 +0000 (13:39 +0000)
-Added trustFilter - requires code cleanup.

git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@9974 594d385d-05f5-0310-b6e9-bd551577e9d8

gosa-core/plugins/admin/groups/class_groupGeneric.inc
gosa-core/plugins/admin/groups/generic.tpl
gosa-core/plugins/admin/groups/trust_machines.tpl [new file with mode: 0644]

index 703d2c0a30ba67254ba352282ac9aff83268e2cf..2b89f05564836181f0c09c2cd5b91bdd6cb802b4 100644 (file)
@@ -59,8 +59,12 @@ class group extends plugin
   var $view_logged = FALSE;
   var $allowGroupsWithSameNameInOtherSubtrees = true;
 
+  var $accessTo= array();
+  var $trustModel= "";
+  var $show_ws_dialog = FALSE;
+
   /* attribute list for save action */
-  var $attributes= array("cn", "description", "gidNumber","memberUid","sambaGroupType","sambaSID");
+  var $attributes= array("cn", "description", "gidNumber","memberUid","sambaGroupType","sambaSID","accessTo","trustModel");
   var $objectclasses= array("top", "posixGroup");
 
   var $CopyPasteVars  = array("force_gid","fon_group","smbgroup","groupType","sambaSID","sambaDomainName","SID","nagios_group","sambaGroupType");
@@ -186,6 +190,23 @@ class group extends plugin
       $this->base =preg_replace ("/^[^,]+,".normalizePreg(get_groups_ou())."/","",$this->dn);
     }
 
+    /* Is this account a trustAccount? */
+    if (isset($this->attrs['trustModel'])){
+      $this->trustModel= $this->attrs['trustModel'][0];
+      $this->was_trust_account= TRUE;
+    } else {
+      $this->was_trust_account= FALSE;
+      $this->trustModel= "";
+    }
+
+    $this->accessTo = array();
+    if (isset($this->attrs['accessTo'])){
+      for ($i= 0; $i<$this->attrs['accessTo']['count']; $i++){
+        $tmp= $this->attrs['accessTo'][$i];
+        $this->accessTo[$tmp]= $tmp;
+      }
+    }
+
     /* This is always an account */
     $this->is_account= TRUE;
     $this->reload();
@@ -270,8 +291,104 @@ class group extends plugin
       }
     }
 
-   /* Assign templating stuff */
+
+    /* Add user workstation? */
+    if (isset($_POST["add_ws"])){
+      $this->show_ws_dialog= TRUE;
+      $this->dialog= TRUE;
+    }
+
+    /* Add user workstation? */
+    if (isset($_POST["add_ws_finish"]) && isset($_POST['wslist'])){
+      foreach($_POST['wslist'] as $ws){
+        $this->accessTo[$ws]= $ws;
+      }
+      ksort($this->accessTo);
+      $this->is_modified= TRUE;
+    }
+
+    /* Remove user workstations? */
+    if (isset($_POST["delete_ws"]) && isset($_POST['workstation_list'])){
+      foreach($_POST['workstation_list'] as $name){
+        unset ($this->accessTo[$name]);
+      }
+      $this->is_modified= TRUE;
+    }
+
+    /* Add user workstation finished? */
+    if (isset($_POST["add_ws_finish"]) || isset($_POST["add_ws_cancel"])){
+      $this->show_ws_dialog= FALSE;
+      $this->dialog= FALSE;
+    }
+
     $smarty= get_smarty();
+
+    /* Show ws dialog */
+    if ($this->show_ws_dialog){
+
+      /* Save data */
+      $sysfilter= session::get("sysfilter");
+      foreach( array("depselect", "regex") as $type){
+        if (isset($_POST[$type])){
+          $sysfilter[$type]= $_POST[$type];
+        }
+      }
+      if (isset($_GET['search'])){
+        $s= mb_substr($_GET['search'], 0, 1, "UTF8")."*";
+        if ($s == "**"){
+          $s= "*";
+        }
+        $sysfilter['regex']= $s;
+      }
+      session::set("sysfilter", $sysfilter);
+
+      /* Get workstation list */
+      $exclude= "";
+      foreach($this->accessTo as $ws){
+        $exclude.= "(cn=$ws)";
+      }
+      if ($exclude != ""){
+        $exclude= "(!(|$exclude))";
+      }
+      $regex= $sysfilter['regex'];
+      $filter= "(&(|(objectClass=goServer)(objectClass=gotoWorkstation)(objectClass=gotoTerminal))$exclude(cn=*)(cn=$regex))";
+
+      $deps_a = array(get_ou("serverou"),
+                      get_ou("terminalou"),
+                      get_ou("workstationou"));
+
+      $res= get_sub_list($filter, array("terminal","server","workstation"), $deps_a, get_ou("systemsou").$sysfilter['depselect'],         array("cn"), GL_SUBSEARCH | GL_SIZELIMIT);
+      $wslist= array();
+      foreach ($res as $attrs){
+        $wslist[]= preg_replace('/\$/', '', $attrs['cn'][0]);
+      }
+      asort($wslist);
+      $smarty->assign("search_image", get_template_path('images/search.png'));
+      $smarty->assign("launchimage", get_template_path('images/small_filter.png'));
+      $smarty->assign("tree_image", get_template_path('images/tree.png'));
+      $smarty->assign("deplist", $this->config->idepartments);
+      $smarty->assign("alphabet", generate_alphabet());
+      foreach( array("depselect", "regex") as $type){
+        $smarty->assign("$type", $sysfilter[$type]);
+      }
+      $smarty->assign("hint", print_sizelimit_warning());
+      $smarty->assign("wslist", $wslist);
+      $smarty->assign("apply", apply_filter());
+      $display= $smarty->fetch (get_template_path('trust_machines.tpl', TRUE, dirname(__FILE__)));
+      return ($display);
+    }
+
+
+
+
+
+
+
+
+
+
+
+    /* Assign templating stuff */
     if ($this->samba3){
       $smarty->assign("samba3", "true");
     } else {
@@ -361,6 +478,45 @@ class group extends plugin
     /* Members and users */
     $smarty->assign("members", $this->members);
 
+
+
+
+
+
+
+
+
+   /* Work on trust modes */
+    $smarty->assign("trusthide", " disabled ");
+    $smarty->assign("trustmodeACL",  $this->getacl("trustModel"));
+    if ($this->trustModel == "fullaccess"){
+      $trustmode= 1;
+      // pervent double disable tag in html code, this will disturb our clean w3c html
+      $smarty->assign("trustmode",  $this->getacl("trustModel"));
+
+    } elseif ($this->trustModel == "byhost"){
+      $trustmode= 2;
+      $smarty->assign("trusthide", "");
+    } else {
+      // pervent double disable tag in html code, this will disturb our clean w3c html
+      $smarty->assign("trustmode",  $this->getacl("trustModel"));
+      $trustmode= 0;
+    }
+    $smarty->assign("trustmode", $trustmode);
+    $smarty->assign("trustmodes", array( 0 => _("disabled"), 1 => _("full access"),
+          2 => _("allow access to these hosts")));
+
+    if((count($this->accessTo))==0){
+      $smarty->assign("emptyArrAccess",true);
+    } else{
+      $smarty->assign("emptyArrAccess",false);
+
+    }
+
+    $smarty->assign("workstations", $this->accessTo);
+
+
+
     /* Checkboxes */
     foreach (array("force_gid", "smbgroup") as $val){
       if ($this->$val == "1"){
@@ -673,6 +829,24 @@ class group extends plugin
         }
       }
     }
+
+    /* Trust mode - special handling */
+    if($this->acl_is_writeable("trustModel")){
+      if (isset($_POST['trustmode'])){
+        $saved= $this->trustModel;
+        if ($_POST['trustmode'] == "1"){
+          $this->trustModel= "fullaccess";
+        } elseif ($_POST['trustmode'] == "2"){
+          $this->trustModel= "byhost";
+        } else {
+          $this->trustModel= "";
+        }
+        if ($this->trustModel != $saved){
+          $this->is_modified= TRUE;
+        }
+      }
+    }
+
   }
 
 
@@ -702,6 +876,33 @@ class group extends plugin
   
     plugin::save(); 
 
+ /* Trust accounts */
+    $objectclasses= array();
+    foreach ($this->attrs['objectClass'] as $key => $class){
+      if (preg_match('/trustAccount/i', $class)){
+        continue;
+      }
+      $objectclasses[]= $this->attrs['objectClass'][$key];
+    }
+    $this->attrs['objectClass']= $objectclasses;
+    if ($this->trustModel != ""){
+      $this->attrs['objectClass'][]= "trustAccount";
+      $this->attrs['trustModel']= $this->trustModel;
+      $this->attrs['accessTo']= array();
+      if ($this->trustModel == "byhost"){
+        foreach ($this->accessTo as $host){
+          $this->attrs['accessTo'][]= $host;
+        }
+      }
+    } else {
+      if ($this->was_trust_account){
+        $this->attrs['accessTo']= array();
+        $this->attrs['trustModel']= array();
+      }
+    }
+
+
+
     /* Remove objectClass for samba/phone support */
     $tmp= array();
     for ($i= 0; $i<count($this->attrs["objectClass"]); $i++){
index c287d6005d2fb0b67ab55d6d5ede4de12791cb21..2c965ef0fd4cc162aeeeb3e9b12b592f9a16820b 100644 (file)
      </td>
     </tr>
        {/if}
+    <tr>
+      <td colspan=2> <div style="height:15px; width:100%; border-bottom:1px solid #909090;"></div> </td>
+    </tr>
+    <tr>
+      <td colspan=2> <div style="height:15px; width:100%;"></div> </td>
+    </tr>
+       <tr>
+        <td colspan="2">
+                   {t}Trust mode{/t}&nbsp;
+    {render acl=$trustmodeACL}
+        <select name="trustmode" id="trustmode" size=1
+            onChange="changeSelectState('trustmode', 'wslist');
+                      changeSelectState('trustmode', 'add_ws');
+                      changeSelectState('trustmode', 'del_ws');">
+          {html_options options=$trustmodes selected=$trustmode}
+        </select>
+    {/render}
+    {render acl=$trustmodeACL}
+       <select style="width:100%" id="wslist" name="workstation_list[]" size=8 multiple {$trusthide}>
+        {html_options values=$workstations output=$workstations}
+        {if $emptyArrAccess}
+            <option disabled>&nbsp;</option>
+        {/if}
+       </select>
+    {/render}
+       <br>
+    {render acl=$trustmodeACL}
+       <input type="submit" id="add_ws" value="{msgPool type=addButton}" name="add_ws" {$trusthide}>&nbsp;
+    {/render}
+    {render acl=$trustmodeACL}
+       <input type="submit" id="del_ws" value="{msgPool type=delButton}" name="delete_ws" {$trusthide}>
+    {/render}
+
+        </td>
+       </tr>
    </table>
 
   </td>
diff --git a/gosa-core/plugins/admin/groups/trust_machines.tpl b/gosa-core/plugins/admin/groups/trust_machines.tpl
new file mode 100644 (file)
index 0000000..1678dfb
--- /dev/null
@@ -0,0 +1,42 @@
+<table summary="" style="width:100%; vertical-align:top; text-align:left;" cellpadding=4>
+<tr>
+  <td style="vertical-align:top;">
+   <div class="contentboxh" style="height:20px;">
+    <p class="contentboxh" style="font-size:12px">
+     <b>{t}Select systems to add{/t} {$hint}</b><br>
+    </p>
+   </div>
+   <div class="contentboxb">
+    <p class="contentboxb" style="border-top:1px solid #B0B0B0;background-color:#F8F8F8">
+     <select style="width:600px; margin-top:4px; height:450px;" name="wslist[]" size="15" multiple>
+       {html_options values=$wslist output=$wslist}
+     </select>
+    </p>
+   </div>
+  </td>
+  <td style="vertical-align:top;">
+   <div class="contentboxh" style="height:20px;">
+    <p class="contentboxh" style="font-size:12px"><img src="{$launchimage}" align="right" alt="[F]"><b>{
+t}Filters{/t}</b></p>
+   </div>
+   <div class="contentboxb" style="border-top:1px solid #B0B0B0;background-color:#F8F8F8">
+     <table summary="" style="width:100%;">
+      {$alphabet}
+     </table>
+    <table summary="" width="100%" style="border-top:1px solid #B0B0B0;background-color:#F8F8F8"><tr><td width="50%"><img alt="" src="{$tree_image}" align=middle>&nbsp;{t}Display systems of department{/t}</td>
+    <td><select name="depselect" size=1 onChange="mainform.submit()" title="{t}Choose the department the search will be based on{/t}">
+      {html_options options=$deplist selected=$depselect}
+    </select></td></tr></table>
+    <table summary="" width="100%" style="border-top:1px solid #B0B0B0;background-color:#F8F8F8"><tr><td width="50%"><img alt="" src="{$search_image}" align=middle>&nbsp;{t}Display systems matching{/t}</td>
+    <td><input type='text' name='regex' maxlength='20' value='{$regex}' title='{t}Regular expression for matching addresses{/t}' onChange="mainform.submit()"></td></tr></table>
+   {$apply}
+   </div>
+  </td>
+</tr>
+</table>
+
+<p class="plugbottom">
+  <input type=submit name="add_ws_finish" value="{msgPool type=addButton}">
+  &nbsp;
+  <input type=submit name="add_ws_cancel" value="{msgPool type=cancelButton}">
+</p>