ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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  protected $mep_tree;
24  public $for_translation = 0;
25 
32  public function __construct($a_id = 0, $a_call_by_reference = true)
33  {
34  global $DIC;
35 
36  $this->db = $DIC->database();
37  $this->lng = $DIC->language();
38  // this also calls read() method! (if $a_id is set)
39  $this->type = "mep";
40  parent::__construct($a_id, $a_call_by_reference);
41  }
42 
48  public function setDefaultWidth($a_val)
49  {
50  $this->default_width = $a_val;
51  }
52 
58  public function getDefaultWidth()
59  {
60  return $this->default_width;
61  }
62 
68  public function setDefaultHeight($a_val)
69  {
70  $this->default_height = $a_val;
71  }
72 
78  public function getDefaultHeight()
79  {
80  return $this->default_height;
81  }
82 
88  public function setForTranslation($a_val)
89  {
90  $this->for_translation = $a_val;
91  }
92 
98  public function getForTranslation()
99  {
100  return $this->for_translation;
101  }
102 
106  public function read()
107  {
108  $ilDB = $this->db;
109 
110  parent::read();
111 
112  $set = $ilDB->query(
113  "SELECT * FROM mep_data " .
114  " WHERE id = " . $ilDB->quote($this->getId(), "integer")
115  );
116  if ($rec = $ilDB->fetchAssoc($set)) {
117  $this->setDefaultWidth($rec["default_width"]);
118  $this->setDefaultHeight($rec["default_height"]);
119  $this->setForTranslation($rec["for_translation"]);
120  }
121  $this->mep_tree = ilObjMediaPool::_getPoolTree($this->getId());
122  }
123 
124 
132  public static function _getPoolTree($a_obj_id)
133  {
134  $tree = new ilTree($a_obj_id);
135  $tree->setTreeTablePK("mep_id");
136  $tree->setTableNames("mep_tree", "mep_item");
137 
138  return $tree;
139  }
140 
146  public function getPoolTree()
147  {
148  return self::_getPoolTree($this->getId());
149  }
150 
151 
155  public function create()
156  {
157  $ilDB = $this->db;
158 
159  parent::create();
160 
161  $ilDB->manipulate("INSERT INTO mep_data " .
162  "(id, default_width, default_height, for_translation) VALUES (" .
163  $ilDB->quote($this->getId(), "integer") . ", " .
164  $ilDB->quote($this->getDefaultWidth(), "integer") . ", " .
165  $ilDB->quote($this->getDefaultHeight(), "integer") . ", " .
166  $ilDB->quote($this->getForTranslation(), "integer") .
167  ")");
168 
169  $this->createMepTree();
170  }
171 
178  public function createMepTree()
179  {
180  // create media pool tree
181  $this->mep_tree = new ilTree($this->getId());
182  $this->mep_tree->setTreeTablePK("mep_id");
183  $this->mep_tree->setTableNames('mep_tree', 'mep_item');
184  $this->mep_tree->addTree($this->getId(), 1);
185  }
186 
187 
191  public function &getTree()
192  {
193  return $this->mep_tree;
194  }
195 
202  public function update()
203  {
204  $ilDB = $this->db;
205 
206  if (!parent::update()) {
207  return false;
208  }
209 
210  // put here object specific stuff
211  $ilDB->manipulate(
212  "UPDATE mep_data SET " .
213  " default_width = " . $ilDB->quote($this->getDefaultWidth(), "integer") . "," .
214  " default_height = " . $ilDB->quote($this->getDefaultHeight(), "integer") . "," .
215  " for_translation = " . $ilDB->quote($this->getForTranslation(), "integer") . " " .
216  " WHERE id = " . $ilDB->quote($this->getId(), "integer")
217  );
218 
219  return true;
220  }
221 
222 
233  public function delete()
234  {
235  // always call parent delete function first!!
236  if (!parent::delete()) {
237  return false;
238  }
239 
240  // get childs
241  $childs = $this->mep_tree->getSubTree($this->mep_tree->getNodeData($this->mep_tree->readRootId()));
242 
243  // delete tree
244  $this->mep_tree->removeTree($this->mep_tree->getTreeId());
245 
246  // delete childs
247  foreach ($childs as $child) {
248  $fid = ilMediaPoolItem::lookupForeignId($child["obj_id"]);
249  switch ($child["type"]) {
250  case "mob":
251  if (ilObject::_lookupType($fid) == "mob") {
252  include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
253  $mob = new ilObjMediaObject($fid);
254  $mob->delete();
255  }
256  break;
257  }
258  }
259 
260  return true;
261  }
262 
266  public function getChilds($obj_id = "", $a_type = "")
267  {
268  $objs = array();
269  $mobs = array();
270  $pgs = array();
271  if ($obj_id == "") {
272  $obj_id = $this->mep_tree->getRootId();
273  }
274 
275  if ($a_type == "fold" || $a_type == "") {
276  $objs = $this->mep_tree->getChildsByType($obj_id, "fold");
277  }
278  if ($a_type == "mob" || $a_type == "") {
279  $mobs = $this->mep_tree->getChildsByType($obj_id, "mob");
280  }
281  foreach ($mobs as $key => $mob) {
282  $objs[] = $mob;
283  }
284  if ($a_type == "pg" || $a_type == "") {
285  $pgs = $this->mep_tree->getChildsByType($obj_id, "pg");
286  }
287  foreach ($pgs as $key => $pg) {
288  $objs[] = $pg;
289  }
290 
291  return $objs;
292  }
293 
297  public function getChildsExceptFolders($obj_id = "")
298  {
299  if ($obj_id == "") {
300  $obj_id = $this->mep_tree->getRootId();
301  }
302 
303  $objs = $this->mep_tree->getFilteredChilds(array("fold", "dummy"), $obj_id);
304  return $objs;
305  }
306 
310  public function getMediaObjects($a_title_filter = "", $a_format_filter = "", $a_keyword_filter = '', $a_caption_filter)
311  {
312  $ilDB = $this->db;
313 
314  $query = "SELECT DISTINCT mep_tree.*, object_data.* " .
315  "FROM mep_tree JOIN mep_item ON (mep_tree.child = mep_item.obj_id) " .
316  " JOIN object_data ON (mep_item.foreign_id = object_data.obj_id) ";
317 
318  if ($a_format_filter != "" or $a_caption_filter != '') {
319  $query.= " JOIN media_item ON (media_item.mob_id = object_data.obj_id) ";
320  }
321 
322  $query .=
323  " WHERE mep_tree.mep_id = " . $ilDB->quote($this->getId(), "integer") .
324  " AND object_data.type = " . $ilDB->quote("mob", "text");
325 
326  // filter
327  if (trim($a_title_filter) != "") { // title
328  $query.= " AND " . $ilDB->like("object_data.title", "text", "%" . trim($a_title_filter) . "%");
329  }
330  if ($a_format_filter != "") { // format
331  $filter = ($a_format_filter == "unknown")
332  ? ""
333  : $a_format_filter;
334  $query.= " AND " . $ilDB->equals("media_item.format", $filter, "text", true);
335  }
336  if (trim($a_caption_filter)) {
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  $rec["foreign_id"] = $rec["obj_id"];
347  $rec["obj_id"] = "";
348  $objs[] = $rec;
349  }
350 
351  // Keyword filter
352  if ($a_keyword_filter) {
353  include_once './Services/MetaData/classes/class.ilMDKeyword.php';
354  $res = ilMDKeyword::_searchKeywords($a_keyword_filter, 'mob', 0);
355 
356  foreach ($objs as $obj) {
357  if (in_array($obj['foreign_id'], $res)) {
358  $filtered[] = $obj;
359  }
360  }
361  return (array) $filtered;
362  }
363  return $objs;
364  }
365 
366 
371  public static function getAllMobIds($a_id)
372  {
373  global $DIC;
374 
375  $ilDB = $DIC->database();
376 
377  $query = "SELECT foreign_id as id FROM " .
378  " mep_tree JOIN mep_item ON (mep_tree.child = mep_item.obj_id) " .
379  " JOIN object_data ON (mep_item.foreign_id = object_data.obj_id) " .
380  " WHERE mep_tree.mep_id = " . $ilDB->quote($a_id, "integer") .
381  " AND mep_item.type = " . $ilDB->quote("mob", "text") .
382  " AND object_data.type = " . $ilDB->quote("mob", "text");
383  $set = $ilDB->query($query);
384  $ids = array();
385  while ($rec = $ilDB->fetchAssoc($set)) {
386  $ids[] = $rec["id"];
387  }
388  return $ids;
389  }
390 
394  public function getUsedFormats()
395  {
396  $ilDB = $this->db;
397  $lng = $this->lng;
398 
399  $query = "SELECT DISTINCT media_item.format f FROM mep_tree " .
400  " JOIN mep_item ON (mep_item.obj_id = mep_tree.child) " .
401  " JOIN object_data ON (mep_item.foreign_id = object_data.obj_id) " .
402  " JOIN media_item ON (media_item.mob_id = object_data.obj_id) " .
403  " WHERE mep_tree.mep_id = " . $ilDB->quote($this->getId(), "integer") .
404  " AND object_data.type = " . $ilDB->quote("mob", "text") .
405  " ORDER BY f";
406  $formats = array();
407  $set = $ilDB->query($query);
408  while ($rec = $ilDB->fetchAssoc($set)) {
409  if ($rec["f"] != "") {
410  $formats[$rec["f"]] = $rec["f"];
411  } else {
412  $formats["unknown"] = $lng->txt("mep_unknown");
413  }
414  }
415 
416  return $formats;
417  }
418 
419  public function getParentId($obj_id = "")
420  {
421  if ($obj_id == "") {
422  return false;
423  }
424  if ($obj_id == $this->mep_tree->getRootId()) {
425  return false;
426  }
427 
428  return $this->mep_tree->getParentId($obj_id);
429  }
430 
436  public function insertInTree($a_obj_id, $a_parent = "")
437  {
438  if (!$this->mep_tree->isInTree($a_obj_id)) {
439  $parent = ($a_parent == "")
440  ? $this->mep_tree->getRootId()
441  : $a_parent;
442  $this->mep_tree->insertNode($a_obj_id, $parent);
443  return true;
444  } else {
445  return false;
446  }
447  }
448 
449 
454  public function deleteChild($obj_id)
455  {
456  $node_data = $this->mep_tree->getNodeData($obj_id);
457  $subtree = $this->mep_tree->getSubtree($node_data);
458 
459  // delete tree
460  if ($this->mep_tree->isInTree($obj_id)) {
461  $this->mep_tree->deleteTree($node_data);
462  }
463 
464  // delete objects
465  foreach ($subtree as $node) {
466  $fid = ilMediaPoolItem::lookupForeignId($node["child"]);
467  if ($node["type"] == "mob") {
468  if (ilObject::_lookupType($fid) == "mob") {
469  $obj = new ilObjMediaObject($fid);
470  $obj->delete();
471  }
472  }
473 
474  if ($node["type"] == "fold") {
475  if ($fid > 0 && ilObject::_lookupType($fid) == "fold") {
476  $obj = new ilObjFolder($fid, false);
477  $obj->delete();
478  }
479  }
480 
481  if ($node["type"] == "pg") {
482  include_once("./Modules/MediaPool/classes/class.ilMediaPoolPage.php");
483  if (ilPageObject::_exists("mep", $node["child"])) {
484  $pg = new ilMediaPoolPage($node["child"]);
485  $pg->delete();
486  }
487  }
488 
489  include_once("./Modules/MediaPool/classes/class.ilMediaPoolItem.php");
490  $item = new ilMediaPoolItem($node["child"]);
491  $item->delete();
492  }
493  }
494 
501  public static function isForeignIdInTree($a_pool_id, $a_foreign_id)
502  {
503  global $DIC;
504 
505  $ilDB = $DIC->database();
506 
507  $set = $ilDB->query(
508  "SELECT * FROM mep_tree JOIN mep_item ON (child = obj_id) WHERE " .
509  " foreign_id = " . $ilDB->quote($a_foreign_id, "integer") .
510  " AND mep_id = " . $ilDB->quote($a_pool_id, "integer")
511  );
512  if ($rec = $ilDB->fetchAssoc($set)) {
513  return true;
514  }
515  return false;
516  }
517 
521  public static function isItemIdInTree($a_pool_id, $a_item_id)
522  {
523  global $DIC;
524 
525  $ilDB = $DIC->database();
526 
527  $set = $ilDB->query("SELECT * FROM mep_tree WHERE child = " .
528  $ilDB->quote($a_item_id, "integer") .
529  " AND mep_id = " . $ilDB->quote($a_pool_id, "integer"));
530  if ($rec = $ilDB->fetchAssoc($set)) {
531  return true;
532  }
533  return false;
534  }
535 
542  public function createFolder($a_title, $a_parent = 0)
543  {
544  // perform save
545  $mep_item = new ilMediaPoolItem();
546  $mep_item->setTitle($a_title);
547  $mep_item->setType("fold");
548  $mep_item->create();
549  if ($mep_item->getId() > 0) {
550  $tree = $this->getTree();
551  $parent = $a_parent > 0
552  ? $a_parent
553  : $tree->getRootId();
554  $this->insertInTree($mep_item->getId(), $parent);
555  return $mep_item->getId();
556  }
557  return false;
558  }
559 
566  public function cloneObject($a_target_id, $a_copy_id = 0, $a_omit_tree = false)
567  {
568  $new_obj = parent::cloneObject($a_target_id, $a_copy_id, $a_omit_tree);
569 
570  $new_obj->setTitle($this->getTitle());
571  $new_obj->setDescription($this->getDescription());
572  $new_obj->setDefaultWidth($this->getDefaultWidth());
573  $new_obj->setDefaultHeight($this->getDefaultHeight());
574  $new_obj->update();
575 
576  // copy content
577  $this->copyTreeContent(
578  $new_obj,
579  $new_obj->getTree()->readRootId(),
580  $this->getTree()->readRootId()
581  );
582 
583  return $new_obj;
584  }
585 
592  public function copyTreeContent($a_new_obj, $a_target_parent, $a_source_parent)
593  {
594  include_once("./Modules/MediaPool/classes/class.ilMediaPoolItem.php");
595  include_once("./Modules/MediaPool/classes/class.ilMediaPoolPage.php");
596  include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
597 
598  // get all chapters of root lm
599  $nodes = $this->getTree()->getChilds($a_source_parent);
600  foreach ($nodes as $node) {
601  $item = new ilMediaPoolItem();
602  $item->setType($node["type"]);
603  switch ($node["type"]) {
604  case "mob":
605  $mob_id = ilMediaPoolItem::lookupForeignId($node["child"]);
606  $mob = new ilObjMediaObject($mob_id);
607  $new_mob = $mob->duplicate();
608  $item->setForeignId($new_mob->getId());
609  $item->setTitle($new_mob->getTitle());
610  $item->create();
611  break;
612 
613  case "pg":
614  $item->setTitle($node["title"]);
615  $item->create();
616  $page = new ilMediaPoolPage($node["child"]);
617  $new_page = new ilMediaPoolPage();
618  $new_page->setParentId($a_new_obj->getId());
619  $new_page->setId($item->getId());
620  $new_page->create();
621 
622  // copy page
623  $page->copy($new_page->getId(), $new_page->getParentType(), $new_page->getParentId(), true);
624  break;
625 
626  case "fold":
627  $item->setTitle($node["title"]);
628  $item->create();
629  break;
630  }
631 
632  // insert item into tree
633  $a_new_obj->insertInTree($item->getId(), $a_target_parent);
634 
635  // handle childs
636  $this->copyTreeContent($a_new_obj, $item->getId(), $node["child"]);
637  }
638  }
639 
645  public function exportXML($a_mode = "")
646  {
647  if (in_array($a_mode, array("master", "masternomedia"))) {
648  include_once("./Services/Export/classes/class.ilExport.php");
649  $exp = new ilExport();
650  $conf = $exp->getConfig("Modules/MediaPool");
651  $conf->setMasterLanguageOnly(true, ($a_mode == "master"));
652  $exp->exportObject($this->getType(), $this->getId(), "4.4.0");
653  }
654  }
655 }
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.
global $DIC
Definition: saml.php:7
getDefaultWidth()
Get default width.
exportXML($a_mode="")
Export.
static _searchKeywords($a_query, $a_type, $a_rbac_id=0)
Search for objects by keywords.
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:92
static isForeignIdInTree($a_pool_id, $a_foreign_id)
Check whether foreign id is in tree.
insertInTree($a_obj_id, $a_parent="")
Insert into tree.
foreach($_POST as $key=> $value) $res
$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
static _getPoolTree($a_obj_id)
Get Pool Tree.
Class ilObjMediaObject.
$query
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($pash, $contents, Config $config)
update()
update object data
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
copyTreeContent($a_new_obj, $a_target_parent, $a_source_parent)
Copy tree content.
getUsedFormats()
Get used formats.
read()
Read pool data.
$key
Definition: croninfo.php:18
getPoolTree()
Get pool tree.
deleteChild($obj_id)
Delete a child of media tree.
$formats
Definition: date.php:77
setDefaultHeight($a_val)
Set default height.