private function _standard_where_callback($opts) { $preview_mode = self::$preview_mode; $db = $this->db; return function (PerchQuery $Query) use($opts, $preview_mode, $db) { // section if (isset($opts['section'])) { $Sections = new PerchBlog_Sections(); if (is_numeric($opts['section'])) { $Section = $Sections->find($opts['section']); } else { $Section = $Sections->find_by_slug($opts['section']); } if (is_object($Section)) { $Query->where[] = ' sectionID=' . $db->pdb($Section->id()); } else { $Query->where[] = ' sectionID IS NULL '; } } // author if (isset($opts['author'])) { $Authors = new PerchBlog_Authors(); if (is_numeric($opts['author'])) { $Author = $Authors->find($opts['author']); } else { $Author = $Authors->find_by_slug($opts['author']); } if (is_object($Author)) { $Query->where[] = ' authorID=' . $db->pdb($Author->id()); } else { $Query->where[] = ' authorID IS NULL '; } } // tags if (isset($opts['tag'])) { $tags = $opts['tag']; if (!is_array($tags)) { $tags = array($tags); } $do_tag = array(); $do_not_tag = array(); foreach ($tags as $tag) { if (substr($tag, 0, 1) == '!') { $do_not_tag[] = ltrim($tag, '!'); } else { $do_tag[] = $tag; } } if (is_array($tags)) { $Query->select .= ' LEFT JOIN ' . PERCH_DB_PREFIX . 'blog_posts_to_tags p2t ON tbl.postID=p2t.postID LEFT JOIN ' . PERCH_DB_PREFIX . 'blog_tags t ON p2t.tagID=t.tagID '; if (PerchUtil::count($do_tag)) { $Query->where[] = ' tagSlug IN (' . $db->implode_for_sql_in($do_tag) . ') '; } if (PerchUtil::count($do_not_tag)) { $Query->where[] = ' tbl.postID NOT IN ( SELECT p2.postID FROM ' . $this->table . ' p2, ' . PERCH_DB_PREFIX . 'blog_posts_to_tags p2t2, ' . PERCH_DB_PREFIX . 'blog_tags t2 WHERE p2.postID=p2t2.postID AND p2t2.tagID=t2.tagID AND t2.tagSlug IN (' . $db->implode_for_sql_in($do_not_tag) . ') )'; } } } if ($preview_mode || isset($opts['admin']) && $opts['admin']) { // nothing } else { $Query->where[] = 'postStatus=\'Published\' AND postDateTime<=' . $db->pdb(date('Y-m-d H:i:00')) . ' '; } return $Query; }; }
function perch_blog_author($id_or_slug, $opts = array(), $return = false) { $id_or_slug = rtrim($id_or_slug, '/'); $default_opts = array('template' => 'author.html', 'skip-template' => false, 'split-items' => false, 'cache' => true); if (is_array($opts)) { $opts = array_merge($default_opts, $opts); } else { $opts = $default_opts; } if ($opts['skip-template'] || $opts['split-items']) { $return = true; } $cache = false; if ($opts['cache']) { $cache_key = 'perch_blog_author' . md5($id_or_slug . serialize($opts)); $cache = PerchBlog_Cache::get_static($cache_key, 10); } if ($cache) { if ($return) { return $cache; } echo $cache; return ''; } $API = new PerchAPI(1.0, 'perch_blog'); $Authors = new PerchBlog_Authors(); if (is_numeric($id_or_slug)) { $Author = $Authors->find($id_or_slug); } else { $Author = $Authors->find_by_slug($id_or_slug); } if (is_object($Author)) { if ($opts['skip-template']) { return $Author->to_array(); } $Template = $API->get('Template'); $Template->set('blog/' . $opts['template'], 'blog'); $r = $Template->render($Author); if ($r != '') { PerchBlog_Cache::save_static($cache_key, $r); } if ($return) { return $r; } echo $r; } return false; }