function execute($request)
 {
     // Ticket Check
     if (!$GLOBALS['xoopsGTicket']->check(true, 'pico')) {
         redirect_header(XOOPS_URL . '/', 3, $GLOBALS['xoopsGTicket']->getErrors());
     }
     parent::execute($request);
     // contentObj
     $cat_data = $this->currentCategoryObj->getData();
     $this->contentObj = new PicoContent($this->mydirname, $request['content_id'], $this->currentCategoryObj);
     // check existence
     if ($this->contentObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     $content_data = $this->contentObj->getData();
     // permission check (can_delete)
     if (empty($content_data['can_delete'])) {
         redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_DELETECONTENT);
         exit;
     }
     // delete transaction
     pico_delete_content($this->mydirname, $request['content_id']);
     // view
     $this->is_need_header_footer = false;
 }
 function execute($request)
 {
     parent::execute($request);
     $this->assign['content'] = $this->readWrappedFile($request);
     // check existence
     if (empty($this->assign['content'])) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     $cat_data = $this->currentCategoryObj->getData();
     $this->assign['category'] = $this->currentCategoryObj->getData4html();
     // permission check
     if (empty($this->assign['content']['can_read']) || empty($this->assign['content']['can_readfull'])) {
         if ($this->uid > 0) {
             redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_PERMREADFULL);
         } else {
             redirect_header(XOOPS_URL . '/user.php', 2, _MD_PICO_ERR_LOGINTOREADFULL);
         }
         exit;
     }
     // auto-register
     if (!empty($this->mod_config['wraps_auto_register']) && @$cat_data['cat_vpath'][0] == '/') {
         $register_class = empty($this->mod_config['auto_register_class']) ? 'PicoAutoRegisterWraps' : $this->mod_config['auto_register_class'];
         require_once dirname(__FILE__) . '/' . $register_class . '.class.php';
         $register_obj = new $register_class($this->mydirname, $this->mod_config);
         $affected_rows = $register_obj->registerByCatvpath($cat_data);
         if ($affected_rows > 0) {
             // reload if the content is updated
             header('Location: ' . pico_common_unhtmlspecialchars($this->assign['mod_url']) . '/' . pico_common_unhtmlspecialchars($this->assign['content']['link']));
             exit;
         }
     }
     // link for "tell to friends"
     // (TODO?)
     if ($this->mod_config['use_taf_module']) {
         $this->assign['content']['tellafriend_uri'] = XOOPS_URL . '/modules/tellafriend/index.php?target_uri=' . rawurlencode(pico_common_unhtmlspecialchars($this->assign['mod_url'] . '/' . $this->assign['content']['link'])) . '&subject=' . rawurlencode(sprintf(_MD_PICO_FMT_TELLAFRIENDSUBJECT, @$GLOBALS['xoopsConfig']['sitename']));
     } else {
         $this->assign['content']['tellafriend_uri'] = 'mailto:?subject=' . pico_main_escape4mailto(sprintf(_MD_PICO_FMT_TELLAFRIENDSUBJECT, @$GLOBALS['xoopsConfig']['sitename'])) . '&body=' . pico_main_escape4mailto(sprintf(_MD_PICO_FMT_TELLAFRIENDBODY, $this->assign['content']['subject'])) . '%0A' . rawurlencode(pico_common_unhtmlspecialchars($this->assign['mod_url'] . '/' . $this->assign['content']['link']));
     }
     // breadcrumbs
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     $breadcrumbsObj->appendPath('', $this->assign['content']['subject']);
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     $this->assign['xoops_pagetitle'] = $this->assign['content']['subject'];
     // views
     switch ($request['view']) {
         case 'singlecontent':
             $this->template_name = 'db:' . $this->mydirname . '_independent_singlecontent.html';
             $this->is_need_header_footer = false;
             break;
         case 'print':
             $this->template_name = 'db:' . $this->mydirname . '_independent_print.html';
             $this->is_need_header_footer = false;
             break;
         default:
             $this->template_name = $this->mydirname . '_main_viewcontent.html';
             $this->is_need_header_footer = true;
             break;
     }
 }
 function execute($request)
 {
     // Ticket Check
     if (!$GLOBALS['xoopsGTicket']->check(true, 'pico')) {
         redirect_header(XOOPS_URL . '/', 3, $GLOBALS['xoopsGTicket']->getErrors());
     }
     parent::execute($request);
     // $categoryObj (not parent)
     $picoPermission =& PicoPermission::getInstance();
     $categoryObj = new PicoCategory($this->mydirname, $request['cat_id'], $picoPermission->getPermissions($this->mydirname));
     // check existence
     if ($categoryObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     $cat_data = $categoryObj->getData();
     // permission check
     if (empty($cat_data['isadminormod'])) {
         redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_CATEGORYMANAGER);
     }
     // cat_id != 0 check
     if ($cat_data['id'] == 0) {
         // LANGTD
         redirect_header(XOOPS_URL . '/', 2, 'top category cannot be deleted');
     }
     // children check
     if (count($cat_data['redundants']['subcattree_raw']) > 0) {
         // LANGTD
         redirect_header(XOOPS_URL . '/', 2, 'child categories exist');
     }
     // delete transaction
     pico_delete_category($this->mydirname, $request['cat_id']);
     // view
     $this->is_need_header_footer = false;
 }
 function execute($request)
 {
     // Ticket Check
     if (!$GLOBALS['xoopsGTicket']->check(true, 'pico')) {
         redirect_header(XOOPS_URL . '/', 3, $GLOBALS['xoopsGTicket']->getErrors());
     }
     parent::execute($request);
     // initialize
     $this->cat_id = $request['cat_id'];
     // $categoryObj (not parent)
     $picoPermission =& PicoPermission::getInstance();
     $categoryObj = new PicoCategory($this->mydirname, $request['cat_id'], $picoPermission->getPermissions($this->mydirname));
     // check existence
     if ($categoryObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     $cat_data = $categoryObj->getData();
     // permission check
     if (empty($cat_data['isadminormod'])) {
         redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_CATEGORYMANAGER);
     }
     // insert a category
     pico_updatecategory($this->mydirname, $this->cat_id);
     // view
     $this->is_need_header_footer = false;
 }
 function execute($request)
 {
     // Ticket Check
     if (!$GLOBALS['xoopsGTicket']->check(true, 'pico')) {
         redirect_header(XOOPS_URL . '/', 3, $GLOBALS['xoopsGTicket']->getErrors());
     }
     parent::execute($request);
     // contentObj
     $cat_data = $this->currentCategoryObj->getData();
     $this->contentObj = new PicoContent($this->mydirname, $request['content_id'], $this->currentCategoryObj);
     // check existence
     if ($this->contentObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     $content_data = $this->contentObj->getData();
     // permission check (isadminormod)
     if (empty($content_data['isadminormod'])) {
         redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_CATEGORYMANAGEMENT);
         exit;
     }
     // copy from waiting eg) body_waiting -> body
     pico_transact_copyfromwaitingcontent($this->mydirname, $request['content_id']);
     // view
     $this->is_need_header_footer = false;
 }
 function execute($request)
 {
     // Ticket Check
     if (!$GLOBALS['xoopsGTicket']->check(true, 'pico')) {
         redirect_header(XOOPS_URL . '/', 3, $GLOBALS['xoopsGTicket']->getErrors());
     }
     parent::execute($request);
     // initialize
     $cat_data = $this->currentCategoryObj->getData();
     $picoPermission =& PicoPermission::getInstance();
     // permission check
     if (empty($cat_data['can_post'])) {
         redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_MAKECONTENT);
     }
     // insert a content
     $content_id = pico_makecontent($this->mydirname);
     $content_uri4html = XOOPS_URL . "/modules/{$this->mydirname}/" . pico_common_make_content_link4html($this->mod_config, $content_id, $this->mydirname);
     // get contentObj
     $this->contentObj =& new PicoContent($this->mydirname, $content_id, $this->currentCategoryObj);
     $content_data = $this->contentObj->getData();
     // return uri
     if (!empty($_GET['ret']) && ($ret_uri = pico_main_parse_ret2uri($this->mydirname, $_GET['ret']))) {
         $ret_uri4html = htmlspecialchars($ret_uri, ENT_QUOTES);
     } else {
         $ret_uri4html = $content_uri4html;
     }
     // calling a delegate
     if (class_exists('XCube_DelegateUtils')) {
         XCube_DelegateUtils::raiseEvent('ModuleClass.Pico.Contentman.InsertSuccess', $this->mydirname, $content_id, $cat_data, $ret_uri4html);
     }
     // create extra_tags for notifications
     $extra_tags = array('CONTENT_URL' => pico_common_unhtmlspecialchars($content_uri4html), 'APPROVAL_URL' => XOOPS_URL . "/modules/{$this->mydirname}/index.php?page=contentmanager&content_id={$content_id}", 'CAT_TITLE' => $cat_data['cat_title'], 'CONTENT_SUBJECT' => $content_data['subject_raw']);
     // users2notify (can_readfull only)
     $users2notify = $picoPermission->getUidsFromCatid($this->mydirname, $cat_data['id'], 'can_readfull');
     if ($cat_data['post_auto_approved']) {
         // Notify for new content 'global'
         pico_main_trigger_event($this->mydirname, 'global', 0, 'newcontent', $extra_tags, $users2notify, 0);
         // Notify for new content 'category' of all parental categories
         foreach (array_keys($cat_data['paths_raw']) as $cat_id) {
             pico_main_trigger_event($this->mydirname, 'category', $cat_id, 'newcontent', $extra_tags, $users2notify, 0);
         }
         // message "registered"
         redirect_header($ret_uri4html, 2, _MD_PICO_MSG_CONTENTMADE);
     } else {
         // Notify for new waiting content (only for admin or mod)
         $users2notify = pico_main_get_moderators($this->mydirname, $cat_data['id']);
         if (empty($users2notify)) {
             $users2notify = array(0);
         }
         pico_main_trigger_event($this->mydirname, 'global', 0, 'waitingcontent', $extra_tags, $users2notify);
         // message "waiting approval"
         redirect_header($ret_uri4html, 2, _MD_PICO_MSG_CONTENTWAITINGREGISTER);
     }
     // view
     $this->is_need_header_footer = false;
 }
 function execute($request)
 {
     parent::execute($request);
     $cat_data = $this->currentCategoryObj->getData();
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     // get $history_profile from the id
     $older_profile = pico_get_content_history_profile($this->mydirname, $request['older_history_id']);
     if (empty($request['newer_history_id'])) {
         $newer_profile = pico_get_content_history_profile($this->mydirname, 0, intval($older_profile[1]));
     } else {
         $newer_profile = pico_get_content_history_profile($this->mydirname, $request['newer_history_id']);
     }
     // check each content_ids
     if ($older_profile[1] != $newer_profile[1]) {
         die('Differenct content_ids each other');
     }
     $this->contentObj = new PicoContent($this->mydirname, $request['content_id'], $this->currentCategoryObj);
     // add breadcrumbs if the content exists
     if (!$this->contentObj->isError()) {
         $content_data = $this->contentObj->getData();
         $this->assign['content'] = $this->contentObj->getData4html();
         $breadcrumbsObj->appendPath(XOOPS_URL . '/modules/' . $this->mydirname . '/' . $this->assign['content']['link'], $this->assign['content']['subject']);
         $breadcrumbsObj->appendPath(XOOPS_URL . '/modules/' . $this->mydirname . '/index.php?page=contentmanager&content_id=' . $content_data['id'], _MD_PICO_CONTENTMANAGER);
     }
     // permission check by 'can_edit'
     if (empty($cat_data['can_edit'])) {
         redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_EDITCONTENT);
         exit;
     }
     // get diff
     $diff_from_file4disp = '';
     $original_error_level = error_reporting();
     error_reporting($original_error_level & ~E_NOTICE & ~E_WARNING);
     $diff = new Text_Diff(explode("\n", $older_profile[2]), explode("\n", $newer_profile[2]));
     //$renderer = new Text_Diff_Renderer_unified();
     //$diff_str = htmlspecialchars( $renderer->render( $diff ) , ENT_QUOTES ) ;
     $renderer = new Text_Diff_Renderer_inline();
     $this->assign['diff_str'] = $renderer->render($diff);
     error_reporting($original_error_level);
     // breadcrumbs
     $breadcrumbsObj->appendPath('', 'DIFF');
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     $this->assign['xoops_pagetitle'] = _MD_PICO_HISTORY;
     // view
     $this->view = $request['view'];
     switch ($this->view) {
         case 'diffhistories':
             $this->template_name = $this->mydirname . '_main_diffhistories.html';
             $this->is_need_header_footer = true;
             break;
         default:
             $this->is_need_header_footer = false;
             break;
     }
 }
 function execute($request)
 {
     // Ticket Check
     if (!$GLOBALS['xoopsGTicket']->check(true, 'pico')) {
         redirect_header(XOOPS_URL . '/', 3, $GLOBALS['xoopsGTicket']->getErrors());
     }
     parent::execute($request);
     // contentObj
     $cat_data = $this->currentCategoryObj->getData();
     $this->contentObj =& new PicoContent($this->mydirname, $request['content_id'], $this->currentCategoryObj);
     // check existence
     if ($this->contentObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     $content_data = $this->contentObj->getData();
     // permission check
     if (empty($content_data['can_edit'])) {
         if ($content_data['locked']) {
             redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_LOCKEDCONTENT);
             exit;
         } else {
             redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_EDITCONTENT);
             exit;
         }
     }
     // update the content
     pico_updatecontent($this->mydirname, $request['content_id'], $cat_data['post_auto_approved'], $cat_data['isadminormod']);
     $content_uri4html = XOOPS_URL . "/modules/{$this->mydirname}/" . pico_common_make_content_link4html($this->mod_config, $request['content_id'], $this->mydirname);
     // return uri
     if (!empty($_GET['ret']) && ($ret_uri = pico_main_parse_ret2uri($this->mydirname, $_GET['ret']))) {
         $ret_uri4html = htmlspecialchars($ret_uri, ENT_QUOTES);
     } else {
         $ret_uri4html = $content_uri4html;
     }
     // calling a delegate
     if (class_exists('XCube_DelegateUtils')) {
         XCube_DelegateUtils::raiseEvent('ModuleClass.Pico.Contentman.UpdateSuccess', $this->mydirname, $request['content_id'], $cat_data, $ret_uri4html);
     }
     if ($cat_data['post_auto_approved']) {
         // message "modified"
         redirect_header($ret_uri4html, 2, _MD_PICO_MSG_CONTENTUPDATED);
     } else {
         // Notify for new waiting content (only for admin or mod)
         $users2notify = pico_main_get_moderators($this->mydirname, $cat_data['id']);
         if (empty($users2notify)) {
             $users2notify = array(0);
         }
         pico_main_trigger_event($this->mydirname, 'global', 0, 'waitingcontent', array('CONTENT_URL' => XOOPS_URL . "/modules/{$this->mydirname}/index.php?page=contentmanager&content_id=" . $request['content_id']), $users2notify);
         // message "waiting approval"
         redirect_header($ret_uri4html, 2, _MD_PICO_MSG_CONTENTWAITINGUPDATE);
     }
     // view
     $this->is_need_header_footer = false;
 }
 function execute($request)
 {
     parent::execute($request);
     $categoryHandler = new PicoCategoryHandler($this->mydirname, $this->permissions);
     $categories = $categoryHandler->getAllCategories();
     // auto-register
     foreach ($categories as $categoryObj) {
         $mod_config = $categoryObj->getOverriddenModConfig();
         $register_class = empty($mod_config['auto_register_class']) ? 'PicoAutoRegisterWraps' : $mod_config['auto_register_class'];
         require_once dirname(__FILE__) . '/' . $register_class . '.class.php';
         if (!empty($mod_config['wraps_auto_register'])) {
             $register_obj = new $register_class($this->mydirname, $mod_config);
             $register_obj->registerByCatvpath($categoryObj->getData());
         }
     }
     $categories4assign = array();
     foreach ($categories as $cat_id => $categoryObj) {
         // assign categories
         $categories4assign[$cat_id] = $categoryObj->getData4html();
         // contents loop
         $contentObjs = $categoryObj->getContents(true);
         $private_contents_counter = 0;
         foreach ($contentObjs as $contentObj) {
             $content_data = $contentObj->getData();
             if (!$content_data['public']) {
                 $private_contents_counter++;
             } else {
                 if ($content_data['show_in_menu'] && $content_data['can_read']) {
                     $categories4assign[$cat_id]['contents'][] = $contentObj->getData4html();
                 }
             }
         }
         $categories4assign[$cat_id]['private_contents_counter'] = $private_contents_counter;
     }
     $this->assign['categories'] = $categories4assign;
     // breadcrumbs and pagetitle
     $lastnode4assign = @$_GET['page'] == 'menu' ? _MD_PICO_MENU : $GLOBALS['xoopsModule']->getVar('name');
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     $breadcrumbsObj->appendPath('', $lastnode4assign);
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     $this->assign['xoops_pagetitle'] = $lastnode4assign;
     // views (no views other than 'menu')
     $this->template_name = $this->mydirname . '_main_menu.html';
     $this->is_need_header_footer = true;
 }
 function execute($request)
 {
     // Ticket Check
     if (!$GLOBALS['xoopsGTicket']->check(true, 'pico')) {
         redirect_header(XOOPS_URL . '/', 3, $GLOBALS['xoopsGTicket']->getErrors());
     }
     parent::execute($request);
     // initialize
     $pcat_data = $this->currentCategoryObj->getData();
     // permission check
     if (empty($pcat_data['can_makesubcategory'])) {
         redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_MAKECATEGORY);
     }
     // insert a category
     $this->new_cat_id = pico_makecategory($this->mydirname);
     // view
     $this->is_need_header_footer = false;
 }
 function execute($request)
 {
     parent::execute($request);
     // check existence
     if ($this->currentCategoryObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCATEGORY);
         exit;
     }
     $cat_data = $this->currentCategoryObj->getData();
     $this->assign['category'] = $this->currentCategoryObj->getData4html();
     // permission check
     if (!$cat_data['can_read']) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCATEGORY);
         exit;
     }
     // auto-register
     if (!empty($this->mod_config['wraps_auto_register']) && @$cat_data['cat_vpath'][0] == '/') {
         $register_class = empty($this->mod_config['auto_register_class']) ? 'PicoAutoRegisterWraps' : $this->mod_config['auto_register_class'];
         require_once dirname(__FILE__) . '/' . $register_class . '.class.php';
         $register_obj = new $register_class($this->mydirname, $this->mod_config);
         $register_obj->registerByCatvpath($cat_data);
     }
     // contents
     $this->assign['contents'] = array();
     $contentObjs = $this->currentCategoryObj->getContents();
     foreach ($contentObjs as $contentObj) {
         $this->assign['contents'][] = $contentObj->getData4html();
     }
     // subcategories
     $categoryHandler = new PicoCategoryHandler($this->mydirname, $this->permissions);
     $subcategoryObjs = $categoryHandler->getSubCategories($request['cat_id']);
     foreach ($subcategoryObjs as $subcategoryObj) {
         $this->assign['subcategories'][] = $subcategoryObj->getData4html();
     }
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     $this->assign['xoops_pagetitle'] = $this->assign['category']['title'];
     // views (no views other than 'listcontents')
     $this->template_name = $this->mydirname . '_main_listcontents.html';
     $this->is_need_header_footer = true;
 }
 function execute($request)
 {
     parent::execute($request);
     $cat_data = $this->currentCategoryObj->getData();
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     $this->contentObj =& new PicoContent($this->mydirname, $request['content_id'], $this->currentCategoryObj);
     // add breadcrumbs if the content exists
     if (!$this->contentObj->isError()) {
         $content_data = $this->contentObj->getData();
         $this->assign['content'] = $this->contentObj->getData4html();
         $breadcrumbsObj->appendPath(XOOPS_URL . '/modules/' . $this->mydirname . '/' . $this->assign['content']['link'], $this->assign['content']['subject']);
         $breadcrumbsObj->appendPath(XOOPS_URL . '/modules/' . $this->mydirname . '/index.php?page=contentmanager&content_id=' . $content_data['id'], _MD_PICO_CONTENTMANAGER);
     }
     // permission check by 'can_edit'
     if (empty($cat_data['can_edit'])) {
         redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_EDITCONTENT);
         exit;
     }
     // get $history_profile from the id
     $this->assign['content_history_id'] = $request['content_history_id'];
     list(, , $history_body) = pico_get_content_history_profile($this->mydirname, $request['content_history_id']);
     $this->assign['history_body_raw'] = $history_body;
     // breadcrumbs
     $breadcrumbsObj->appendPath('', _MD_PICO_HISTORY);
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     $this->assign['xoops_pagetitle'] = _MD_PICO_HISTORY;
     // view
     $this->view = $request['view'];
     switch ($this->view) {
         case 'viewhistory':
             $this->template_name = $this->mydirname . '_main_viewhistory.html';
             $this->is_need_header_footer = true;
             break;
         case 'download':
         default:
             $this->is_need_header_footer = false;
             break;
     }
 }
 function execute($request)
 {
     parent::execute($request);
     $this->contentObj = new PicoContent($this->mydirname, $request['content_id'], $this->currentCategoryObj);
     // check existence
     if ($this->contentObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     $content_data = $this->contentObj->getData();
     // permission check
     if (empty($content_data['can_read'])) {
         if ($this->uid > 0) {
             redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_PERMREADFULL);
         } else {
             redirect_header(XOOPS_URL . '/user.php', 2, _MD_PICO_ERR_LOGINTOREADFULL);
         }
         exit;
     }
     // check if "use_vote" is on
     if (empty($this->mod_config['use_vote'])) {
         redirect_header(XOOPS_URL . "/modules/{$mydirname}/" . pico_common_make_content_link4html($this->config, $content4assign), 0, _MD_PICO_MSG_VOTEDISABLED);
         exit;
     }
     // special check for vote_to_post
     if (!$this->uid && empty($this->mod_config['guest_vote_interval'])) {
         redirect_header(XOOPS_URL . "/modules/{$mydirname}/" . pico_common_make_content_link4html($this->config, $content4assign), 0, _MD_PICO_ERR_VOTEPERM);
         exit;
     }
     // get POINT and validation
     $point = intval(@$_GET['point']);
     if ($point < 0 || $point > 10) {
         die(_MD_PICO_ERR_VOTEINVALID . __LINE__);
     }
     $this->contentObj->vote($this->uid, @$_SERVER['REMOTE_ADDR'], $point);
     // view
     $this->is_need_header_footer = false;
 }
 function execute($request)
 {
     parent::execute($request);
     // check existence
     if ($this->currentCategoryObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCATEGORY);
         exit;
     }
     $cat_data = $this->currentCategoryObj->getData();
     $this->assign['category'] = $this->currentCategoryObj->getData4html();
     // permission check
     if (!$cat_data['can_read']) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCATEGORY);
         exit;
     }
     // contents (order by modified_time DESC)
     $this->assign['contents'] = array();
     $contentObjs = $this->currentCategoryObj->getLatestContents(10, true);
     foreach ($contentObjs as $contentObj) {
         $content_data = $contentObj->getData();
         if ($content_data['can_read']) {
             $this->assign['contents'][] = array('body4rss' => htmlspecialchars(xoops_substr(strip_tags($content_data['body_cached']), 0, 255), ENT_QUOTES), 'created_time4rss' => date('r', $content_data['created_time']), 'modified_time4rss' => date('r', $content_data['modified_time'])) + $contentObj->getData4html();
         }
     }
     // views
     if ($request['view'] == 'rss') {
         $this->template_name = 'db:' . $this->mydirname . '_independent_rss20.html';
         $this->is_need_header_footer = false;
         if (function_exists('mb_http_output')) {
             mb_http_output('pass');
         }
         pico_common_utf8_encode_recursive($this->assign);
         header('Content-Type:text/xml; charset=utf-8');
     } else {
         $this->template_name = $this->mydirname . '_main_latestcontents.html';
         $this->is_need_header_footer = true;
     }
 }
 function execute($request)
 {
     parent::execute($request);
     $whr = '1';
     $queries = array();
     // query type "tag"
     if (!empty($request['tag'])) {
         $queries[] = array('type' => 'tag', 'value' => $request['tag']);
         // get content_ids
         $tag_handler = new PicoTagHandler($this->mydirname);
         $content_ids_sc = $tag_handler->getContentIdsCS($request['tag']);
         if ($content_ids_sc) {
             $whr .= " AND (`content_id` IN (" . $content_ids_sc . "))";
         } else {
             $whr .= " AND 0";
         }
     }
     // content handler
     $content_handler = new PicoContentHandler($this->mydirname);
     // contents (order by modified_time DESC)
     $this->assign['contents'] = array();
     $contents4assign = $content_handler->getContents4assign($whr);
     foreach ($contents4assign as $content4assign) {
         $this->assign['contents'][] = $content4assign;
     }
     // render $queries
     $query4assign = $this->renderQueries($queries);
     $this->assign['query'] = $query4assign;
     // breadcrumbs
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     $breadcrumbsObj->appendPath('', $query4assign['title']);
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     $this->assign['xoops_pagetitle'] = $query4assign['title'];
     // views ('list')
     $this->template_name = $this->mydirname . '_main_querycontents.html';
     $this->is_need_header_footer = true;
 }
 function execute($request)
 {
     parent::execute($request);
     // makecategory/categorymanager
     $page = empty($request['makecategory']) ? 'categorymanager' : 'makecategory';
     // $categoryObj (not parent)
     $picoPermission =& PicoPermission::getInstance();
     $categoryObj = new PicoCategory($this->mydirname, $request['cat_id'], $picoPermission->getPermissions($this->mydirname), $page == 'makecategory', $this->currentCategoryObj);
     // check existence
     if ($categoryObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     // fetch data from DB
     $cat_data = $categoryObj->getData();
     $this->assign['category_base'] = $categoryObj->getData4html(true);
     $this->categoryObjs['category_base'] =& $categoryObj;
     $this->assign['category'] = $categoryObj->getData4edit();
     // permission check
     if ($page == 'makecategory') {
         $pcat_data = $this->currentCategoryObj->getData();
         if (empty($pcat_data['can_makesubcategory'])) {
             redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_CREATECATEGORY);
         }
     } else {
         if (empty($cat_data['isadminormod'])) {
             redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_CATEGORYMANAGEMENT);
         }
     }
     // category list can be read for category jumpbox etc.
     $categoryHandler = new PicoCategoryHandler($this->mydirname, $this->permissions);
     $categories = $categoryHandler->getAllCategories();
     $this->assign['categories_can_post'] = array();
     foreach ($categories as $tmpObj) {
         $tmp_data = $tmpObj->getData();
         if (empty($tmp_data['can_makesubcategory'])) {
             continue;
         }
         $this->assign['categories_can_makesubcategory'][$tmp_data['id']] = str_repeat('--', $tmp_data['cat_depth_in_tree']) . $tmp_data['cat_title'];
     }
     // breadcrumbs
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     if ($page == 'makecategory') {
         $breadcrumbsObj->appendPath('', _MD_PICO_LINK_MAKECATEGORY);
         $this->assign['xoops_pagetitle'] = _MD_PICO_LINK_MAKECATEGORY;
     } else {
         //		$breadcrumbsObj->appendPath( XOOPS_URL.'/modules/'.$this->mydirname.'/'.$this->assign['category']['link'] , $this->assign['category']['title'] ) ;
         $breadcrumbsObj->appendPath('', _MD_PICO_CATEGORYMANAGER);
         $this->assign['xoops_pagetitle'] = _MD_PICO_CATEGORYMANAGER;
     }
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     // misc assigns
     $this->assign['page'] = $page;
     $this->assign['formtitle'] = $page == 'makecategory' ? _MD_PICO_LINK_MAKECATEGORY : _MD_PICO_CATEGORYMANAGER;
     $this->assign['gticket_hidden'] = $GLOBALS['xoopsGTicket']->getTicketHtml(__LINE__, 1800, 'pico');
     $this->assign['category']['option_desc'] = $this->getCategoryOptions4edit();
     $this->assign['category']['wraps_directories'] = array('' => '---') + pico_main_get_wraps_directories_recursively($this->mydirname, '/');
     // views
     $this->template_name = $this->mydirname . '_main_category_form.html';
     $this->is_need_header_footer = true;
 }
 function execute($request)
 {
     parent::execute($request);
     // makecontent/contentmanager
     $page = empty($request['makecontent']) ? 'contentmanager' : 'makecontent';
     // $contentObj
     $contentObj = new PicoContent($this->mydirname, $request['content_id'], $this->currentCategoryObj, $page == 'makecontent');
     // check existence
     if ($contentObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     // fetch data from DB
     $cat_data = $this->currentCategoryObj->getData();
     $this->assign['category'] = $this->currentCategoryObj->getData4html();
     $content_data = $contentObj->getData();
     $this->assign['content_base'] = $contentObj->getData4html(true);
     $this->contentObjs['content_base'] =& $contentObj;
     $this->assign['content'] = $contentObj->getData4edit();
     // permission check
     if ($page == 'makecontent') {
         if (empty($cat_data['can_post'])) {
             redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_CREATECONTENT);
         }
     } else {
         if (empty($content_data['can_edit'])) {
             redirect_header(XOOPS_URL . '/', 2, $content_data['locked'] ? _MD_PICO_ERR_LOCKEDCONTENT : _MD_PICO_ERR_EDITCONTENT);
         }
     }
     // category list can be read for category jumpbox etc.
     $categoryHandler = new PicoCategoryHandler($this->mydirname, $this->permissions);
     $categories = $categoryHandler->getAllCategories();
     $this->assign['categories_can_post'] = array();
     foreach ($categories as $tmpObj) {
         $tmp_data = $tmpObj->getData();
         if (empty($tmp_data['can_post']) && empty($tmp_data['can_edit'])) {
             continue;
         }
         $this->assign['categories_can_post'][$tmp_data['id']] = str_repeat('--', $tmp_data['cat_depth_in_tree']) . $tmp_data['cat_title'];
     }
     // vpath options
     $this->assign['content']['wraps_files'] = array('' => '---') + pico_main_get_wraps_files_recursively($this->mydirname, '/');
     // breadcrumbs
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     if ($page == 'makecontent') {
         $breadcrumbsObj->appendPath('', _MD_PICO_LINK_MAKECONTENT);
         $this->assign['xoops_pagetitle'] = _MD_PICO_LINK_MAKECONTENT;
     } else {
         $breadcrumbsObj->appendPath(XOOPS_URL . '/modules/' . $this->mydirname . '/' . $this->assign['content']['link'], $this->assign['content']['subject']);
         $breadcrumbsObj->appendPath('', _MD_PICO_CONTENTMANAGER);
         $this->assign['xoops_pagetitle'] = _MD_PICO_CONTENTMANAGER;
     }
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     // misc assigns
     $this->assign['content_histories'] = pico_get_content_histories4assign($this->mydirname, $content_data['id']);
     $this->assign['page'] = $page;
     $this->assign['formtitle'] = $page == 'makecontent' ? _MD_PICO_LINK_MAKECONTENT : _MD_PICO_LINK_EDITCONTENT;
     $this->assign['gticket_hidden'] = $GLOBALS['xoopsGTicket']->getTicketHtml(__LINE__, 1800, 'pico');
     // views
     $this->template_name = $this->mydirname . '_main_content_form.html';
     $this->is_need_header_footer = true;
     // preview
     $this->processPreview($request);
     // editor (wysiwyg etc)
     $editor_assigns = $this->getEditorAssigns('body', $this->assign['content']['body_raw']);
     $this->assign['body_wysiwyg'] = $editor_assigns['body'];
     $this->html_header .= $editor_assigns['header'];
 }
 function execute($request)
 {
     parent::execute($request);
     // $contentObj
     $contentObj =& new PicoContent($this->mydirname, $request['content_id'], $this->currentCategoryObj);
     // check existence
     if ($contentObj->isError()) {
         redirect_header(XOOPS_URL . "/modules/{$this->mydirname}/index.php", 2, _MD_PICO_ERR_READCONTENT);
         exit;
     }
     $cat_data = $this->currentCategoryObj->getData();
     $this->assign['category'] = $this->currentCategoryObj->getData4html();
     $content_data = $contentObj->getData();
     $this->assign['content'] = $contentObj->getData4html(true);
     $this->contentObjs['content'] =& $contentObj;
     // permission check
     if (empty($content_data['can_read']) || empty($content_data['can_readfull'])) {
         if ($this->uid > 0) {
             redirect_header(XOOPS_URL . '/', 2, _MD_PICO_ERR_PERMREADFULL);
         } else {
             redirect_header(XOOPS_URL . '/user.php', 2, _MD_PICO_ERR_LOGINTOREADFULL);
         }
         exit;
     }
     // auto-register
     if (!empty($this->mod_config['wraps_auto_register']) && @$cat_data['cat_vpath'][0] == '/' && $content_data['poster_uid'] == 0 && $content_data['vpath'] != '') {
         $register_class = empty($this->mod_config['auto_register_class']) ? 'PicoAutoRegisterWraps' : $this->mod_config['auto_register_class'];
         require_once dirname(dirname(__FILE__)) . '/class/' . $register_class . '.class.php';
         $register_obj =& new $register_class($this->mydirname, $this->mod_config);
         $is_updated = $register_obj->updateContent($content_data['content_id'], $content_data['vpath']);
         if ($is_updated > 0) {
             // reload if the content is updated
             header('Location: ' . pico_common_unhtmlspecialchars($this->assign['mod_url']) . '/' . pico_common_unhtmlspecialchars($this->assign['content']['link']));
             exit;
         }
     }
     // prev/next content
     $prevContentObj =& $contentObj->getPrevContent();
     $this->assign['prev_content'] = is_object($prevContentObj) ? $prevContentObj->getData4html() : array();
     $this->contentObjs['prev_content'] =& $prevContentObj;
     $nextContentObj =& $contentObj->getNextContent();
     $this->assign['next_content'] = is_object($nextContentObj) ? $nextContentObj->getData4html() : array();
     $this->contentObjs['next_content'] =& $nextContentObj;
     // link for "tell to friends"
     if ($this->mod_config['use_taf_module']) {
         $this->assign['content']['tellafriend_uri'] = XOOPS_URL . '/modules/tellafriend/index.php?target_uri=' . rawurlencode(XOOPS_URL . "/modules/{$this->mydirname}/" . pico_common_make_content_link4html($this->mod_config, $content_data)) . '&amp;subject=' . rawurlencode(sprintf(_MD_PICO_FMT_TELLAFRIENDSUBJECT, @$GLOBALS['xoopsConfig']['sitename']));
     } else {
         $this->assign['content']['tellafriend_uri'] = 'mailto:?subject=' . pico_main_escape4mailto(sprintf(_MD_PICO_FMT_TELLAFRIENDSUBJECT, @$GLOBALS['xoopsConfig']['sitename'])) . '&amp;body=' . pico_main_escape4mailto(sprintf(_MD_PICO_FMT_TELLAFRIENDBODY, $content_data['subject'])) . '%0A' . XOOPS_URL . "/modules/{$this->mydirname}/" . rawurlencode(pico_common_make_content_link4html($this->mod_config, $content_data));
     }
     // category list can be read for category jumpbox etc.
     $categoryHandler =& new PicoCategoryHandler($this->mydirname, $this->permissions);
     $categories = $categoryHandler->getAllCategories();
     $this->assign['categories_can_read'] = array();
     foreach ($categories as $tmpObj) {
         $tmp_data = $tmpObj->getData();
         $this->assign['categories_can_read'][$tmp_data['id']] = str_repeat('--', $tmp_data['cat_depth_in_tree']) . $tmp_data['cat_title'];
     }
     // count up 'viewed'
     if ($content_data['modifier_ip'] != @$_SERVER['REMOTE_ADDR']) {
         $contentObj->incrementViewed();
     }
     // breadcrumbs
     $breadcrumbsObj =& AltsysBreadcrumbs::getInstance();
     $breadcrumbsObj->appendPath('', $this->assign['content']['subject']);
     $this->assign['xoops_breadcrumbs'] = $breadcrumbsObj->getXoopsbreadcrumbs();
     $this->assign['xoops_pagetitle'] = $this->assign['content']['subject'];
     // views
     switch ($request['view']) {
         case 'singlecontent':
             $this->template_name = 'db:' . $this->mydirname . '_independent_singlecontent.html';
             $this->is_need_header_footer = false;
             break;
         case 'print':
             $this->template_name = 'db:' . $this->mydirname . '_independent_print.html';
             $this->is_need_header_footer = false;
             break;
         default:
             $this->template_name = empty($this->mod_config['tpl_viewcontent']) ? $this->mydirname . '_main_viewcontent.html' : $this->mod_config['tpl_viewcontent'];
             $this->is_need_header_footer = true;
             break;
     }
     // htmlheader
     if (!empty($this->mod_config['allow_each_htmlheader'])) {
         $this->html_header .= $content_data['htmlheader'];
     }
 }