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
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 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
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/* 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?>
$_GET["client_id"]
static _searchKeywords($a_query, $a_type, $a_rbac_id=0)
Search for objects by keywords.
static lookupForeignId($a_id)
Lookup Foreign Id.
static lookupType($a_id)
Lookup type.
static lookupTitle($a_id)
Lookup title.
Class ilMediaPoolPage.
static _exists($a_id)
Check whether meida pool page exists.
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.
getAllMobIds($a_id)
Get all media object ids.
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.
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...
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)
Clone media pool.
ilObjMediaPool($a_id=0, $a_call_by_reference=true)
Constructor @access public.
getChildsExceptFolders($obj_id="")
get childs of node
getUsedFormats()
Get used formats.
update()
update object data
Class ilObject Basic functions for all objects.
getType()
get object type @access public
ilObject($a_id=0, $a_reference=true)
Constructor @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
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
redirection script todo: (a better solution should control the processing via a xml file)
global $ilDB
$mobs
global $ilUser
Definition: imgupload.php:15