Code

Some changes, added better filter management for ProfileEntry
[gosa.git] / plugins / admin / FAI / class_faiProfileEntry.inc
1 <?php
3 class faiProfileEntry extends plugin
4 {
5   /* CLI vars */
6   var $cli_summary= "Manage server basic objects";
7   var $cli_description= "Some longer text\nfor help";
8   var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
10   /* attribute list for save action */
11   var $ignore_account= TRUE;
12   var $attributes   = array();
13   var $objectclasses= array();
15   /* Array with available class names */
16   var $FAIAllclasses        = array();
18   function faiProfileEntry ($config, $dn= NULL,$used=array(),$objects=false)
19   {
20     plugin::plugin ($config, $dn);
22     /* Search only in fai tree */
23     $base = $_SESSION['faifilter']['base'];
25     /* Create array with categories to be able to sort different types of objects */
26     $categories = array("FAIscript","FAItemplate","FAIhook","FAIvariable","FAIpartitionTable","FAIpackage");
28     /* Read out all objects from fai tree */
29     $ldap= $this->config->get_ldap_link();
30     $ldap->cd($base);
31     $ldap->search("(| (objectClass=FAIscript)(objectClass=FAItemplate)(objectClass=FAIhook)(objectClass=FAIvariable)
32                       (objectClass=FAIpartitionTable)(objectClass=FAIpackage))",array("*"));
33     while($attrs = $ldap->fetch()){
34       
35       /* Only use objects which have cn set */
36       if((isset($attrs['cn'][0]))&&(!in_array($attrs['cn'][0],$used))){
37         foreach($categories as $cat){
38           if(in_array($cat,$attrs['objectClass'])){
39         
40             /* Append different types of objects */
41             $this->FAIAllclasses[$attrs['cn'][0]]['objects'][$cat]=$cat;
43             /* Set selected status to false */
44             $this->FAIAllclasses[$attrs['cn'][0]]['status']=false;
45           }
46         }
47       }
48     }
49     /* If no search filter is set, create one */
50     if (is_global("SUBfaifilter")){
51       $SUBfaifilter= array("base" => "ou=fai,ou=configs,ou=systems,".$base, "Sregex" => "*");
52       $SUBfaifilter['SShowTemplates'] = false;
53       $SUBfaifilter['SShowScripts']   = false;
54       $SUBfaifilter['SShowHooks']     = false;
55       $SUBfaifilter['SShowVariables'] = false;
56       $SUBfaifilter['SShowPackages']  = false;
57       $SUBfaifilter['SShowPartitions']= false;
58       register_global("SUBfaifilter", $SUBfaifilter);
59     }
60   }
62   function execute()
63   {
64     /* Fill templating stuff */
65     $smarty     = get_smarty();
66     $display = "";
68     $SUBfaifilter = $_SESSION['SUBfaifilter'];
70     /* If someone used the apply button, update searchfilter */
71     if(isset($_POST['Sregex'])){
72       foreach($SUBfaifilter as $key => $val){
73         if(!isset($_POST[$key])){
74           $SUBfaifilter[$key] = false;
75         }else{
76           $SUBfaifilter[$key] =$_POST[$key];
77         }
78       }
79       $SUBfaifilter['Sregex']= $_POST['Sregex'];
80       if(!strstr($SUBfaifilter['Sregex'],"*")){
81         $SUBfaifilter['Sregex'] = $SUBfaifilter['Sregex']."*";
82       }
83     }
84   
85     /* Save current searchfilter in session*/
86     $_SESSION['SUBfaifilter']= $SUBfaifilter;
88     /* Check if we used a checkboxe from the list, to select dselect an entry */
89     foreach($_POST as $name => $value){
90       foreach($this->FAIAllclasses as $class => $obj){
91         if(isset($_POST["ON_PAGE_".$class])){
92           if(isset($_POST['USE_'.$class])){
93             $this->FAIAllclasses[$class]['status']=true;  
94           }else{
95             $this->FAIAllclasses[$class]['status']=false;  
96           }    
97         }
98       }
99     }
101     /* Create different picture for each object type */
102     $objTypes['FAIhook']            = "<image src='images/fai_hook.png' title='"._("Hook bundle")."' alt=''>&nbsp;";
103     $objTypes['FAItemplate']        = "<image src='images/fai_template.png' title='"._("Template bundle")."' alt=''>&nbsp;";
104     $objTypes['FAIscript']          = "<image src='images/fai_script.png' title='"._("Script bundle")."' alt=''>&nbsp;";
105     $objTypes['FAIvariable']        = "<image src='images/fai_variable.png' title='"._("Variable bundle")."' alt=''>&nbsp;";
106     $objTypes['FAIpackages']        = "<image src='images/fai_packages.png' title='"._("Package bundle")."' alt=''>&nbsp;";
107     $objTypes['FAIpartitionTable']  = "<image src='images/fai_partitionTable.png' title='"._("Partition table")."' alt=''>&nbsp;";
109     /* assign basic attributes */
110     foreach($this->attributes as $attrs){
111       $smarty->assign($attrs,stripslashes($this->$attrs));
112     }
114     /* Assign all filter attributes to smarty */
115     foreach($SUBfaifilter as $key => $val){
116       if(($key != "base")&&($key != "Sregex")){
117         if($val){
118           $smarty->assign($key."CHK", " checked ");
119         }else{
120           $smarty->assign($key."CHK", "");
121         }
122       }else{
123         $smarty->assign($key,$val);
124       }
125     }
126   
127     /* Create a divlist to display all available class names with the depending object types */
128     $divlist = new divlist("ProfileEntry");
129     $divlist->SetSummary(_("This list displays all assigned class names for this profile."));
130     $divlist->SetEntriesPerPage(20);
131     $divlist->SetHeader(array(array("string"=>"Class name"),
132                               array("string"=>"Objects")));
134     /* Action button allows us to delete an entry */
135     $action = "<input type='hidden' name='ON_PAGE_%KEY%' value='1'>
136               <input type='checkbox' name='USE_%KEY%' value='%KEY%' onChange='document.mainform.submit();' %CHECK%>";
138     /* Check every single class name to match the current search filter */
139     foreach($this->FAIAllclasses as $usedClass => $classes){
141       $fi = str_replace("*",".*",$SUBfaifilter['Sregex']);  
142  
143       $abort = false; 
144       if(!preg_match("/".$fi."/",$usedClass)){
145         $abort = true;
146       }
147       if(($SUBfaifilter['SShowScripts'])&&(!in_array('FAIscript',$classes['objects']))){
148         $abort = true;
149       }
150       if(($SUBfaifilter['SShowTemplates'])&&(!in_array('FAItemplate',$classes['objects']))){
151         $abort = true;
152       }
153       if(($SUBfaifilter['SShowHooks'])&&(!in_array('FAIhook',$classes['objects']))){
154         $abort = true;
155       }
156       if(($SUBfaifilter['SShowVariables'])&&(!in_array('FAIvariable',$classes['objects']))){
157         $abort = true;
158       }
159       if(($SUBfaifilter['SShowPartitions'])&&(!in_array('FAIpartitionTable',$classes['objects']))){
160         $abort = true;
161       }
162       if(($SUBfaifilter['SShowPackages'])&&(!in_array('FAIpackages',$classes['objects']))){
163         $abort = true;
164       }
166       if(!$abort){
167         $str = "";
168         foreach($classes['objects'] as $class => $obj){
169           $str.= $objTypes[$obj];
170         }
172         /* Is this entry selected */ 
173         if($classes['status']==true){
174           $action_check = preg_replace("/%CHECK%/"," checked ",$action);
175         }else{
176           $action_check = preg_replace("/%CHECK%/","",$action);
177         }      
178         
179         /* Append to list */
180         $field1 = array("string"=> preg_replace("/%KEY%/",$usedClass,$action_check).$usedClass,"attach"=>"");
181         $field2 = array("string"=> $str,"attach"=>"");
182         $divlist->AddEntry(array($field1,$field2));
183       }
184     }
186     $smarty->assign("faihead"       , "");
187     $smarty->assign("failist"       , $divlist->DrawList());
188     $smarty->assign("infoimage"     , get_template_path('images/info.png'));
189     $smarty->assign("launchimage"   , get_template_path('images/launch.png'));
190     $smarty->assign("alphabet"      , generate_alphabet());
191     $smarty->assign("apply"         , apply_filter(TRUE));
192     $smarty->assign("search_image"  , get_template_path('images/search.png'));
194     $display.= $smarty->fetch(get_template_path('faiProfileEntry.tpl', TRUE));
195     return($display);
196   }
198   /* Save data to object */
199   function save_object()
200   {
201   }
203   /* Check supplied data */
204   function check()
205   {
206     $message= array();
207     return ($message);
208   }
210   function save()
211   {
212     $tmp = array();
213     foreach($this->FAIAllclasses as $class => $obj){
214       if($obj['status']==true){
215         $tmp[$class]=$class;
216       }
217     }
218     return($tmp);
219   }
221 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
222 ?>