ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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 ilObjMediaPool($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  $this->ilObject($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 /* case "fold":
248  if (ilObject::_lookupType($fid) == "fold")
249  {
250  include_once("./Modules/Folder/classes/class.ilObjFolder.php");
251  $fold = new ilObjFolder($fid, false);
252  $fold->delete();
253  }
254  break;*/
255  }
256  }
257 
258  return true;
259  }
260 
261 
275  function notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params = 0)
276  {
277  global $tree;
278 
279  switch ($a_event)
280  {
281  case "link":
282 
283  //var_dump("<pre>",$a_params,"</pre>");
284  //echo "Module name ".$this->getRefId()." triggered by link event. Objects linked into target object ref_id: ".$a_ref_id;
285  //exit;
286  break;
287 
288  case "cut":
289 
290  //echo "Module name ".$this->getRefId()." triggered by cut event. Objects are removed from target object ref_id: ".$a_ref_id;
291  //exit;
292  break;
293 
294  case "copy":
295 
296  //var_dump("<pre>",$a_params,"</pre>");
297  //echo "Module name ".$this->getRefId()." triggered by copy event. Objects are copied into target object ref_id: ".$a_ref_id;
298  //exit;
299  break;
300 
301  case "paste":
302 
303  //echo "Module name ".$this->getRefId()." triggered by paste (cut) event. Objects are pasted into target object ref_id: ".$a_ref_id;
304  //exit;
305  break;
306 
307  case "new":
308 
309  //echo "Module name ".$this->getRefId()." triggered by paste (new) event. Objects are applied to target object ref_id: ".$a_ref_id;
310  //exit;
311  break;
312  }
313 
314  // At the beginning of the recursive process it avoids second call of the notify function with the same parameter
315  if ($a_node_id==$_GET["ref_id"])
316  {
317  $parent_obj =& $this->ilias->obj_factory->getInstanceByRefId($a_node_id);
318  $parent_type = $parent_obj->getType();
319  if($parent_type == $this->getType())
320  {
321  $a_node_id = (int) $tree->getParentId($a_node_id);
322  }
323  }
324 
325  parent::notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params);
326  }
327 
328 
332  function getChilds($obj_id = "", $a_type = "")
333  {
334  $objs = array();
335  $mobs = array();
336  $pgs = array();
337  if ($obj_id == "")
338  {
339  $obj_id = $this->tree->getRootId();
340  }
341 
342  if ($a_type == "fold" || $a_type == "")
343  {
344  $objs = $this->tree->getChildsByType($obj_id, "fold");
345  }
346  if ($a_type == "mob" || $a_type == "")
347  {
348  $mobs = $this->tree->getChildsByType($obj_id, "mob");
349  }
350  foreach($mobs as $key => $mob)
351  {
352  $objs[] = $mob;
353  }
354  if ($a_type == "pg" || $a_type == "")
355  {
356  $pgs = $this->tree->getChildsByType($obj_id, "pg");
357  }
358  foreach($pgs as $key => $pg)
359  {
360  $objs[] = $pg;
361  }
362 
363  return $objs;
364  }
365 
369  function getChildsExceptFolders($obj_id = "")
370  {
371  $objs = array();
372  $mobs = array();
373  if ($obj_id == "")
374  {
375  $obj_id = $this->tree->getRootId();
376  }
377 
378  $objs = $this->tree->getFilteredChilds(array("fold", "dummy"), $obj_id);
379  return $objs;
380  }
381 
385  function getMediaObjects($a_title_filter = "", $a_format_filter = "", $a_keyword_filter = '', $a_caption_filter)
386  {
387  global $ilDB;
388 
389  $query = "SELECT DISTINCT mep_tree.*, object_data.* ".
390  "FROM mep_tree JOIN mep_item ON (mep_tree.child = mep_item.obj_id) ".
391  " JOIN object_data ON (mep_item.foreign_id = object_data.obj_id) ";
392 
393  if ($a_format_filter != "" or $a_caption_filter != '')
394  {
395  $query.= " JOIN media_item ON (media_item.mob_id = object_data.obj_id) ";
396  }
397 
398  $query .=
399  " WHERE mep_tree.mep_id = ".$ilDB->quote($this->getId(), "integer").
400  " AND object_data.type = ".$ilDB->quote("mob", "text");
401 
402  // filter
403  if (trim($a_title_filter) != "") // title
404  {
405  $query.= " AND ".$ilDB->like("object_data.title", "text", "%".trim($a_title_filter)."%");
406  }
407  if ($a_format_filter != "") // format
408  {
409  $filter = ($a_format_filter == "unknown")
410  ? ""
411  : $a_format_filter;
412  $query.= " AND ".$ilDB->equals("media_item.format", $filter, "text", true);
413  }
414  if(trim($a_caption_filter))
415  {
416  $query .= 'AND '.$ilDB->like('media_item.caption', 'text', '%'.trim($a_caption_filter).'%');
417  }
418 
419  $query.=
420  " ORDER BY object_data.title";
421 
422  $objs = array();
423  $set = $ilDB->query($query);
424  while ($rec = $ilDB->fetchAssoc($set))
425  {
426  $rec["foreign_id"] = $rec["obj_id"];
427  $rec["obj_id"] = "";
428  $objs[] = $rec;
429  }
430 
431  // Keyword filter
432  if($a_keyword_filter)
433  {
434  include_once './Services/MetaData/classes/class.ilMDKeyword.php';
435  $res = ilMDKeyword::_searchKeywords($a_keyword_filter,'mob',0);
436 
437  foreach($objs as $obj)
438  {
439  if(in_array($obj['foreign_id'],$res))
440  {
441  $filtered[] = $obj;
442  }
443  }
444  return (array) $filtered;
445  }
446  return $objs;
447  }
448 
452  function getAllMobIds($a_id)
453  {
454  global $ilDB;
455 
456  $query = "SELECT foreign_id as id FROM ".
457  " mep_tree JOIN mep_item ON (mep_tree.child = mep_item.obj_id) ".
458  " JOIN object_data ON (mep_item.foreign_id = object_data.obj_id) ".
459  " WHERE mep_tree.mep_id = ".$ilDB->quote($a_id, "integer").
460  " AND mep_item.type = ".$ilDB->quote("mob", "text").
461  " AND object_data.type = ".$ilDB->quote("mob", "text");
462  $set = $ilDB->query($query);
463  $ids = array();
464  while ($rec = $ilDB->fetchAssoc($set))
465  {
466  $ids[] = $rec["id"];
467  }
468  return $ids;
469  }
470 
474  function getUsedFormats()
475  {
476  global $ilDB, $lng;
477 
478  $query = "SELECT DISTINCT media_item.format f FROM mep_tree ".
479  " JOIN mep_item ON (mep_item.obj_id = mep_tree.child) ".
480  " JOIN object_data ON (mep_item.foreign_id = object_data.obj_id) ".
481  " JOIN media_item ON (media_item.mob_id = object_data.obj_id) ".
482  " WHERE mep_tree.mep_id = ".$ilDB->quote($this->getId(), "integer").
483  " AND object_data.type = ".$ilDB->quote("mob", "text").
484  " ORDER BY f";
485  $formats = array();
486  $set = $ilDB->query($query);
487  while ($rec = $ilDB->fetchAssoc($set))
488  {
489  if ($rec["f"] != "")
490  {
491  $formats[$rec["f"]] = $rec["f"];
492  }
493  else
494  {
495  $formats["unknown"] = $lng->txt("mep_unknown");
496  }
497  }
498 
499  return $formats;
500  }
501 
502  function getParentId($obj_id = "")
503  {
504  if ($obj_id == "")
505  {
506  return false;
507  }
508  if ($obj_id == $this->tree->getRootId())
509  {
510  return false;
511  }
512 
513  return $this->tree->getParentId($obj_id);
514  }
515 
521  function insertInTree($a_obj_id, $a_parent = "")
522  {
523  if (!$this->tree->isInTree($a_obj_id))
524  {
525  $parent = ($a_parent == "")
526  ? $this->tree->getRootId()
527  : $a_parent;
528  $this->tree->insertNode($a_obj_id, $parent);
529  return true;
530  }
531  else
532  {
533  return false;
534  }
535  }
536 
537 
542  function deleteChild($obj_id)
543  {
544  $fid = ilMediaPoolItem::lookupForeignId($obj_id);
547 
548  $node_data = $this->tree->getNodeData($obj_id);
549  $subtree = $this->tree->getSubtree($node_data);
550 
551  // delete tree
552  if($this->tree->isInTree($obj_id))
553  {
554  $this->tree->deleteTree($node_data);
555  }
556 
557  // delete objects
558  foreach ($subtree as $node)
559  {
560  $fid = ilMediaPoolItem::lookupForeignId($node["child"]);
561  if ($node["type"] == "mob")
562  {
563  if (ilObject::_lookupType($fid) == "mob")
564  {
565  $obj =& new ilObjMediaObject($fid);
566  $obj->delete();
567  }
568  }
569 
570  if ($node["type"] == "fold")
571  {
572  if ($fid > 0 && ilObject::_lookupType($fid) == "fold")
573  {
574  $obj = new ilObjFolder($fid, false);
575  $obj->delete();
576  }
577  }
578 
579  if ($node["type"] == "pg")
580  {
581  include_once("./Modules/MediaPool/classes/class.ilMediaPoolPage.php");
582  if (ilMediaPoolPage::_exists($node["child"]))
583  {
584  $pg = new ilMediaPoolPage($node["child"]);
585  $pg->delete();
586  }
587  }
588 
589  include_once("./Modules/MediaPool/classes/class.ilMediaPoolItem.php");
590  $item = new ilMediaPoolItem($node["child"]);
591  $item->delete();
592  }
593  }
594 
601  static function isForeignIdInTree($a_pool_id, $a_foreign_id)
602  {
603  global $ilDB;
604 
605  $set = $ilDB->query("SELECT * FROM mep_tree JOIN mep_item ON (child = obj_id) WHERE ".
606  " foreign_id = ".$ilDB->quote($a_foreign_id, "integer").
607  " AND mep_id = ".$ilDB->quote($a_pool_id, "integer")
608  );
609  if ($rec = $ilDB->fetchAssoc($set))
610  {
611  return true;
612  }
613  return false;
614  }
615 
619  static function isItemIdInTree($a_pool_id, $a_item_id)
620  {
621  global $ilDB;
622 
623  $set = $ilDB->query("SELECT * FROM mep_tree WHERE child = ".
624  $ilDB->quote($a_item_id, "integer").
625  " AND mep_id = ".$ilDB->quote($a_pool_id, "integer"));
626  if ($rec = $ilDB->fetchAssoc($set))
627  {
628  return true;
629  }
630  return false;
631  }
632 
639  function createFolder($a_title, $a_parent = 0)
640  {
641  // perform save
642  $mep_item = new ilMediaPoolItem();
643  $mep_item->setTitle($a_title);
644  $mep_item->setType("fold");
645  $mep_item->create();
646  if ($mep_item->getId() > 0)
647  {
648  $tree = $this->getTree();
649  $parent = $a_parent > 0
650  ? $a_parent
651  : $tree->getRootId();
652  $this->insertInTree($mep_item->getId(), $parent);
653  return $mep_item->getId();
654  }
655  return false;
656  }
657 
664  public function cloneObject($a_target_id,$a_copy_id = 0)
665  {
666  global $ilDB, $ilUser, $ilias;
667 
668  $new_obj = parent::cloneObject($a_target_id,$a_copy_id);
669 
670  $new_obj->setTitle($this->getTitle());
671  $new_obj->setDescription($this->getDescription());
672  $new_obj->setDefaultWidth($this->getDefaultWidth());
673  $new_obj->setDefaultHeight($this->getDefaultHeight());
674  $new_obj->update();
675 
676  // copy content
677  $this->copyTreeContent($new_obj, $new_obj->getTree()->readRootId(),
678  $this->getTree()->readRootId());
679 
680  return $new_obj;
681  }
682 
689  function copyTreeContent($a_new_obj, $a_target_parent, $a_source_parent)
690  {
691  include_once("./Modules/MediaPool/classes/class.ilMediaPoolItem.php");
692  include_once("./Modules/MediaPool/classes/class.ilMediaPoolPage.php");
693  include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
694 
695  // get all chapters of root lm
696  $nodes = $this->getTree()->getChilds($a_source_parent);
697  foreach ($nodes as $node)
698  {
699  $item = new ilMediaPoolItem();
700  $item->setType($node["type"]);
701  switch ($node["type"])
702  {
703  case "mob":
704  $mob_id = ilMediaPoolItem::lookupForeignId($node["child"]);
705  $mob = new ilObjMediaObject($mob_id);
706  $new_mob = $mob->duplicate();
707  $item->setForeignId($new_mob->getId());
708  $item->setTitle($new_mob->getTitle());
709  $item->create();
710  break;
711 
712  case "pg":
713  $item->setTitle($node["title"]);
714  $item->create();
715  $page = new ilMediaPoolPage($node["child"]);
716  $new_page = new ilMediaPoolPage();
717  $new_page->setParentId($a_new_obj->getId());
718  $new_page->setId($item->getId());
719  $new_page->create();
720 
721  // copy page
722  $page->copy($new_page->getId(), $new_page->getParentType(), $new_page->getParentId(), true);
723  //$new_page->setXMLContent($page->copyXMLContent(true));
724  //$new_page->buildDom();
725  //$new_page->update();
726  break;
727 
728  case "fold":
729  $item->setTitle($node["title"]);
730  $item->create();
731  break;
732  }
733 
734  // insert item into tree
735  $a_new_obj->insertInTree($item->getId(), $a_target_parent);
736 
737  // handle childs
738  $this->copyTreeContent($a_new_obj, $item->getId(), $node["child"]);
739  }
740  }
741 
747  function exportXML($a_master_only = false)
748  {
749  if ($a_master_only)
750  {
751  include_once("./Services/Export/classes/class.ilExport.php");
752  $exp = new ilExport();
753  $conf = $exp->getConfig("Modules/MediaPool");
754  $conf->setMasterLanguageOnly(true);
755  $exp->exportObject($this->getType(),$this->getId(), "4.4.0");
756  }
757  }
758 
759 }
760 ?>
static lookupType($a_id)
Lookup type.
getChildsExceptFolders($obj_id="")
get childs of node
ilObjMediaPool($a_id=0, $a_call_by_reference=true)
Constructor public.
Class ilObjFolder.
$_GET["client_id"]
getDefaultWidth()
Get default width.
getAllMobIds($a_id)
Get all media object ids.
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.
Class ilMediaPoolPage.
notify($a_event, $a_ref_id, $a_parent_non_rbac_id, $a_node_id, $a_params=0)
notifys an object about an event occured Based on the event happend, each object may decide how it re...
getChilds($obj_id="", $a_type="")
get childs of node
ilObject($a_id=0, $a_reference=true)
Constructor public.
cloneObject($a_target_id, $a_copy_id=0)
Clone media pool.
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.
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
redirection script todo: (a better solution should control the processing via a xml file) ...
Class ilObjMediaObject.
getType()
get object type public
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
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.
static lookupTitle($a_id)
Lookup title.
createMepTree()
Create media pool tree.
Media pool object.
global $ilUser
Definition: imgupload.php:15
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.
static _exists($a_id)
Check whether meida pool page exists.
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.