/**
  * 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');
 }
Ejemplo n.º 2
0
 /**
  * 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');
     }
 }
Ejemplo n.º 3
0
 /**
  * Get widget posts
  *
  * @param $type either 'top' or 'new', matching the post_status in the db.
  * return array $posts
  */
 public function getPostsWidget($h, $type, $custom = true, $limit = 10)
 {
     $h->vars['limit'] = $limit;
     $posts = '';
     // include sb_base_functions class:
     require_once PLUGINS . 'sb_base/libs/SbBaseFunctions.php';
     $sbfuncs = new SbBaseFunctions();
     if (!$custom) {
         // Show latest on front page, top stories on latest page, or both otherwise
         if ($type == 'new' && $h->pageName != 'latest') {
             $posts = $sbfuncs->prepareList($h, 'new');
         } elseif ($type == 'top' && $h->pageName != 'popular') {
             $posts = $sbfuncs->prepareList($h, 'top');
         } elseif ($type == 'upcoming' && $h->pageName != 'upcoming') {
             $posts = $sbfuncs->prepareList($h, 'upcoming');
         }
     } else {
         // Return posts regardless of what page we're viewing
         if ($type == 'new') {
             $posts = $sbfuncs->prepareList($h, 'new');
             // get latest stories
         } elseif ($type == 'top') {
             $posts = $sbfuncs->prepareList($h, 'top');
             // get top stories
         } elseif ($type == 'upcoming') {
             $posts = $sbfuncs->prepareList($h, 'upcoming');
             // get upcoming stories
         }
     }
     if ($type == 'all') {
         $posts = $sbfuncs->prepareList($h, 'all');
         // get all stories
     } elseif ($type == 'top-24-hours') {
         $posts = $sbfuncs->prepareList($h, 'top-24-hours');
         // get top stories from last 24 hours
     } elseif ($type == 'top-48-hours') {
         $posts = $sbfuncs->prepareList($h, 'top-48-hours');
         // get top stories from last 48 hours
     } elseif ($type == 'top-7-days') {
         $posts = $sbfuncs->prepareList($h, 'top-7-days');
         // get top stories from last 7 days
     } elseif ($type == 'top-30-days') {
         $posts = $sbfuncs->prepareList($h, 'top-30-days');
         // get top stories from last 30 days
     } elseif ($type == 'top-365-days') {
         $posts = $sbfuncs->prepareList($h, 'top-365-days');
         // get top stories from last 365 days
     } elseif ($type == 'top-all-time') {
         $posts = $sbfuncs->prepareList($h, 'top-all-time');
         // get top stories from all time
     }
     if ($posts) {
         return $posts;
     } else {
         return false;
     }
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }