/** * Retrieves a list of blog posts associated with a particular tag * * @since 5.0 * @access public * @param string * @return */ public function getTaggedBlogs($tagId = 0, $limit = false, $includeCatIds = '', $sorting = '') { if (!$tagId) { return false; } $my = JFactory::getUser(); $db = EB::db(); $config = EasyBlogHelper::getConfig(); $catAccess = array(); if ($limit === false) { if ($config->get('layout_listlength') == 0) { $limit = $this->getState('limit'); } else { $limit = $config->get('layout_listlength'); } } $limitstart = $this->getState('limitstart'); $isBloggerMode = EasyBlogRouter::isBloggerMode(); $queryExclude = ''; $excludeCats = array(); $isJSGrpPluginInstalled = false; $isJSGrpPluginInstalled = JPluginHelper::isEnabled('system', 'groupeasyblog'); $isEventPluginInstalled = JPluginHelper::isEnabled('system', 'eventeasyblog'); $isJSInstalled = false; if (JFile::exists(JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_community' . DIRECTORY_SEPARATOR . 'libraries' . DIRECTORY_SEPARATOR . 'core.php')) { $isJSInstalled = true; } $includeJSGrp = $isJSGrpPluginInstalled && $isJSInstalled ? true : false; $includeJSEvent = $isEventPluginInstalled && $isJSInstalled ? true : false; $jsGrpPostIds = ''; $jsEventPostIds = ''; // contribution type sql $contributor = EB::contributor(); $contributeSQL = ' AND ( (b.`source_type` = ' . $db->Quote(EASYBLOG_POST_SOURCE_SITEWIDE) . ') '; if ($config->get('main_includeteamblogpost')) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_TEAM, 'b'); } if ($includeJSEvent) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_EVENT, 'b'); } if ($includeJSGrp) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_GROUP, 'b'); } if (EB::easysocial()->exists()) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_GROUP, 'b'); $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_EVENT, 'b'); } $contributeSQL .= ')'; //get teamblogs id. $query = 'SELECT b.*'; $query .= ' FROM ' . $db->nameQuote('#__easyblog_post_tag') . ' AS a '; $query .= ' INNER JOIN ' . $db->nameQuote('#__easyblog_post') . ' AS b '; $query .= ' ON a.post_id=b.id '; $query .= ' WHERE a.' . $db->quoteName('tag_id') . ' = ' . $db->Quote($tagId); $query .= ' AND b.' . $db->quoteName('published') . ' = ' . $db->Quote(EASYBLOG_POST_PUBLISHED); $query .= ' AND b.' . $db->quoteName('state') . '=' . $db->Quote(EASYBLOG_POST_NORMAL); $query .= $contributeSQL; // @rule: When language filter is enabled, we need to detect the appropriate contents $filterLanguage = JFactory::getApplication()->getLanguageFilter(); if ($filterLanguage) { $query .= EBR::getLanguageQuery('AND', 'b.language'); } $file = JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_community' . DIRECTORY_SEPARATOR . 'libraries' . DIRECTORY_SEPARATOR . 'core.php'; //blog privacy setting if ($config->get('main_jomsocial_privacy') && JFile::exists($file) && !EasyBlogHelper::isSiteAdmin()) { require_once $file; $jsFriends = CFactory::getModel('Friends'); $friends = $jsFriends->getFriendIds($my->id); array_push($friends, $my->id); // Insert query here. $query .= ' AND ('; $query .= ' (b.`access`= 0 ) OR'; $query .= ' ( (b.`access` = 20) AND (' . $db->Quote($my->id) . ' > 0 ) ) OR'; if (empty($friends)) { $query .= ' ( (b.`access` = 30) AND ( 1 = 2 ) ) OR'; } else { $query .= ' ( (b.`access` = 30) AND ( b.' . $db->nameQuote('created_by') . ' IN (' . implode(',', $friends) . ') ) ) OR'; } $query .= ' ( (b.`access` = 40) AND ( b.' . $db->nameQuote('created_by') . '=' . $my->id . ') )'; $query .= ' )'; } else { if ($my->id == 0) { $query .= ' AND b.`access` = ' . $db->Quote(BLOG_PRIVACY_PUBLIC); } } if ($isBloggerMode !== false) { $query .= ' AND b.`created_by` = ' . $db->Quote($isBloggerMode); } $includeCats = array(); $includeCatIds = trim($includeCatIds); if (!empty($includeCatIds)) { $includeCats = explode(',', $includeCatIds); if (!empty($includeCats)) { $catAccess['include'] = $includeCats; } } // category access $catLib = EB::category(); $catAccessSQL = $catLib->genAccessSQL('b.`id`', $catAccess); $query .= ' AND (' . $catAccessSQL . ')'; $sort = $config->get('layout_postorder', 'latest'); $defaultSorting = $config->get('layout_postsort', 'desc'); if ($sorting) { $defaultSorting = $sorting; } switch ($sort) { case 'latest': $queryOrder = ' ORDER BY b.`created` ' . $defaultSorting; break; case 'published': $queryOrder = ' ORDER BY b.`publish_up` ' . $defaultSorting; break; case 'popular': $queryOrder = ' ORDER BY b.`hits` ' . $defaultSorting; break; case 'active': $queryOrder = ' ORDER BY b.`publish_down` ' . $defaultSorting; break; case 'alphabet': $queryOrder = ' ORDER BY b.`title` ' . $defaultSorting; break; case 'modified': $queryOrder = ' ORDER BY b.`modified` ' . $defaultSorting; break; case 'random': $queryOrder = ' ORDER BY RAND() '; break; default: break; } $query .= $queryOrder; //total tag's post sql $totalQuery = 'SELECT COUNT(1) FROM ('; $totalQuery .= $query; $totalQuery .= ') as x'; $query .= ' LIMIT ' . $limitstart . ',' . $limit; $db->setQuery($query); $rows = $db->loadObjectList(); $db->setQuery($totalQuery); $db->loadResult(); $this->_total = $db->loadResult(); jimport('joomla.html.pagination'); $this->_pagination = EB::pagination($this->_total, $limitstart, $limit); return $rows; }
public function getResult($text, $phrase, $ordering) { $config = EasyBlogHelper::getConfig(); $my = JFactory::getUser(); $db = EasyBlogHelper::db(); $where = array(); $where2 = array(); // used for privacy $queryWhere = ''; $queryExclude = ''; $queryExcludePending = ''; $excludeCats = array(); switch ($phrase) { case 'exact': $where[] = 'a.`title` LIKE ' . $db->Quote('%' . $db->escape($text, true) . '%', false); $where[] = 'a.`content` LIKE ' . $db->Quote('%' . $db->escape($text, true) . '%', false); $where[] = 'a.`intro` LIKE ' . $db->Quote('%' . $db->escape($text, true) . '%', false); $where2 = '( t.title LIKE ' . $db->Quote('%' . $db->escape($text, true) . '%', false) . ')'; $where = '(' . implode(') OR (', $where) . ')'; break; case 'all': case 'any': default: $words = explode(' ', $text); $wheres = array(); $where2 = array(); $wheres2 = array(); foreach ($words as $word) { $word = $db->Quote('%' . $db->escape($word, true) . '%', false); $where[] = 'a.`title` LIKE ' . $word; $where[] = 'a.`content` LIKE ' . $word; $where[] = 'a.`intro` LIKE ' . $word; $where2[] = 't.title LIKE ' . $word; $wheres[] = implode(' OR ', $where); $wheres2[] = implode(' OR ', $where2); } $where = '(' . implode($phrase == 'all' ? ') AND (' : ') OR (', $wheres) . ')'; $where2 = '(' . implode($phrase == 'all' ? ') AND (' : ') OR (', $wheres2) . ')'; break; } $isJSGrpPluginInstalled = false; $isJSGrpPluginInstalled = JPluginHelper::isEnabled('system', 'groupeasyblog'); $isEventPluginInstalled = JPluginHelper::isEnabled('system', 'eventeasyblog'); $isJSInstalled = false; // need to check if the site installed jomsocial. if (JFile::exists(JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_community' . DIRECTORY_SEPARATOR . 'libraries' . DIRECTORY_SEPARATOR . 'core.php')) { $isJSInstalled = true; } $includeJSGrp = $isJSGrpPluginInstalled && $isJSInstalled ? true : false; $includeJSEvent = $isEventPluginInstalled && $isJSInstalled ? true : false; //get teamblogs id. $query = ''; // contribution type sql $contributor = EB::contributor(); $contributeSQL = ' AND ( (a.`source_type` = ' . $db->Quote(EASYBLOG_POST_SOURCE_SITEWIDE) . ') '; if ($config->get('main_includeteamblogpost')) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_TEAM, 'a'); } if ($includeJSEvent) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_EVENT, 'a'); } if ($includeJSGrp) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_GROUP, 'a'); } if (EB::easysocial()->exists()) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_GROUP, 'a'); $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_EVENT, 'a'); } $contributeSQL .= ')'; $queryWhere .= $contributeSQL; // category access here $catLib = EB::category(); $catAccessSQL = $catLib->genAccessSQL('a.`id`'); $queryWhere .= ' AND (' . $catAccessSQL . ')'; $query = 'SELECT a.*, CONCAT(a.`content` , a.`intro`) AS text , "2" as browsernav'; $query .= ' FROM `#__easyblog_post` as a USE INDEX (`easyblog_post_searchnew`) '; $query .= ' WHERE (' . $where; $query .= ' OR a.`id` IN( '; $query .= ' SELECT tp.`post_id` FROM `#__easyblog_tag` AS t '; $query .= ' INNER JOIN `#__easyblog_post_tag` AS tp ON tp.`tag_id` = t.`id` '; $query .= ' WHERE ' . $where2; $query .= '))'; $my = JFactory::getUser(); if ($my->id == 0) { //guest should only see public post. $query .= ' AND a.`access` = ' . $db->Quote('0'); } //do not show unpublished post $query .= ' AND a.`published` = ' . $db->Quote(EASYBLOG_POST_PUBLISHED); $query .= ' AND a.`state` = ' . $db->Quote(EASYBLOG_POST_NORMAL); $query .= $queryWhere; switch ($ordering) { case 'oldest': $query .= ' ORDER BY a.`created` ASC'; break; case 'newest': $query .= ' ORDER BY a.`created` DESC'; break; } $db->setQuery($query); return $db->loadObjectList(); }
/** * Retrieve a list of blog posts from a specific list of categories * * @since 4.0 * @access public * @param string * @return */ public function getPosts($categories, $limit = null) { $db = EB::db(); $my = JFactory::getUser(); $config = EB::config(); // Determines if this is currently on blogger mode $isBloggerMode = EasyBlogRouter::isBloggerMode(); // use in generating category access sql $catAccess = array(); $catAccess['include'] = $categories; $isJSGrpPluginInstalled = false; $isJSGrpPluginInstalled = JPluginHelper::isEnabled('system', 'groupeasyblog'); $isEventPluginInstalled = JPluginHelper::isEnabled('system', 'eventeasyblog'); $isJSInstalled = false; // need to check if the site installed jomsocial. if (EB::jomsocial()->exists()) { $isJSInstalled = true; } $includeJSGrp = $isJSGrpPluginInstalled && $isJSInstalled ? true : false; $includeJSEvent = $isEventPluginInstalled && $isJSInstalled ? true : false; // contribution type sql $contributor = EB::contributor(); $contributeSQL = ' AND ( (a.`source_type` = ' . $db->Quote(EASYBLOG_POST_SOURCE_SITEWIDE) . ') '; if ($config->get('main_includeteamblogpost')) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_TEAM, 'a'); } if ($includeJSEvent) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_EVENT, 'a'); } if ($includeJSGrp) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_GROUP, 'a'); } // Test if easysocial exists on the site if (EB::easysocial()->exists()) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_GROUP, 'a'); $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_EVENT, 'a'); } $contributeSQL .= ')'; $query = array(); $query[] = 'SELECT a.* FROM ' . $db->quoteName('#__easyblog_post') . ' AS a'; // Build the WHERE clauses $query[] = 'WHERE a.' . $db->quoteName('published') . '=' . $db->Quote(EASYBLOG_POST_PUBLISHED); $query[] = 'AND a.' . $db->quoteName('state') . '=' . $db->Quote(EASYBLOG_POST_NORMAL); // If this is on blogger mode, fetch items created by the current author only if ($isBloggerMode !== false) { $query[] = ' AND a.' . $db->quoteName('created_by') . '=' . $db->Quote($isBloggerMode); } else { // Get the author id based on the category menu $authorId = EB::getCategoryMenuBloggerId(); if ($authorId) { $query[] = ' AND a.' . $db->quoteName('created_by') . '=' . $db->Quote($authorId); } } //sql for blog contribution $query[] = $contributeSQL; // sql for category access $catLib = EB::category(); $catAccessSQL = $catLib->genAccessSQL('a.`id`', $catAccess); $query[] = 'AND (' . $catAccessSQL . ')'; // If user is a guest, ensure that they can really view the blog post if ($this->my->guest) { $query[] = 'AND a.' . $db->quoteName('access') . '=' . $db->Quote(BLOG_PRIVACY_PUBLIC); } // Ensure that the blog posts is available site wide // $query[] = 'AND a.' . $db->quoteName('source_id') . '=' . $db->Quote('0'); // Filter by language $language = EB::getCurrentLanguage(); if ($language) { $query[] = 'AND (a.' . $db->quoteName('language') . '=' . $db->Quote($language) . ' OR a.' . $db->quoteName('language') . '=' . $db->Quote('*') . ' OR a.' . $db->quoteName('language') . '=' . $db->Quote('') . ')'; } // Ordering options $ordering = $config->get('layout_postsort', 'DESC'); // Order the posts $query[] = 'ORDER BY a.' . $db->quoteName('created') . ' ' . $ordering; // Set the pagination if (!is_null($limit)) { // Glue back the sql queries into a single string. $queryCount = implode(' ', $query); $queryCount = str_ireplace('SELECT a.*', 'SELECT COUNT(1)', $queryCount); $db->setQuery($queryCount); $count = $db->loadResult(); $limit = $limit == 0 ? $this->getState('limit') : $limit; $limitstart = $this->input->get('limitstart', $this->getState('limitstart'), 'int'); // Set the limit $query[] = 'LIMIT ' . $limitstart . ',' . $limit; $this->_pagination = EB::pagination($count, $limitstart, $limit); } // Glue back the sql queries into a single string. $query = implode(' ', $query); // Debug // echo str_ireplace('#__', 'jos_', $query);exit; $db->setQuery($query); if ($db->getErrorNum() > 0) { JError::raiseError($db->getErrorNum(), $db->getErrorMsg() . $db->stderr()); } $result = $db->loadObjectList(); return $result; }
/** * Retrieves a list of blog posts by specific month * * @since 5.0 * @access public * @param string * @return */ public function getArchivePostByMonth($month = '', $year = '', $showPrivate = false) { $db = EB::db(); $user = JFactory::getUser(); $config = EB::config(); // used for privacy $queryWhere = ''; $queryExclude = ''; $queryExcludePending = ''; $excludeCats = array(); if ($user->id == 0) { $showPrivate = false; } // Blog privacy setting // @integrations: jomsocial privacy $privateBlog = ''; if (EB::easysocial()->exists() && $config->get('integrations_easysocial_privacy') && !EB::isSiteAdmin()) { $esPrivacyQuery = EB::easysocial()->buildPrivacyQuery('a'); $privateBlog .= $esPrivacyQuery; } else { if ($config->get('main_jomsocial_privacy') && EB::jomsocial()->exists() && !EB::isSiteAdmin()) { $friendsModel = CFactory::getModel('Friends'); $friends = $friendsModel->getFriendIds($user->id); // Insert query here. $privateBlog .= ' AND ('; $privateBlog .= ' (a.`access`= 0 ) OR'; $privateBlog .= ' ( (a.`access` = 20) AND (' . $db->Quote($user->id) . ' > 0 ) ) OR'; if (!$friends) { $privateBlog .= ' ( (a.`access` = 30) AND ( 1 = 2 ) ) OR'; } else { $privateBlog .= ' ( (a.`access` = 30) AND ( a.' . $db->nameQuote('created_by') . ' IN (' . implode(',', $friends) . ') ) ) OR'; } $privateBlog .= ' ( (a.`access` = 40) AND ( a.' . $db->nameQuote('created_by') . '=' . $user->id . ') )'; $privateBlog .= ' )'; } else { if ($user->id == 0) { $privateBlog .= ' AND a.`access` = ' . $db->Quote(0); } } } // Join the query ? $privateBlog = $showPrivate ? '' : $privateBlog; $isJSGrpPluginInstalled = false; $isJSGrpPluginInstalled = JPluginHelper::isEnabled('system', 'groupeasyblog'); $isEventPluginInstalled = JPluginHelper::isEnabled('system', 'eventeasyblog'); $isJSInstalled = false; // need to check if the site installed jomsocial. if (EB::jomsocial()->exists()) { $isJSInstalled = true; } $includeJSGrp = $isJSGrpPluginInstalled && $isJSInstalled ? true : false; $includeJSEvent = $isEventPluginInstalled && $isJSInstalled ? true : false; // contribution type sql $contributor = EB::contributor(); $contributeSQL = ' AND ( (a.`source_type` = ' . $db->Quote(EASYBLOG_POST_SOURCE_SITEWIDE) . ') '; if ($config->get('main_includeteamblogpost')) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_TEAM, 'a'); } if ($includeJSEvent) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_EVENT, 'a'); } if ($includeJSGrp) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_GROUP, 'a'); } if (EB::easysocial()->exists()) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_GROUP, 'a'); $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_EVENT, 'a'); } $contributeSQL .= ')'; $queryWhere .= $contributeSQL; //get teamblogs id. $query = ''; $extraSQL = ''; // If this is on blogger mode, we need to only pick items from the blogger. $blogger = EBR::isBloggerMode(); if ($blogger !== false) { $extraSQL = ' AND a.`created_by` = ' . $db->Quote($blogger); } $tzoffset = EB::date()->getOffSet(true); $query = 'SELECT a.*, DAY( DATE_ADD(a.`created`, INTERVAL ' . $tzoffset . ' HOUR) ) AS day,'; $query .= ' MONTH( DATE_ADD(a.`created`, INTERVAL ' . $tzoffset . ' HOUR) ) AS month,'; $query .= ' YEAR( DATE_ADD(a.`created`, INTERVAL ' . $tzoffset . ' HOUR) ) AS year '; $query .= ' FROM ' . $db->nameQuote('#__easyblog_post') . ' as a'; $query .= ' WHERE a.`published` = ' . $db->Quote(EASYBLOG_POST_PUBLISHED) . ' '; $query .= ' AND a.' . $db->quoteName('state') . ' = ' . $db->Quote(EASYBLOG_POST_NORMAL) . ' '; $query .= $privateBlog . ' '; $query .= ' AND (a.`created` > ' . $db->Quote($year . '-' . $month . '-01 00:00:00') . ' AND a.`created` < ' . $db->Quote($year . '-' . $month . '-31 23:59:59') . ') '; // If do not display private posts, we need to append additional queries here. if (!$showPrivate) { // sql for category access $catLib = EB::category(); $catAccessSQL = $catLib->genAccessSQL('a.`id`'); $query .= ' AND (' . $catAccessSQL . ')'; } $query .= $extraSQL . ' '; $query .= $queryWhere; $query .= ' ORDER BY a.`created` ASC '; // echo $query;exit; $db->setQuery($query); $result = $db->loadObjectList(); $postCount = new EasyblogCalendarObject($month, $year); if (!empty($result)) { foreach ($result as $row) { $post = EB::post($row->id); // $post->bind($row); $post = EB::formatter('entry', $post); // var_dump($row);exit; if ($postCount->{$year}->{$month}->{$row->day} == 0) { $postCount->{$year}->{$month}->{$row->day} = array($post); } else { array_push($postCount->{$year}->{$month}->{$row->day}, $post); } } } return $postCount; }
public function preloadPosts($catIds) { $db = EB::db(); $config = EB::config(); $limit = EB::call('Pagination', 'getLimit', array(EBLOG_PAGINATION_CATEGORIES)); // Determines if this is currently on blogger mode $isBloggerMode = EasyBlogRouter::isBloggerMode(); $query = array(); $i = 1; foreach ($catIds as $cid => $cIds) { $p = 'p' . $i; $a = 'a' . $i; $f = 'f' . $i; $isJSGrpPluginInstalled = false; $isJSGrpPluginInstalled = JPluginHelper::isEnabled('system', 'groupeasyblog'); $isEventPluginInstalled = JPluginHelper::isEnabled('system', 'eventeasyblog'); $isJSInstalled = false; // need to check if the site installed jomsocial. if (EB::jomsocial()->exists()) { $isJSInstalled = true; } $includeJSGrp = $isJSGrpPluginInstalled && $isJSInstalled ? true : false; $includeJSEvent = $isEventPluginInstalled && $isJSInstalled ? true : false; // contribution type sql $contributor = EB::contributor(); $contributeSQL = " AND ( ({$p}.`source_type` = " . $db->Quote(EASYBLOG_POST_SOURCE_SITEWIDE) . ") "; if ($config->get('main_includeteamblogpost')) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_TEAM, $p); } if ($includeJSEvent) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_EVENT, $p); } if ($includeJSGrp) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_GROUP, $p); } // Test if easysocial exists on the site if (EB::easysocial()->exists()) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_GROUP, $p); $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_EVENT, $p); } $contributeSQL .= ")"; $tmp = "(select {$p}.*, " . $db->Quote($cid) . " as `category_id`, {$f}.`id` as `featured`"; $tmp .= "\tfrom `#__easyblog_post` as {$p}"; $tmp .= "\t\tinner join `#__easyblog_post_category` as {$a} on {$p}.`id` = {$a}.`post_id`"; $tmp .= " LEFT JOIN `#__easyblog_featured` AS {$f}"; $tmp .= " \tON {$p}.`id` = {$f}.`content_id` AND {$f}.`type` = " . $db->Quote('post'); if (count($cIds) == 1) { $tmp .= " where {$a}.`category_id` = " . $db->Quote($cIds[0]); } else { $tmp .= " where {$a}.`category_id` IN (" . implode(',', $cIds) . ")"; } $tmp .= " and {$p}.`published` = " . $db->Quote(EASYBLOG_POST_PUBLISHED); $tmp .= " and {$p}.`state` = " . $db->Quote(EASYBLOG_POST_NORMAL); if ($isBloggerMode !== false) { $tmp .= " AND {$p}." . $db->qn('created_by') . " = " . $db->Quote($isBloggerMode); } else { // Get the author id based on the category menu $authorId = EB::getCategoryMenuBloggerId(); if ($authorId) { $tmp .= " AND {$p}." . $db->qn('created_by') . " = " . $db->Quote($authorId); } } // If user is a guest, ensure that they can really view the blog post if ($this->my->guest) { $tmp .= " AND {$p}." . $db->qn('access') . " = " . $db->Quote(BLOG_PRIVACY_PUBLIC); } // Ensure that the blog posts is available site wide $tmp .= $contributeSQL; // $tmp .= " AND $p." . $db->qn('source_id') . " = " . $db->Quote("0"); // Filter by language $language = EB::getCurrentLanguage(); if ($language) { $tmp .= " AND ({$p}." . $db->qn('language') . "=" . $db->Quote($language) . " OR {$p}." . $db->qn('language') . "=" . $db->Quote('*') . " OR {$p}." . $db->qn('language') . "=" . $db->Quote('') . ")"; } $tmp .= " order by {$p}.`created` desc"; $tmp .= " limit " . $limit . ")"; $query[] = $tmp; $i++; } $query = implode(' UNION ALL ', $query); // echo $query;exit; $db->setQuery($query); $results = $db->loadObjectList(); $posts = array(); if ($results) { foreach ($results as $row) { $posts[$row->category_id][] = $row; } } return $posts; }
public static function getMostCommentedPost(&$params) { $mainframe = JFactory::getApplication(); $db = EB::db(); $my = JFactory::getUser(); $config = EB::config(); $count = (int) trim($params->get('count', 0)); $categories = $params->get('catid'); $catAccess = array(); // Get the category ID if any from the module setting if (!empty($categories)) { $categories = explode(',', $categories); } // Respect inclusion categories if (!empty($categories)) { if (!is_array($categories)) { $categories = array($categories); } $catAccess['include'] = $categories; } $showprivate = $params->get('showprivate', true); $showcomment = $params->get('showlatestcomment', true); $query = 'SELECT a.*, count(b.' . $db->quoteName('id') . ') as ' . $db->quoteName('comment_count'); if ($showcomment) { $query .= ', c.' . $db->quoteName('id') . ' as ' . $db->quoteName('comment_id') . ', c.' . $db->quoteName('comment') . ', c.' . $db->quoteName('created_by') . ' as ' . $db->quoteName('commentor') . ', c.' . $db->quoteName('title') . ' as ' . $db->quoteName('comment_title') . ', c.' . $db->quoteName('name') . ' as ' . $db->quoteName('commentor_name'); } $query .= ' FROM ' . $db->quoteName('#__easyblog_post') . ' AS a'; $query .= ' LEFT JOIN ' . $db->quoteName('#__easyblog_comment') . ' AS b ON a.' . $db->quoteName('id') . ' = b.' . $db->quoteName('post_id'); if ($showcomment) { $query .= ' LEFT JOIN ' . $db->quoteName('#__easyblog_comment') . ' AS c ON a.' . $db->quoteName('id') . ' = c.' . $db->quoteName('post_id'); $query .= ' AND c.' . $db->quoteName('id') . ' = (SELECT MAX(d.' . $db->quoteName('id') . ') FROM ' . $db->quoteName('#__easyblog_comment') . ' AS d WHERE c.' . $db->quoteName('post_id') . ' = d.' . $db->quoteName('post_id') . ')'; } $query .= ' WHERE a.' . $db->quoteName('published') . ' = ' . $db->Quote(EASYBLOG_POST_PUBLISHED); $query .= ' AND a.' . $db->quoteName('state') . ' = ' . $db->Quote(EASYBLOG_POST_NORMAL); if (!$showprivate) { $query .= ' AND a.' . $db->quoteName('access') . ' = ' . $db->Quote('0'); } // get teamblogs id. // contribution type sql $contributor = EB::contributor(); $contributeSQL = ' AND ( (a.`source_type` = ' . $db->Quote(EASYBLOG_POST_SOURCE_SITEWIDE) . ') '; if ($config->get('main_includeteamblogpost')) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_TEAM, 'a'); } $contributeSQL .= ')'; $query .= $contributeSQL; // category access here $catLib = EB::category(); $catAccessSQL = $catLib->genAccessSQL('a.`id`', $catAccess); $query .= ' AND (' . $catAccessSQL . ')'; $query .= ' GROUP BY a.' . $db->quoteName('id'); $query .= ' HAVING (' . $db->quoteName('comment_count') . ' > 0)'; $query .= ' ORDER BY ' . $db->quoteName('comment_count') . ' DESC'; if ($count > 0) { $query .= ' LIMIT ' . $count; } $db->setQuery($query); $posts = $db->loadObjectList(); // process item $posts = EB::modules()->processItems($posts, $params); return $posts; }
/** * Retrieves the html codes for composer * * @since 4.0 * @access public * @param int The unique item id. * @param string The type of the post, whether this is a post or a draft * @return */ public function renderManager($uid = null) { // Get the current post library $post = EB::post($uid); // Check if user has permissions to write new entry if (!$post->canCreate()) { return JError::raiseError(500, JText::_('COM_EASYBLOG_NO_PERMISSION_TO_CREATE_BLOG')); } // If the blog post is edited, ensure that the user has access to edit this entry if (!$post->canEdit()) { return JError::raiseError(500, JText::_('COM_EASYBLOG_NO_PERMISSION_TO_EDIT_BLOG')); } // Get the editor to use $editorSetting = $this->user->getEditor(); $editorSetting = $editorSetting == 'composer' ? JFactory::getConfig()->get('editor') : $editorSetting; $editor = JFactory::getEditor($editorSetting); // Get a list of parent categories $parentCategories = $this->getParentCategories(); // Get the default category. $defaultCategoryId = EB::model('Category')->getDefaultCategoryId(); $primaryCategory = $post->getPrimaryCategory(); // Get a list of categories // Prepare selected category $selectedCategories = array(); foreach ($post->getCategories() as $row) { $selectedCategories[] = (int) $row->id; } // if there is no category selected, or this is a new blog post, lets use the default category id. if (!$selectedCategories && $defaultCategoryId) { $selectedCategories[] = $defaultCategoryId; } // Prepare categories object $categories = array(); $cats = EB::model('Categories')->getCategoriesHierarchy(false); foreach ($cats as $row) { $category = new stdClass(); $category->id = (int) $row->id; $category->title = $row->title; $category->parent_id = (int) $row->parent_id; $params = new JRegistry($row->params); $category->tags = $params->get('tags'); if (!$category->tags) { $category->tags = array(); } else { $tags = explode(',', $category->tags); for ($i = 0; $i < count($tags); $i++) { $tags[$i] = JString::trim($tags[$i]); } $category->tags = implode(',', $tags); } // Cross check if this category is selected $category->selected = in_array($category->id, $selectedCategories); // check if this is a primary category or not $category->isprimary = $category->id == $primaryCategory->id; $categories[] = $category; } // Prepare tags $tags = array(); foreach ($post->getTags() as $row) { $tag = new stdClass(); $tag->id = (int) $row->id; $tag->title = $row->title; $tags[] = $tag; } // Render default post templates $postTemplatesModel = EB::model('Templates'); $postTemplates = $postTemplatesModel->getPostTemplates($this->my->id); // Get the post's author $author = $post->getAuthor(); // Get a list of revisions for this post $revisions = $post->getRevisions(); // Get the current revision for the post $workingRevision = $post->getWorkingRevision(); // Determines if the current page load should be loading from block templates $postTemplate = EB::table('PostTemplate'); $postTemplate->load($this->input->get('block_template', 0, 'int')); if (!$postTemplate->id || $postTemplate->id == 1) { $postTemplate = false; } // Get available blocks on the site $blocks = EB::blocks()->getAvailableBlocks(); // Determines if we should display the custom fields tab by default $displayFieldsTab = false; // Get a list of selected categories $selectedCategories = $post->getCategories(); // If there's no selected categories, we assume that the primary category if (!$selectedCategories) { $selectedCategories = array($primaryCategory); } // If explicitly configured to be hidden, skip the checks altogether if ($this->config->get('layout_composer_fields')) { foreach ($selectedCategories as $category) { if ($category->hasCustomFields()) { $displayFieldsTab = true; break; } } } $user = EB::table('Profile'); $user = $user->load($this->my->id); //available languages $languages = JLanguageHelper::getLanguages('lang_code'); //post association $associations = $post->getAssociation(); $theme = EB::template(); $theme->set('user', $user); $theme->set('displayFieldsTab', $displayFieldsTab); $theme->set('postTemplate', $postTemplate); $theme->set('postTemplates', $postTemplates); $theme->set('workingRevision', $workingRevision); $theme->set('revisions', $revisions); $theme->set('editor', $editor); $theme->set('primaryCategory', $primaryCategory); $theme->set('categories', $categories); $theme->set('tags', $tags); $theme->set('post', $post); $theme->set('author', $author); $theme->set('uuid', uniqid()); $theme->set('blocks', $blocks); $theme->set('languages', $languages); $theme->set('associations', $associations); // Determines if the source id and source type is provided $sourceId = $this->input->get('source_id', 0, 'int'); $sourceType = $this->input->get('source_type', '', 'default'); $contribution = ''; if ($sourceId && $sourceType) { $contribution = EB::contributor()->load($sourceId, $sourceType); $post->source_id = $sourceId; $post->source_type = $sourceType; } $theme->set('contribution', $contribution); $theme->set('sourceId', $sourceId); $theme->set('sourceType', $sourceType); $output = $theme->output('site/composer/manager'); return $output; }
/** * Retrieves the total number of posts available in a team * * @since 5.0 * @access public * @param string * @return */ public function getPostCount($id) { $db = EB::db(); $query = array(); $options = array('teamId' => $id, 'concateOperator' => 'AND'); // contribution type sql $contributor = EB::contributor(); $contributeSQL = ''; $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_TEAM, 'a', $options); $query[] = 'SELECT COUNT(1) FROM ' . $db->quoteName('#__easyblog_post') . ' AS a'; $query[] = 'where a.' . $db->quoteName('published') . '=' . $db->Quote(EASYBLOG_POST_PUBLISHED); $query[] = 'and a.' . $db->quoteName('state') . '=' . $db->Quote(EASYBLOG_POST_NORMAL); $query[] = $contributeSQL; // category access here $catLib = EB::category(); $catAccessSQL = $catLib->genAccessSQL('a.`id`'); $query[] = 'AND (' . $catAccessSQL . ')'; $query = implode(' ', $query); $db->setQuery($query); $total = $db->loadResult(); return $total; }
public function _buildQuery() { $db = EB::db(); $my = JFactory::getUser(); $config = EasyBlogHelper::getConfig(); // used for privacy $queryWhere = ''; $queryExclude = ''; $queryExcludePending = ''; $excludeCats = array(); $isBloggerMode = EasyBlogRouter::isBloggerMode(); $where = array(); $where2 = array(); $text = JRequest::getVar('query'); $words = explode(' ', $text); $wheres = array(); foreach ($words as $word) { $word = $db->Quote('%' . $db->getEscaped($word, true) . '%', false); $where[] = 'a.`title` LIKE ' . $word; $where[] = 'a.`content` LIKE ' . $word; $where[] = 'a.`intro` LIKE ' . $word; $where2[] = 't.title LIKE ' . $word; $wheres2[] = implode(' OR ', $where2); $wheres[] = implode(' OR ', $where); } $where = '(' . implode(') OR (', $wheres) . ')'; $where2 = '(' . implode(') OR (', $wheres2) . ')'; $isJSGrpPluginInstalled = false; $isJSGrpPluginInstalled = JPluginHelper::isEnabled('system', 'groupeasyblog'); $isEventPluginInstalled = JPluginHelper::isEnabled('system', 'eventeasyblog'); $isJSInstalled = false; // need to check if the site installed jomsocial. if (JFile::exists(JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_community' . DIRECTORY_SEPARATOR . 'libraries' . DIRECTORY_SEPARATOR . 'core.php')) { $isJSInstalled = true; } $includeJSGrp = $isJSGrpPluginInstalled && $isJSInstalled ? true : false; $includeJSEvent = $isEventPluginInstalled && $isJSInstalled ? true : false; $query = ''; // contribution type sql $contributor = EB::contributor(); $contributeSQL = ' AND ( (a.`source_type` = ' . $db->Quote(EASYBLOG_POST_SOURCE_SITEWIDE) . ') '; if ($config->get('main_includeteamblogpost')) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_TEAM, 'a'); } if ($includeJSEvent) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_EVENT, 'a'); } if ($includeJSGrp) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_JOMSOCIAL_GROUP, 'a'); } if (EB::easysocial()->exists()) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_GROUP, 'a'); $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_EASYSOCIAL_EVENT, 'a'); } $contributeSQL .= ')'; $queryWhere .= $contributeSQL; // category access here $catLib = EB::category(); $catAccessSQL = $catLib->genAccessSQL('a.`id`'); $queryWhere .= ' AND (' . $catAccessSQL . ')'; if ($isBloggerMode) { $queryWhere .= ' AND a.`created_by`=' . $db->Quote($isBloggerMode); } $query = 'SELECT a.*, CONCAT(a.`content` , a.`intro`) AS text'; $query .= ' FROM `#__easyblog_post` as a USE INDEX (`easyblog_post_searchnew`)'; // Always inner join with jos_users and a.created_by so that only valid blogs are loaded $query .= ' INNER JOIN ' . $db->nameQuote('#__users') . ' AS c ON a.`created_by`=c.`id`'; $query .= ' WHERE (' . $where; $query .= ' OR a.`id` IN( '; $query .= ' SELECT tp.`post_id` FROM `#__easyblog_tag` AS t '; $query .= ' INNER JOIN `#__easyblog_post_tag` AS tp ON tp.`tag_id` = t.`id` '; $query .= ' WHERE ' . $where2; $query .= ') )'; //blog privacy setting // @integrations: jomsocial privacy $privateBlog = ''; $file = JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_community' . DIRECTORY_SEPARATOR . 'libraries' . DIRECTORY_SEPARATOR . 'core.php'; $easysocial = EasyBlogHelper::getHelper('EasySocial'); if ($config->get('integrations_easysocial_privacy') && $easysocial->exists() && !EasyBlogHelper::isSiteAdmin()) { $esPrivacyQuery = $easysocial->buildPrivacyQuery('a'); $privateBlog .= $esPrivacyQuery; } else { if ($config->get('main_jomsocial_privacy') && JFile::exists($file) && !EasyBlogHelper::isSiteAdmin()) { require_once $file; $jsFriends = CFactory::getModel('Friends'); $friends = $jsFriends->getFriendIds($my->id); // Insert query here. $privateBlog .= ' AND ('; $privateBlog .= ' (a.`access`= 0 ) OR'; $privateBlog .= ' ( (a.`access` = 20) AND (' . $db->Quote($my->id) . ' > 0 ) ) OR'; if (empty($friends)) { $privateBlog .= ' ( (a.`access` = 30) AND ( 1 = 2 ) ) OR'; } else { $privateBlog .= ' ( (a.`access` = 30) AND ( a.' . $db->nameQuote('created_by') . ' IN (' . implode(',', $friends) . ') ) ) OR'; } $privateBlog .= ' ( (a.`access` = 40) AND ( a.' . $db->nameQuote('created_by') . '=' . $my->id . ') )'; $privateBlog .= ' )'; } else { if ($my->id == 0) { $privateBlog .= ' AND a.`access` = ' . $db->Quote(0); } } } if ($privateBlog) { $query .= $privateBlog; } //do not show unpublished post $query .= ' AND a.`published` = ' . $db->Quote(EASYBLOG_POST_PUBLISHED); $query .= ' AND a.`state` = ' . $db->Quote(EASYBLOG_POST_NORMAL); $query .= $queryWhere; $query .= ' ORDER BY a.`created` DESC'; // echo $query; return $query; }
/** * Retrieves the blog contribution * * @since 5.0 * @access public * @param string * @return */ public function getBlogContribution() { if (!$this->source_type || $this->source_type == EASYBLOG_POST_SOURCE_SITEWIDE) { return false; } $contributor = EB::contributor()->load($this->source_id, $this->source_type); return $contributor; }
public function getTeamBlogCount($tagId) { $db = EB::db(); $my = JFactory::getUser(); $config = EasyBlogHelper::getConfig(); $isBloggerMode = EasyBlogRouter::isBloggerMode(); $extraQuery = ''; $query = 'select count(1) from `#__easyblog_post` as a'; $query .= ' inner join `#__easyblog_post_tag` as b'; $query .= ' on a.`id` = b.`post_id`'; $query .= ' where b.`tag_id` = ' . $db->Quote($tagId); $query .= ' and (a.`source_type` = ' . $db->Quote(EASYBLOG_POST_SOURCE_TEAM); // contribution type sql $contributor = EB::contributor(); $contributeSQL = ''; if ($config->get('main_includeteamblogpost')) { $contributeSQL .= $contributor::genAccessSQL(EASYBLOG_POST_SOURCE_TEAM, 'a', array('concateOperator' => 'AND')); } $contributeSQL .= ')'; $query .= $contributeSQL; if ($isBloggerMode !== false) { $query .= ' and a.`created_by` = ' . $db->Quote($isBloggerMode); } $db->setQuery($query); $result = $db->loadResult(); return empty($result) ? '0' : $result; }