ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilObjMediaPool.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 require_once "./Services/Object/classes/class.ilObject.php";
5 require_once "./Services/MetaData/classes/class.ilMDLanguageItem.php";
6 require_once("./Modules/Folder/classes/class.ilObjFolder.php");
7 require_once("./Modules/MediaPool/classes/class.ilMediaPoolItem.php");
8 
21 class ilObjMediaPool extends ilObject
22 {
23  var $tree;
25 
32  function __construct($a_id = 0,$a_call_by_reference = true)
33  {
34  // this also calls read() method! (if $a_id is set)
35  $this->type = "mep";
36  parent::__construct($a_id,$a_call_by_reference);
37  }
38 
44  function setDefaultWidth($a_val)
45  {
46  $this->default_width = $a_val;
47  }
48 
54  function getDefaultWidth()
55  {
56  return $this->default_width;
57  }
58 
64  function setDefaultHeight($a_val)
65  {
66  $this->default_height = $a_val;
67  }
68 
74  function getDefaultHeight()
75  {
76  return $this->default_height;
77  }
78 
84  function setForTranslation($a_val)
85  {
86  $this->for_translation = $a_val;
87  }
88 
94  function getForTranslation()
95  {
97  }
98 
102  function read()
103  {
104  global $ilDB;
105 
106  parent::read();
107 
108  $set = $ilDB->query("SELECT * FROM mep_data ".
109  " WHERE id = ".$ilDB->quote($this->getId(), "integer")
110  );
111  if ($rec = $ilDB->fetchAssoc($set))
112  {
113  $this->setDefaultWidth($rec["default_width"]);
114  $this->setDefaultHeight($rec["default_height"]);
115  $this->setForTranslation($rec["for_translation"]);
116  }
117  $this->tree = ilObjMediaPool::getPoolTree($this->getId());
118  }
119 
120 
128  static function getPoolTree($a_obj_id)
129  {
130  $tree = new ilTree($a_obj_id);
131  $tree->setTreeTablePK("mep_id");
132  $tree->setTableNames("mep_tree", "mep_item");
133 
134  return $tree;
135  }
136 
140  function create()
141  {
142  global $ilDB;
143 
144  parent::create();
145 
146  $ilDB->manipulate("INSERT INTO mep_data ".
147  "(id, default_width, default_height, for_translation) VALUES (".
148  $ilDB->quote($this->getId(), "integer").", ".
149  $ilDB->quote($this->getDefaultWidth(), "integer").", ".
150  $ilDB->quote($this->getDefaultHeight(), "integer").", ".
151  $ilDB->quote($this->getForTranslation(), "integer").
152  ")");
153 
154  $this->createMepTree();
155  }
156 
163  function createMepTree()
164  {
165  // create media pool tree
166  $this->tree = new ilTree($this->getId());
167  $this->tree->setTreeTablePK("mep_id");
168  $this->tree->setTableNames('mep_tree','mep_item');
169  $this->tree->addTree($this->getId(), 1);
170  }
171 
172 
176  function &getTree()
177  {
178  return $this->tree;
179  }
180 
187  function update()
188  {
189  global $ilDB;
190 
191  if (!parent::update())
192  {
193  return false;
194  }
195 
196  // put here object specific stuff
197  $ilDB->manipulate("UPDATE mep_data SET ".
198  " default_width = ".$ilDB->quote($this->getDefaultWidth(), "integer").",".
199  " default_height = ".$ilDB->quote($this->getDefaultHeight(), "integer").",".
200  " for_translation = ".$ilDB->quote($this->getForTranslation(), "integer")." ".
201  " WHERE id = ".$ilDB->quote($this->getId(), "integer")
202  );
203 
204  return true;
205  }
206 
207 
218  function delete()
219  {
220  // always call parent delete function first!!
221  if (!parent::delete())
222  {
223  return false;
224  }
225 
226  // get childs
227  $childs = $this->tree->getSubTree($this->tree->getNodeData($this->tree->readRootId()));
228 
229  // delete tree
230  $this->tree->removeTree($this->tree->getTreeId());
231 
232  // delete childs
233  foreach ($childs as $child)
234  {
235  $fid = ilMediaPoolItem::lookupForeignId($child["obj_id"]);
236  switch ($child["type"])
237  {
238  case "mob":
239  if (ilObject::_lookupType($fid) == "mob")
240  {
241  include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
242  $mob = new ilObjMediaObject($fid);
243  $mob->delete();
244  }
245  break;
246  }
247  }
248 
249  return true;
250  }
251 
255  function getChilds($obj_id = "", $a_type = "")
256  {
257  $objs = array();
258  $mobs = array();
259  $pgs = array();
260  if ($obj_id == "")
261  {
262  $obj_id = $this->tree->getRootId();
263  }
264 
265  if ($a_type == "fold" || $a_type == "")
266  {
267  $objs = $this->tree->getChildsByType($obj_id, "fold");
268  }
269  if ($a_type == "mob" || $a_type == "")
270  {
271  $mobs = $this->tree->getChildsByType($obj_id, "mob");
272  }
273  foreach($mobs as $key => $mob)
274  {
275  $objs[] = $mob;
276  }
277  if ($a_type == "pg" || $a_type == "")
278  {
279  $pgs = $this->tree->getChildsByType($obj_id, "pg");
280  }
281  foreach($pgs as $key => $pg)
282  {
283  $objs[] = $pg;
284  }
285 
286  return $objs;
287  }
288 
292  function getChildsExceptFolders($obj_id = "")
293  {
294  if ($obj_id == "")
295  {
296  $obj_id = $this->tree->getRootId();
297  }
298 
299  $objs = $this->tree->getFilteredChilds(array("fold", "dummy"), $obj_id);
300  return $objs;
301  }
302 
306  function getMediaObjects($a_title_filter = "", $a_format_filter = "", $a_keyword_filter = '', $a_caption_filter)
307  {
308  global $ilDB;
309 
310  $query = "SELECT DISTINCT mep_tree.*, object_data.* ".
311  "FROM mep_tree JOIN mep_item ON (mep_tree.child = mep_item.obj_id) ".
312  " JOIN object_data ON (mep_item.foreign_id = object_data.obj_id) ";
313 
314  if ($a_format_filter != "" or $a_caption_filter != '')
315  {
316  $query.= " JOIN media_item ON (media_item.mob_id = object_data.obj_id) ";
317  }
318 
319  $query .=
320  " WHERE mep_tree.mep_id = ".$ilDB->quote($this->getId(), "integer").
321  " AND object_data.type = ".$ilDB->quote("mob", "text");
322 
323  // filter
324  if (trim($a_title_filter) != "") // title
325  {
326  $query.= " AND ".$ilDB->like("object_data.title", "text", "%".trim($a_title_filter)."%");
327  }
328  if ($a_format_filter != "") // format
329  {
330  $filter = ($a_format_filter == "unknown")
331  ? ""
332  : $a_format_filter;
333  $query.= " AND ".$ilDB->equals("media_item.format", $filter, "text", true);
334  }
335  if(trim($a_caption_filter))
336  {
337  $query .= 'AND '.$ilDB->like('media_item.caption', 'text', '%'.trim($a_caption_filter).'%');
338  }
339 
340  $query.=
341  " ORDER BY object_data.title";
342 
343  $objs = array();
344  $set = $ilDB->query($query);
345  while ($rec = $ilDB->fetchAssoc($set))
346  {
347  $rec["foreign_id"] = $rec["obj_id"];
348  $rec["obj_id"] = "";
349  $objs[] = $rec;
350  }
351 
352  // Keyword filter
353  if($a_keyword_filter)
354  {
355  include_once './Services/MetaData/classes/class.ilMDKeyword.php';
356  $res = ilMDKeyword::_searchKeywords($a_keyword_filter,'mob',0);
357 
358  foreach($objs as $obj)
359  {
360  if(in_array($obj['foreign_id'],$res))
361  {
362  $filtered[] = $obj;
363  }
364  }
365  return (array) $filtered;
366  }
367  return $objs;
368  }
369 
370 
375  public static function getAllMobIds($a_id)
376  {
377  global $ilDB;
378 
379  $query = "SELECT foreign_id as id FROM ".
380  " mep_tree JOIN mep_item ON (mep_tree.child = mep_item.obj_id) ".
381  " JOIN object_data ON (mep_item.foreign_id = object_data.obj_id) ".
382  " WHERE mep_tree.mep_id = ".$ilDB->quote($a_id, "integer").
383  " AND mep_item.type = ".$ilDB->quote("mob", "text").
384  " AND object_data.type = ".$ilDB->quote("mob", "text");
385  $set = $ilDB->query($query);
386  $ids = array();
387  while ($rec = $ilDB->fetchAssoc($set))
388  {
389  $ids[] = $rec["id"];
390  }
391  return $ids;
392  }
393 
397  function getUsedFormats()
398  {
399  global $ilDB, $lng;
400 
401  $query = "SELECT DISTINCT media_item.format f FROM mep_tree ".
402  " JOIN mep_item ON (mep_item.obj_id = mep_tree.child) ".
403  " JOIN object_data ON (mep_item.foreign_id = object_data.obj_id) ".
404  " JOIN media_item ON (media_item.mob_id = object_data.obj_id) ".
405  " WHERE mep_tree.mep_id = ".$ilDB->quote($this->getId(), "integer").
406  " AND object_data.type = ".$ilDB->quote("mob", "text").
407  " ORDER BY f";
408  $formats = array();
409  $set = $ilDB->query($query);
410  while ($rec = $ilDB->fetchAssoc($set))
411  {
412  if ($rec["f"] != "")
413  {
414  $formats[$rec["f"]] = $rec["f"];
415  }
416  else
417  {
418  $formats["unknown"] = $lng->txt("mep_unknown");
419  }
420  }
421 
422  return $formats;
423  }
424 
425  function getParentId($obj_id = "")
426  {
427  if ($obj_id == "")
428  {
429  return false;
430  }
431  if ($obj_id == $this->tree->getRootId())
432  {
433  return false;
434  }
435 
436  return $this->tree->getParentId($obj_id);
437  }
438 
444  function insertInTree($a_obj_id, $a_parent = "")
445  {
446  if (!$this->tree->isInTree($a_obj_id))
447  {
448  $parent = ($a_parent == "")
449  ? $this->tree->getRootId()
450  : $a_parent;
451  $this->tree->insertNode($a_obj_id, $parent);
452  return true;
453  }
454  else
455  {
456  return false;
457  }
458  }
459 
460 
465  function deleteChild($obj_id)
466  {
467  $node_data = $this->tree->getNodeData($obj_id);
468  $subtree = $this->tree->getSubtree($node_data);
469 
470  // delete tree
471  if($this->tree->isInTree($obj_id))
472  {
473  $this->tree->deleteTree($node_data);
474  }
475 
476  // delete objects
477  foreach ($subtree as $node)
478  {
479  $fid = ilMediaPoolItem::lookupForeignId($node["child"]);
480  if ($node["type"] == "mob")
481  {
482  if (ilObject::_lookupType($fid) == "mob")
483  {
484  $obj = new ilObjMediaObject($fid);
485  $obj->delete();
486  }
487  }
488 
489  if ($node["type"] == "fold")
490  {
491  if ($fid > 0 && ilObject::_lookupType($fid) == "fold")
492  {
493  $obj = new ilObjFolder($fid, false);
494  $obj->delete();
495  }
496  }
497 
498  if ($node["type"] == "pg")
499  {
500  include_once("./Modules/MediaPool/classes/class.ilMediaPoolPage.php");
501  if (ilPageObject::_exists("mep", $node["child"]))
502  {
503  $pg = new ilMediaPoolPage($node["child"]);
504  $pg->delete();
505  }
506  }
507 
508  include_once("./Modules/MediaPool/classes/class.ilMediaPoolItem.php");
509  $item = new ilMediaPoolItem($node["child"]);
510  $item->delete();
511  }
512  }
513 
520  static function isForeignIdInTree($a_pool_id, $a_foreign_id)
521  {
522  global $ilDB;
523 
524  $set = $ilDB->query("SELECT * FROM mep_tree JOIN mep_item ON (child = obj_id) WHERE ".
525  " foreign_id = ".$ilDB->quote($a_foreign_id, "integer").
526  " AND mep_id = ".$ilDB->quote($a_pool_id, "integer")
527  );
528  if ($rec = $ilDB->fetchAssoc($set))
529  {
530  return true;
531  }
532  return false;
533  }
534 
538  static function isItemIdInTree($a_pool_id, $a_item_id)
539  {
540  global $ilDB;
541 
542  $set = $ilDB->query("SELECT * FROM mep_tree WHERE child = ".
543  $ilDB->quote($a_item_id, "integer").
544  " AND mep_id = ".$ilDB->quote($a_pool_id, "integer"));
545  if ($rec = $ilDB->fetchAssoc($set))
546  {
547  return true;
548  }
549  return false;
550  }
551 
558  function createFolder($a_title, $a_parent = 0)
559  {
560  // perform save
561  $mep_item = new ilMediaPoolItem();
562  $mep_item->setTitle($a_title);
563  $mep_item->setType("fold");
564  $mep_item->create();
565  if ($mep_item->getId() > 0)
566  {
567  $tree = $this->getTree();
568  $parent = $a_parent > 0
569  ? $a_parent
570  : $tree->getRootId();
571  $this->insertInTree($mep_item->getId(), $parent);
572  return $mep_item->getId();
573  }
574  return false;
575  }
576 
583  public function cloneObject($a_target_id,$a_copy_id = 0, $a_omit_tree = false)
584  {
585  $new_obj = parent::cloneObject($a_target_id,$a_copy_id, $a_omit_tree);
586 
587  $new_obj->setTitle($this->getTitle());
588  $new_obj->setDescription($this->getDescription());
589  $new_obj->setDefaultWidth($this->getDefaultWidth());
590  $new_obj->setDefaultHeight($this->getDefaultHeight());
591  $new_obj->update();
592 
593  // copy content
594  $this->copyTreeContent($new_obj, $new_obj->getTree()->readRootId(),
595  $this->getTree()->readRootId());
596 
597  return $new_obj;
598  }
599 
606  function copyTreeContent($a_new_obj, $a_target_parent, $a_source_parent)
607  {
608  include_once("./Modules/MediaPool/classes/class.ilMediaPoolItem.php");
609  include_once("./Modules/MediaPool/classes/class.ilMediaPoolPage.php");
610  include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
611 
612  // get all chapters of root lm
613  $nodes = $this->getTree()->getChilds($a_source_parent);
614  foreach ($nodes as $node)
615  {
616  $item = new ilMediaPoolItem();
617  $item->setType($node["type"]);
618  switch ($node["type"])
619  {
620  case "mob":
621  $mob_id = ilMediaPoolItem::lookupForeignId($node["child"]);
622  $mob = new ilObjMediaObject($mob_id);
623  $new_mob = $mob->duplicate();
624  $item->setForeignId($new_mob->getId());
625  $item->setTitle($new_mob->getTitle());
626  $item->create();
627  break;
628 
629  case "pg":
630  $item->setTitle($node["title"]);
631  $item->create();
632  $page = new ilMediaPoolPage($node["child"]);
633  $new_page = new ilMediaPoolPage();
634  $new_page->setParentId($a_new_obj->getId());
635  $new_page->setId($item->getId());
636  $new_page->create();
637 
638  // copy page
639  $page->copy($new_page->getId(), $new_page->getParentType(), $new_page->getParentId(), true);
640  break;
641 
642  case "fold":
643  $item->setTitle($node["title"]);
644  $item->create();
645  break;
646  }
647 
648  // insert item into tree
649  $a_new_obj->insertInTree($item->getId(), $a_target_parent);
650 
651  // handle childs
652  $this->copyTreeContent($a_new_obj, $item->getId(), $node["child"]);
653  }
654  }
655 
661  function exportXML($a_master_only = false)
662  {
663  if ($a_master_only)
664  {
665  include_once("./Services/Export/classes/class.ilExport.php");
666  $exp = new ilExport();
667  $conf = $exp->getConfig("Modules/MediaPool");
668  $conf->setMasterLanguageOnly(true);
669  $exp->exportObject($this->getType(),$this->getId(), "4.4.0");
670  }
671  }
672 
673 }
674 ?>
static _exists($a_parent_type, $a_id, $a_lang="", $a_no_cache=false)
Checks whether page exists.
getChildsExceptFolders($obj_id="")
get childs of node
__construct($a_id=0, $a_call_by_reference=true)
Constructor public.
Class ilObjFolder.
cloneObject($a_target_id, $a_copy_id=0, $a_omit_tree=false)
Clone media pool.
getDefaultWidth()
Get default width.
static _searchKeywords($a_query, $a_type, $a_rbac_id=0)
Search for objects by keywords.
Class ilObject Basic functions for all objects.
setForTranslation($a_val)
Set for translation.
static getAllMobIds($a_id)
Class ilMediaPoolPage.
getChilds($obj_id="", $a_type="")
get childs of node
static isItemIdInTree($a_pool_id, $a_item_id)
Check wheter a mep item id is in the media pool.
static lookupForeignId($a_id)
Lookup Foreign Id.
$a_type
Definition: workflow.php:93
static isForeignIdInTree($a_pool_id, $a_foreign_id)
Check whether foreign id is in tree.
insertInTree($a_obj_id, $a_parent="")
Insert into tree.
$mobs
getId()
get object id public
setDefaultWidth($a_val)
Set default width.
getMediaObjects($a_title_filter="", $a_format_filter="", $a_keyword_filter='', $a_caption_filter)
Get media objects.
create()
create new media pool
getTitle()
get object title public
getDescription()
get object description
Class ilObjMediaObject.
getType()
get object type public
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
getDefaultHeight()
Get default height.
update()
update object data
static getPoolTree($a_obj_id)
Get Pool Tree.
Media Pool Item.
createMepTree()
Create media pool tree.
Media pool object.
createFolder($a_title, $a_parent=0)
Create a new folder.
global $ilDB
getForTranslation()
Get for translation.
& getTree()
get media pool folder tree
exportXML($a_master_only=false)
Export.
copyTreeContent($a_new_obj, $a_target_parent, $a_source_parent)
Copy tree content.
getUsedFormats()
Get used formats.
read()
Read pool data.
deleteChild($obj_id)
Delete a child of media tree.
setDefaultHeight($a_val)
Set default height.