contents) var $template; // true when comments need to be displayed var $showComments; function ITEMACTIONS(&$blog) { // call constructor of superclass first $this->BaseActions(); // extra parameters for created links global $catid; if ($catid) $this->linkparams = array('catid' => $catid); // check if member is blog admin (and thus allowed to edit all items) global $member; $this->allowEditAll = ($member->isLoggedIn() && $member->blogAdminRights($blog->getID())); $this->setBlog($blog); } /** * Returns an array with the actions that are defined * in the ITEMACTIONS class */ function getDefinedActions() { return array( 'blogid', 'title', 'body', 'more', 'smartbody', 'itemid', 'morelink', 'category', 'categorylink', 'author', 'authorid', 'authorlink', 'catid', 'karma', 'date', 'time', 'query', 'itemlink', 'blogurl', 'closed', 'syndicate_title', 'syndicate_description', 'karmaposlink', 'karmaneglink', 'new', 'image', 'popup', 'media', 'daylink', 'query', 'include', 'phpinclude', 'parsedinclude', 'skinfile', 'set', 'plugin', 'edit', 'editlink', 'editpopupcode', 'comments', 'relevance', 'if', 'else', 'endif', 'elseif', 'ifnot', 'elseifnot' ); } function setLastVisit($lastVisit) { $this->lastVisit = $lastVisit; } function setParser(&$parser) { $this->parser =& $parser; } function setCurrentItem(&$item) { $this->currentItem =& $item; global $currentitemid; $currentitemid = $this->currentItem->itemid; } function setBlog(&$blog) { $this->blog =& $blog; } function setTemplate($template) { $this->template =& $template; } function setShowComments($val) { $this->showComments = $val; } // methods used by parser to insert content /** * Parse templatevar blogid */ function parse_blogid() { echo $this->blog->getID(); } /** * Parse templatevar body */ function parse_body() { $this->highlightAndParse($this->currentItem->body); } /** * Parse templatevar more */ function parse_more() { $this->highlightAndParse($this->currentItem->more); } /** * Parse templatevar itemid */ function parse_itemid() { echo $this->currentItem->itemid; } /** * Parse templatevar category */ function parse_category() { echo $this->currentItem->category; } /** * Parse templatevar categorylink */ function parse_categorylink() { echo createLink('category', array('catid' => $this->currentItem->catid, 'name' => $this->currentItem->category)); } /** * Parse templatevar catid */ function parse_catid() { echo $this->currentItem->catid; } /** * Parse templatevar authorid */ function parse_authorid() { echo $this->currentItem->authorid; } /** * Parse templatevar authorlink */ function parse_authorlink() { echo createLink( 'member', array( 'memberid' => $this->currentItem->authorid, 'name' => $this->currentItem->author, 'extra' => $this->linkparams ) ); } /** * Parse templatevar query */ function parse_query() { echo $this->strHighlight; } /** * Parse templatevar itemlink */ function parse_itemlink() { echo createLink( 'item', array( 'itemid' => $this->currentItem->itemid, 'title' => $this->currentItem->title, 'timestamp' => $this->currentItem->timestamp, 'extra' => $this->linkparams ) ); } /** * Parse templatevar blogurl */ function parse_blogurl() { echo $this->blog->getURL(); } /** * Parse templatevar closed */ function parse_closed() { echo $this->currentItem->closed; } /** * Parse templatevar relevance */ function parse_relevance() { echo round($this->currentItem->score,2); } /** * Parse templatevar title * * @param string $format defines in which format the title is shown */ function parse_title($format = '') { if (is_array($this->currentItem)) { $itemtitle = $this->currentItem['title']; } elseif (is_object($this->currentItem)) { $itemtitle = $this->currentItem->title; } switch ($format) { case 'xml': // echo stringToXML ($this->currentItem->title); echo stringToXML ($itemtitle); break; case 'attribute': // echo stringToAttribute ($this->currentItem->title); echo stringToAttribute ($itemtitle); break; case 'raw': // echo $this->currentItem->title; echo $itemtitle; break; default: // $this->highlightAndParse($this->currentItem->title); $this->highlightAndParse($itemtitle); break; } } /** * Parse templatevar karma */ function parse_karma($type = 'totalscore') { global $manager; // get karma object $karma =& $manager->getKarma($this->currentItem->itemid); switch($type) { case 'pos': echo $karma->getNbPosVotes(); break; case 'neg': echo $karma->getNbNegVotes(); break; case 'votes': echo $karma->getNbOfVotes(); break; case 'posp': $percentage = $karma->getNbOfVotes() ? 100 * ($karma->getNbPosVotes() / $karma->getNbOfVotes()) : 50; echo number_format($percentage,2), '%'; break; case 'negp': $percentage = $karma->getNbOfVotes() ? 100 * ($karma->getNbNegVotes() / $karma->getNbOfVotes()) : 50; echo number_format($percentage,2), '%'; break; case 'totalscore': default: echo $karma->getTotalScore(); break; } } /** * Parse templatevar author */ function parse_author($which = '') { switch($which) { case 'realname': echo $this->currentItem->authorname; break; case 'id': echo $this->currentItem->authorid; break; case 'email': echo $this->currentItem->authormail; break; case 'url': echo $this->currentItem->authorurl; break; case 'name': default: echo $this->currentItem->author; } } /** * Parse templatevar smartbody */ function parse_smartbody() { if (!$this->currentItem->more) { $this->highlightAndParse($this->currentItem->body); } else { $this->highlightAndParse($this->currentItem->more); } } /** * Parse templatevar morelink */ function parse_morelink() { if ($this->currentItem->more) $this->parser->parse($this->template['MORELINK']); } /** * Parse templatevar date * * @param format optional strftime format */ function parse_date($format = '') { if (!isset($this->template['FORMAT_DATE'])) $this->template['FORMAT_DATE'] = ''; echo formatDate($format, $this->currentItem->timestamp, $this->template['FORMAT_DATE'], $this->blog); } /** * Parse templatevar time * * @param format optional strftime format */ function parse_time($format = '') { if (!isset($this->template['FORMAT_TIME'])) $this->template['FORMAT_TIME'] = ''; echo i18n::strftime($format ? $format : $this->template['FORMAT_TIME'],$this->currentItem->timestamp); } /** * Parse templatevar syndicate_title * * @param maxLength optional maximum length */ function parse_syndicate_title($maxLength = 100) { $syndicated = strip_tags($this->currentItem->title); echo ENTITY::hsc(shorten($syndicated,$maxLength,'...')); } /** * Parse templatevar syndicate_description * * @param maxLength optional maximum length */ function parse_syndicate_description($maxLength = 250, $addHighlight = 0) { $syndicated = strip_tags($this->currentItem->body); if ($addHighlight) { $tmp_highlight = ENTITY::hsc(shorten($syndicated,$maxLength,'...')); echo $this->highlightAndParse($tmp_highlight); } else { echo ENTITY::hsc(shorten($syndicated,$maxLength,'...')); } } /** * Parse templatevar karmaposlink * * @param string text */ function parse_karmaposlink($text = '') { global $CONF; $link = $CONF['ActionURL'] . '?action=votepositive&itemid='.$this->currentItem->itemid; echo $text ? ''.$text.'' : $link; } /** * Parse templatevar karmaneglink * * @param string text */ function parse_karmaneglink($text = '') { global $CONF; $link = $CONF['ActionURL'] . '?action=votenegative&itemid='.$this->currentItem->itemid; echo $text ? ''.$text.'' : $link; } /** * Parse templatevar new */ function parse_new() { if (($this->lastVisit != 0) && ($this->currentItem->timestamp > $this->lastVisit)) echo $this->template['NEW']; } /** * Parse templatevar daylink */ function parse_daylink() { echo createArchiveLink($this->blog->getID(), i18n::strftime('%Y-%m-%d',$this->currentItem->timestamp), $this->linkparams); } /** * Parse templatevar comments */ function parse_comments($maxToShow = 0) { if ($maxToShow == 0) $maxToShow = $this->blog->getMaxComments(); // add comments if ($this->showComments && $this->blog->commentsEnabled()) { $comments = new COMMENTS($this->currentItem->itemid); $comments->setItemActions($this); $comments->showComments($this->template, $maxToShow, $this->currentItem->closed ? 0 : 1, $this->strHighlight); } } /** * Executes a plugin templatevar * * @param pluginName name of plugin (without the NP_) * * extra parameters can be added */ function parse_plugin($pluginName) { global $manager; // should be already tested from the parser (PARSER.php) // only continue when the plugin is really installed /*if (!$manager->pluginInstalled('NP_' . $pluginName)) return;*/ $plugin =& $manager->getPlugin('NP_' . $pluginName); if (!$plugin) return; // get arguments $params = func_get_args(); // remove plugin name array_shift($params); // add item reference (array_unshift didn't work) $params = array_merge(array(&$this->currentItem),$params); call_user_func_array(array(&$plugin,'doTemplateVar'), $params); } /** * Parse templatevar edit */ function parse_edit() { global $member, $CONF; if ($this->allowEditAll || ($member->isLoggedIn() && ($member->getID() == $this->currentItem->authorid)) ) { $this->parser->parse($this->template['EDITLINK']); } } /** * Parse templatevar editlink */ function parse_editlink() { global $CONF; echo $CONF['AdminURL'],'bookmarklet.php?action=edit&itemid=',$this->currentItem->itemid; } /** * Parse templatevar editpopupcode */ function parse_editpopupcode() { echo "if (event && event.preventDefault) event.preventDefault();winbm=window.open(this.href,'nucleusbm','scrollbars=yes,width=600,height=550,left=10,top=10,status=yes,resizable=yes');winbm.focus();return false;"; } // helper functions /** * Parses highlighted text, with limited actions only (to prevent not fully trusted team members * from hacking your weblog. * 'plugin variables in items' implementation by Andy */ function highlightAndParse(&$data) { $actions = new BODYACTIONS($this->blog); $parser = new PARSER($actions->getDefinedActions(), $actions); $actions->setTemplate($this->template); $actions->setHighlight($this->strHighlight); $actions->setCurrentItem($this->currentItem); //$actions->setParser($parser); $parser->parse($actions->highlight($data)); } /* // this is the function previous to the 'plugin variables in items' implementation by Andy function highlightAndParse(&$data) { // allow only a limited subset of actions (do not allow includes etc, they might be evil) $this->parser->actions = array('image','media','popup'); $tmp_highlight = $this->highlight($data); $this->parser->parse($tmp_highlight); $this->parser->actions = $this->getDefinedActions(); } */ // function to enable if-else-elseif-elseifnot-ifnot-endif to item template fields /** * Checks conditions for if statements * * @param string $field type of <%if%> * @param string $name property of field * @param string $value value of property */ function checkCondition($field, $name='', $value = '') { global $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists; $condition = 0; switch($field) { case 'category': $condition = ($blog && $this->_ifCategory($name,$value)); break; case 'itemcategory': $condition = ($this->_ifItemCategory($name,$value)); break; case 'blogsetting': $condition = ($blog && ($blog->getSetting($name) == $value)); break; case 'itemblogsetting': $b =& $manager->getBlog(getBlogIDFromItemID($this->currentItem->itemid)); $condition = ($b && ($b->getSetting($name) == $value)); break; case 'loggedin': $condition = $member->isLoggedIn(); break; case 'onteam': $condition = $member->isLoggedIn() && $this->_ifOnTeam($name); break; case 'admin': $condition = $member->isLoggedIn() && $this->_ifAdmin($name); break; case 'author': $condition = ($this->_ifAuthor($name,$value)); break; /* case 'nextitem': $condition = ($itemidnext != ''); break; case 'previtem': $condition = ($itemidprev != ''); break; case 'archiveprevexists': $condition = ($archiveprevexists == true); break; case 'archivenextexists': $condition = ($archivenextexists == true); break; case 'skintype': $condition = ($name == $this->skintype); break; */ case 'hasplugin': $condition = $this->_ifHasPlugin($name, $value); break; default: $condition = $manager->pluginInstalled('NP_' . $field) && $this->_ifPlugin($field, $name, $value); break; } return $condition; } /** * Different checks for a category */ function _ifCategory($name = '', $value='') { global $blog, $catid; // when no parameter is defined, just check if a category is selected if (($name != 'catname' && $name != 'catid') || ($value == '')) return $blog->isValidCategory($catid); // check category name if ($name == 'catname') { $value = $blog->getCategoryIdFromName($value); if ($value == $catid) return $blog->isValidCategory($catid); } // check category id if (($name == 'catid') && ($value == $catid)) return $blog->isValidCategory($catid); return false; } /** * Different checks for an author */ function _ifAuthor($name = '', $value='') { global $member, $manager; $b =& $manager->getBlog(getBlogIDFromItemID($this->currentItem->itemid)); // when no parameter is defined, just check if author is current visitor if (($name != 'isadmin' && $name != 'name') || ($name == 'name' && $value == '')) { return (intval($member->getID()) > 0 && intval($member->getID()) == intval($this->currentItem->authorid)); } // check author name if ($name == 'name') { $value = strtolower($value); if ($value == strtolower($this->currentItem->author)) return true; } // check if author is admin if (($name == 'isadmin')) { $aid = intval($this->currentItem->authorid); $blogid = intval($b->getID()); $amember =& $manager->getMember($aid); if ($amember->isAdmin()) return true; return $amember->isBlogAdmin($blogid); } return false; } /** * Different checks for a category */ function _ifItemCategory($name = '', $value='') { global $catid, $manager; $b =& $manager->getBlog(getBlogIDFromItemID($this->currentItem->itemid)); // when no parameter is defined, just check if a category is selected if (($name != 'catname' && $name != 'catid') || ($value == '')) return $b->isValidCategory($catid); $icatid = $this->currentItem->catid; //$icategory = $this->currentItem->category; // check category name if ($name == 'catname') { $value = $b->getCategoryIdFromName($value); if ($value == $icatid) return $b->isValidCategory($icatid); } // check category id if (($name == 'catid') && ($value == $icatid)) return $b->isValidCategory($icatid); return false; } /** * Checks if a member is on the team of a blog and return his rights */ function _ifOnTeam($blogName = '') { global $blog, $member, $manager; // when no blog found if (($blogName == '') && (!is_object($blog))) return 0; // explicit blog selection if ($blogName != '') $blogid = getBlogIDFromName($blogName); if (($blogName == '') || !$manager->existsBlogID($blogid)) // use current blog $blogid = $blog->getID(); return $member->teamRights($blogid); } /** * Checks if a member is admin of a blog */ function _ifAdmin($blogName = '') { global $blog, $member, $manager; // when no blog found if (($blogName == '') && (!is_object($blog))) return 0; // explicit blog selection if ($blogName != '') $blogid = getBlogIDFromName($blogName); if (($blogName == '') || !$manager->existsBlogID($blogid)) // use current blog $blogid = $blog->getID(); return $member->isBlogAdmin($blogid); } /** * hasplugin,PlugName * -> checks if plugin exists * hasplugin,PlugName,OptionName * -> checks if the option OptionName from plugin PlugName is not set to 'no' * hasplugin,PlugName,OptionName=value * -> checks if the option OptionName from plugin PlugName is set to value */ function _ifHasPlugin($name, $value) { global $manager; $condition = false; // (pluginInstalled method won't write a message in the actionlog on failure) if ($manager->pluginInstalled('NP_'.$name)) { $plugin =& $manager->getPlugin('NP_' . $name); if ($plugin != NULL) { if ($value == "") { $condition = true; } else { list($name2, $value2) = i18n::explode('=', $value, 2); if ($value2 == "" && $plugin->getOption($name2) != 'no') { $condition = true; } else if ($plugin->getOption($name2) == $value2) { $condition = true; } } } } return $condition; } /** * Checks if a plugin exists and call its doIf function */ function _ifPlugin($name, $key = '', $value = '') { global $manager; $plugin =& $manager->getPlugin('NP_' . $name); if (!$plugin) return; $params = func_get_args(); array_shift($params); return call_user_func_array(array(&$plugin, 'doIf'), $params); } } ?>