/** * Gets an blog list based on the given parameters. * * @param array $p_parameters * An array of ComparisonOperation objects * @param string $p_order * An array of columns and directions to order by * @param integer $p_start * The record number to start the list * @param integer $p_limit * The offset. How many records from $p_start will be retrieved. * * @return array $issuesList * An array of Issue objects */ public static function GetList($p_parameters, $p_order = null, $p_start = 0, $p_limit = 0, &$p_count) { global $g_ado_db; if (!is_array($p_parameters)) { return null; } // adodb::selectLimit() interpretes -1 as unlimited if ($p_limit == 0) { $p_limit = -1; } $selectClauseObj = new SQLSelectClause(); // sets the where conditions foreach ($p_parameters as $param) { $comparisonOperation = self::ProcessListParameters($param); $leftOperand = strtolower($comparisonOperation['left']); if ($leftOperand == 'matchalltopics') { // set the matchAllTopics flag $matchAllTopics = true; } elseif ($leftOperand == 'topic') { // add the topic to the list of match/do not match topics depending // on the operator if ($comparisonOperation['symbol'] == '=') { $hasTopics[] = $comparisonOperation['right']; } else { $hasNotTopics[] = $comparisonOperation['right']; } } else { $comparisonOperation = self::ProcessListParameters($param); if (empty($comparisonOperation)) { continue; } $whereCondition = $comparisonOperation['left'] . ' ' . $comparisonOperation['symbol'] . " '" . $g_ado_db->escape($comparisonOperation['right']) . "' "; $selectClauseObj->addWhere($whereCondition); } } if (count($hasTopics) > 0) { if ($matchAllTopics) { foreach ($hasTopics as $topicId) { $sqlQuery = self::BuildTopicSelectClause(array($topicId)); $whereCondition = "plugin_blog_entry.entry_id IN (\n$sqlQuery )"; $selectClauseObj->addWhere($whereCondition); } } else { $sqlQuery = self::BuildTopicSelectClause($hasTopics); $whereCondition = "plugin_blog_entry.entry_id IN (\n$sqlQuery )"; $selectClauseObj->addWhere($whereCondition); } } if (count($hasNotTopics) > 0) { $sqlQuery = self::BuildTopicSelectClause($hasNotTopics, true); $whereCondition = "plugin_blog_entry.entry_id IN (\n$sqlQuery )"; $selectClauseObj->addWhere($whereCondition); } // sets the columns to be fetched $tmpBlogEntry = new BlogEntry(); $columnNames = $tmpBlogEntry->getColumnNames(true); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } // sets the main table for the query $mainTblName = $tmpBlogEntry->getDbTableName(); $selectClauseObj->setTable($mainTblName); unset($tmpBlogEntry); if (is_array($p_order)) { $order = self::ProcessListOrder($p_order); // sets the order condition if any foreach ($order as $orderField=>$orderDirection) { $selectClauseObj->addOrderBy($orderField . ' ' . $orderDirection); } } $sqlQuery = $selectClauseObj->buildQuery(); // count all available results $countRes = $g_ado_db->Execute($sqlQuery); $p_count = $countRes->recordCount(); //get tlimited rows $blogEntryRes = $g_ado_db->SelectLimit($sqlQuery, $p_limit, $p_start); // builds the array of blog objects $blogEntriesList = array(); while ($blogEntry = $blogEntryRes->FetchRow()) { $blogEntryObj = new BlogEntry($blogEntry['entry_id']); if ($blogEntryObj->exists()) { $blogEntriesList[] = $blogEntryObj; } } return $blogEntriesList; } // fn GetList