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 '
'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $languages=get_block_setting($block_id, 'languages', WT_LOCALE); echo ''; echo ''; echo '
'; echo i18n::translate('Add FAQ item'), help_link('add_faq_item', $this->getName()); echo '
'; echo i18n::translate('FAQ header'), help_link('add_faq_header', $this->getName()); echo '
'; echo i18n::translate('FAQ body'), help_link('add_faq_body', $this->getName()); echo '
'; if (array_key_exists('ckeditor', WT_Module::getActiveModules())) { // use CKeditor module require_once WT_ROOT.'modules/ckeditor/ckeditor.php'; $oCKeditor = new CKEditor(); $oCKeditor->basePath = './modules/ckeditor/'; $oCKeditor->config['width'] = 900; $oCKeditor->config['height'] = 400; $oCKeditor->config['AutoDetectLanguage'] = false ; $oCKeditor->config['DefaultLanguage'] = 'en'; $oCKeditor->editor('faqbody', $faqbody); } else { //use standard textarea echo ''; } echo '
'; echo i18n::translate('FAQ position'), help_link('add_faq_order', $this->getName()); echo ''; echo i18n::translate('FAQ visibility'), help_link('add_faq_visibility', $this->getName()); echo '
'; echo '
'; echo i18n::translate('Show this block for which languages?'); echo ''; echo edit_language_checkboxes('lang_', $languages); echo '
'; echo ' 
'; 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 '
', '', i18n::translate('Click here to Add, Edit, or Delete'), '', '
'; } 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 ''; $row_count++; } } echo '
'; echo ''; echo $id+1, '. ', $faq->header; echo ''; 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 '[', i18n::translate('back to top'), ']'; 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 ''; if (empty($faqs)) { echo '
'; echo '', i18n::translate('Add FAQ item'), ''; echo help_link('add_faq_item', $this->getName()); 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(); } }