BaseActions();
}
function setCurrentItem(&$item) {
$this->currentItem =& $item;
global $currentitemid;
$currentitemid = $this->currentItem->itemid;
}
function setTemplate($template) {
$this->template =& $template;
}
function getDefinedActions() {
return array('image', 'media', 'popup', 'plugin', 'if', 'else', 'endif', 'elseif', 'ifnot', 'elseifnot');
}
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,'doItemVar'), $params);
}
function parse_image() {
// image/popup calls have arguments separated by |
$args = func_get_args();
$args = explode('|',implode($args,', '));
call_user_func_array(array(&$this,'createImageCode'),$args);
}
function createImageCode($filename, $width, $height, $text = '') {
global $CONF;
// select private collection when no collection given
if (!strstr($filename,'/')) {
$filename = $this->currentItem->authorid . '/' . $filename;
}
$windowwidth = $width;
$windowheight = $height;
$vars['link'] = htmlspecialchars($CONF['MediaURL']. $filename ,ENT_QUOTES);
$vars['text'] = htmlspecialchars($text ,ENT_QUOTES);
$vars['image'] = '';
$vars['width'] = $width;
$vars['height'] = $height;
$vars['media'] = '' . $vars['text'] . '';
echo TEMPLATE::fill($this->template['IMAGE_CODE'],$vars);;
}
function parse_media() {
// image/popup calls have arguments separated by |
$args = func_get_args();
$args = explode('|',implode($args,', '));
call_user_func_array(array(&$this,'createMediaCode'),$args);
}
function createMediaCode($filename, $text = '') {
global $CONF;
// select private collection when no collection given
if (!strstr($filename,'/')) {
$filename = $this->currentItem->authorid . '/' . $filename;
}
$vars['link'] = htmlspecialchars($CONF['MediaURL'] . $filename ,ENT_QUOTES);
$vars['text'] = htmlspecialchars($text ,ENT_QUOTES);
$vars['media'] = '' . $vars['text'] . '';
echo TEMPLATE::fill($this->template['MEDIA_CODE'],$vars);;
}
function parse_popup() {
// image/popup calls have arguments separated by |
$args = func_get_args();
$args = explode('|',implode($args,', '));
call_user_func_array(array(&$this,'createPopupCode'),$args);
}
function createPopupCode($filename, $width, $height, $text = '') {
global $CONF;
// select private collection when no collection given
if (!strstr($filename,'/')) {
$filename = $this->currentItem->authorid . '/' . $filename;
}
$windowwidth = $width;
$windowheight = $height;
$vars['rawpopuplink'] = $CONF['Self'] . "?imagepopup=" . htmlspecialchars($filename,ENT_QUOTES) . "&width=$width&height=$height&imagetext=" . urlencode(htmlspecialchars($text));
$vars['popupcode'] = "window.open(this.href,'imagepopup','status=no,toolbar=no,scrollbars=no,resizable=yes,width=$windowwidth,height=$windowheight');return false;";
$vars['popuptext'] = htmlspecialchars($text,ENT_QUOTES);
$vars['popuplink'] = '' . $vars['popuptext'] . '';
$vars['width'] = $width;
$vars['height'] = $height;
$vars['text'] = $text;
$vars['link'] = htmlspecialchars($CONF['MediaURL'] . $filename ,ENT_QUOTES);
$vars['media'] = '' . $vars['popuptext'] . '';
echo TEMPLATE::fill($this->template['POPUP_CODE'],$vars);
}
// 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) = 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);
}
}
?>