/** * Determine the pageType */ public function theme_index_top($h) { // check if we're using the sort/filter links if ($h->cage->get->keyExists('sort')) { $h->pageName = 'sort'; } $h->pluginHook('sb_base_pre_rss_forward'); // check if this is an RSS link forwarding to the source if ($h->cage->get->keyExists('forward')) { $post_id = $h->cage->get->testInt('forward'); if ($post_id) { $post = $h->getPost($post_id); } if (isset($post->post_orig_url)) { header("Location:" . urldecode($post->post_orig_url)); exit; } } // include sb_base_functions class: require_once PLUGINS . 'sb_base/libs/SbBaseFunctions.php'; $sb_funcs = new SbBaseFunctions(); $h->pluginHook('sb_base_pre_set_home'); // Allow SB Base to set the homepage to "popular" unless already set. if (!$h->home) { $h->setHome('popular', 'popular'); // and force page name to popular, too, if not already set. } switch ($h->pageName) { case 'rss': $sb_funcs->postRssFeedQuery($h); $sb_funcs->feed_results = $sb_funcs->getPosts($h, $sb_funcs->feed_array); $sb_funcs->doPostRssFeed($h, $sb_funcs->feed_results); exit; break; case 'popular': $h->pageType = 'list'; $h->pageTitle = $h->home == 'popular' ? $h->lang["sb_base_site_name"] : $h->lang["sb_base_top"]; break; case 'latest': $h->pageType = 'list'; $h->pageTitle = $h->lang["sb_base_latest"]; break; case 'upcoming': $h->pageType = 'list'; $h->pageTitle = $h->lang["sb_base_upcoming"]; break; case 'all': $h->pageType = 'list'; $h->pageTitle = $h->lang["sb_base_all"]; break; case 'sort': $sort = $h->cage->get->testPage('sort'); if ($sort) { $h->pageType = 'list'; $sort_lang = 'sb_base_' . str_replace('-', '_', $sort); $h->pageTitle = $h->lang[$sort_lang]; } break; default: // no default or we'd mess up anything set by other plugins } $h->pluginHook('sb_base_theme_index_top'); // case for paginated pages, but no pagename if ((!$h->pageName || $h->pageName == 'popular') && $h->cage->get->keyExists('pg')) { if (!$h->home) { $h->setHome('popular'); } // query vars previously prevented getPageName returning a name $h->pageName = 'popular'; $h->pageType = 'list'; $h->pageTitle = $h->lang["sb_base_top"]; } // no need to continue for other types of homepage if ($h->pageName == $h->home && $h->home != 'popular') { return false; } // stop here if not a list or the pageType has been set elsewhere: if (!empty($h->pageType) && $h->pageType != 'list' && $h->pageType != 'post') { return false; } // get settings $h->vars['sb_base_settings'] = $h->getSerializedSettings('sb_base'); $posts_per_page = $h->vars['sb_base_settings']['posts_per_page']; // if a list, get the posts: switch ($h->pageType) { case 'list': $post_count = $sb_funcs->prepareList($h, '', 'count'); // get the number of posts $post_query = $sb_funcs->prepareList($h, '', 'query'); // and the SQL query used $h->vars['pagedResults'] = $h->pagination($post_query, $post_count, $posts_per_page, 'posts'); break; case 'post': // if a post is already set (e.g. from the sb_categories plugin), we don't want to // do the default stuff below. We do, however, need the "target", "editorial" stuff after it, though... break; default: // Probably a post, let's check: if (is_numeric($h->pageName)) { // Page name is a number so it must be a post with non-friendly urls $exists = $h->readPost($h->pageName); // read current post if (!$exists) { $h->pageTitle = $h->lang['main_theme_page_not_found']; return false; } $h->pageTitle = $h->post->title; $h->pageType = 'post'; } elseif ($post_id = $h->isPostUrl($h->pageName)) { // Page name belongs to a story $h->readPost($post_id); // read current post $h->pageTitle = $h->post->title; $h->pageType = 'post'; } } // close switch // user defined settings: if (!$h->currentUser->settings) { // logged out users get the default settings: $h->currentUser->settings = $h->getDefaultSettings('site'); } // open links in a new tab? if ($h->currentUser->settings['new_tab']) { $h->vars['target'] = 'target="_blank"'; } else { $h->vars['target'] = ''; } // open link to the source or the site post? if ($h->currentUser->settings['link_action']) { $h->vars['link_action'] = 'source'; } else { $h->vars['link_action'] = ''; } // editorial (story with an internal link) if (strstr($h->post->origUrl, BASEURL)) { $h->vars['editorial'] = true; } else { $h->vars['editorial'] = false; } // get settings from Submit if (!isset($h->vars['submit_settings'])) { $h->vars['submit_settings'] = $h->getSerializedSettings('submit'); } }
/** * Main function that calls others * * @return bool */ public function settings($h) { // grab the number of pending posts: $sql = "SELECT COUNT(post_id) FROM " . TABLE_POSTS . " WHERE post_status = %s"; $num_pending = $h->db->get_var($h->db->prepare($sql, 'pending')); if (!$num_pending) { $num_pending = "0"; } $h->vars['num_pending'] = $num_pending; // clear variables: $h->vars['search_term'] = ''; // Get settings $submit_settings = $h->getSerializedSettings('submit'); $set_pending = $submit_settings['set_pending']; if ($set_pending == 'some_pending' || $set_pending == 'all_pending') { $h->vars['post_status_filter'] = 'pending'; } else { $h->vars['post_status_filter'] = 'all'; } // Get unique statuses for Filter form: $h->vars['statuses'] = $h->getUniqueStatuses(); // if checkboxes if ($h->cage->get->getAlpha('type') == 'checkboxes' && $h->cage->get->keyExists('post')) { foreach ($h->cage->get->keyExists('post') as $id => $checked) { $h->readPost($id); $h->message = $h->lang["post_man_checkboxes_status_changed"]; // default "Changed status" message switch ($h->cage->get->testAlnumLines('checkbox_action')) { case 'new_selected': $h->changePostStatus('new'); $h->pluginHook('post_man_status_new'); break; case 'top_selected': $h->changePostStatus('top'); $h->pluginHook('post_man_status_top'); break; case 'pending_selected': $h->changePostStatus('pending'); $h->pluginHook('post_man_status_pending'); break; case 'bury_selected': $h->changePostStatus('buried'); $h->pluginHook('post_man_status_buried'); break; case 'delete_selected': $h->deletePost(); $h->pluginHook('post_man_delete'); $h->message = $h->lang["post_man_checkboxes_post_deleted"]; break; default: // do nothing $h->message = $h->lang["post_man_checkboxes_no_action"]; $h->messageType = 'red'; break; } } // Need to clear both these caches to be sure related items are updated in widgets, etc.: $h->clearCache('html_cache', false); $h->clearCache('db_cache', false); } $p = new Post(); // if search $search_term = ''; if ($h->cage->get->getAlpha('type') == 'search') { $search_term = $h->cage->get->sanitizeTags('search_value'); $h->vars['search_term'] = $search_term; // used to refill the search box after a search if ($h->isActive('search')) { if (strlen($search_term) < 3) { $h->message = $h->lang["user_man_search_too_short"]; $h->messageType = 'red'; } else { $s = new Search(); require_once PLUGINS . 'sb_base/libs/SbBaseFunctions.php'; $sbFuncs = new SbBaseFunctions(); // get count $s->prepareSearchFilter($h, stripslashes(trim($h->db->escape($search_term))), 'count'); $filtered_search = $sbFuncs->filter($h->vars['filter'], 0, true, $h->vars['select'], $h->vars['orderby']); $posts_count = $sbFuncs->getPosts($h, $filtered_search); $count = $posts_count[0]->number; // get query $s->prepareSearchFilter($h, stripslashes(trim($h->db->escape($search_term))), 'query'); $prepared_filter = $sbFuncs->filter($h->vars['filter'], 0, true, $h->vars['select'], $h->vars['orderby']); if (isset($prepared_filter[1])) { $query = $h->db->prepare($prepared_filter); } else { $query = $prepared_filter[0]; // returns the prepared query array } } } else { $h->message = $h->lang["post_man_need_search"]; $h->messageType = 'red'; } } // if filter $filter = ''; if ($h->cage->get->getAlpha('type') == 'filter') { $filter = $h->cage->get->testAlnumLines('post_status_filter'); $h->vars['post_status_filter'] = $filter; // used to refill the filter box after use switch ($filter) { case 'all': $sort_clause = ' ORDER BY post_date DESC'; // ordered newest first for convenience $count_sql = "SELECT count(*) AS number FROM " . TABLE_POSTS; $count = $h->db->get_var($h->db->prepare($count_sql)); $sql = "SELECT * FROM " . TABLE_POSTS . $sort_clause; $query = $h->db->prepare($sql); break; case 'not_buried': $where_clause = " WHERE post_status != %s"; $sort_clause = ' ORDER BY post_date DESC'; // ordered newest first for convenience $count_sql = "SELECT count(*) AS number FROM " . TABLE_POSTS . $where_clause; $count = $h->db->get_var($h->db->prepare($count_sql, 'buried')); $sql = "SELECT * FROM " . TABLE_POSTS . $where_clause . $sort_clause; $query = $h->db->prepare($sql, 'buried'); break; case 'newest': $sort_clause = ' ORDER BY post_date DESC'; // same as "all" $count_sql = "SELECT count(*) AS number FROM " . TABLE_POSTS; $count = $h->db->get_var($h->db->prepare($count_sql)); $sql = "SELECT * FROM " . TABLE_POSTS . $sort_clause; $query = $h->db->prepare($sql); break; case 'oldest': $sort_clause = ' ORDER BY post_date ASC'; $count_sql = "SELECT count(*) AS number FROM " . TABLE_POSTS; $count = $h->db->get_var($h->db->prepare($count_sql)); $sql = "SELECT * FROM " . TABLE_POSTS . $sort_clause; $query = $h->db->prepare($sql); break; default: $where_clause = " WHERE post_status = %s"; $sort_clause = ' ORDER BY post_date DESC'; // ordered newest first for convenience $count_sql = "SELECT count(*) AS number FROM " . TABLE_POSTS . $where_clause; $count = $h->db->get_var($h->db->prepare($count_sql, $filter)); $sql = "SELECT * FROM " . TABLE_POSTS . $where_clause . $sort_clause; $query = $h->db->prepare($sql, $filter); // filter = new, top, or other post status break; } } if (!isset($query)) { // default list if ($h->vars['post_status_filter'] == 'pending') { $where_clause = " WHERE post_status = %s"; $sort_clause = ' ORDER BY post_date DESC'; // ordered newest first for convenience $count_sql = "SELECT count(*) AS number FROM " . TABLE_POSTS . $where_clause; $count = $h->db->get_var($h->db->prepare($count_sql, 'pending')); $sql = "SELECT * FROM " . TABLE_POSTS . $where_clause . $sort_clause; $query = $h->db->prepare($sql, 'pending'); } else { $sort_clause = ' ORDER BY post_date DESC'; // ordered newest first for convenience $count_sql = "SELECT count(*) AS number FROM " . TABLE_POSTS; $count = $h->db->get_var($h->db->prepare($count_sql)); $sql = "SELECT * FROM " . TABLE_POSTS . $sort_clause; $query = $h->db->prepare($sql); } } $pagedResults = $h->pagination($query, $count, 20, 'posts'); if ($pagedResults) { $h->vars['post_man_rows'] = $this->drawRows($h, $p, $pagedResults, $filter, $search_term); } elseif ($h->vars['post_status_filter'] == 'pending') { $h->message = $h->lang['post_man_no_pending_posts']; $h->messageType = 'green'; } // Show template: $h->displayTemplate('post_man_main', 'post_manager'); }
/** * Get related results from the database * * @param string $search_terms - space separated string of words * @param int $num_posts - the max number of posts to return * return array|false */ public function getRelatedPosts($h, $search_terms = '', $num_posts = 10) { if (!$h->isActive('search')) { return false; } require_once PLUGINS . 'search/search.php'; $search = new Search(); $h->vars['filter']['post_archived != %s'] = 'Y'; $h->vars['filter']['post_id != %d'] = $h->post->id; $prepared_search = $search->prepareSearchFilter($h, $search_terms); extract($prepared_search); // include sb_base_functions class: require_once PLUGINS . 'sb_base/libs/SbBaseFunctions.php'; $funcs = new SbBaseFunctions(); $prepared_filter = $funcs->filter($h->vars['filter'], $num_posts, false, $h->vars['select'], $h->vars['orderby']); $results = $funcs->getPosts($h, $prepared_filter); return $results; }