320 lines
14 KiB
PHP
320 lines
14 KiB
PHP
|
<?php # $Id: serendipity_plugin_staticpage.php, v1.0 2005/06/01
|
||
|
|
||
|
# (c) by Rob Antonishen
|
||
|
|
||
|
if (IN_serendipity !== true) {
|
||
|
die ("Don't hack!");
|
||
|
}
|
||
|
|
||
|
|
||
|
// Probe for a language include with constants. Still include defines later on, if some constants were missing
|
||
|
$probelang = dirname(__FILE__) . '/' . $serendipity['charset'] . 'lang_' . $serendipity['lang'] . '.inc.php';
|
||
|
if (file_exists($probelang)) {
|
||
|
include $probelang;
|
||
|
}
|
||
|
|
||
|
include dirname(__FILE__) . '/lang_en.inc.php';
|
||
|
|
||
|
class serendipity_plugin_staticpage extends serendipity_plugin {
|
||
|
|
||
|
var $staticpage_config = array();
|
||
|
|
||
|
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.17');
|
||
|
$propbag->add('configuration', array(
|
||
|
'title',
|
||
|
'limit',
|
||
|
'parentsonly',
|
||
|
'frontpage',
|
||
|
'smartify',
|
||
|
'showIcons',
|
||
|
'useIcons',
|
||
|
'imgdir'
|
||
|
));
|
||
|
$propbag->add('requirements', array(
|
||
|
'serendipity' => '0.8',
|
||
|
'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) {
|
||
|
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" language="javascript" 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'] . ','
|
||
|
. '"' . htmlspecialchars((empty($value['headline']) ? $value['pagetitle'] : $value['headline'])) . '",'
|
||
|
. '"' . htmlspecialchars($value['permalink']) . '",'
|
||
|
. '"' . htmlspecialchars($value['pagetitle']) .'",'
|
||
|
. '"",'
|
||
|
. '"",'
|
||
|
. '"",'
|
||
|
. '"' . $value['type'] . '");'
|
||
|
. "\n";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$str .= 'document.write(fd_' . $fdid . ');
|
||
|
//-->
|
||
|
</script>';
|
||
|
}
|
||
|
|
||
|
if ($smartify) {
|
||
|
$serendipity['smarty']->assign('staticpage_jsStr', $str);
|
||
|
$serendipity['smarty']->assign('staticpage_listContent', $smartcar);
|
||
|
$filename = 'plugin_staticpage_sidebar.tpl';
|
||
|
$tfile = serendipity_getTemplateFile($filename, 'serendipityPath');
|
||
|
if (!$tfile || $tfile == $filename) {
|
||
|
$tfile = dirname(__FILE__) . '/' . $filename;
|
||
|
}
|
||
|
$inclusion = $serendipity['smarty']->security_settings[INCLUDE_ANY];
|
||
|
$serendipity['smarty']->security_settings[INCLUDE_ANY] = true;
|
||
|
$content = $serendipity['smarty']->fetch('file:'. $tfile);
|
||
|
$serendipity['smarty']->security_settings[INCLUDE_ANY] = $inclusion;
|
||
|
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']) ? htmlspecialchars($page['headline']) : htmlspecialchars($page['pagetitle'])),
|
||
|
'parent_id' => $page['parent_id'],
|
||
|
'permalink' => (!empty($page['permalink']) ? $page['permalink'] : NULL),
|
||
|
'pagetitle' => (!empty($page['permalink']) ? htmlspecialchars($page['pagetitle']) : 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'],
|
||
|
htmlspecialchars($page['pagetitle']),
|
||
|
$page['depth']*10,
|
||
|
(!empty($page['headline']) ? htmlspecialchars($page['headline']) : htmlspecialchars($page['pagetitle'])))
|
||
|
: sprintf(
|
||
|
"<div style=\"padding-left: %dpx;\">%s</div>",
|
||
|
$page['depth']*10,
|
||
|
(!empty($page['headline']) ? htmlspecialchars($page['headline']) : htmlspecialchars($page['pagetitle']))));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $content;
|
||
|
}
|
||
|
}
|