additional_plugins/serendipity_event_staticpage/serendipity_plugin_staticpage.php

318 lines
14 KiB
PHP

<?php #
# serendipity_plugin_staticpage.php, v1.0 2005/06/01 (c) by Rob Antonishen
if (IN_serendipity !== true) {
die ("Don't hack!");
}
@serendipity_plugin_api::load_language(dirname(__FILE__));
class serendipity_plugin_staticpage extends serendipity_plugin {
var $staticpage_config = array();
var $title = PLUGIN_STATICPAGELIST_NAME;
function introspect(&$propbag) {
$propbag->add('name', PLUGIN_STATICPAGELIST_NAME);
$propbag->add('description', PLUGIN_STATICPAGELIST_NAME_DESC);
$propbag->add('author', "Rob Antonishen, Falk Doering, Ian (Timbalu)");
$propbag->add('stackable', true);
$propbag->add('version', '1.19.3');
$propbag->add('configuration', array(
'title',
'limit',
'parentsonly',
'frontpage',
'smartify',
'showIcons',
'useIcons',
'imgdir'
));
$propbag->add('requirements', array(
'serendipity' => '1.3',
'smarty' => '2.6.7',
'php' => '4.1.0'
));
$propbag->add('groups', array('FRONTEND_VIEWS'));
$this->dependencies = array(
'serendipity_event_staticpage' => 'keep',
'serendipity_plugin_multilingual' => 'keep'
);
}
function introspect_config_item($name, &$propbag) {
global $serendipity;
switch($name) {
case 'title':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_STATICPAGELIST_TITLE);
$propbag->add('description', PLUGIN_STATICPAGELIST_TITLE_DESC);
$propbag->add('default', PLUGIN_STATICPAGELIST_TITLE_DEFAULT);
break;
case 'limit':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_STATICPAGELIST_LIMIT);
$propbag->add('description', PLUGIN_STATICPAGELIST_LIMIT_DESC);
$propbag->add('default', 0);
break;
case 'parentsonly':
$propbag->add('type', 'boolean');
$propbag->add('name', PLUGIN_STATICPAGELIST_PARENTSONLY);
$propbag->add('description', PLUGIN_STATICPAGELIST_PARENTSONLY_DESC);
$propbag->add('default', 'false');
break;
case 'frontpage':
$propbag->add('type', 'boolean');
$propbag->add('name', PLUGIN_STATICPAGELIST_FRONTPAGE_NAME);
$propbag->add('description', PLUGIN_STATICPAGELIST_FRONTPAGE_DESC);
$propbag->add('default', 'true');
break;
case 'smartify':
$propbag->add('type', 'boolean');
$propbag->add('name', PLUGIN_STATICPAGELIST_SMARTIFY);
$propbag->add('description', PLUGIN_STATICPAGELIST_SMARTIFY_BLAHBLAH);
$propbag->add('default', 'false');
break;
case 'useIcons':
$propbag->add('type', 'boolean');
$propbag->add('name', PLUGIN_STATICPAGELIST_IMG_NAME);
$propbag->add('description', '');
$propbag->add('default', 'true');
break;
case 'imgdir':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_LINKS_IMGDIR);
$propbag->add('description', PLUGIN_LINKS_IMGDIR_BLAHBLAH);
$propbag->add('default', $serendipity['baseURL'] . 'plugins/' . basename(dirname(__FILE__)));
break;
case 'showIcons':
$propbag->add('type', 'radio');
$propbag->add('name', PLUGIN_STATICPAGELIST_SHOWICONS_NAME);
$propbag->add('description', PLUGIN_STATICPAGELIST_SHOWICONS_DESC);
$propbag->add('radio', array(
'value' => array('true', 'false'),
'desc' => array(PLUGIN_STATICPAGELIST_ICON, PLUGIN_STATICPAGELIST_TEXT)
));
$propbag->add('default', 'false');
break;
default:
return false;
}
return true;
}
function generate_content(&$title) {
$title = $this->get_config('title');//STATICPAGE_TITLE;
// do not load the tpl in backend
if(!defined('IN_serendipity_admin')) {
$this->show_content();
}
}
function show_content() {
global $serendipity;
static $smartify = null;
if ($smartify === null) {
$smartify = serendipity_db_bool($this->get_config('smartify'));
}
$title = $this->get_config('title');
$frontpage = serendipity_db_bool($this->get_config('frontpage', true));
$plugin_dir = basename(dirname(__FILE__));
$smartcar = array();
$str = '';
if (!serendipity_db_bool($this->get_config('showIcons'))) {
if ($frontpage) {
if ($smartify) {
$serendipity['smarty']->assign('frontpage_path', $serendipity['serendipityHTTPPath'] . $serendipity['indexFile']);
} else {
$str .= '<a href="' . $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'].'">'.PLUGIN_STATICPAGELIST_FRONTPAGE_LINKNAME . '</a><br />';
}
}
if ($smartify) {
$smartcar = $this->displayPageList($this->get_config('limit'), serendipity_db_bool($this->get_config('parentsonly')), $smartify);
} else {
$str .= $this->displayPageList($this->get_config('limit'), serendipity_db_bool($this->get_config('parentsonly')));
}
} else {
if (!isset($serendipity['staticpageplugin']['JS_init'])) {
$str .= '<script src="' . $serendipity['baseURL'] . ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : '') . 'plugin/dtree.js" type="text/javascript"></script>';
$serendipity['staticpageplugin']['JS_init'] = true;
}
$imgdir = $this->get_config('imgdir');
if ($imgdir === "true") {
$imgdir = $serendipity['baseURL'] . 'plugins/' . $plugin_dir;
}
$fdid = str_replace(':', '_', $this->instance);
$str .= '<script type="text/javascript">
<!--
fd_' . $fdid . ' = new dTree("fd_' . $fdid . '","' . $imgdir . '");'."\n";
/* configuration section*/
if (!serendipity_db_bool($this->get_config('useIcons'))) {
$str .= "fd_$fdid.config.useIcons = false;\n";
}
$str .= "fd_$fdid.config.useSelection = false;\n";
$str .= "fd_$fdid.config.useCookies = false;\n";
$str .= "fd_$fdid.config.useLines = false;\n";
$str .= "fd_$fdid.config.useStatusText = true;\n";
$str .= "fd_$fdid.config.closeSameLevel= true;\n";
$str .= "fd_$fdid.config.target = '_self'\n";
$str .= 'fd_' . $fdid . '.add(0,-1,"' . PLUGIN_STATICPAGELIST_FRONTPAGE_LINKNAME . '","' . $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] . '");'."\n";
if ($struct = $this->getPageList(serendipity_db_bool($this->get_config('parentsonly')))) {
$this->addJSTags($struct);
foreach ($struct as $value) {
$str .= 'fd_' . $fdid . '.add('
. $value['id'] . ','
. $value['parent_id'] . ','
. '"' . (function_exists('serendipity_specialchars') ? serendipity_specialchars((empty($value['headline']) ? $value['pagetitle'] : $value['headline'])) : htmlspecialchars((empty($value['headline']) ? $value['pagetitle'] : $value['headline']), ENT_COMPAT, LANG_CHARSET)) . '",'
. '"' . (function_exists('serendipity_specialchars') ? serendipity_specialchars($value['permalink']) : htmlspecialchars($value['permalink'], ENT_COMPAT, LANG_CHARSET)) . '",'
. '"' . (function_exists('serendipity_specialchars') ? serendipity_specialchars($value['pagetitle']) : htmlspecialchars($value['pagetitle'], ENT_COMPAT, LANG_CHARSET)) .'",'
. '"",'
. '"",'
. '"",'
. '"' . $value['type'] . '");'
. "\n";
}
}
$str .= 'document.write(fd_' . $fdid . ');
//-->
</script>';
}
if ($smartify) {
$serendipity['smarty']->assign(array(
'staticpage_jsStr' => $str,
'staticpage_listContent' => $smartcar
));
$filename = 'plugin_staticpage_sidebar.tpl';
// use nativ API here - extends s9y version >= 1.3'
$content = $this->parseTemplate($filename);
echo $content;
} else {
echo $str;
}
}
function getPageList($parentsonly = false) {
global $serendipity;
$q = 'SELECT id, headline, parent_id, permalink, pagetitle, is_startpage
FROM '.$serendipity['dbPrefix'].'staticpages
WHERE showonnavi = 1
AND publishstatus = 1
AND (language = \''.$serendipity['lang'].'\'
OR language = \'\'
OR language = \'all\')';
if($parentsonly) {
$q .= ' AND parent_id = 0';
}
$q .= ' ORDER BY parent_id, pageorder';
$pagelist = serendipity_db_query($q, false, 'assoc');
if (is_array($pagelist)) {
serendipity_plugin_staticpage::iteratePageList($pagelist);
$pagelist = serendipity_walkRecursive($pagelist, 'id', 'parent_id', VIEWMODE_THREADED);
return $pagelist;
}
return false;
}
function addJSTags(&$pagelist) {
global $serendipity;
$pc_count = count($pagelist);
for ($i = 0; $i < $pc_count; $i++) {
$p = array(
'type' => 'open',
'tag' => ($pagelist[$i]['parent_id'] == 0) ? 'link' : 'dir'
);
$pagelist[$i] = array_merge($pagelist[$i], $p);
}
}
function iteratePageList(&$pagelist) {
global $serendipity;
if (is_array($pagelist)) {
foreach($pagelist AS $idx => $page) {
if ($page['is_startpage'] > 0) {
$pagelist[$idx]['permalink'] = $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'];
}
}
}
return true;
}
function displayPageList($limit, $parentsonly, $tpl=false) {
global $serendipity;
$q = 'SELECT id, headline, parent_id, permalink, pagetitle, is_startpage
FROM '.$serendipity['dbPrefix'].'staticpages
WHERE showonnavi = 1
AND publishstatus = 1
AND (language = \''.$serendipity['lang'].'\'
OR language = \'\'
OR language = \'all\')';
if($parentsonly) {
$q .= ' AND parent_id = 0';
}
$q .= ' ORDER BY parent_id, pageorder';
if($limit) {
$q .= ' LIMIT '.$limit;
}
$pagelist = serendipity_db_query($q, false, 'assoc');
if(is_array($pagelist)) {
serendipity_plugin_staticpage::iteratePageList($pagelist);
$pagelist = serendipity_walkRecursive($pagelist, 'id', 'parent_id', VIEWMODE_THREADED);
$content = ($tpl ? array() : (string)'');
foreach($pagelist as $page) {
if(is_array($content)) {
/* smartify the staticpage sidebar plugin */
$content[] = array(
'id' => $page['id'],
'headline' => (!empty($page['headline']) ? (function_exists('serendipity_specialchars') ? serendipity_specialchars($page['headline']) : htmlspecialchars($page['headline'], ENT_COMPAT, LANG_CHARSET)) : (function_exists('serendipity_specialchars') ? serendipity_specialchars($page['pagetitle']) : htmlspecialchars($page['pagetitle'], ENT_COMPAT, LANG_CHARSET))),
'parent_id' => $page['parent_id'],
'permalink' => (!empty($page['permalink']) ? $page['permalink'] : NULL),
'pagetitle' => (!empty($page['permalink']) ? (function_exists('serendipity_specialchars') ? serendipity_specialchars($page['pagetitle']) : htmlspecialchars($page['pagetitle'], ENT_COMPAT, LANG_CHARSET)) : NULL),
'is_startpage' => $page['is_startpage'],
'depth' => $page['depth']*10
);
} elseif(is_string($content)) {
$content .= (!empty($page['permalink'])
? sprintf(
"<a href=\"%s\" title=\"%s\" style=\"padding-left: %dpx;\">%s</a><br />\n",
$page['permalink'],
(function_exists('serendipity_specialchars') ? serendipity_specialchars($page['pagetitle']) : htmlspecialchars($page['pagetitle'], ENT_COMPAT, LANG_CHARSET)),
$page['depth']*10,
(!empty($page['headline']) ? (function_exists('serendipity_specialchars') ? serendipity_specialchars($page['headline']) : htmlspecialchars($page['headline'], ENT_COMPAT, LANG_CHARSET)) : (function_exists('serendipity_specialchars') ? serendipity_specialchars($page['pagetitle']) : htmlspecialchars($page['pagetitle'], ENT_COMPAT, LANG_CHARSET))))
: sprintf(
"<div style=\"padding-left: %dpx;\">%s</div>",
$page['depth']*10,
(!empty($page['headline']) ? (function_exists('serendipity_specialchars') ? serendipity_specialchars($page['headline']) : htmlspecialchars($page['headline'], ENT_COMPAT, LANG_CHARSET)) : (function_exists('serendipity_specialchars') ? serendipity_specialchars($page['pagetitle']) : htmlspecialchars($page['pagetitle'], ENT_COMPAT, LANG_CHARSET)))));
}
}
}
return $content;
}
}