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