X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Fplugins%2Fgeneric%2Freferences%2Fclass_reference.inc;h=f79dec13c6a13b5fe0105253e4c5ff3effd35322;hb=4857c1fe8507ec694d445ebc3e8fceb233450093;hp=1c36e1b10f88c8efe4afc9ea20ccdfdda3901a66;hpb=3daec3e3469686f68457b992847a339c7add9bb1;p=gosa.git diff --git a/gosa-core/plugins/generic/references/class_reference.inc b/gosa-core/plugins/generic/references/class_reference.inc index 1c36e1b10..f79dec13c 100644 --- a/gosa-core/plugins/generic/references/class_reference.inc +++ b/gosa-core/plugins/generic/references/class_reference.inc @@ -22,215 +22,146 @@ 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.= - ' '. - '    '.$content['name'].''. - ' '.$content['description'].''. - ' '.$content['type'].' '. - ' '; + + // 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 .= "

".$filter['msg']."

"; + $str .= $list->render(); + $str .= "
"; + } } - } - - /* 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.= - ' '. - ' '. - ' '.image($img). - ' '. - '  '.$attrs['cn'][0]. - ' '. - ' '. - ' '. - ' '. - $description. - ' '. - ' '. - ' '.$content.' '. - ' '.$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']). - " ". - " ".$this->obtypes[$class]['text']. - " "; + 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__)))); + } } ?>