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
4require_once "./Services/Object/classes/class.ilObject.php";
5require_once "./Services/MetaData/classes/class.ilMDLanguageItem.php";
6require_once("./Modules/Folder/classes/class.ilObjFolder.php");
7require_once("./Modules/MediaPool/classes/class.ilMediaPoolItem.php");
8
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
75 {
76 return $this->default_height;
77 }
78
84 function setForTranslation($a_val)
85 {
86 $this->for_translation = $a_val;
87 }
88
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?>
An exception for terminatinating execution or to throw for unit testing.
static _searchKeywords($a_query, $a_type, $a_rbac_id=0)
Search for objects by keywords.
static lookupForeignId($a_id)
Lookup Foreign Id.
Class ilMediaPoolPage.
Class ilObjFolder.
Class ilObjMediaObject.
Media pool object.
getDefaultWidth()
Get default width.
static isItemIdInTree($a_pool_id, $a_item_id)
Check wheter a mep item id is in the media pool.
exportXML($a_master_only=false)
Export.
static getAllMobIds($a_id)
insertInTree($a_obj_id, $a_parent="")
Insert into tree.
getDefaultHeight()
Get default height.
setDefaultWidth($a_val)
Set default width.
copyTreeContent($a_new_obj, $a_target_parent, $a_source_parent)
Copy tree content.
getChilds($obj_id="", $a_type="")
get childs of node
& getTree()
get media pool folder tree
getMediaObjects($a_title_filter="", $a_format_filter="", $a_keyword_filter='', $a_caption_filter)
Get media objects.
setDefaultHeight($a_val)
Set default height.
createFolder($a_title, $a_parent=0)
Create a new folder.
deleteChild($obj_id)
Delete a child of media tree.
getForTranslation()
Get for translation.
static getPoolTree($a_obj_id)
Get Pool Tree.
createMepTree()
Create media pool tree.
create()
create new media pool
read()
Read pool data.
static isForeignIdInTree($a_pool_id, $a_foreign_id)
Check whether foreign id is in tree.
setForTranslation($a_val)
Set for translation.
cloneObject($a_target_id, $a_copy_id=0, $a_omit_tree=false)
Clone media pool.
getChildsExceptFolders($obj_id="")
get childs of node
getUsedFormats()
Get used formats.
__construct($a_id=0, $a_call_by_reference=true)
Constructor @access public.
update()
update object data
Class ilObject Basic functions for all objects.
getType()
get object type @access public
getDescription()
get object description
getId()
get object id @access public
static _lookupType($a_id, $a_reference=false)
lookup object type
getTitle()
get object title @access public
static _exists($a_parent_type, $a_id, $a_lang="", $a_no_cache=false)
Checks whether page exists.
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
global $ilDB
$mobs
$a_type
Definition: workflow.php:93