\n";
break;
}
}
/**
* This method is the external_plugin wrapper
*/
function showFrontend()
{
global $serendipity;
header('Content-Type: text/html; charset=' . LANG_CHARSET);
include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php');
if (is_string($serendipity['uriArguments'][2]) && isset($serendipity['languages'][$serendipity['uriArguments'][2]])) {
$faq_language = $serendipity['uriArguments'][2];
$faq_categoryid = $serendipity['uriArguments'][3];
$faq_faqid = $serendipity['uriArguments'][4];
} else {
$faq_language = $serendipity['lang'];
$faq_categoryid = $serendipity['uriArguments'][2];
$faq_faqid = $serendipity['uriArguments'][3];
}
if (is_numeric($faq_categoryid)) {
$res['parent_id'] = (int)$faq_categoryid;
do {
$q = "SELECT id, category, parent_id
FROM {$serendipity['dbPrefix']}faq_categorys
WHERE id = " . $res['parent_id'];
$res = serendipity_db_query($q, true, 'assoc');
$cat_tree[] = $res;
} while ($res['parent_id'] != 0);
krsort($cat_tree);
$serendipity['smarty']->assign('cat_tree', $cat_tree);
if (is_numeric($faq_faqid)) {
$q = "SELECT question, answer, category, faqorder, catorder, parent_id
FROM {$serendipity['dbPrefix']}faqs, {$serendipity['dbPrefix']}faq_categorys
WHERE {$serendipity['dbPrefix']}faqs.id = $faq_faqid
AND {$serendipity['dbPrefix']}faqs.cid = {$serendipity['dbPrefix']}faq_categorys.id
ORDER BY faqorder";
$faq = serendipity_db_query($q, true, 'assoc');
if (is_array($faq) && !empty($faq)) {
$faqorder = ($faq['faqorder'] + 1);
$q = "SELECT {$serendipity['dbPrefix']}faqs.id, question, cid, category
FROM {$serendipity['dbPrefix']}faqs, {$serendipity['dbPrefix']}faq_categorys
WHERE {$serendipity['dbPrefix']}faqs.cid = $faq_categoryid
AND {$serendipity['dbPrefix']}faqs.faqorder = $faqorder
AND {$serendipity['dbPrefix']}faqs.cid = {$serendipity['dbPrefix']}faq_categorys.id";
$nfaq = serendipity_db_query($q, true, 'assoc');
if (!is_array($nfaq)) {
$catorder = ($faq['catorder'] + 1);
$q = "SELECT {$serendipity['dbPrefix']}faqs.id, question, cid, category
FROM {$serendipity['dbPrefix']}faqs, {$serendipity['dbPrefix']}faq_categorys
WHERE {$serendipity['dbPrefix']}faq_categorys.catorder = $catorder
AND {$serendipity['dbPrefix']}faq_categorys.parent_id = {$faq['parent_id']}
AND {$serendipity['dbPrefix']}faqs.faqorder = 1
AND {$serendipity['dbPrefix']}faqs.cid = {$serendipity['dbPrefix']}faq_categorys.id";
$nfaq = serendipity_db_query($q, true, 'assoc');
}
$faqorder = ($faq['faqorder'] - 1);
$q = "SELECT {$serendipity['dbPrefix']}faqs.id, question, cid, category
FROM {$serendipity['dbPrefix']}faqs, {$serendipity['dbPrefix']}faq_categorys
WHERE {$serendipity['dbPrefix']}faqs.cid = $faq_categoryid
AND {$serendipity['dbPrefix']}faqs.faqorder = $faqorder
AND {$serendipity['dbPrefix']}faqs.cid = {$serendipity['dbPrefix']}faq_categorys.id";
$pfaq = serendipity_db_query($q, true, 'assoc');
if (!is_array($pfaq)) {
$catorder = ($faq['catorder'] - 1);
$q = "SELECT MAX(faqorder) AS fmax
FROM {$serendipity['dbPrefix']}faqs, {$serendipity['dbPrefix']}faq_categorys
WHERE {$serendipity['dbPrefix']}faq_categorys.catorder = $catorder
AND {$serendipity['dbPrefix']}faq_categorys.parent_id = {$faq['parent_id']}
AND {$serendipity['dbPrefix']}faqs.cid = {$serendipity['dbPrefix']}faq_categorys.id";
$max = serendipity_db_query($q, true, 'assoc');
$q = "SELECT {$serendipity['dbPrefix']}faqs.id, question, cid, category
FROM {$serendipity['dbPrefix']}faqs, {$serendipity['dbPrefix']}faq_categorys
WHERE {$serendipity['dbPrefix']}faq_categorys.catorder = $catorder
AND {$serendipity['dbPrefix']}faqs.faqorder = ".($max['fmax'] ? $max['fmax'] : 0)."
AND {$serendipity['dbPrefix']}faqs.cid = {$serendipity['dbPrefix']}faq_categorys.id";
$pfaq = serendipity_db_query($q, true, 'assoc');
}
}
if (serendipity_db_bool($this->get_config('markup', 'true'))) {
$entry['body'] = &$faq['question'];
serendipity_plugin_api::hook_event('frontend_display', $entry);
$entry['body'] = &$faq['answer'];
serendipity_plugin_api::hook_event('frontend_display', $entry);
}
$filename = 'plugin_faq_category_faq.tpl';
$serendipity['smarty']->assign('faq_plugin', array(
'this_faq' => array(
'faqid' => $faq_faqid,
'question' => $faq['question'],
'answer' => $faq['answer'],
'categoryid' => $faq_categoryid,
'category' => $faq['category']
),
'next_faq' => array(
'faqid' => $nfaq['id'],
'question' => $nfaq['question'],
'categoryid' => $nfaq['cid'],
'category' => $nfaq['category']
),
'prev_faq' => array(
'faqid' => $pfaq['id'],
'question' => $pfaq['question'],
'categoryid' => $pfaq['cid'],
'category' => $pfaq['category']
)
));
} else {
$q = "SELECT id, cid, question, changedate, changetype
FROM {$serendipity['dbPrefix']}faqs
WHERE cid = $faq_categoryid
ORDER BY faqorder";
$faqs = serendipity_db_query($q, false, 'assoc');
if (is_array($faqs)) {
$now = time();
$days_new = ($this->get_config('daysnew') * 86400);
$days_upd = ($this->get_config('daysupdate') * 86400);
for ($i = 0, $ii = count($faqs); $i < $ii; $i++) {
switch ($faqs[$i]['changetype']) {
case 'new':
if (($now - $faqs[$i]['changedate']) <= $days_new) {
$faqs[$i]['status'] = FAQ_NEW;
} else {
$faqs[$i]['status'] = '';
}
break;
case 'update':
if (($now - $faqs[$i]['changedate']) <= $days_upd) {
$faqs[$i]['status'] = FAQ_UPDATE;
} else {
$faqs[$i]['status'] = '';
}
break;
default:
$faqs[$i]['status'] = '';
break;
}
}
}
$q = "SELECT id, category
FROM {$serendipity['dbPrefix']}faq_categorys
WHERE parent_id = $faq_categoryid
ORDER BY catorder";
$scat = serendipity_db_query($q, false, 'assoc');
$q = "SELECT category, introduction
FROM {$serendipity['dbPrefix']}faq_categorys
WHERE id = " . $faq_categoryid;
$cat = serendipity_db_query($q, true, 'assoc');
$filename = 'plugin_faq_category_faqs.tpl';
if (serendipity_db_bool($this->get_config('markup', 'true'))) {
$entry['body'] = &$cat['introduction'];
serendipity_plugin_api::hook_event('frontend_display', $entry);
}
$serendipity['smarty']->assign('faq_plugin', array(
'faqs' => $faqs,
'subcategories' => $scat,
'category' => $cat['category'],
'introduction' => $cat['introduction'],
'catid' => $faq_categoryid
));
}
} else {
$q = "SELECT *
FROM {$serendipity['dbPrefix']}faq_categorys
WHERE language = '$faq_language'
ORDER BY catorder";
$cats = serendipity_db_query($q, false, 'assoc');
if (is_array($cats)) {
$cats = serendipity_walkRecursive($cats);
if (serendipity_db_bool($this->get_config('markup', 'true'))) {
for ($i = 0, $ii = count($cats); $i < $ii; $i++) {
$entry['body'] = &$cats[$i]['introduction'];
serendipity_plugin_api::hook_event('frontend_display', $entry);
}
}
$serendipity['smarty']->assign('faq_plugin', array(
'categories' => $cats
));
}
$filename = 'plugin_faq_categories.tpl';
}
if ($serendipity['rewrite'] == 'none') {
$pluginpath = $serendipity['indexFile'].'?/'.$serendipity['permalinkPluginPath'].'/'.$this->get_config('faqurl', 'faqs');
} else {
$pluginpath = $serendipity['permalinkPluginPath'].'/'.$this->get_config('faqurl', 'faqs');
}
$serendipity['smarty']->append('faq_plugin',
array(
'plugin_url' => trim($pluginpath)
), true);
$content = $this->parseTemplate($filename);
$serendipity['smarty']->assign('CONTENT', $content);
// redirect out via index.tpl
$serendipity['smarty']->display(serendipity_getTemplateFile($serendipity['smarty_file'], 'serendipityPath'));
}
function showSearch()
{
global $serendipity;
$term = serendipity_db_escape_string($serendipity['GET']['searchTerm']);
if ($serendipity['dbType'] == 'postgres') {
$group = '';
$distinct = 'DISTINCT';
$find_part = "(question ILIKE '%$term%' OR answer ILIKE '%$term%')";
} elseif (stristr($serendipity['dbType'], 'sqlite') !== FALSE) {
$group = 'GROUP BY id';
$distinct = '';
$term = serendipity_mb('strtolower', $term);
$find_part = "(lower(question) LIKE '%$term%' OR lower(answer) LIKE '%$term%')";
} else { // MYSQL
$group = 'GROUP BY id';
$distinct = '';
$term = str_replace('"', '"', $term);
if (preg_match('@["\+\-\*~<>\(\)]+@', $term)) {
$find_part = "MATCH(question,answer) AGAINST('$term' IN BOOLEAN MODE)";
} else {
$find_part = "MATCH(question,answer) AGAINST('$term')";
}
}
$querystring = "SELECT $distinct f.*
FROM {$serendipity['dbPrefix']}faqs AS f
WHERE $find_part
$group
ORDER BY changedate DESC";
$results = serendipity_db_query($querystring);
if (!is_array($results)) {
if ($results !== 1 && $results !== true) {
echo (function_exists('serendipity_specialchars') ? serendipity_specialchars($results) : htmlspecialchars($results, ENT_COMPAT, LANG_CHARSET));
}
$results = array();
}
if ($serendipity['rewrite'] == 'none') {
$pluginpath = $serendipity['indexFile'].'?/'.$serendipity['permalinkPluginPath'].'/'.$this->get_config('faqurl', 'faqs');
} else {
$pluginpath = $serendipity['permalinkPluginPath'].'/'.$this->get_config('faqurl', 'faqs');
}
$serendipity['smarty']->assign(
array(
'faq_searchresults' => count($results),
'faq_results' => $results,
'faq_pluginpath' => $pluginpath
)
);
$filename = 'plugin_faq_searchresults.tpl';
$content = $this->parseTemplate($filename);
echo $content;
}
function showFAQForm()
{
global $serendipity, $inspectConfig;
if (file_exists(S9Y_INCLUDE_PATH.'include/functions_entries_admin.inc.php')) {
include_once(S9Y_INCLUDE_PATH.'include/functions_entries_admin.inc.php');
}
// call moduled abstract class
if (!is_callable('inspectConfig')) {
require_once dirname(__FILE__).'/class_inspectConfig.php';
}
$elcount = 0;
$htmlnugget = array();
$inspectConfig = array();
// add some $serendipity items to check for
$inspectConfig['s9y']['wysiwyg'] = $serendipity['wysiwyg'];
$inspectConfig['s9y']['version'] = $serendipity['version'][0];
$inspectConfig['s9y']['nl2br']['iso2br'] = $serendipity['nl2br']['iso2br'];
$inspectConfig['s9y']['plugin_path'] = $serendipity['serendipityHTTPPath'] . 'plugins/serendipity_event_faq/';
foreach ($this->config_faq AS $config_item) {
$elcount++;
#$inspectConfig['config_value'] = $config_value = $this->faq[$config_item]; // no use, why was it set?
$cbag = new serendipity_property_bag();
$this->introspect_faq_item($config_item, $cbag);
$inspectConfig['cname'] = (function_exists('serendipity_specialchars') ? serendipity_specialchars($cbag->get('name')) : htmlspecialchars($cbag->get('name'), ENT_COMPAT, LANG_CHARSET));
$inspectConfig['cdesc'] = (function_exists('serendipity_specialchars') ? serendipity_specialchars($cbag->get('description')) : htmlspecialchars($cbag->get('description'), ENT_COMPAT, LANG_CHARSET));
$inspectConfig['value'] = $value = $this->getFaq($config_item, 'unset'); // case hidden
$inspectConfig['lang_direction'] = $lang_direction = (function_exists('serendipity_specialchars') ? serendipity_specialchars($cbag->get('lang_direction')) : htmlspecialchars($cbag->get('lang_direction'), ENT_COMPAT, LANG_CHARSET));
$type = $cbag->get('type');
if (empty($lang_direction)) {
$inspectConfig['lang_direction'] = LANG_DIRECTION;
}
if ($value === 'unset') {
$inspectConfig['value'] = $value = $cbag->get('default'); // check prop type default for alles cases, except case hidden language and id and cid!
}
// check the special cases
if (($config_item == 'language' || $config_item == 'id' || $config_item == 'cid')
&& $type == 'hidden' && trim($value) == '') {
$inspectConfig['value'] = $value = $cbag->get('value'); // case 'language' prop type hidden 'default' = 'value'!
}
$hvalue = (!isset($serendipity['POST']['faqSubmit']) && isset($serendipity['POST']['plugin'][$config_item])
? (function_exists('serendipity_specialchars')
? serendipity_specialchars($serendipity['POST']['plugin'][$config_item])
: htmlspecialchars($serendipity['POST']['plugin'][$config_item], ENT_COMPAT, LANG_CHARSET)
)
: (function_exists('serendipity_specialchars')
? serendipity_specialchars($value)
: htmlspecialchars($value, ENT_COMPAT, LANG_CHARSET))
);
$inspectConfig['config_item'] = $config_item;
$inspectConfig['elcount'] = $elcount;
$inspectConfig['hvalue'] = $hvalue;
$inspectConfig['radio'] = $radio = array();
$inspectConfig['select'] = $select = array();
$inspectConfig['per_row'] = $per_row = null;
$inspectConfig['type'] = $type;
$inspectConfig['default'] = $default = $cbag->get('default'); // case default
$inspectConfig['radio'] = $radio = $cbag->get('radio'); // case radio
$inspectConfig['per_row'] = $per_row = $cbag->get('radio_per_row'); // case radio
$inspectConfig['select_values'] = $select_values = $cbag->get('select_values'); // case select
if ($type) {
echo "\n"; // tag dynamic form items
$ctype = 'ic'.ucfirst($type);
${$ctype} = new $ctype();
if ($type == 'text' && $serendipity['wysiwyg']) {
$htmlnugget[] = $elcount;
serendipity_emit_htmlarea_code('nuggets', 'nuggets', true);
}
}
} //foreach config_faq AS config_item end
if (isset($serendipity['wysiwyg']) && $serendipity['wysiwyg'] && count($htmlnugget) > 0) {
$ev = array('nuggets' => $htmlnugget, 'skip_nuggets' => false);
serendipity_plugin_api::hook_event('backend_wysiwyg_nuggets', $ev);
if ($ev['skip_nuggets'] === false) {
?>
config_category AS $config_item) {
$elcount++;
#$inspectConfig['config_value'] = $config_value = $this->category[$config_item]; // no use, why was it set?
$cbag = new serendipity_property_bag();
$this->introspect_category_item($config_item, $cbag);
$inspectConfig['cname'] = (function_exists('serendipity_specialchars') ? serendipity_specialchars($cbag->get('name')) : htmlspecialchars($cbag->get('name'), ENT_COMPAT, LANG_CHARSET));
$inspectConfig['cdesc'] = (function_exists('serendipity_specialchars') ? serendipity_specialchars($cbag->get('description')) : htmlspecialchars($cbag->get('description'), ENT_COMPAT, LANG_CHARSET));
$inspectConfig['value'] = $value = $this->getCategory($config_item, 'unset'); // case hidden
$inspectConfig['lang_direction'] = $lang_direction = (function_exists('serendipity_specialchars') ? serendipity_specialchars($cbag->get('lang_direction')) : htmlspecialchars($cbag->get('lang_direction'), ENT_COMPAT, LANG_CHARSET));
$type = $cbag->get('type');
if (empty($lang_direction)) {
$inspectConfig['lang_direction'] = LANG_DIRECTION;
}
if ($value === 'unset') {
$inspectConfig['value'] = $value = $cbag->get('default'); // check prop type default for alles cases, except case hidden language and id and cid!
}
// check the special cases
if (($config_item == 'language' || $config_item == 'id' || $config_item == 'cid')
&& $type == 'hidden' && trim($value) == '') {
$inspectConfig['value'] = $value = $cbag->get('value'); // case 'language' prop type hidden 'default' = 'value'!
}
$hvalue = (!isset($serendipity['POST']['categorySubmit']) && isset($serendipity['POST']['plugin'][$config_item])
? (function_exists('serendipity_specialchars')
? serendipity_specialchars($serendipity['POST']['plugin'][$config_item])
: htmlspecialchars($serendipity['POST']['plugin'][$config_item], ENT_COMPAT, LANG_CHARSET)
)
: (function_exists('serendipity_specialchars')
? serendipity_specialchars($value)
: htmlspecialchars($value, ENT_COMPAT, LANG_CHARSET))
);
$inspectConfig['config_item'] = $config_item;
$inspectConfig['elcount'] = $elcount;
$inspectConfig['hvalue'] = $hvalue;
$inspectConfig['radio'] = $radio = array();
$inspectConfig['select'] = $select = array();
$inspectConfig['per_row'] = $per_row = null;
$inspectConfig['type'] = $type;
$inspectConfig['default'] = $default = $cbag->get('default'); // case default
$inspectConfig['radio'] = $radio = $cbag->get('radio'); // case radio
$inspectConfig['per_row'] = $per_row = $cbag->get('radio_per_row'); // case radio
$inspectConfig['select_values'] = $select_values = $cbag->get('select_values'); // case select
if ($type) {
echo "\n"; // tag dynamic form items
$ctype = 'ic'.ucfirst($type);
${$ctype} = new $ctype();
if ($type == 'text' && $serendipity['wysiwyg']) {
$htmlnugget[] = $elcount;
serendipity_emit_htmlarea_code('nuggets', 'nuggets', true);
}
}
} //foreach config_category AS config_item end
if (isset($serendipity['wysiwyg']) && $serendipity['wysiwyg'] && count($htmlnugget) > 0) {
$ev = array('nuggets' => $htmlnugget, 'skip_nuggets' => false);
serendipity_plugin_api::hook_event('backend_wysiwyg_nuggets', $ev);
if ($ev['skip_nuggets'] === false) {
?>
get('event_hooks');
if (isset($hooks[$event])) {
switch ($event) {
case 'genpage':
break;
case 'entry_display':
if ($this->isFaq()) {
if (is_array($eventData)) {
$eventData['clean_page'] = true; // This is important to not display an entry list!
} else {
$eventData = array('clean_page' => true);
}
}
break;
case 'backend_sidebar_entries':
// forbid entry if not admin
#if (!serendipity_userLoggedIn() && $_SESSION['serendipityAuthedUser'] !== true && $_SESSION['serendipityUserlevel'] != '255') {
# break;
#}
if ($serendipity['version'][0] < 2) {
$this->setupDB();
echo "\n".'