1<?php 2 3/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */ 4 5include_once("./Services/News/classes/class.ilNewsItem.php"); 6include_once("./Services/Feeds/classes/class.ilFeedItem.php"); 7include_once("./Services/Feeds/classes/class.ilFeedWriter.php"); 8 9/** @defgroup ServicesFeeds Services/Feeds 10 */ 11 12/** 13* Feed writer for objects. 14* 15* @author Alex Killing <alex.killing@gmx.de> 16* @version $Id$ 17* @ingroup ServicesFeeds 18*/ 19class ilObjectFeedWriter extends ilFeedWriter 20{ 21 /** 22 * @var ilSetting 23 */ 24 protected $settings; 25 26 /** 27 * @var ilLanguage 28 */ 29 protected $lng; 30 31 public function __construct($a_ref_id, $a_userid = false, $a_purpose = false) 32 { 33 global $DIC; 34 35 $this->settings = $DIC->settings(); 36 $this->lng = $DIC->language(); 37 $ilSetting = $DIC->settings(); 38 $lng = $DIC->language(); 39 40 parent::__construct(); 41 42 if ($a_ref_id <= 0) { 43 return; 44 } 45 46 include_once("./Services/Block/classes/class.ilBlockSetting.php"); 47 $news_set = new ilSetting("news"); 48 if (!$news_set->get("enable_rss_for_internal")) { 49 return; 50 } 51 $obj_id = ilObject::_lookupObjId($a_ref_id); 52 $obj_type = ilObject::_lookupType($obj_id); 53 $obj_title = ilObject::_lookupTitle($obj_id); 54 55 if (!ilBlockSetting::_lookup("news", "public_feed", 0, $obj_id)) { 56 return; 57 } 58 59 // path 60 $loc = $this->getContextPath($a_ref_id); 61 62 if ($ilSetting->get('short_inst_name') != "") { 63 $this->setChannelTitle($ilSetting->get('short_inst_name') . " - " . 64 $this->prepareStr($loc . " " . $obj_title)); 65 } else { 66 $this->setChannelTitle("ILIAS" . " - " . 67 $this->prepareStr($loc . " " . $obj_title . ($a_purpose ? " - " . $a_purpose : ""))); 68 } 69 $this->setChannelAbout(ILIAS_HTTP_PATH); 70 $this->setChannelLink(ILIAS_HTTP_PATH); 71 // not nice, to do: general solution 72 if ($obj_type == "mcst") { 73 include_once("./Modules/MediaCast/classes/class.ilObjMediaCastAccess.php"); 74 75 if (!ilObjMediaCastAccess::_lookupOnline($obj_id)) { 76 $lng->loadLanguageModule("mcst"); 77 78 $feed_item = new ilFeedItem(); 79 $feed_item->setTitle($lng->txt("mcst_media_cast_not_online")); 80 $feed_item->setDescription($lng->txt("mcst_media_cast_not_online_text")); 81 $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . 82 "&target=" . $item["context_obj_type"]); 83 $this->addItem($feed_item); 84 return; 85 } 86 } 87 88 89 $rss_period = ilNewsItem::_lookupRSSPeriod(); 90 91 ilNewsItem::setPrivateFeedId($a_userid); 92 $news_item = new ilNewsItem(); 93 $news_item->setContextObjId($obj_id); 94 $news_item->setContextObjType($obj_type); 95 $items = $news_item->getNewsForRefId($a_ref_id, true, false, $rss_period, true); 96 97 if ($a_purpose) { 98 include_once("./Services/MediaObjects/classes/class.ilMediaItem.php"); 99 } 100 101 $i = 0; 102 foreach ($items as $item) { 103 $i++; 104 105 if ($a_purpose != false && $obj_type == "mcst") { 106 $mob = ilMediaItem::_getMediaItemsOfMObId($item["mob_id"], $a_purpose); 107 108 if ($mob == false) { 109 continue; 110 } 111 } 112 113 $obj_title = ilObject::_lookupTitle($item["context_obj_id"]); 114 115 $feed_item = new ilFeedItem(); 116 117 $title = ilNewsItem::determineNewsTitle( 118 $item["context_obj_type"], 119 $item["title"], 120 $item["content_is_lang_var"], 121 $item["agg_ref_id"], 122 $item["aggregation"] 123 ); 124 125 $loc = ""; 126 127 if ($news_set->get("rss_title_format") == "news_obj") { 128 $sep = (trim($this->prepareStr($loc)) == "") 129 ? "" 130 : " "; 131 $feed_item->setTitle($this->prepareStr($title) . " (" . $this->prepareStr($loc) . $sep . $this->prepareStr($obj_title) . 132 ")"); 133 } else { 134 $feed_item->setTitle($this->prepareStr($loc) . " " . $this->prepareStr($obj_title) . 135 ": " . $this->prepareStr($title)); 136 } 137 $feed_item->setDescription($this->prepareStr(nl2br( 138 ilNewsItem::determineNewsContent($item["context_obj_type"], $item["content"], $item["content_text_is_lang_var"]) 139 ))); 140 141 // lm hack, not nice 142 if (in_array($item["context_obj_type"], array("lm")) && $item["context_sub_obj_type"] == "pg" 143 && $item["context_sub_obj_id"] > 0) { 144 $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . 145 "&target=pg_" . $item["context_sub_obj_id"] . "_" . $item["ref_id"]); 146 } elseif ($item["context_obj_type"] == "wiki" && $item["context_sub_obj_type"] == "wpg" 147 && $item["context_sub_obj_id"] > 0) { 148 include_once("./Modules/Wiki/classes/class.ilWikiPage.php"); 149 include_once("./Modules/Wiki/classes/class.ilWikiUtil.php"); 150 $wptitle = ilWikiUtil::makeUrlTitle(ilWikiPage::lookupTitle($item["context_sub_obj_id"])); 151 $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . 152 "&target=" . $item["context_obj_type"] . "_" . $item["ref_id"] . "_" . $wptitle); 153 } elseif (in_array($item["context_obj_type"], array("frm")) && $item["context_sub_obj_type"] == "pos" 154 && $item["context_sub_obj_id"] > 0) { 155 // frm hack, not nice 156 include_once("./Modules/Forum/classes/class.ilObjForumAccess.php"); 157 $thread_id = ilObjForumAccess::_getThreadForPosting($item["context_sub_obj_id"]); 158 if ($thread_id > 0) { 159 $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . 160 "&target=" . $item["context_obj_type"] . "_" . $item["ref_id"] . "_" . $thread_id . "_" . $item["context_sub_obj_id"]); 161 } else { 162 $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . 163 "&target=" . $item["context_obj_type"] . "_" . $item["ref_id"]); 164 } 165 } else { 166 $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . 167 "&target=" . $item["context_obj_type"] . "_" . $item["ref_id"]); 168 //echo "<br>".ILIAS_HTTP_PATH."/goto.php?client_id=".CLIENT_ID. 169// "&target=".$item["context_obj_type"]."_".$item["ref_id"]; 170 } 171 172 $feed_item->setAbout($feed_item->getLink() . "&il_about_feed=" . $item["id"]); 173 $feed_item->setDate($item["creation_date"]); 174 175 // Enclosure 176 if ($item["content_type"] == NEWS_AUDIO && 177 $item["mob_id"] > 0 && ilObject::_exists($item["mob_id"])) { 178 $go_on = true; 179 if ($obj_type == "mcst") { 180 include_once("./Modules/MediaCast/classes/class.ilObjMediaCastAccess.php"); 181 182 if (!ilObjMediaCastAccess::_lookupPublicFiles($obj_id)) { 183 $go_on = false; 184 } 185 } 186 187 if ($go_on) { 188 include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php"); 189 $url = ilObjMediaObject::_lookupItemPath($item["mob_id"], true, true, $mob["purpose"]); 190 $file = ilObjMediaObject::_lookupItemPath($item["mob_id"], false, false, $mob["purpose"]); 191 if (is_file($file)) { 192 $size = filesize($file); 193 } 194 $feed_item->setEnclosureUrl($url); 195 $feed_item->setEnclosureType((isset($mob["format"]))?$mob["format"]:"audio/mpeg"); 196 $feed_item->setEnclosureLength($size); 197 } 198 } 199 $this->addItem($feed_item); 200 } 201 } 202} 203