function render() { rss_plugin_hook('rss.plugins.sidemenu', null); foreach ($this->items as $item) { echo "<" . $this->ctnr . ' class="' . $item['class'] . '"' . ' id="sidemenu' . $item['id'] . '"' . ">" . '<a href="#" onclick="' . $item["action"] . '; return false;">' . $item["label"] . '</a>' . "</" . $this->ctnr . ">\n"; } }
function rss_main_object() { rss_plugin_hook("rss.plugins.before.mainobject", null); foreach ($GLOBALS['rss']->mainObject as $o) { $o->render(); } }
function rss_itemlist_prerender_callback() { if (isset($GLOBALS['rss']->currentItemList->preRender) && count($GLOBALS['rss']->currentItemList->preRender)) { foreach ($GLOBALS['rss']->currentItemList->preRender as $prAction) { list($prAfnct, $prAargs) = $prAction; call_user_func($prAfnct, $prAargs); } } rss_plugin_hook('rss.plugins.items.beforeitemsimmediate', null); }
function Navigation() { $this->appendNavItem(getPath(), __('<span>H</span>ome'), LOCATION_HOME); if (!getConfig("rss.config.restrictrefresh")) { $this->appendNavItem(getPath() . 'update.php', __('<span>R</span>efresh'), LOCATION_UPDATE); } $this->appendNavItem(getPath() . 'search.php', __('<span>S</span>earch'), LOCATION_SEARCH); $this->appendNavItem(getPath() . 'admin/', __('A<span>d</span>min'), LOCATION_ADMIN); if (($an = rss_plugin_hook('rss.plugins.afternav', null)) != null) { $this->postRender .= $an; } $GLOBALS['rss']->nav = $this; rss_plugin_hook('rss.plugins.navelements', null); }
rss_main_feeds(); ?> <a href="http://haiti.ushahidi.com/"><img src="http://sitroom.ushahididev.com/wp-content/uploads/help-haiti.png"></a> </div> <img src="img/logo.png" class="htlogo" > <?php rss_errors_render(); rss_plugin_hook('rss.plugins.before.maindiv', rss_main_div_id()); ?> <div <?php echo rss_main_div_id(); ?> class="frame"> <?php rss_main_object(); ?> </div> <div id="footer" class="frame"> <?php rss_main_footer(); ?> </div> </div> <?php rss_plugin_hook('rss.plugins.bodyend', null); ?> </body> </html>
/** * this exported AJAX method is only here so that the plugin callback * hook is asynchronous */ function __exp_itemRatedCB($iid, $rt) { rss_plugin_hook("rss.plugins.rating.rated", array($iid, $rt)); return null; }
if ($cntUnreadItems == 0 && $cntTotalItems) { // we showed no unread items // Should we show some uread items? if ($cntReadItems == -1) { readItems($cntTotalItems); } else { readItems($cntReadItems); } } } else { // We are showing read and unread items if ($cntTotalItems) { readItems($cntTotalItems - $cntUnreadItems); } } rss_plugin_hook('rss.plugins.frontpage.afterread', null); $GLOBALS['rss']->header = new Header("", LOCATION_HOME, array('cid' => null, 'fid' => null)); $GLOBALS['rss']->feedList = new FeedList(false); $GLOBALS['rss']->renderWithTemplate('index.php'); /* function getHiddenChannelIds() { static $hiddenIds; if ($hiddenIds == NULL) { $sql = "select fk_ref_object_id from " .getTable('properties') ." where domain='feed' and property = 'Hide from front-page'"; $rs = rss_query($sql); while (list($cid) = rss_fetch_row($rs)) { $hiddenIds[] = $cid; } } return $hiddenIds;
<div class="item"> <?php rss_plugin_hook("rss.plugins.items.beforetitle", rss_item_id()); ?> <div class="item-title" id="i<?php echo rss_item_id(); ?> "> <a href="<?php echo rss_item_url(); ?> " class="item_url" target="_blank"><?php echo rss_item_title(); ?> </a> <em>(<?php echo rss_item_date(); ?> <?php echo rss_item_author(); ?> )</em> </div> <div class="item-body" style="display:none"> <?php /*<div id="sad<?php echo rss_item_id(); ?>" style="display:none"></div> <?php if (rss_item_has_enclosure()) { ?> <h5><?php echo __('Enclosure:'); ?> [<a href="<?php echo rss_item_enclosure(); ?>"><?php echo __('download'); ?></a><?php rss_plugin_hook("rss.plugins.items.enclosure", null); ?>]</h5> <?php } ?> <div class="content" id="c<?php echo rss_item_id(); ?>"> <?php echo rss_item_content(); ?>
<span><a href="#top">TOP</a></span> <?php echo rss_plugin_hook("rss.plugins.footer.span", null); ?> <span> <a href="http://gregarius.net/">Gregarius</a> <?php echo _VERSION_; echo rss_svn_rev('.'); ?> <!-- <?php echo __(' powered by '); ?> <a href="http://php.net">PHP</a>, <a href="http://magpierss.sourceforge.net/">MagpieRSS</a>, <a href="http://sourceforge.net/projects/kses">kses</a>, <a href="http://www.modernmethod.com/sajax/">SAJAX</a> --> </span> <span> Tentatively valid <a title="Tentatively valid XHTML: the layout validates, but the actual content coming from the feeds I can't do very much." href="http://validator.w3.org/check/referer">XHTML1.0</a>, <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS2.0</a> </span> <span style="border-right:none"> <?php echo __('Last Update'); ?> : <?php echo rss_footer_last_modif(); ?> </span>
/** * Returns the theme's "media" component, e.g. 'web', * 'rss' or 'mobile'. */ function getThemeMedia() { static $media; if ($media) { return $media; } // Default to "web". $media = 'web'; // Has the user specified anything? if (isset($_GET['rss'])) { $media = 'rss'; } elseif (isset($_SESSION['mobile']) || isset($_REQUEST['mobile']) || isMobileDevice()) { $media = 'mobile'; } // This is here so that auto-detected (e.g. mobile) medias // can be overridden. if (isset($_REQUEST['media'])) { $media = sanitize($_REQUEST['media'], RSS_SANITIZER_WORDS); } // Finally: let plugins voice their opinion $media = rss_plugin_hook('rss.plugins.thememedia', $media); return $media; }
function render() { $this->javascriptFiles = rss_plugin_hook('rss.plugins.javascript', $this->javascriptFiles); $GLOBALS['rss']->header =& $this; rss_require(RSS::getTemplateFile("header.php")); if ($this->extraHTML) { echo $this->extraHTML; } }
function render() { _pf("ItemList -> render()"); if ($this->readCount + $this->unreadCount == 0 && $this->beforeList == "") { return; } $this->rss->currentItemList = $this; rss_plugin_hook('rss.plugins.items.beforeitems', null); include $this->rss->getTemplateFile($this->_template); _pf("done: ItemList -> render()"); rss_plugin_hook('rss.plugins.items.afteritems', null); }
function add_channel($url, $folderid = 0, $title_ = null, $descr_ = null, $tags = null) { if (!$url || strlen($url) <= 7) { return array(-2, "Invalid URL {$url}"); } if (!is_numeric($folderid)) { return array(-2, "Invalid folderid {$folderid}"); } $url = sanitize(str_replace('&', '&', $url), RSS_SANITIZER_URL); $urlDB = rss_real_escape_string($url); //htmlentities($url); $res = rss_query("select count(*) as channel_exists from " . getTable("channels") . " where url='{$urlDB}'"); list($channel_exists) = rss_fetch_row($res); if ($channel_exists > 0) { // fatal return array(-2, "Looks like you are already subscribed to this channel"); } $res = rss_query("select 1+max(position) as np from " . getTable("channels")); list($np) = rss_fetch_row($res); if (!$np) { $np = "0"; } // Here we go! //error_reporting(E_ALL); $old_level = error_reporting(E_ERROR); $rss = fetch_rss($url); error_reporting($old_level); if ($rss) { if ($title_) { $title = rss_real_escape_string($title_); } elseif (is_object($rss) && array_key_exists('title#', $rss->channel)) { if (array_key_exists('title', $rss->channel)) { $title = rss_real_escape_string($rss->channel['title']); } else { $title = " "; } } else { $title = ""; } if (is_object($rss) && array_key_exists('link', $rss->channel)) { $siteurl = rss_real_escape_string(htmlentities($rss->channel['link'])); } else { $siteurl = ""; } $refreshinterval = 0; if (is_object($rss) && array_key_exists('syn', $rss->channel)) { $syn = $rss->channel['syn']; if (array_key_exists('updateperiod', $syn)) { if ("hourly" == $syn['updateperiod']) { if (array_key_exists('updatefrequency', $syn)) { $refreshinterval = 60 * $syn['updatefrequency']; } } } } if ($descr_) { $descr = rss_real_escape_string($descr_); } elseif (is_object($rss) && array_key_exists('description', $rss->channel)) { $descr = rss_real_escape_string($rss->channel['description']); } else { $descr = ""; } //lets see if this server has a favicon $icon = ""; if (getConfig('rss.output.showfavicons')) { // if we got nothing so far, lets try to fall back to // favicons if ($icon == "" && $siteurl != "") { $match = get_host($siteurl, $host); $uri = "http://" . $host . "favicon.ico"; if ($match && getContentType($uri, $contentType)) { if (preg_match("/image\\/x-icon/", $contentType)) { $icon = $uri; } } } } $private = preg_match('|(https?://)([^:]+:[^@]+@)(.+)$|', $url); if ($title != "") { $title = strip_tags($title); $descr = strip_tags($descr); // add channel to root folder by default if (!$folderid) { $folderid = getRootFolder(); } list($title, $urlDB, $siteurl, $folderid, $descr, $icon) = rss_plugin_hook('rss.plugins.feed.new', array($title, $urlDB, $siteurl, $folderid, $descr, $icon)); $mode = RSS_MODE_UNREAD_STATE; if ($private) { $mode |= RSS_MODE_PRIVATE_STATE; } $sql = "insert into " . getTable("channels") . " (title, url, siteurl, parent, descr, dateadded, icon, position, mode, daterefreshed)" . " values ('{$title}', '{$urlDB}', '{$siteurl}', {$folderid}, '{$descr}', now(), '{$icon}', {$np}, {$mode}, '0000-00-00 00:00:00')"; rss_query($sql); $newid = rss_insert_id(); if ($icon && cacheFavicon($icon)) { rss_query("update " . getTable("channels") . " set icon='blob:" . $icon . "'" . " where id={$newid}"); } if ($tags != "") { __exp__submitTag($newid, $tags, "'channel'"); } if (false == empty($refreshinterval)) { setProperty($newid, 'rss.config.refreshinterval', $refreshinterval); } return array($newid, ""); } else { // non-fatal, will look further return array(-1, "I'm sorry, I couldn't extract a valid RSS feed from <a href=\"{$url}\">{$url}</a>."); } } else { global $MAGPIE_ERROR; $retError = "I'm sorry, I couldn't retrieve <a href=\"{$url}\">{$url}</a>."; if ($MAGPIE_ERROR) { $retError .= "\n<br />{$MAGPIE_ERROR}\n"; } // non-fatal, will look further return array(-1, $retError); } }
echo $title; ?> </h2> <?php if (hidePrivate()) { ?> <p>(<a href="<?php echo getPath(); ?> ?mobilelogin&media=mobile">Login</a> to mark items read)</p> <?php } ?> <form method="post" action="<?php print getPath(); ?> "> <?php } rss_itemlist_feeds(); if (!isMobileDevice()) { ?> <input type='hidden' name='mobile' /> <?php } ?> <p id="nextitems"><input type='submit' value='Next »»' /></p> </form> <?php rss_plugin_hook('rss.plugins.bodyend.media', getThemeMedia());
function cleanUp($newIds, $ignorePrivate = false) { if (!hidePrivate() || $ignorePrivate) { if (count($newIds) > 0 && getConfig('rss.config.markreadonupdate')) { rss_query("update " . getTable("item") . " set unread = unread & " . SET_MODE_READ_STATE . " where unread & " . RSS_MODE_UNREAD_STATE . " and id not in (" . implode(",", $newIds) . ")"); } } setProperty('__meta__', 'meta.lastupdate', 'misc', time()); if (count($newIds) > 0) { rss_invalidate_cache(); } rss_plugin_hook('rss.plugins.updates.after', null); }
" /> <link rel="stylesheet" type="text/css" href="<?php echo getExternalThemeFile('css/layout.css'); ?> " /> <link rel="stylesheet" type="text/css" href="<?php echo getExternalThemeFile('css/look.css'); ?> " /> <link rel="stylesheet" type="text/css" href="<?php echo getPath(); ?> css/print.css" media="print" /> <?php echo rss_scheme_stylesheets(); echo rss_plugin_hook('rss.plugins.stylesheets', null); if (rss_header_autorefreshtime() > 0 && !getConfig('rss.config.restrictrefresh')) { ?> <meta http-equiv="refresh" content="<?php echo rss_header_autorefreshtime(); ?> ;<?php echo rss_header_autorefreshurl(); ?> " /> <?php } foreach (rss_header_links() as $link) { list($rel, $title, $href) = $link; ?> <link rel="<?php
function render() { $GLOBALS['rss']->searchFormTitle = $this->title; $this->title = ""; require $GLOBALS['rss']->getTemplateFile("searchform.php"); $GLOBALS['rss']->currentItemList = $this; rss_plugin_hook('rss.plugins.items.beforeitems', null); require $GLOBALS['rss']->getTemplateFile("itemlist.php"); rss_plugin_hook('rss.plugins.items.afteritems', null); }
function rss_feeds_feed_read_label() { return rss_plugin_hook('rss.plugins.sidemenu.feedunreadlabel', $GLOBALS['rss']->currentFeedsFeed->rdLbl); }
function channel_edit_form($cid) { $sql = "select id, title, url, siteurl, parent, descr, icon, mode, daterefreshed, dateadded from " . getTable("channels") . " where id={$cid}"; $res = rss_query($sql); list($id, $title, $url, $siteurl, $parent, $descr, $icon, $mode, $daterefreshed, $dateadded) = rss_fetch_row($res); $title = htmlentities($title, ENT_QUOTES); // get tags $sql = "select t.tag from " . getTable('tag') . " t " . " inner join " . getTable('metatag') . " m " . " on m.tid = t.id " . "where m.ttype = 'channel' and m.fid = {$cid}"; $res = rss_query($sql); $tags = ""; while ($r = rss_fetch_assoc($res)) { $tags .= $r['tag'] . " "; } echo "<div>\n"; echo "\n\n<h2>" . __('Edit the feed ') . " '{$title}'</h2>\n"; echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "#fa{$cid}\" id=\"channeledit\">\n"; echo "<fieldset id=\"channeleditfs\">"; // Timestamps if (!empty($daterefreshed)) { echo "<p><label>" . __('Added') . ": " . date("M-d-Y H:i", strtotime($dateadded)) . "</label></p>" . "<p><label>" . __('Last Update') . ": " . date("M-d-Y H:i", strtotime($daterefreshed)) . " (Age: " . round((time() - strtotime($daterefreshed)) / 60) . " minutes)</label></p>\n"; } else { echo "<p><label>" . __('Added') . ": " . date("M-d-Y H:i", strtotime($dateadded)) . "</label></p>" . "<p><label>" . __('Last Update') . ": " . __('Never') . "</label></p>\n"; } // Item name echo "<p><label for=\"c_name\">" . __('Title:') . "</label>\n" . "<input type=\"text\" id=\"c_name\" name=\"c_name\" value=\"{$title}\" />" . "<input type=\"hidden\" name=\"" . CST_ADMIN_DOMAIN . "\" value=\"" . CST_ADMIN_DOMAIN_CHANNEL . "\" />\n" . "<input type=\"hidden\" name=\"action\" value=\"" . CST_ADMIN_SUBMIT_EDIT . "\" />\n" . "<input type=\"hidden\" name=\"cid\" value=\"{$cid}\" /></p>\n" . "<p><label for=\"c_url\">" . __('RSS URL:') . "</label>\n" . "<a href=\"{$url}\">" . __('(visit)') . "</a>\n" . "<input type=\"text\" id=\"c_url\" name=\"c_url\" value=\"{$url}\" /></p>" . "<p><label for=\"c_siteurl\">" . __('Site URL:') . "</label>\n" . "<a href=\"{$siteurl}\">" . __('(visit)') . "</a>\n" . "<input type=\"text\" id=\"c_siteurl\" name=\"c_siteurl\" value=\"{$siteurl}\" /></p>" . "<p><label for=\"c_parent\">" . __('In folder:') . "</label>\n" . rss_toolkit_folders_combo('c_parent', $parent) . "</p>\n"; // Tags echo "<p><label for=\"c_tags\">" . __('Categories') . ":</label>\n" . "<input type=\"text\" id=\"c_tags\" name=\"c_tags\" value=\"{$tags}\" /></p>"; // Items state if ($mode & RSS_MODE_PRIVATE_STATE) { $pchk = " checked=\"checked\" "; $old_priv = "1"; } else { $pchk = ""; $old_priv = "0"; } if ($mode & RSS_MODE_DELETED_STATE) { $dchk = " checked=\"checked\" "; $old_del = "1"; } else { $dchk = ""; $old_del = "0"; } echo "<p>\n" . "<input style=\"display:inline\" type=\"checkbox\" id=\"c_private\" " . " name=\"c_private\" value=\"1\"{$pchk} />\n" . "<label for=\"c_private\">" . __('This feed is <strong>private</strong>, only admins see it.') . "</label>\n" . "<input type=\"hidden\" name=\"old_priv\" value=\"{$old_priv}\" />\n" . "</p>\n"; echo "<p>\n" . "<input style=\"display:inline\" type=\"checkbox\" id=\"c_deleted\" " . " name=\"c_deleted\" value=\"1\"{$dchk} />\n" . "<label for=\"c_deleted\">" . __("This feed is <strong>deprecated</strong>, it won't be updated anymore and won't be visible in the feeds column.") . "</label>\n" . "<input type=\"hidden\" name=\"old_del\" value=\"{$old_del}\" />\n" . "</p>\n"; // Description $descr = trim(htmlentities(strip_tags($descr), ENT_QUOTES)); echo "<p><label for=\"c_descr\">" . __('Description:') . "</label>\n" . "<input type=\"text\" id=\"c_descr\" name=\"c_descr\" value=\"{$descr}\" /></p>\n"; // Icon if (getConfig('rss.output.showfavicons')) { echo "<p><label for=\"c_icon\">" . __('Shown favicon:') . "</label>\n"; if (trim($icon) != "") { if (substr($icon, 0, 5) == 'blob:') { $icon = substr($icon, 5); } echo "<img src=\"{$icon}\" alt=\"{$title}\" class=\"favicon\" width=\"16\" height=\"16\" />\n"; echo "<span>" . __('(Leave blank for no icon)') . "</span>"; } echo "<input type=\"text\" id=\"c_icon\" name=\"c_icon\" value=\"{$icon}\" /></p>\n"; } else { echo "<p><input type=\"hidden\" name=\"c_icon\" id=\"c_icon\" value=\"{$icon}\" /></p>\n"; } rss_plugin_hook('rss.plugins.admin.feed.properties', $cid); echo "</fieldset>\n"; // Feed properties echo "<fieldset id=\"channeleditpropfs\">"; echo "<p>" . "<span style=\"float:left;\">Allow Gregarius to look for updates in existing items for this feed?</span>" . "<span style=\"float:right;\">[<a href=\"index.php?domain=config&action=edit&key=rss.input.allowupdates&view=config\">Edit the global option</a>]</span>\n" . " " . "</p>"; $rss_input_allowupdates_default_current = getProperty($cid, 'rss.input.allowupdates'); $rss_input_allowupdates_default_value = $rss_input_allowupdates_default = "Use global option (" . (getConfig('rss.input.allowupdates') ? "Yes" : "No") . ")"; echo "<p id=\"rss_input_allowupdates_options\">" . "<input type=\"radio\" " . "id=\"rss_input_allowupdates_yes\" " . "name=\"prop_rss_input_allowupdates\" value=\"1\" " . ($rss_input_allowupdates_default_current === true ? " checked=\"checked\" " : "") . "/>\n" . "<label for=\"rss_input_allowupdates_yes\">Yes</label>\n" . "<input type=\"radio\" " . "id=\"rss_input_allowupdates_no\" " . "name=\"prop_rss_input_allowupdates\" value=\"0\" " . ($rss_input_allowupdates_default_current === false ? " checked=\"checked\" " : "") . "/>\n" . "<label for=\"rss_input_allowupdates_no\">No</label>" . "<input type=\"radio\" " . "id=\"rss_input_allowupdates_default\" " . "name=\"prop_rss_input_allowupdates\" value=\"default\" " . ($rss_input_allowupdates_default_current === null ? " checked=\"checked\" " : "") . "/>\n" . "<label for=\"rss_input_allowupdates_default\">{$rss_input_allowupdates_default}</label>" . "</p>\n"; echo "<p>" . "<span style=\"float:left;\">Refresh Interval (minutes): </span>" . " " . "</p>"; $rss_config_refreshinterval_default_current = getProperty($cid, 'rss.config.refreshinterval'); echo "<p id=\"rss_config_refreshinterval_options\">" . "<input type=\"text\" id=\"rss_config_refreshinterval\" name=\"rss_config_refreshinterval\" value=\"" . (true == empty($rss_config_refreshinterval_default_current) ? 60 : $rss_config_refreshinterval_default_current) . "\">" . "</p>"; echo "</fieldset>\n"; echo "<p style=\"clear:both; padding: 1em 0\"><input type=\"submit\" name=\"action_\" value=\"" . __('Submit Changes') . "\" />" . "<input type=\"button\" name=\"_cancel\" value=\"" . __('Cancel') . "\" onclick=\"history.back(-1);\"></p>"; echo "</form></div>\n"; }
echo rss_item_id(); ?> " style="display:none"></div> <?php if (rss_item_has_enclosure()) { ?> <h5><?php echo __('Enclosure:'); ?> [<a href="<?php echo rss_item_enclosure(); ?> "><?php echo __('download'); ?> </a><?php rss_plugin_hook("rss.plugins.items.enclosure", null); ?> ]</h5> <?php } ?> <div class="content" id="c<?php echo rss_item_id(); ?> "> <?php echo rss_item_content(); ?> </div>
function plugins() { // Submit changes if (isset($_POST['admin_plugin_submit_changes'])) { $old_active_plugins = getConfig('rss.config.plugins'); $active_plugins = array(); foreach ($_REQUEST as $rkey => $rentry) { if (preg_match('/_gregarius_plugin.([a-zA-Z0-9_\\/\\-]+).php/', $rkey, $matches)) { $active_plugins[] = $matches[1] . ".php"; } } $value = serialize($active_plugins); $sql = "update " . getTable('config') . " set value_='{$value}' where key_='rss.config.plugins'"; rss_query($sql); rss_invalidate_cache(); // deactivate $to_deactivate = array_diff($old_active_plugins, $active_plugins); foreach ($to_deactivate as $deactivatethis) { rss_load_plugin($deactivatethis); rss_plugin_hook("rss.plugins.admin.deactivate", "", $deactivatethis); } //activate $to_activate = array_diff($active_plugins, $old_active_plugins); foreach ($to_activate as $activatethis) { rss_load_plugin($activatethis); rss_plugin_hook("rss.plugins.admin.activate", "", $activatethis); } } else { $active_plugins = getConfig('rss.config.plugins'); } // Check for updates $doUpdates = false; $updates = array(); if (isset($_POST['admin_plugin_check_for_updates'])) { $updates = plugins_check_for_updates(); $doUpdates = true; } // Rendering echo "<h2 class=\"trigger\">" . __('Plugins') . "</h2>\n" . "<div id=\"admin_plugins\">\n"; echo __('<p style="font-size:small">Plugins are third-party scripts that offer extended functionalities. More plugins can be downloaded at the <a style="text-decoration:underline" href="http://plugins.gregarius.net/">Plugin Repository</a>.</p>'); echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">\n"; echo "<p><input type=\"hidden\" name=\"" . CST_ADMIN_DOMAIN . "\" value=\"" . CST_ADMIN_DOMAIN_PLUGINS . "\" /></p>\n"; echo "\n<table id=\"plugintable\">\n<tr>\n" . "<th>" . __('Active') . "</th>\n" . "<th>" . __('Name') . "</th>\n" . "<th>" . __('Version') . "</th>\n" . "<th>" . __('Author') . "</th>\n" . "<th>" . __('Description') . "</th>\n" . "<th>" . __('Options') . "</th>\n"; if ($doUpdates) { echo "<th>" . __('Update Available') . "</th>\n"; } echo "</tr>\n"; $rss_plugins = getPlugins(); $cntr = 0; if ($rss_plugins) { foreach ($rss_plugins as $entry => $info) { $active = in_array($entry, $active_plugins); if (count($info)) { $updateDl = null; if (is_array($updates) && array_key_exists($info['file'], $updates)) { $lastV = $updates[$info['file']][0]; $thisV = $info['version']; if ($lastV > $thisV) { $updateDl = str_replace("&", "&", $updates[$info['file']][1]); } } $class = ($cntr++ % 2 == 0 ? "even" : "odd") . ($updateDl ? " hilite" : ($active ? " active" : "")); echo "<tr class=\"{$class}\">\n"; echo "<td class=\"cntr\">" . "<input type=\"checkbox\" name=\"_gregarius_plugin_{$entry}\" " . " id=\"_gregarius_plugin_{$entry}\" value=\"1\" " . ($active ? "checked=\"checked\"" : "") . " />\n" . "</td>\n"; echo "<td><label\n for=\"_gregarius_plugin_{$entry}\">" . (array_key_exists('name', $info) ? $info['name'] : " ") . "</label></td>\n"; echo "<td class=\"cntr\">" . (array_key_exists('version', $info) ? $info['version'] : " ") . "</td>\n"; echo "<td>" . (array_key_exists('author', $info) ? $info['author'] : " ") . "</td>\n"; echo "<td>" . (array_key_exists('description', $info) ? $info['description'] : " ") . "</td>\n"; // output the column to call a plugin's config page. echo "<td class=\"cntr\">"; if (array_key_exists('configuration', $info)) { $escaped_plugin_name = str_replace("/", "%2F", $entry); echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?" . CST_ADMIN_DOMAIN . "=" . CST_ADMIN_DOMAIN_PLUGIN_OPTIONS . "&action=" . CST_ADMIN_EDIT_ACTION . "&plugin_name=" . $escaped_plugin_name . "&" . CST_ADMIN_VIEW . "=" . CST_ADMIN_DOMAIN_PLUGIN_OPTIONS . "\">" . __('edit') . "</a>"; } else { echo " "; } echo "</td>\n"; if ($doUpdates && $updateDl) { echo "<td class=\"cntr\">"; echo "<a href=\"{$updateDl}\">{$lastV}</a>"; echo "</td>"; } elseif ($doUpdates) { echo "<td> </td>"; } echo "</tr>\n"; } } } echo "</table>\n"; echo "<p><input type=\"hidden\" name=\"" . CST_ADMIN_METAACTION . "\" value=\"ACT_ADMIN_SUBMIT_CHANGES\"/>\n"; echo "<input type=\"submit\" name=\"admin_plugin_submit_changes\" value=\"" . __('Submit Changes') . "\" />\n"; echo "<input type=\"submit\" name=\"admin_plugin_check_for_updates\" value=\"" . __('Check for Updates') . "\" /></p></form>\n"; echo "</div>"; }