edit();
break;
case 'delete':
$this->delete();
$this->config();
break;
case 'moveup':
$this->moveup();
$this->config();
break;
case 'movedown':
$this->movedown();
$this->config();
break;
case 'show':
$this->show();
break;
case 'config':
$this->config();
break;
default:
die("Internal error - unknown action: $mod_action");
}
}
// Implement WT_Module_Config
public function getConfigLink() {
return 'module.php?mod='.$this->getName().'&mod_action=config';
}
// Implement class WT_Module_Block
public function getBlock($block_id, $template=true, $cfg=null) {
}
// Implement class WT_Module_Block
public function loadAjax() {
return false;
}
// Implement class WT_Module_Block
public function isUserBlock() {
return false;
}
// Implement class WT_Module_Block
public function isGedcomBlock() {
return false;
}
// Implement class WT_Module_Block
public function configureBlock($block_id) {
}
// Action from the configuration page
private function edit() {
global $TEXT_DIRECTION;
require_once WT_ROOT.'includes/functions/functions_edit.php';
if (safe_POST_bool('save')) {
$block_id=safe_POST('block_id');
if ($block_id) {
WT_DB::prepare(
"UPDATE `##block` SET gedcom_id=?, block_order=? WHERE block_id=?"
)->execute(array(
safe_POST('gedcom_id'),
(int)safe_POST('block_order'),
$block_id
));
} else {
WT_DB::prepare(
"INSERT INTO `##block` (gedcom_id, module_name, block_order) VALUES (?, ?, ?)"
)->execute(array(
safe_POST('gedcom_id', array_keys(get_all_gedcoms())),
$this->getName(),
(int)safe_POST('block_order')
));
$block_id=WT_DB::getInstance()->lastInsertId();
}
set_block_setting($block_id, 'header', safe_POST('header'));
set_block_setting($block_id, 'faqbody', safe_POST('faqbody', WT_REGEX_UNSAFE)); // allow html
$languages=array();
foreach (i18n::installed_languages() as $code=>$name) {
if (safe_POST_bool('lang_'.$code)) {
$languages[]=$code;
}
}
if (!$languages) {
$languages[]=WT_LOCALE;
}
set_block_setting($block_id, 'languages', implode(',', $languages));
$this->config();
} else {
$block_id=safe_GET('block_id');
if ($block_id) {
print_header(i18n::translate('Edit FAQ item'));
$header=get_block_setting($block_id, 'header');
$faqbody=get_block_setting($block_id, 'faqbody');
$block_order=WT_DB::prepare(
"SELECT block_order FROM `##block` WHERE block_id=?"
)->execute(array($block_id))->fetchOne();
$gedcom_id=WT_DB::prepare(
"SELECT gedcom_id FROM `##block` WHERE block_id=?"
)->execute(array($block_id))->fetchOne();
} else {
print_header(i18n::translate('Add FAQ item'));
$header='';
$faqbody='';
$block_order=WT_DB::prepare(
"SELECT IFNULL(MAX(block_order)+1, 0) FROM `##block` WHERE module_name=?"
)->execute(array($this->getName()))->fetchOne();
$gedcom_id=WT_GED_ID;
}
echo '
';
print_footer();
exit;
}
}
private function delete() {
$block_id=safe_GET('block_id');
$block_order=WT_DB::prepare(
"SELECT block_order FROM `##block` WHERE block_id=?"
)->execute(array($block_id))->fetchOne();
WT_DB::prepare(
"DELETE FROM `##block_setting` WHERE block_id=?"
)->execute(array($block_id));
WT_DB::prepare(
"DELETE FROM `##block` WHERE block_id=?"
)->execute(array($block_id));
}
private function moveup() {
$block_id=safe_GET('block_id');
$block_order=WT_DB::prepare(
"SELECT block_order FROM `##block` WHERE block_id=?"
)->execute(array($block_id))->fetchOne();
$swap_block=WT_DB::prepare(
"SELECT block_order, block_id".
" FROM `##block`".
" WHERE block_order=(".
" SELECT MAX(block_order) FROM `##block` WHERE block_order < ? AND module_name=?".
" )".
" LIMIT 1"
)->execute(array($block_order, $this->getName()))->fetchOneRow();
if ($swap_block) {
WT_DB::prepare(
"UPDATE `##block` SET block_order=? WHERE block_id=?"
)->execute(array($swap_block->block_order, $block_id));
WT_DB::prepare(
"UPDATE `##block` SET block_order=? WHERE block_id=?"
)->execute(array($block_order, $swap_block->block_id));
}
}
private function movedown() {
$block_id=safe_GET('block_id');
$block_order=WT_DB::prepare(
"SELECT block_order FROM `##block` WHERE block_id=?"
)->execute(array($block_id))->fetchOne();
$swap_block=WT_DB::prepare(
"SELECT block_order, block_id".
" FROM `##block`".
" WHERE block_order=(".
" SELECT MIN(block_order) FROM `##block` WHERE block_order>? AND module_name=?".
" )".
" LIMIT 1"
)->execute(array($block_order, $this->getName()))->fetchOneRow();
if ($swap_block) {
WT_DB::prepare(
"UPDATE `##block` SET block_order=? WHERE block_id=?"
)->execute(array($swap_block->block_order, $block_id));
WT_DB::prepare(
"UPDATE `##block` SET block_order=? WHERE block_id=?"
)->execute(array($block_order, $swap_block->block_id));
}
}
private function show() {
print_header($this->getTitle());
$faqs=WT_DB::prepare(
"SELECT block_id, bs1.setting_value AS header, bs2.setting_value AS body".
" FROM `##block` b".
" JOIN `##block_setting` bs1 USING (block_id)".
" JOIN `##block_setting` bs2 USING (block_id)".
" WHERE module_name=?".
" AND bs1.setting_name='header'".
" AND bs2.setting_name='faqbody'".
" AND (gedcom_id IS NULL OR gedcom_id=?)".
" ORDER BY block_order"
)->execute(array($this->getName(), WT_GED_ID))->fetchAll();
// Define your colors for the alternating rows
echo '', i18n::translate('Frequently asked questions'), '
';
// Instructions
echo '', i18n::translate('Click on a title to go straight to it, or scroll down to read them all');
if (WT_USER_GEDCOM_ADMIN) {
echo '
';
}
echo '
';
//Start the table to contain the list of headers
$row_count = 0;
echo '';
// List of titles
foreach ($faqs as $id => $faq) {
$header = get_block_setting($faq->block_id, 'header');
$faqbody = get_block_setting($faq->block_id, 'faqbody');
$languages=get_block_setting($faq->block_id, 'languages');
if ($languages && !in_array(WT_LOCALE, explode(',', $languages))) {
return;
}
if ($header && $faqbody) {
$row_color = ($row_count % 2) ? 'odd' : 'even';
echo '';
// NOTE: Print the header of the current item
echo '| ';
echo '';
echo $id+1, '. ', $faq->header;
echo '';
echo ' |
';
echo '';
$row_count++;
}
}
echo '
';
// Detailed entries
echo '';
foreach ($faqs as $id => $faq) {
$header = get_block_setting($faq->block_id, 'header');
$faqbody = get_block_setting($faq->block_id, 'faqbody');
$languages=get_block_setting($faq->block_id, 'languages');
if ($languages && !in_array(WT_LOCALE, explode(',', $languages))) {
return;
}
if ($header && $faqbody) {
// NOTE: Print the body text of the current item, with its header
echo '',
$faq->header;
echo '
';
echo '
';
echo '',
substr($faqbody, 0, 1)=='<' ? $faqbody : nl2br($faqbody);
echo '
';
echo '
';
}
}
echo '
';
print_footer();
}
private function config() {
global $WT_IMAGES;
print_header($this->getTitle());
$faqs=WT_DB::prepare(
"SELECT block_id, block_order, gedcom_id, bs1.setting_value AS header, bs2.setting_value AS faqbody".
" FROM `##block` b".
" JOIN `##block_setting` bs1 USING (block_id)".
" JOIN `##block_setting` bs2 USING (block_id)".
" WHERE module_name=?".
" AND bs1.setting_name='header'".
" AND bs2.setting_name='faqbody'".
" AND (gedcom_id IS NULL OR gedcom_id=?)".
" ORDER BY block_order"
)->execute(array($this->getName(), WT_GED_ID))->fetchAll();
$min_block_order=WT_DB::prepare(
"SELECT MIN(block_order) FROM `##block` WHERE module_name=?"
)->execute(array($this->getName()))->fetchOne();
$max_block_order=WT_DB::prepare(
"SELECT MAX(block_order) FROM `##block` WHERE module_name=?"
)->execute(array($this->getName()))->fetchOne();
echo '';
echo '| ';
echo '', i18n::translate('Add FAQ item'), '';
echo help_link('add_faq_item', $this->getName());
echo ' |
';
if (empty($faqs)) {
echo '| ', i18n::translate('The FAQ list is empty.'), ' |
';
} else {
foreach ($faqs as $faq) {
echo '';
// NOTE: Print the position of the current item
echo '| ';
echo i18n::translate('Position item'), ': ', $faq->block_order, ', ';
if ($faq->gedcom_id==null) {
echo i18n::translate('All');
} else {
echo get_gedcom_from_id($faq->gedcom_id);
}
echo ' | ';
echo '', $faq->header, ' | ';
echo '
';
// NOTE: Print the edit options of the current item
echo '';
if ($faq->block_order==$min_block_order) {
echo ' ';
} else {
echo ' ';
echo help_link('moveup_faq_item', $this->getName());
}
echo ' | ';
if ($faq->block_order==$max_block_order) {
echo ' ';
} else {
echo ' ';
echo help_link('movedown_faq_item', $this->getName());
}
echo ' | ';
echo '', i18n::translate('Edit'), '';
echo help_link('edit_faq_item', $this->getName());
echo ' | ';
echo '', i18n::translate('Delete'), '';
echo help_link('delete_faq_item', $this->getName());
echo ' | ';
// NOTE: Print the body text of the current item
echo '', substr($faq->faqbody, 0, 1)=='<' ? $faq->faqbody : nl2br($faq->faqbody), ' |
';
}
echo '';
}
print_footer();
}
}