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()){
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'])){
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 }
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=''> ";
103 $objTypes['FAItemplate'] = "<image src='images/fai_template.png' title='"._("Template bundle")."' alt=''> ";
104 $objTypes['FAIscript'] = "<image src='images/fai_script.png' title='"._("Script bundle")."' alt=''> ";
105 $objTypes['FAIvariable'] = "<image src='images/fai_variable.png' title='"._("Variable bundle")."' alt=''> ";
106 $objTypes['FAIpackages'] = "<image src='images/fai_packages.png' title='"._("Package bundle")."' alt=''> ";
107 $objTypes['FAIpartitionTable'] = "<image src='images/fai_partitionTable.png' title='"._("Partition table")."' alt=''> ";
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 }
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']);
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 }
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 }
220 }
221 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
222 ?>