diff --git a/gosa-core/plugins/generic/references/class_reference.inc b/gosa-core/plugins/generic/references/class_reference.inc
index e2bb1839b89e5f6f70ad30273293245b43ea0597..11a5383b94cebb18883783eacadd22604ce50b4b 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" => "penguin.png"),
- "posixAccount" => array( "text" =>_("UNIX"),
- "image" => "select_user.png"),
- "gosaMailAccount" => array("text" => _("Mail"),
- "image" => "mailto.png"),
- "sambaSamAccount" => array("text" => _("Samba"),
- "image" => "select_winstation.png"),
- "sambaAccount" => array( "text" => _("Samba"),
- "image" => "select_winstation.png"),
- "goFaxAccount" => array( "text" => _("FAX"),
- "image" => "fax_small.png"),
- "gosaProxyAccount" => array("text" => _("Proxy"),
- "image" => "select_proxy.png"),
- "PureFTPdUser" => array( "text" => _("FTP"),
- "image" => "select_proxy.png"),
- "posixGroup" => array( "text" => _("Group"),
- "image" => "select_groups.png"),
- "gosaDepartment" => array( "text" => _("Department"),
- "image" => "select_department.png"),
- "goFonHardware" => array( "text" => _("Phone"),
- "image" => "select_phone.png"),
- "gosaApplication" => array("text" => _("Application"),
- "image" => "select_application.png"),
- "goServer" => array( "text" => _("Server"),
- "image" => "select_server.png"),
- "gotoTerminal" => array( "text" => _("Thin Client"),
- "image" => "select_terminal.png"),
- "gotoWorkstation" => array("text" => _("Workstation"),
- "image" => "select_workstation.png"),
- "gosaGroupOfNames" => array("text" => _("Object group"),
- "image" => "select_ogroup.png"),
- "gotoPrinter" => array( "text" => _("Printer"),
- "image" => "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("(|(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].'"> '.$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/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'].'&start=&show='.base64_encode($attrs['dn']).'"><img alt="" src="'.$img.'" border=0> '.$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='images/".$this->obtypes[$class]['image']."'> ".$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__))));
+ }
}
?>