Code

Added some more charts
[gosa.git] / gosa-core / plugins / generic / references / class_reference.inc
1 <?php
2 /*
3  * This code is part of GOsa (http://www.gosa-project.org)
4  * Copyright (C) 2003-2008 GONICUS GmbH
5  *
6  * ID: $$Id$$
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
23 class reference extends plugin
24 {
25     var $attributes= array('uid','modifyTimestamp');
26     var $aclResolver = NULL;
28     var $referenceFilters = array();
29     var $objectList ="";
30     var $modifyTimestamp = "";
32     function reference (&$config, $dn= NULL, $parent = NULL)
33     {
34         // Init the plugin
35         plugin::plugin($config,$dn,$parent);
37         // Try to read the 'modifyTimestamp' - this has to be done separately. 
38         $ldap = $this->config->get_ldap_link();
39         $ldap->cd($this->config->current['BASE']);
40         $ldap->cat($this->dn, array('modifyTimestamp'));
41         if($ldap->count()){
42             $attrs = $ldap->fetch();
43             if(isset($attrs['modifyTimestamp'][0])){
44                 $this->modifyTimestamp = $attrs['modifyTimestamp'][0];
45             }
46         }
48         // Initialize the ACL-resolver
49         $this->aclResolver = new aclResolver($this->config, $this->dn, $this);
51         // References we may have to other objects.
52         $this->referenceFilters = array();
54         // Check for group membership
55         $this->referenceFilters[] = array(
56             'filter' => "(&(objectClass=posixGroup)(memberUid={$this->uid}))",
57             'attrs'  => array('cn' => _("Name"),'description' => _("Description")),
58             'msg'    => _("Group membership"));
60         // Check for group membership in rfc 2307 bis mode
61         $this->referenceFilters[] = array(
62             'filter' => "(&(objectClass=posixGroup)(member=".normalizeLdap($this->dn)."))",
63             'attrs'  => array('cn' => _("Name"),'description' => _("Description")),
64             'msg'    => _("Group membership")." (rfc 2307 bis)");
66         // Check for role membership
67         $this->referenceFilters[] = array(
68             'filter' => "(&(objectClass=organizationalRole)(roleOccupant=".normalizeLdap($this->dn)."))",
69             'attrs'  => array('cn' => _("Name"),'description' => _("Description")),
70             'msg'    => _("Role membership"));
72         // Check for objectGroup membership
73         $this->referenceFilters[] = array(
74             'filter' => "(&(objectClass=gosaGroupOfNames)(member=".normalizeLdap($this->dn)."))",
75             'attrs'  => array('cn' => _("Name"),'description' => _("Description")),
76             'msg'    => _("Object group membership"));
78         // Check for department manager 
79         $this->referenceFilters[] = array(
80             'filter' => "(&(objectClass=gosaDepartment)(manager=".normalizeLdap($this->dn)."))",
81             'attrs'  => array('ou' => _("Name"),'description' => _("Description")),
82             'msg'    => _("Department manager"));
84         // Check for user manager 
85         $this->referenceFilters[] = array(
86             'filter' => "(&(objectClass=gosaAccount)(manager=".normalizeLdap($this->dn)."))",
87             'attrs'  => array('givenName' => _("Given name"),'sn' => _("Surname"),'uid'=>_("UID")),
88             'msg'    => _("User manager"));
90         // Go through filters and detect possible references  
91         $ldap = $this->config->get_ldap_link();
92         $ldap->cd($this->config->current['BASE']);
93         $str = "";
94         foreach($this->referenceFilters as $filter){
95             $ldap->search($filter['filter'], array_keys($filter['attrs']));
96             if(!$ldap->success()){
97                 msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_VIEW, get_class()));
98             }elseif($ldap->count()){
99                 $list = new sortableListing();
100                 $list->setDeleteable(false);
101                 $list->setEditable(false);
102                 $list->setWidth("100%");
103                 $list->setHeight("80px");
104                 $list->setHeader(array_values($filter['attrs']));
105                 $list->setDefaultSortColumn(0);
106                 $list->setAcl('rwcdm');
108                 $data = array();
109                 while($attrs = $ldap->fetch()){
111                     $entry = array();
112                     foreach($filter['attrs'] as $name => $desc){
113                         $$name = "";
114                         if(isset($attrs[$name][0])) $$name = $attrs[$name][0];
115                         $entry['data'][] = $$name;
116                     }
117                     $data[] = $entry;
118                 }
119                 $list->setListData($data, $data);
121                 $list->update();    
122                 $str .= "<h3>".$filter['msg']."</h3>";
123                 $str .= $list->render();
124                 $str .= "<div class='v-spacer'></div>";
125             }
126         }
127         $this->objectList = $str;
128     }
130     function execute()
131     {
132         // Mark plugin as viewed
133         plugin::execute();
135         // Show ldif viewer
136         if(isset($_POST['viewLdif'])){
137             $this->dialog = new ldifViewer($this->config, $this->dn);
138         }
139         if(isset($_POST['cancelLdifViewer'])) $this->dialog = NULL;
140         if($this->dialog instanceOf ldifViewer){
141             return($this->dialog->execute());
142         }
144         $smarty = get_smarty();        
146         // Assign permissions
147         $tmp = $this->plInfo();
148         $ui = get_userinfo();
150         $category = preg_replace("/\/.*$/", "", $this->acl_category);
151         $smarty->assign('aclREAD',  preg_match("/r/",$ui->get_category_permissions($this->dn, 'acl')));
152         $smarty->assign('completeACL',  $ui->has_complete_category_acls($this->dn, $category)); 
153         $smarty->assign('someACL',      $ui->get_category_permissions($this->dn, $category));
154         
155         // Convert the modifyTimestamp to a human readable value
156         $tz = timezone::get_default_timezone();
157         $smarty->assign('modifyTimestamp', set_post(date('d.m.Y H:i:s', strtotime($this->modifyTimestamp))));
159         $smarty->assign('objectList', $this->objectList);
160         $smarty->assign("acls",$this->aclResolver->getReadableACL());
162         session::set('autocomplete', $this->aclResolver);
163         return ($smarty->fetch (get_template_path('contents.tpl', TRUE, dirname(__FILE__))));
164     }
167 ?>