ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilObjMediaCast.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2011 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 require_once "./Services/Object/classes/class.ilObject.php";
6 
14 class ilObjMediaCast extends ilObject
15 {
16  public static $purposes = array ("Standard", "VideoAlternative", "VideoPortable", "AudioPortable");
17  protected $online = false;
18  protected $publicfiles = false;
19  protected $downloadable = true;
20  protected $order;
21  protected $view_mode = "";
22 
23  const ORDER_TITLE = 1;
26  const ORDER_MANUAL = 4;
27 
28  const VIEW_LIST = "";
29  const VIEW_GALLERY = "gallery";
30 
36  protected $defaultAccess = 0;
37 
44  function ilObjMediaCast($a_id = 0,$a_call_by_reference = true)
45  {
46  $this->type = "mcst";
47  $this->ilObject($a_id,$a_call_by_reference);
48  $mcst_set = new ilSetting("mcst");
49  $this->setDefaultAccess($mcst_set->get("defaultaccess") == "users" ? 0 : 1);
50  $this->setOrder(self::ORDER_CREATION_DATE_DESC);
51  }
52 
58  function setOnline($a_online)
59  {
60  $this->online = $a_online;
61  }
62 
68  function getOnline()
69  {
70  return $this->online;
71  }
72 
78  function setPublicFiles($a_publicfiles)
79  {
80  $this->publicfiles = $a_publicfiles;
81  }
82 
88  function getPublicFiles()
89  {
90  return $this->publicfiles;
91  }
92 
98  function setViewMode($a_val)
99  {
100  $this->view_mode = $a_val;
101  }
102 
108  function getViewMode()
109  {
110  return $this->view_mode;
111  }
117  function setItemsArray($a_itemsarray)
118  {
119  $this->itemsarray = $a_itemsarray;
120  }
121 
127  function getItemsArray()
128  {
129  return $this->itemsarray;
130  }
131 
139  {
140  $med_items = $this->getItemsArray();
141 
142  // sort by order setting
143  switch($this->getOrder())
144  {
146  $med_items = ilUtil::sortArray($med_items, "title", "asc", false, true);
147  break;
148 
150  $med_items = ilUtil::sortArray($med_items, "creation_date", "asc", false, true);
151  break;
152 
154  $med_items = ilUtil::sortArray($med_items, "creation_date", "desc", false, true);
155  break;
156 
158  $order = array_flip($this->readOrder());
159  $pos = sizeof($order);
160  foreach(array_keys($med_items) as $idx)
161  {
162  if(array_key_exists($idx, $order))
163  {
164  $med_items[$idx]["order"] = ($order[$idx]+1)*10;
165  }
166  // item has no order yet
167  else
168  {
169  $med_items[$idx]["order"] = (++$pos)*10;
170  }
171  }
172 
173  $med_items = ilUtil::sortArray($med_items, "order", "asc", true, true);
174  break;
175  }
176 
177  return $med_items;
178  }
179 
180 
186  function setDownloadable($a_downloadable)
187  {
188  $this->downloadable = $a_downloadable;
189  }
195  function getDownloadable()
196  {
197  return $this->downloadable;
198  }
199 
205  function getDefaultAccess() {
206  return $this->defaultAccess;
207  }
208 
214  function setDefaultAccess($value) {
215  $this->defaultAccess = (int) $value == 0 ? 0 : 1;
216  }
217 
223  function setOrder($a_value)
224  {
225  $this->order = $a_value;
226  }
232  function getOrder()
233  {
234  return $this->order;
235  }
236 
243  function getDiskUsage()
244  {
245  require_once("./Modules/MediaCast/classes/class.ilObjMediaCastAccess.php");
246  return ilObjMediaCastAccess::_lookupDiskUsage($this->id);
247  }
248 
252  function create()
253  {
254  global $ilDB;
255 
256  parent::create();
257 
258  $query = "INSERT INTO il_media_cast_data (".
259  " id".
260  ", is_online".
261  ", public_files".
262  ", downloadable".
263  ", def_access".
264  ", sortmode".
265  ", viewmode".
266  " ) VALUES (".
267  $ilDB->quote($this->getId(), "integer")
268  .",".$ilDB->quote((int) $this->getOnline(), "integer")
269  .",".$ilDB->quote((int) $this->getPublicFiles(), "integer")
270  .",".$ilDB->quote((int) $this->getDownloadable(), "integer")
271  .",".$ilDB->quote((int) $this->getDefaultAccess(), "integer")
272  .",".$ilDB->quote((int) $this->getOrder(), "integer")
273  .",".$ilDB->quote((int) $this->getViewMode(), "text")
274  .")";
275  $ilDB->manipulate($query);
276 
277  }
278 
285  function update()
286  {
287  global $ilDB;
288 
289  if (!parent::update())
290  {
291  return false;
292  }
293 
294  // update media cast data
295  $query = "UPDATE il_media_cast_data SET ".
296  " is_online = ".$ilDB->quote((int) $this->getOnline(), "integer").
297  ", public_files = ".$ilDB->quote((int) $this->getPublicFiles(), "integer").
298  ", downloadable = ".$ilDB->quote((int) $this->getDownloadable(), "integer").
299  ", def_access = ".$ilDB->quote((int) $this->getDefaultAccess(), "integer").
300  ", sortmode = ".$ilDB->quote((int) $this->getOrder(), "integer").
301  ", viewmode = ".$ilDB->quote($this->getViewMode(), "text").
302  " WHERE id = ".$ilDB->quote((int) $this->getId(), "integer");
303 
304  $ilDB->manipulate($query);
305 
306  return true;
307  }
308 
312  function read()
313  {
314  global $ilDB;
315 
316  parent::read();
317  $this->readItems();
318 
319  $query = "SELECT * FROM il_media_cast_data WHERE id = ".
320  $ilDB->quote($this->getId(), "integer");
321  $set = $ilDB->query($query);
322  $rec = $ilDB->fetchAssoc($set);
323 
324  $this->setOnline($rec["is_online"]);
325  $this->setPublicFiles($rec["public_files"]);
326  $this->setDownloadable($rec["downloadable"]);
327  $this->setDefaultAccess($rec["def_access"]);
328  $this->setOrder($rec["sortmode"]);
329  $this->setViewMode($rec["viewmode"]);
330 
331  }
332 
333 
340  function delete()
341  {
342  global $ilDB;
343 
344  // always call parent delete function first!!
345  if (!parent::delete())
346  {
347  return false;
348  }
349 
350  // delete all items
351  $med_items = $this->getItemsArray();
352  foreach ($med_items as $item)
353  {
354  include_once("./Services/News/classes/class.ilNewsItem.php");
355  $news_item = new ilNewsItem($item["id"]);
356  $news_item->delete();
357  }
358 
359  $this->deleteOrder();
360 
361  // delete record of table il_media_cast_data
362  $query = "DELETE FROM il_media_cast_data".
363  " WHERE id = ".$ilDB->quote($this->getId(), "integer");
364  $ilDB->manipulate($query);
365 
366  return true;
367  }
368 
369 
383  function notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params = 0)
384  {
385  global $tree;
386 
387  switch ($a_event)
388  {
389  case "link":
390 
391  //var_dump("<pre>",$a_params,"</pre>");
392  //echo "Module name ".$this->getRefId()." triggered by link event. Objects linked into target object ref_id: ".$a_ref_id;
393  //exit;
394  break;
395 
396  case "cut":
397 
398  //echo "Module name ".$this->getRefId()." triggered by cut event. Objects are removed from target object ref_id: ".$a_ref_id;
399  //exit;
400  break;
401 
402  case "copy":
403 
404  //var_dump("<pre>",$a_params,"</pre>");
405  //echo "Module name ".$this->getRefId()." triggered by copy event. Objects are copied into target object ref_id: ".$a_ref_id;
406  //exit;
407  break;
408 
409  case "paste":
410 
411  //echo "Module name ".$this->getRefId()." triggered by paste (cut) event. Objects are pasted into target object ref_id: ".$a_ref_id;
412  //exit;
413  break;
414 
415  case "new":
416 
417  //echo "Module name ".$this->getRefId()." triggered by paste (new) event. Objects are applied to target object ref_id: ".$a_ref_id;
418  //exit;
419  break;
420  }
421 
422  // At the beginning of the recursive process it avoids second call of the notify function with the same parameter
423  if ($a_node_id==$_GET["ref_id"])
424  {
425  $parent_obj =& $this->ilias->obj_factory->getInstanceByRefId($a_node_id);
426  $parent_type = $parent_obj->getType();
427  if($parent_type == $this->getType())
428  {
429  $a_node_id = (int) $tree->getParentId($a_node_id);
430  }
431  }
432 
433  parent::notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params);
434  }
435 
439  function readItems($a_oldest_first = false)
440  {
441  //
442  include_once("./Services/News/classes/class.ilNewsItem.php");
443  $it = new ilNewsItem();
444  $it->setContextObjId($this->getId());
445  $it->setContextObjType($this->getType());
446  $this->itemsarray = $it->queryNewsForContext(false, 0, "", false, $a_oldest_first);
447 
448  return $this->itemsarray;
449  }
450 
451  function deleteOrder()
452  {
453  global $ilDB;
454 
455  if(!$this->getId())
456  {
457  return;
458  }
459 
460  $sql = "DELETE FROM il_media_cast_data_ord".
461  " WHERE obj_id = ".$ilDB->quote($this->getId(), "integer");
462  $ilDB->manipulate($sql);
463  }
464 
465  function readOrder()
466  {
467  global $ilDB;
468 
469  if(!$this->getId())
470  {
471  return;
472  }
473 
474  $all = array();
475  $sql = "SELECT item_id FROM il_media_cast_data_ord".
476  " WHERE obj_id = ".$ilDB->quote($this->getId(), "integer").
477  " ORDER BY pos";
478  $res = $ilDB->query($sql);
479  while($row = $ilDB->fetchAssoc($res))
480  {
481  $all[] = $row["item_id"];
482  }
483  return $all;
484  }
485 
486  function saveOrder(array $a_items)
487  {
488  global $ilDB;
489 
490  if(!$this->getId())
491  {
492  return;
493  }
494 
495  $this->deleteOrder();
496 
497  $pos = 0;
498  foreach($a_items as $item_id)
499  {
500  $pos++;
501 
502  $sql = "INSERT INTO il_media_cast_data_ord (obj_id,item_id,pos)".
503  " VALUES (".$ilDB->quote($this->getId(), "integer").",".
504  $ilDB->quote($item_id, "integer").",".
505  $ilDB->quote($pos, "integer").")";
506  $ilDB->manipulate($sql);
507  }
508  }
509 
516  public function cloneObject($a_target_id,$a_copy_id = 0)
517  {
518  global $ilDB, $ilUser, $ilias;
519 
520  $new_obj = parent::cloneObject($a_target_id,$a_copy_id);
521 
522  //copy online status if object is not the root copy object
523  $cp_options = ilCopyWizardOptions::_getInstance($a_copy_id);
524 
525  if(!$cp_options->isRootNode($this->getRefId()))
526  {
527  $new_obj->setOnline($this->getOnline());
528  }
529 
530  //$new_obj->setTitle($this->getTitle());
531  $new_obj->setPublicFiles($this->getPublicFiles());
532  $new_obj->setDownloadable($this->getDownloadable());
533  $new_obj->setDefaultAccess($this->getDefaultAccess());
534  $new_obj->setOrder($this->getOrder());
535  $new_obj->setViewMode($this->getViewMode());
536  $new_obj->update();
537 
538  include_once("./Services/Block/classes/class.ilBlockSetting.php");
539  $pf = ilBlockSetting::_lookup("news", "public_feed", 0, $this->getId());
540  $keeprss = (int) ilBlockSetting::_lookup("news", "keep_rss_min", 0, $this->getId());
541  ilBlockSetting::_write("news", "public_feed", $pf, 0, $new_obj->getId());
542  ilBlockSetting::_write("news", "keep_rss_min", $keeprss, 0, $new_obj->getId());
543 
544  // copy items
545  $this->copyItems($new_obj);
546 
547  // copy order!?
548 
549  return $new_obj;
550  }
551 
558  function copyItems($a_new_obj)
559  {
560  global $ilUser;
561 
562  include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
563  foreach($this->readItems(true) as $item)
564  {
565  // copy media object
566  $mob_id = $item["mob_id"];
567  $mob = new ilObjMediaObject($mob_id);
568  $new_mob = $mob->duplicate();
569 
570  // copy news item
571  // create new media cast item
572  include_once("./Services/News/classes/class.ilNewsItem.php");
573  $mc_item = new ilNewsItem();
574  $mc_item->setMobId($new_mob->getId());
575  $mc_item->setContentType(NEWS_AUDIO);
576  $mc_item->setContextObjId($a_new_obj->getId());
577  $mc_item->setContextObjType($a_new_obj->getType());
578  $mc_item->setUserId($ilUser->getId());
579  $mc_item->setPlaytime($item["playtime"]);
580  $mc_item->setTitle($item["title"]);
581  $mc_item->setContent($item["content"]);
582  $mc_item->setVisibility($item["visibility"]);
583  $mc_item->create();
584 
585  }
586  }
587 
588 }
589 ?>