Code

Updated generateLdif method
[gosa.git] / gosa-core / plugins / generic / references / class_reference.inc
index 1c36e1b10f88c8efe4afc9ea20ccdfdda3901a66..f79dec13c6a13b5fe0105253e4c5ff3effd35322 100644 (file)
 
 class reference extends plugin
 {
-  /* attribute list for save action */
-  var $attributes= array();
-  var $objectclasses= array();
-  var $objectlist= "";
-  var $obtypes= array();
-  var $fold= array();
-  var $objectCache= array();
-
-  function reference (&$config, $dn= NULL)
-  {
-    /* Include config object */
-    $this->config= &$config;
-    $this->dn= $dn;
-
-    /* Fill translation array */
-    $this->obtypes= array(  
-        "gosaAccount" => array(           "text" => _("Generic"),
-          "image" => "images/penguin.png"),
-        "posixAccount" => array(   "text" =>_("UNIX"),
-          "image" => "plugins/users/images/select_user.png"),
-        "gosaMailAccount" => array("text" => _("Mail"),
-          "image" => "images/mailto.png"),
-        "sambaSamAccount" => array("text" => _("Samba"),
-          "image" => "plugins/systems/images/select_winstation.png"),
-        "sambaAccount" => array(   "text" => _("Samba"),
-          "image" => "plugins/sysmtes/images/select_winstation.png"),
-        "goFaxAccount" => array(   "text" => _("FAX"),
-          "image" => "plugins/gofax/images/fax_small.png"),
-        "gosaProxyAccount" => array("text" => _("Proxy"),
-          "image" => "images/select_proxy.png"),
-        "PureFTPdUser" => array(   "text" => _("FTP"),
-          "image" => "images/select_proxy.png"),
-        "posixGroup" => array(     "text" => _("Group"),
-          "image" => "plugins/groups/images/select_group.png"),
-        "gosaDepartment" => array( "text" => _("Department"),
-          "image" => "images/select_department.png"),
-        "goFonHardware" => array(   "text" => _("Phone"),
-            "image" => "plugins/systems/images/select_phone.png"),
-        "gosaApplication" => array("text" => _("Application"),
-            "image" => "plugins/goto/images/select_application.png"),
-        "goServer" => array(      "text" => _("Server"),
-            "image" => "plugins/systems/images/select_server.png"),
-        "gotoTerminal" => array(   "text" => _("Thin Client"),
-            "image" => "images/select_terminal.png"),
-        "gotoWorkstation" => array("text" => _("Workstation"),
-            "image" => "plugins/systems/images/select_workstation.png"),
-        "gosaGroupOfNames" => array("text" => _("Object group"),
-            "image" => "plugins/ogroups/images/select_ogroup.png"),
-        "gotoPrinter" => array(           "text" => _("Printer"),
-            "image" => "plugins/systems/images/select_printer.png"));
-  }
-
-  function execute()
-  {
-    /* Call parent execute */
-    plugin::execute();
-
-    // ACL's we have
-    $ui = get_userinfo();
-    
-
-    $r = new aclResolver($this->config, $this->dn, $this);
-    return($r->getReadableACL());
-
-    /* Set government mode */
-    $smarty= get_smarty();
-
-    if (isset($_GET['show'])){
-      $dn= base64_decode($_GET['show']);
-      if (isset($this->fold["$dn"])){
-        unset($this->fold["$dn"]);
-      } else {
-        $this->fold["$dn"]= "$dn";
-      }
-    }
-
-    /* Fill array */
-    $this->reload();
-    $smarty->assign("objectList", $this->objectlist);
-
-    /* Show main page */
-    return ($smarty->fetch (get_template_path('contents.tpl', TRUE, dirname(__FILE__))));
-  }
-
-  function reload()
-  {
-    $ldap= $this->config->get_ldap_link();
-    $ldap->cd($this->config->current['BASE']);
-
-    $ldap->search(
-        "(|(gotoHotplugDeviceDN=".LDAP::prepare4filter($this->dn).")".
-        "(member=".LDAP::prepare4filter($this->dn).")(memberUid=".$this->uid."))",
-        array("memberUid","member","cn","description","objectClass"));
-
-    $cycle= array("F5F5F5", "ECECEC");
-    $id= 0;
-    $this->objectlist= "";
-    while ($attrs= $ldap->fetch()){
-
-      /* Add more information? */
-      $addon= "";
-      if (in_array($attrs['dn'], $this->fold)){
-        $memberattr= "";
-        if (isset($attrs['memberUid'])){
-          unset($attrs['memberUid']['count']);
-          $memberattr= "memberUid";
-        } 
-        if (isset($attrs['member'])){
-          unset($attrs['member']['count']);
-          $memberattr= "member";
-        } 
-        if ($memberattr == ""){
-          continue;
+    var $attributes= array('uid','modifyTimestamp');
+    var $aclResolver = NULL;
+
+    var $referenceFilters = array();
+    var $objectList ="";
+    var $modifyTimestamp = "";
+
+    function reference (&$config, $dn= NULL, $parent = NULL)
+    {
+        // Init the plugin
+        plugin::plugin($config,$dn,$parent);
+
+        // Try to read the 'modifyTimestamp' - this has to be done separately. 
+        $ldap = $this->config->get_ldap_link();
+        $ldap->cd($this->config->current['BASE']);
+        $ldap->cat($this->dn, array('modifyTimestamp'));
+        if($ldap->count()){
+            $attrs = $ldap->fetch();
+            if(isset($attrs['modifyTimestamp'][0])){
+                $this->modifyTimestamp = $attrs['modifyTimestamp'][0];
+            }
         }
-        foreach ($attrs[$memberattr] as $uid){
-          $content= $this->getCacheObject($uid);
-          if ($content === NULL) {
-            continue;
-          }
-          $addon.= 
-            ' <tr style="background-color:'.$cycle[$id&1].';"> '.
-            '   <td title="'.$attrs['cn'][0].'">&nbsp;&nbsp;&nbsp;'.$content['name'].'</td>'.
-            '   <td>'.$content['description'].'</td>'.
-            '   <td>'.$content['type'].'</td> '.
-            ' </tr>';
+
+        // Initialize the ACL-resolver
+        $this->aclResolver = new aclResolver($this->config, $this->dn, $this);
+
+        // References we may have to other objects.
+        $this->referenceFilters = array();
+
+        // Check for group membership
+        $this->referenceFilters[] = array(
+            'filter' => "(&(objectClass=posixGroup)(memberUid={$this->uid}))",
+            'attrs'  => array('cn' => _("Name"),'description' => _("Description")),
+            'msg'    => _("Group membership"));
+
+        // Check for group membership in rfc 2307 bis mode
+        $this->referenceFilters[] = array(
+            'filter' => "(&(objectClass=posixGroup)(member=".normalizeLdap($this->dn)."))",
+            'attrs'  => array('cn' => _("Name"),'description' => _("Description")),
+            'msg'    => _("Group membership")." (rfc 2307 bis)");
+
+        // Check for role membership
+        $this->referenceFilters[] = array(
+            'filter' => "(&(objectClass=organizationalRole)(roleOccupant=".normalizeLdap($this->dn)."))",
+            'attrs'  => array('cn' => _("Name"),'description' => _("Description")),
+            'msg'    => _("Role membership"));
+
+        // Check for objectGroup membership
+        $this->referenceFilters[] = array(
+            'filter' => "(&(objectClass=gosaGroupOfNames)(member=".normalizeLdap($this->dn)."))",
+            'attrs'  => array('cn' => _("Name"),'description' => _("Description")),
+            'msg'    => _("Object group membership"));
+
+        // Check for department manager 
+        $this->referenceFilters[] = array(
+            'filter' => "(&(objectClass=gosaDepartment)(manager=".normalizeLdap($this->dn)."))",
+            'attrs'  => array('ou' => _("Name"),'description' => _("Description")),
+            'msg'    => _("Department manager"));
+
+        // Check for user manager 
+        $this->referenceFilters[] = array(
+            'filter' => "(&(objectClass=gosaAccount)(manager=".normalizeLdap($this->dn)."))",
+            'attrs'  => array('givenName' => _("Given name"),'sn' => _("Surname"),'uid'=>_("UID")),
+            'msg'    => _("User manager"));
+
+        // Go through filters and detect possible references  
+        $ldap = $this->config->get_ldap_link();
+        $ldap->cd($this->config->current['BASE']);
+        $str = "";
+        foreach($this->referenceFilters as $filter){
+            $ldap->search($filter['filter'], array_keys($filter['attrs']));
+            if(!$ldap->success()){
+                msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_VIEW, get_class()));
+            }elseif($ldap->count()){
+                $list = new sortableListing();
+                $list->setDeleteable(false);
+                $list->setEditable(false);
+                $list->setWidth("100%");
+                $list->setHeight("80px");
+                $list->setHeader(array_values($filter['attrs']));
+                $list->setDefaultSortColumn(0);
+                $list->setAcl('rwcdm');
+
+                $data = array();
+                while($attrs = $ldap->fetch()){
+
+                    $entry = array();
+                    foreach($filter['attrs'] as $name => $desc){
+                        $$name = "";
+                        if(isset($attrs[$name][0])) $$name = $attrs[$name][0];
+                        $entry['data'][] = $$name;
+                    }
+                    $data[] = $entry;
+                }
+                $list->setListData($data, $data);
+
+                $list->update();    
+                $str .= "<h3>".$filter['msg']."</h3>";
+                $str .= $list->render();
+                $str .= "<div class='v-spacer'></div>";
+            }
         }
-      }
-
-      /* Build final entry */
-      if (isset($attrs['description'])){
-        $description= $attrs['description'][0];
-      } else {
-        $description= "-";
-      }
-      $content= $this->createContentString($attrs['objectClass']);
-      if ($addon == ""){
-        $img= "images/lists/expand.png";
-      } else {
-        $img= "images/lists/sort-down.png";
-      }
-
-      $this->objectlist.= 
-        ' <tr style="background-color:'.$cycle[$id&1].';">  '.
-        '   <td class="phonelist" title="'.$attrs['cn'][0].'">  '.
-        '     '.image($img).
-        '     <a href="main.php?plug='.$_GET['plug'].'&amp;start=&amp;show='.base64_encode($attrs['dn']).'"> '.
-        '     &nbsp;'.$attrs['cn'][0].
-        '     </a> '.
-        '   </td> '.
-        '   <td>'.
-        '     <a href="main.php?plug='.$_GET['plug'].'&amp;start=&amp;show='.base64_encode($attrs['dn']).'"> '.
-        $description.
-        '     </a> '.
-        '   </td> '.
-        '   <td>'.$content.'</td> '.
-        ' </tr>'.$addon;
-      $id++;
+        $this->objectList = $str;
     }
 
-  }
-
-  function getCacheObject($dn)
-  {
-    if (!isset($this->objectCache[$dn])){
-      $ldap= $this->config->get_ldap_link();
-      if (preg_match('/,/', $dn)){
-        $ldap->cat($dn, array("cn", "objectClass", "description","ou"));
-      } else {
-        $ldap->search("(uid=$dn)", array("cn", "objectClass", "description","ou"));
-      }
-      if ($ldap->count()){
-        $attrs= $ldap->fetch();
-
-        if(isset($attrs['ou']) && !isset($attrs['cn'])){
-          $attrs['cn'] = $attrs['ou'];
-        }
+    function execute()
+    {
+        // Mark plugin as viewed
+        plugin::execute();
 
-        if (isset($attrs['description'])){
-          $description= $attrs['description'][0];
-        } else {
-          $description= "-";
+        // Show ldif viewer
+        if(isset($_POST['viewLdif'])){
+            $this->dialog = new ldifViewer($this->config, $this->dn);
         }
-        $this->objectCache[$dn]= array(        'name' => $attrs['cn'][0],
-            'description' => "$description",
-            'type' => $this->createContentString($attrs['objectClass']));
-      } else {
-        return NULL;
-      }
-    }
-    return ($this->objectCache[$dn]);
-  }
-
-  function createContentString($classes)
-  {
-    $result= "";
-    if(!is_null($classes)) {
-      foreach ($classes as $class){
-        if (isset($this->obtypes[$class])){
-          $result.= 
-            " ".image($this->obtypes[$class]['image']).
-            " <a>".
-            "   ".$this->obtypes[$class]['text'].
-            " </a> ";
+        if(isset($_POST['cancelLdifViewer'])) $this->dialog = NULL;
+        if($this->dialog instanceOf ldifViewer){
+            return($this->dialog->execute());
         }
-      }
-    }
-    return (preg_replace('/ $/', '', $result));
-  }
 
+        $smarty = get_smarty();        
+
+        // Assign permissions
+        $tmp = $this->plInfo();
+        $ui = get_userinfo();
+
+        $category = preg_replace("/\/.*$/", "", $this->acl_category);
+        $smarty->assign('aclREAD',  preg_match("/r/",$ui->get_category_permissions($this->dn, 'acl')));
+        $smarty->assign('completeACL',  $ui->has_complete_category_acls($this->dn, $category)); 
+        $smarty->assign('someACL',      $ui->get_category_permissions($this->dn, $category));
+        
+        // Convert the modifyTimestamp to a human readable value
+        $tz = timezone::get_default_timezone();
+        $smarty->assign('modifyTimestamp', set_post(date('d.m.Y H:i:s', strtotime($this->modifyTimestamp))));
+
+        $smarty->assign('objectList', $this->objectList);
+        $smarty->assign("acls",$this->aclResolver->getReadableACL());
+
+        session::set('autocomplete', $this->aclResolver);
+        return ($smarty->fetch (get_template_path('contents.tpl', TRUE, dirname(__FILE__))));
+    }
 }
 
 ?>