Code

Updated generateLdif method
[gosa.git] / gosa-core / plugins / generic / references / class_reference.inc
index b8feaef1298030457bf0cce75b8efe20d352383e..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" => "images/select_groups.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" => "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();
-
-       /* 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;
-                       }
-                       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>';
-                       }
-               }
-
-               /* 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].'"><a href="main.php?plug='.$_GET['plug'].'&amp;start=&amp;show='.base64_encode($attrs['dn']).'"><img alt="" src="'.$img.'" border=0>&nbsp;'.$attrs['cn'][0].'</a></td><td>'.$description.'</td><td>'.$content.'</td> </tr>'.$addon;
-
-               $id++;
-       }
-       
-  }
-
-  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'];
-                       }
-                               
-                       if (isset($attrs['description'])){
-                               $description= $attrs['description'][0];
-                       } else {
-                               $description= "-";
-                       }
-                       $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.= "<a><img alt=\"\" border=0 src='".$this->obtypes[$class]['image']."'>&nbsp;".$this->obtypes[$class]['text']."</a> ";
-                       }
-               }
-       }
-       return (preg_replace('/ $/', '', $result));
-  }
-  
+    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];
+            }
+        }
+
+        // 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>";
+            }
+        }
+        $this->objectList = $str;
+    }
+
+    function execute()
+    {
+        // Mark plugin as viewed
+        plugin::execute();
+
+        // Show ldif viewer
+        if(isset($_POST['viewLdif'])){
+            $this->dialog = new ldifViewer($this->config, $this->dn);
+        }
+        if(isset($_POST['cancelLdifViewer'])) $this->dialog = NULL;
+        if($this->dialog instanceOf ldifViewer){
+            return($this->dialog->execute());
+        }
+
+        $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__))));
+    }
 }
 
 ?>