ILIAS  Release_4_4_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilComponent.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 
5 define ("IL_COMP_MODULE", "Modules");
6 define ("IL_COMP_SERVICE", "Services");
7 define ("IL_COMP_PLUGIN", "Plugins");
8 define ("IL_COMP_SLOTS", "Slots");
9 
23 abstract class ilComponent
24 {
40  abstract function getVersion();
41 
42  abstract function isCore();
43 
44  abstract static function getComponentType();
45 
51  abstract function getName();
52 
53  function __construct()
54  {
55  global $ilDB;
56 
57  $set = $ilDB->queryF("SELECT * FROM il_component WHERE type = %s ".
58  " AND name = %s", array("text", "text"),
59  array($this->getComponentType(), $this->getName()));
60  $rec = $ilDB->fetchAssoc($set);
61 
62  $this->setId($rec["id"]);
64  $this->getComponentType(), $this->getName()));
65  }
66 
72  final function setId($a_id)
73  {
74  $this->id = $a_id;
75  }
76 
82  final function getId()
83  {
84  return $this->id;
85  }
86 
92  final function setPluginSlots($a_pluginslots)
93  {
94  $this->pluginslots = $a_pluginslots;
95  }
96 
102  final function getPluginSlots()
103  {
104  return $this->pluginslots;
105  }
106 
113  final static function getComponentObject($a_ctype, $a_cname)
114  {
115  global $ilDB;
116 
117  $set = $ilDB->queryF("SELECT * FROM il_component WHERE type = %s ".
118  " AND name = %s", array("text", "text"),
119  array($a_ctype, $a_cname));
120  if (!$ilDB->fetchAssoc($set))
121  {
122  return null;
123  }
124 
125  switch ($a_ctype)
126  {
127  case IL_COMP_MODULE:
128  if (is_file("./Modules/".$a_cname."/classes/class.il".$a_cname."Module.php"))
129  {
130  include_once("./Modules/".$a_cname."/classes/class.il".$a_cname."Module.php");
131  $class = "il".$a_cname."Module";
132  $comp = new $class();
133  return $comp;
134  }
135  break;
136 
137  case IL_COMP_SERVICE:
138  if (is_file("./Services/".$a_cname."/classes/class.il".$a_cname."Service.php"))
139  {
140  include_once("./Services/".$a_cname."/classes/class.il".$a_cname."Service.php");
141  $class = "il".$a_cname."Service";
142  $comp = new $class();
143  return $comp;
144  }
145  break;
146  }
147 
148  return null;
149  }
150 
156  function setSubDirectory($a_subdirectory)
157  {
158  $this->subdirectory = $a_subdirectory;
159  }
160 
166  function getSubDirectory()
167  {
168  return $this->subdirectory;
169  }
170 
174  static function lookupPluginSlots($a_type, $a_name)
175  {
176  global $ilDB;
177 
178  $set = $ilDB->query("SELECT * FROM il_pluginslot WHERE component = ".
179  $ilDB->quote($a_type."/".$a_name, "text"));
180  $ps = array();
181 //echo "<br>".$a_type."/".$a_name;
182  while($rec = $ilDB->fetchAssoc($set))
183  {
184  $rec["dir"] = "Customizing/global/plugins/".$a_type."/".$a_name."/".$rec["name"];
185  $rec["dir_pres"] = "Customizing/global/plugins/<br />".$a_type."/".$a_name."/".$rec["name"];
186  $rec["lang_prefix"] = ilComponent::lookupId($a_type,$a_name)."_".$rec["id"]."_";
187  $ps[$rec["id"]] = $rec;
188  }
189  return $ps;
190  }
191 
197  function getPluginSlotName($a_id)
198  {
199  $slots = $this->getPluginSlots();
200 
201  return $slots[$a_id]["name"];
202  }
203 
209  function getPluginSlotDirectory($a_id)
210  {
211  $slots = $this->getPluginSlots();
212 
213  return "Customizing/global/plugins/".$this->getComponentType()."/".
214  $this->getName()."/".$slots[$a_id]["name"];
215  }
216 
223  {
224  $slots = $this->getPluginSlots();
225  return $this->getId()."_".$slots[$a_id]["id"]."_";
226  }
227 
231  static function lookupId($a_type, $a_name)
232  {
233  global $ilDB;
234 
235  $set = $ilDB->queryF("SELECT * FROM il_component WHERE type = %s ".
236  " AND name = %s", array("text", "text"),
237  array($a_type, $a_name));
238  $rec = $ilDB->fetchAssoc($set);
239 
240  return $rec["id"];
241  }
242 
246  static final function checkVersionNumber($a_ver)
247  {
248  global $lng;
249 
250  $parts = explode(".", $a_ver);
251 
252  if (count($parts) != 3)
253  {
254  return "Version Number does not conform to format a.b.c";
255  }
256 
257  if (!is_numeric($parts[0]) || !is_numeric($parts[1]) || !is_numeric($parts[2]))
258  {
259  return "Not all version number parts a.b.c are numeric.";
260  }
261 
262  return $parts;
263  }
264 
265  static final function isVersionGreaterString($a_ver1, $a_ver2)
266  {
267  $a_arr1 = ilComponent::checkVersionNumber($a_ver1);
268  $a_arr2 = ilComponent::checkVersionNumber($a_ver2);
269  if (is_array($a_arr1) && is_array($a_arr2))
270  {
271  return ilComponent::isVersionGreater($a_arr1, $a_arr2);
272  }
273  else
274  {
275  return false;
276  }
277  }
278 
287  static final function isVersionGreater($a_ver1, $a_ver2)
288  {
289  if ($a_ver1[0] > $a_ver2[0])
290  {
291  return true;
292  }
293  else if ($a_ver1[0] < $a_ver2[0])
294  {
295  return false;
296  }
297  else if ($a_ver1[1] > $a_ver2[1])
298  {
299  return true;
300  }
301  else if ($a_ver1[1] < $a_ver2[1])
302  {
303  return false;
304  }
305  else if ($a_ver1[2] > $a_ver2[2])
306  {
307  return true;
308  }
309 
310  return false;
311  }
312 
313 }
314 ?>