public static function SearchQuery($p_searchPhrase) { global $g_ado_db; $matchAll = false; $keywords = preg_split('/[\s,.-]/', $p_searchPhrase); if (isset($keywords[0]) && strtolower($keywords[0]) == '__match_all') { $matchAll = true; array_shift($keywords); } // set search keywords if ($matchAll && count($keywords) > 1) { $selectKeywordClauseObj = new SQLSelectClause(); $selectKeywordClauseObj->addColumn('DISTINCT AI1.NrArticle'); $selectKeywordClauseObj->addColumn('AI1.IdLanguage'); $selectKeywordClauseObj->setTable('ArticleIndex AS AI1'); $selectKeywordClauseObj->addJoin('LEFT JOIN KeywordIndex AS KI1 ON AI1.IdKeyword = KI1.Id'); for ($tableIndex = 2; $tableIndex <= count($keywords); $tableIndex++) { $selectKeywordClauseObj->addJoin("LEFT JOIN ArticleIndex AS AI$tableIndex " . "ON AI1.NrArticle = AI$tableIndex.NrArticle " . "AND AI1.IdLanguage = AI$tableIndex.IdLanguage"); $selectKeywordClauseObj->addJoin("LEFT JOIN KeywordIndex AS KI$tableIndex " . "ON AI$tableIndex.IdKeyword = KI$tableIndex.Id"); } $tableIndex = 1; foreach ($keywords as $keyword) { $keywordConstraint = "KI$tableIndex.Keyword = '" . $g_ado_db->escape($keyword) . "'"; $selectKeywordClauseObj->addWhere($keywordConstraint); $tableIndex++; } } else { $selectKeywordClauseObj = new SQLSelectClause(); $selectKeywordClauseObj->addColumn('DISTINCT AI1.NrArticle'); $selectKeywordClauseObj->addColumn('AI1.IdLanguage'); $selectKeywordClauseObj->setTable('ArticleIndex AS AI1'); $selectKeywordClauseObj->addJoin('LEFT JOIN KeywordIndex AS KI1 ON AI1.IdKeyword = KI1.Id'); foreach ($keywords as $keyword) { $keywordConstraint = "KI1.Keyword = '" . $g_ado_db->escape($keyword) . "'"; $selectKeywordClauseObj->addConditionalWhere($keywordConstraint); } } return $selectKeywordClauseObj->buildQuery(); }
/** * Returns an images list based on the given parameters. * * @param array $p_parameters * An array of ComparionOperation 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 $issueList * An array of Issue objects */ public static function GetList(array $p_parameters, array $p_order = array(), $p_start = 0, $p_limit = 0, &$p_count, $p_skipCache = false) { global $g_ado_db; if (!$p_skipCache && CampCache::IsEnabled()) { $paramsArray['parameters'] = serialize($p_parameters); $paramsArray['order'] = (is_null($p_order)) ? 'null' : $p_order; $paramsArray['start'] = $p_start; $paramsArray['limit'] = $p_limit; $cacheListObj = new CampCacheList($paramsArray, __METHOD__); $imagesList = $cacheListObj->fetchFromCache(); if ($imagesList !== false && is_array($imagesList)) { return $imagesList; } } $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); // sets the where conditions foreach ($p_parameters as $param) { $comparisonOperation = self::ProcessListParameters($param); if (sizeof($comparisonOperation) < 1) { break; } if ($comparisonOperation['symbol'] == 'match') { $whereCondition = 'MATCH(' . $comparisonOperation['left'] . ") AGAINST('" . $g_ado_db->escape($comparisonOperation['right']) . "' IN BOOLEAN MODE)"; } else { $whereCondition = $comparisonOperation['left'] . ' ' . $comparisonOperation['symbol'] . " '" . $g_ado_db->escape($comparisonOperation['right']) . "' "; } $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } // sets the columns to be fetched $tmpImage = new Image(); $columnNames = $tmpImage->getColumnNames(true); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } $countClauseObj->addColumn('COUNT(*)'); // sets the base table $selectClauseObj->setTable($tmpImage->getDbTableName()); $countClauseObj->setTable($tmpImage->getDbTableName()); unset($tmpImage); // sets the ORDER BY condition $p_order = array_merge($p_order, self::$s_defaultOrder); $order = self::ProcessListOrder($p_order); foreach ($order as $orderDesc) { $orderColumn = $orderDesc['field']; $orderDirection = $orderDesc['dir']; $selectClauseObj->addOrderBy($orderColumn . ' ' . $orderDirection); } // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query and executes it $selectQuery = $selectClauseObj->buildQuery(); $images = $g_ado_db->GetAll($selectQuery); if (is_array($images)) { $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); // builds the array of image objects $imagesList = array(); foreach ($images as $image) { $imgObj = new Image($image['Id']); if ($imgObj->exists()) { $imagesList[] = $imgObj; } } } else { $imagesList = array(); $p_count = 0; } if (!$p_skipCache && CampCache::IsEnabled()) { $cacheListObj->storeInCache($imagesList); } return $imagesList; } // fn GetList
/** * Gets an issue list based on the given parameters. * * @param array $p_parameters * An array of ComparisonOperation objects * @param string item * An indentifier which assignment should be used (publication/issue/section/article) * @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(array $p_parameters, $p_item = null, $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); if (empty($comparisonOperation)) { continue; } if (strpos($comparisonOperation['left'], '_assign_publication_id') !== false) { $assign_publication_id = $comparisonOperation['right']; } elseif (strpos($comparisonOperation['left'], '_assign_issue_nr') !== false) { $assign_issue_nr = $comparisonOperation['right']; } elseif (strpos($comparisonOperation['left'], '_assign_section_nr') !== false) { $assign_section_nr = $comparisonOperation['right']; } elseif (strpos($comparisonOperation['left'], '_assign_article_nr') !== false) { $assign_article_nr = $comparisonOperation['right']; } elseif (strpos($comparisonOperation['left'], '_current') !== false) { $whereCondition = "date_begin <= NOW()"; $selectClauseObj->addWhere($whereCondition); $whereCondition = "date_end >= NOW()"; $selectClauseObj->addWhere($whereCondition); } elseif (strpos($comparisonOperation['left'], 'language_id') !== false) { $language_id = $comparisonOperation['right']; $whereCondition = $g_ado_db->escapeOperation($comparisonOperation); $selectClauseObj->addWhere($whereCondition); } else { $whereCondition = $g_ado_db->escapeOperation($comparisonOperation); $selectClauseObj->addWhere($whereCondition); } } // sets the columns to be fetched $tmpPoll = new Poll(); $columnNames = $tmpPoll->getColumnNames(true); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } // sets the main table for the query $mainTblName = $tmpPoll->getDbTableName(); $selectClauseObj->setTable($mainTblName); unset($tmpPoll); switch ($p_item) { case 'publication': if (empty($assign_publication_id)) { return; } $tmpAssignObj = new PollPublication(); $assignTblName = $tmpAssignObj->getDbTableName(); $join = "LEFT JOIN `{$assignTblName}` AS j\n ON\n j.fk_poll_nr = `{$mainTblName}`.poll_nr\n AND j.fk_publication_id = '{$assign_publication_id}'"; $selectClauseObj->addJoin($join); $selectClauseObj->addWhere('j.fk_poll_nr IS NOT NULL'); $selectClauseObj->setDistinct('plugin_poll.poll_nr'); break; case 'issue': if (empty($assign_publication_id) || empty($assign_issue_nr)) { return; } $tmpAssignObj = new PollIssue(); $assignTblName = $tmpAssignObj->getDbTableName(); $join = "LEFT JOIN {$assignTblName} AS j\n ON\n j.fk_poll_nr = `{$mainTblName}`.poll_nr\n AND j.fk_issue_nr = '{$assign_issue_nr}'\n AND j.fk_publication_id = '{$assign_publication_id}'"; if (isset($language_id)) { $join .= " AND j.fk_issue_language_id = '{$language_id}'"; } $selectClauseObj->addJoin($join); $selectClauseObj->addWhere('j.fk_poll_nr IS NOT NULL'); $selectClauseObj->setDistinct('plugin_poll.poll_nr'); break; case 'section': if (empty($assign_publication_id) || empty($assign_issue_nr) || empty($assign_section_nr)) { return; } $tmpAssignObj = new PollSection(); $assignTblName = $tmpAssignObj->getDbTableName(); $join = "LEFT JOIN `{$assignTblName}` AS j\n ON\n j.fk_poll_nr = `{$mainTblName}`.poll_nr\n AND j.fk_section_nr = '{$assign_section_nr}'\n AND j.fk_issue_nr = '{$assign_issue_nr}'\n AND j.fk_publication_id = '{$assign_publication_id}'"; if (isset($language_id)) { $join .= " AND j.fk_section_language_id = '{$language_id}'"; } $selectClauseObj->addJoin($join); $selectClauseObj->addWhere('j.fk_poll_nr IS NOT NULL'); $selectClauseObj->setDistinct('plugin_poll.poll_nr'); break; case 'article': if (empty($assign_article_nr)) { return; } $tmpAssignObj = new PollArticle(); $assignTblName = $tmpAssignObj->getDbTableName(); $join = "LEFT JOIN `{$assignTblName}` AS j\n ON\n j.fk_poll_nr = `{$mainTblName}`.poll_nr\n AND j.fk_article_nr = '{$assign_article_nr}'"; if (isset($language_id)) { $join .= " AND j.fk_article_language_id = '{$language_id}'"; } $selectClauseObj->addJoin($join); $selectClauseObj->addWhere('j.fk_poll_nr IS NOT NULL'); $selectClauseObj->setDistinct('plugin_poll.poll_nr'); break; } if (is_array($p_order)) { $order = Poll::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 the wanted rows $pollRes = $g_ado_db->SelectLimit($sqlQuery, $p_limit, $p_start); // builds the array of poll objects $pollsList = array(); while ($poll = $pollRes->FetchRow()) { $pollObj = new Poll($poll['fk_language_id'], $poll['poll_nr']); if ($pollObj->exists()) { $pollsList[] = $pollObj; } } return $pollsList; }
/** * Returns an article authors 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. * @param integer $p_count * The total count of the elements; this count is computed without * applying the start ($p_start) and limit parameters ($p_limit) * * @return array $articleAuthorsList * An array of Author objects */ public static function GetList(array $p_parameters, $p_order = null, $p_start = 0, $p_limit = 0, &$p_count, $p_skipCache = false) { global $g_ado_db; if (!$p_skipCache && CampCache::IsEnabled()) { $paramsArray['parameters'] = serialize($p_parameters); $paramsArray['order'] = is_null($p_order) ? 'order' : $p_order; $paramsArray['start'] = $p_start; $paramsArray['limit'] = $p_limit; $cacheListObj = new CampCacheList($paramsArray, __METHOD__); $articleAuthorsList = $cacheListObj->fetchFromCache(); if ($articleAuthorsList !== false && is_array($articleAuthorsList)) { return $articleAuthorsList; } } $hasArticleNr = false; $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); // sets the where conditions foreach ($p_parameters as $param) { if ($param->getLeftOperand() == 'type') { $whereCondition = 'fk_type_id ' . $param->getOperator()->getSymbol() . ' (SELECT id FROM ' . AuthorType::TABLE . ' WHERE type="' . str_replace("'", "", $param->getRightOperand()) . '")'; $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } if ($param->getLeftOperand() == 'id') { $whereCondition = 'fk_author_id ' . $param->getOperator()->getSymbol() . ' ' . $param->getRightOperand(); $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } $comparisonOperation = self::ProcessListParameters($param); if (sizeof($comparisonOperation) < 1) { break; } switch (key($comparisonOperation)) { case 'fk_article_number': $whereCondition = 'fk_article_number = ' . $comparisonOperation['fk_article_number']; $hasArticleNr = true; break; case 'fk_language_id': $whereCondition = '(fk_language_id IS NULL OR ' . 'fk_language_id = ' . $comparisonOperation['fk_language_id'] . ')'; break; } $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } // validates whether article number was given if ($hasArticleNr === false) { CampTemplate::singleton()->trigger_error("missed parameter Article Number in statement list_article_authors"); } // sets the base table ArticleAuthors and the column to be fetched $tmpArticleAuthor = new ArticleAuthor(); $selectClauseObj->setTable($tmpArticleAuthor->getDbTableName()); $selectClauseObj->addJoin('JOIN ' . Author::TABLE . ' ON fk_author_id = id'); $selectClauseObj->addColumn('fk_author_id'); $selectClauseObj->addColumn('fk_type_id'); $countClauseObj->setTable($tmpArticleAuthor->getDbTableName()); $countClauseObj->addColumn('COUNT(*)'); unset($tmpArticleAuthor); if (!is_array($p_order)) { $p_order = array(); } $order = self::ProcessListOrder($p_order); // sets the order condition if any foreach ($order as $orderDesc) { $orderField = $orderDesc['field']; $orderDirection = $orderDesc['dir']; $selectClauseObj->addOrderBy($orderField . ' ' . $orderDirection); } // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query and executes it $selectQuery = $selectClauseObj->buildQuery(); $authors = $g_ado_db->GetAll($selectQuery); if (is_array($authors)) { $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); // builds the array of attachment objects $authorsList = array(); foreach ($authors as $author) { $authorObj = new Author($author['fk_author_id'], $author['fk_type_id']); if ($authorObj->exists()) { $authorsList[] = $authorObj; } } } else { $authorsList = array(); $p_count = 0; } if (!$p_skipCache && CampCache::IsEnabled()) { $cacheListObj->storeInCache($authorsList); } return $authorsList; }
/** * Gets an issues 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. * @param integer $p_count * The total count of the elements; this count is computed without * applying the start ($p_start) and limit parameters ($p_limit) * * @return array $issuesList * An array of Issue objects */ public static function GetList(array $p_parameters, $p_order = null, $p_start = 0, $p_limit = 0, &$p_count, $p_skipCache = false) { global $g_ado_db; if (!$p_skipCache && CampCache::IsEnabled()) { $paramsArray['parameters'] = serialize($p_parameters); $paramsArray['order'] = (is_null($p_order)) ? 'null' : $p_order; $paramsArray['start'] = $p_start; $paramsArray['limit'] = $p_limit; $cacheListObj = new CampCacheList($paramsArray, __METHOD__); $issuesList = $cacheListObj->fetchFromCache(); if ($issuesList !== false && is_array($issuesList)) { return $issuesList; } } $hasPublicationId = false; $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); // sets the where conditions foreach ($p_parameters as $param) { $comparisonOperation = self::ProcessListParameters($param); if (empty($comparisonOperation)) { break; } if (strpos($comparisonOperation['left'], 'IdPublication') !== false) { $hasPublicationId = true; } $whereCondition = $comparisonOperation['left'] . ' ' . $comparisonOperation['symbol'] . " '" . $g_ado_db->escape($comparisonOperation['right']) . "' "; $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } // validates whether publication identifier was given if ($hasPublicationId == false) { CampTemplate::singleton()->trigger_error('missed parameter Publication ' .'Identifier in statement list_topics'); return; } // sets the columns to be fetched $tmpIssue = new Issue(); $columnNames = $tmpIssue->getColumnNames(true); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } $countClauseObj->addColumn('COUNT(*)'); // sets the main table for the query $selectClauseObj->setTable($tmpIssue->getDbTableName()); $countClauseObj->setTable($tmpIssue->getDbTableName()); unset($tmpIssue); if (is_array($p_order)) { $order = Issue::ProcessListOrder($p_order); // sets the order condition if any foreach ($order as $orderDesc) { $orderField = $orderDesc['field']; $orderDirection = $orderDesc['dir']; $selectClauseObj->addOrderBy($orderField . ' ' . $orderDirection); } } $selectClauseObj->addGroupField('Number'); $selectClauseObj->addGroupField('IdLanguage'); // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query and executes it $selectQuery = $selectClauseObj->buildQuery(); $countQuery = $countClauseObj->buildQuery(); $issues = $g_ado_db->GetAll($selectQuery); if (is_array($issues)) { $p_count = $g_ado_db->GetOne($countQuery); // builds the array of issue objects $issuesList = array(); foreach ($issues as $issue) { $issObj = new Issue($issue['IdPublication'], $issue['IdLanguage'], $issue['Number']); if ($issObj->exists()) { $issuesList[] = $issObj; } } } else { $issuesList = array(); $p_count = 0; } if (!$p_skipCache && CampCache::IsEnabled()) { $cacheListObj->storeInCache($issuesList); } return $issuesList; } // fn GetList
/** * Gets an issue 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_count * The count of answers. * * @return array $issuesList * An array of Issue objects */ public static function GetList(array $p_parameters, $p_order = null, $p_start = 0, $p_limit = 0, &$p_count) { global $g_ado_db; $hasPollNr = false; $hasLanguageId = fase; $selectClauseObj = new SQLSelectClause(); if (!is_array($p_parameters)) { return null; } // adodb::selectLimit() interpretes -1 as unlimited if ($p_limit == 0) { $p_limit = -1; } // sets the where conditions foreach ($p_parameters as $param) { $comparisonOperation = self::ProcessListParameters($param); if (empty($comparisonOperation)) { continue; } if (strpos($comparisonOperation['left'], 'poll_nr') !== false) { $hasPollNr = true; } if (strpos($comparisonOperation['left'], 'language_id') !== false) { $hasLanguageId = true; } $whereCondition = $comparisonOperation['left'] . ' ' . $comparisonOperation['symbol'] . " '" . $g_ado_db->escape($comparisonOperation['right']) . "' "; $selectClauseObj->addWhere($whereCondition); } // validates whether publication identifier was given if ($hasPollNr == false) { CampTemplate::singleton()->trigger_error('missed parameter Poll Number in statement list_pollanswers'); return; } // validates whether language identifier was given if ($hasLanguageId == false) { CampTemplate::singleton()->trigger_error('missed parameter Language Identifier in statement list_pollanswers'); return; } // sets the columns to be fetched $tmpPollAnswer = new PollAnswer(); $columnNames = $tmpPollAnswer->getColumnNames(true); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } // sets the main table for the query $mainTblName = $tmpPollAnswer->getDbTableName(); $selectClauseObj->setTable($mainTblName); unset($tmpPollAnswer); if (!is_array($p_order)) { $p_order = array(); } // sets the ORDER BY condition $p_order = count($p_order) > 0 ? $p_order : PollAnswer::$s_defaultOrder; $order = PollAnswer::ProcessListOrder($p_order); foreach ($order as $orderColumn => $orderDirection) { $selectClauseObj->addOrderBy($orderColumn . ' ' . $orderDirection); } $sqlQuery = $selectClauseObj->buildQuery(); // count all available results $countRes = $g_ado_db->Execute($sqlQuery); $p_count = $countRes->recordCount(); //get the wanted rows $pollAnswerRes = $g_ado_db->Execute($sqlQuery); // builds the array of poll objects $pollAnswersList = array(); while ($pollAnswer = $pollAnswerRes->FetchRow()) { $pollAnswerObj = new PollAnswer($pollAnswer['fk_language_id'], $pollAnswer['fk_poll_nr'], $pollAnswer['nr_answer']); if ($pollAnswerObj->exists()) { $pollAnswersList[] = $pollAnswerObj; } } return $pollAnswersList; } // fn GetList
/** * Returns an article topics 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. * @param integer $p_count * The total count of the elements; this count is computed without * applying the start ($p_start) and limit parameters ($p_limit) * * @return array $articleTopicsList * An array of Topic objects */ public static function GetList(array $p_parameters, $p_order = null, $p_start = 0, $p_limit = 0, &$p_count, $p_skipCache = false) { global $g_ado_db; if (!$p_skipCache && CampCache::IsEnabled()) { $paramsArray['parameters'] = serialize($p_parameters); $paramsArray['order'] = is_null($p_order) ? 'null' : $p_order; $paramsArray['start'] = $p_start; $paramsArray['limit'] = $p_limit; $cacheListObj = new CampCacheList($paramsArray, __METHOD__); $articleTopicsList = $cacheListObj->fetchFromCache(); if ($articleTopicsList !== false && is_array($articleTopicsList)) { return $articleTopicsList; } } $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); $rootTopicIds = array(); // processes the parameters $hasArticleNr = false; foreach ($p_parameters as $parameter) { $comparisonOperation = self::ProcessListParameters($parameter); if (sizeof($comparisonOperation) < 1) { break; } if (strpos($comparisonOperation['left'], 'NrArticle') !== false) { $hasArticleNr = true; } if (strpos($comparisonOperation['left'], 'RootTopic') !== false) { $rootTopicIds[] = (int) $comparisonOperation['right']; continue; } $whereCondition = $g_ado_db->escapeOperation($comparisonOperation); $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } // validates whether article number was given if ($hasArticleNr === false) { CampTemplate::singleton()->trigger_error("missed parameter Article Number in statement list_article_topics"); return array(); } if (count($rootTopicIds) > 0) { $subtopicsQuery = Topic::BuildSubtopicsQueryWithoutDepth($rootTopicIds); $whereCondition = 'TopicId IN (' . $subtopicsQuery->buildQuery() . ')'; $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } // sets the main table and columns to be fetched $tmpArticleTopic = new ArticleTopic(); $selectClauseObj->setTable($tmpArticleTopic->getDbTableName()); $selectClauseObj->addColumn('TopicId'); $countClauseObj->setTable($tmpArticleTopic->getDbTableName()); $countClauseObj->addColumn('COUNT(*)'); unset($tmpArticleTopic); if (!is_array($p_order)) { $p_order = array(); } // sets the order condition if any foreach ($p_order as $orderColumn => $orderDirection) { $selectClauseObj->addOrderBy($orderColumn . ' ' . $orderDirection); } // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query and executes it $selectQuery = $selectClauseObj->buildQuery(); $topics = $g_ado_db->GetAll($selectQuery); if (is_array($topics)) { $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); // builds the array of topic objects $articleTopicsList = array(); foreach ($topics as $topic) { $articleTopicsList[] = $topic['TopicId']; } } else { $articleTopicsList = array(); $p_count = 0; } if (!$p_skipCache && CampCache::IsEnabled()) { $cacheListObj->storeInCache($articleTopicsList); } return $articleTopicsList; }
/** * Gets an issue 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_count * The count of answers. * * @return array $debateAnswerAttachmentsList * An array of Attachment objects */ public static function GetList(array $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; } // sets the where conditions foreach ($p_parameters as $param) { $comparisonOperation = self::ProcessListParameters($param); if (empty($comparisonOperation)) { continue; } if (strpos($comparisonOperation['left'], 'debate_nr') !== false) { $debate_nr = $comparisonOperation['right']; } if (strpos($comparisonOperation['left'], 'debateanswer_nr') !== false) { $debateanswer_nr = $comparisonOperation['right']; } } $sqlClauseObj = new SQLSelectClause(); // sets the columns to be fetched $tmpDebateAnswerAttachment = new DebateAnswerAttachment($language_id, $debate_nr); $columnNames = $tmpDebateAnswerAttachment->getColumnNames(true); foreach ($columnNames as $columnName) { $sqlClauseObj->addColumn($columnName); } // sets the main table for the query $mainTblName = $tmpDebateAnswerAttachment->getDbTableName(); $sqlClauseObj->setTable($mainTblName); unset($tmpDebateAnswerAttachment); if (empty($debateanswer_nr) || empty($debate_nr)) { return; } $sqlClauseObj->addWhere("fk_debate_nr = " . $g_ado_db->escape($debate_nr)); $sqlClauseObj->addWhere("fk_debateanswer_nr = " . $g_ado_db->escape($debateanswer_nr)); if (!is_array($p_order)) { $p_order = array(); } // sets the ORDER BY condition $p_order = count($p_order) > 0 ? $p_order : self::$s_defaultOrder; $order = self::ProcessListOrder($p_order); foreach ($order as $orderColumn => $orderDirection) { $sqlClauseObj->addOrderBy($orderColumn . ' ' . $orderDirection); } $sqlQuery = $sqlClauseObj->buildQuery(); // count all available results $countRes = $g_ado_db->Execute($sqlQuery); $p_count = $countRes->recordCount(); //get the wanted rows $debateAnswerAttachments = $g_ado_db->Execute($sqlQuery); // builds the array of debate objects $debateAnswerAttachmentsList = array(); while ($debateAnswerAttachment = $debateAnswerAttachments->FetchRow()) { $debateAnswerAttachment = new Attachment($debateAnswerAttachment['fk_attachment_id']); if ($debateAnswerAttachment->exists()) { $debateAnswerAttachmentsList[] = $debateAnswerAttachment; } } return $debateAnswerAttachmentsList; }
/** * Returns an blog topics 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. * @param integer $p_count * The total count of the elements; this count is computed without * applying the start ($p_start) and limit parameters ($p_limit) * * @return array $blogTopicsList * An array of Topic objects */ public static function GetList(array $p_parameters, $p_order = null, $p_start = 0, $p_limit = 0, &$p_count) { global $g_ado_db; $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); // processes the parameters foreach ($p_parameters as $parameter) { $comparisonOperation = self::ProcessListParameters($parameter); if (sizeof($comparisonOperation) < 1) { break; } if (strpos($comparisonOperation['left'], 'fk_entry_id') !== false) { $hasBlogentryId = true; } $whereCondition = $comparisonOperation['left'] . ' ' . $comparisonOperation['symbol'] . " '" . $g_ado_db->escape($comparisonOperation['right']) . "' "; $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } // validates whether blog number was given if ($hasBlogentryId == false) { CampTemplate::singleton()->trigger_error("missed parameter Blogentry Number in statement list_blog_topics"); return array(); } // sets the main table and columns to be fetched $tmpBlogentryTopic = new BlogentryTopic(); $selectClauseObj->setTable($tmpBlogentryTopic->getDbTableName()); $selectClauseObj->addColumn('fk_topic_id'); $countClauseObj->setTable($tmpBlogentryTopic->getDbTableName()); $countClauseObj->addColumn('COUNT(*)'); unset($tmpBlogTopic); if (!is_array($p_order)) { $p_order = array(); } // sets the order condition if any foreach ($p_order as $orderColumn => $orderDirection) { $selectClauseObj->addOrderBy($orderColumn . ' ' . $orderDirection); } // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query and executes it $selectQuery = $selectClauseObj->buildQuery(); $topics = $g_ado_db->GetAll($selectQuery); if (!is_array($topics)) { return array(); } $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); // builds the array of topic objects $blogentryTopicsList = array(); foreach ($topics as $topic) { $topObj = new Topic($topic['fk_topic_id']); if ($topObj->exists()) { $blogentryTopicsList[] = $topObj; } } return $blogentryTopicsList; } // fn GetList
/** * Returns an article comments 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. * @param integer $p_count * The total count of the elements; this count is computed without * applying the start ($p_start) and limit parameters ($p_limit) * * @return array $articleCommentsList * An array of Comment objects */ public static function GetList(array $p_parameters, $p_order = null, $p_start = 0, $p_limit = 0, &$p_count, $p_skipCache = false) { global $g_ado_db, $PHORUM; if (!$p_skipCache && CampCache::IsEnabled()) { $paramsArray['parameters'] = serialize($p_parameters); $paramsArray['order'] = (is_null($p_order)) ? 'null' : $p_order; $paramsArray['start'] = $p_start; $paramsArray['limit'] = $p_limit; $cacheListObj = new CampCacheList($paramsArray, __METHOD__, self::DEFAULT_TTL); $articleCommentsList = $cacheListObj->fetchFromCache(); if ($articleCommentsList !== false && is_array($articleCommentsList)) { return $articleCommentsList; } } $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); $messageTable = $PHORUM['message_table']; $selectClauseObj->setTable($messageTable); $countClauseObj->setTable($messageTable); $articleNumber = null; $languageId = null; // sets the where conditions foreach ($p_parameters as $param) { $comparisonOperation = self::ProcessListParameters($param); if (strtolower($comparisonOperation->getLeftOperand()) == 'fk_article_number') { $articleNumber = $comparisonOperation->getRightOperand(); } if (strtolower($comparisonOperation->getLeftOperand()) == 'fk_language_id') { $languageId = $comparisonOperation->getRightOperand(); } $parameters[] = $comparisonOperation; } if (!is_null($articleNumber) && !is_null($languageId)) { // gets the thread id for the article $threadId = ArticleComment::GetCommentThreadId($articleNumber, $languageId); $selectClauseObj->addWhere('thread = '.$threadId); $countClauseObj->addWhere('thread = '.$threadId); } $selectClauseObj->addWhere('message_id != thread'); $selectClauseObj->addWhere('status = '.PHORUM_STATUS_APPROVED); $countClauseObj->addWhere('message_id != thread'); $countClauseObj->addWhere('status = '.PHORUM_STATUS_APPROVED); if (!is_array($p_order) || count($p_order) == 0) { $p_order = array('default'=>'asc'); } // sets the order condition if any if (is_array($p_order)) { $order = ArticleComment::ProcessListOrder($p_order); // sets the order condition if any foreach ($order as $orderDesc) { $orderField = $orderDesc['field']; $orderDirection = $orderDesc['dir']; $selectClauseObj->addOrderBy($orderField . ' ' . $orderDirection); } } // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query and executes it $selectQuery = $selectClauseObj->buildQuery(); $comments = $g_ado_db->GetAll($selectQuery); if (is_array($comments)) { $countClauseObj->addColumn('COUNT(*)'); $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); // builds the array of comment objects $articleCommentsList = array(); foreach ($comments as $comment) { $pmObj = new Phorum_message($comment['message_id']); if ($pmObj->exists()) { $articleCommentsList[] = $pmObj; } } } else { $articleCommentsList = array(); $p_count = 0; } if (!$p_skipCache && CampCache::IsEnabled()) { $cacheListObj->storeInCache($articleCommentsList); } return $articleCommentsList; } // fn GetList
/** * 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
/** * Returns map locations list based on the given parameters. * * @param array $p_parameters * An array of ComparionOperation 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 of IGeoMapLocation */ public static function GetList(array $p_parameters, array $p_order = array(), $p_start = 0, $p_limit = 0, &$p_count, $p_skipCache = false) { global $g_ado_db; $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); // set columns $tmpMapLoc = new self(NULL); $tmpLoc = new Geo_Location(NULL); $columnNames = array_merge($tmpMapLoc->getColumnNames(true), array_diff($tmpLoc->getColumnNames(true), array('Locations.id'))); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } $selectClauseObj->addColumn('X(poi_location) as latitude'); $selectClauseObj->addColumn('Y(poi_location) as longitude'); $countClauseObj->addColumn('COUNT(*)'); // sets the base table $selectClauseObj->setTable($tmpMapLoc->getDbTableName()); $selectClauseObj->addJoin(sprintf('INNER JOIN `%s` ON fk_location_id = %s.id', $tmpLoc->getDbTableName(), $tmpLoc->getDbTableName())); $countClauseObj->setTable($tmpMapLoc->getDbTableName()); unset($tmpMapLoc); unset($tmpLoc); // process params foreach ($p_parameters as $param) { switch ($param->getLeftOperand()) { case 'article': $searchQuery = sprintf('fk_map_id IN (SELECT id FROM %s WHERE fk_article_number = %d)', Geo_Map::TABLE, $param->getRightOperand()); $selectClauseObj->addWhere($searchQuery); $countClauseObj->addWhere($searchQuery); break; } } // set order by rank and id $selectClauseObj->addOrderBy(self::TABLE . '.rank'); $selectClauseObj->addOrderBy(self::TABLE . '.id'); // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query and executes it $selectQuery = $selectClauseObj->buildQuery(); $rows = $g_ado_db->GetAll($selectQuery); $list = array(); $p_count = 0; if (is_array($rows)) { $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); // builds the array of image objects foreach ($rows as $row) { $list[] = new self((array) $row); } } return $list; }
public static function SearchQuery($p_searchPhrase, $p_symbol = null) { global $g_ado_db; $p_searchPhrase = trim($p_searchPhrase); if (empty($p_searchPhrase)) { return null; } $matchAll = false; $keywords = preg_split('/[\\s,.-]/', $p_searchPhrase); if (isset($keywords[0]) && strtolower($keywords[0]) == '__match_all') { $matchAll = true; array_shift($keywords); } $keywords = array_diff($keywords, array("", "")); $sKeys = array(); foreach ($keywords as $keyword) { if (strlen($keyword) > 2) { $sKeys[] = $keyword; } } $keywords = $sKeys; if (count($keywords) < 1) { return null; } // specifically match webcode (first one) $webcodeMatches = preg_grep("`^\\s*[\\+@]`", $keywords); if (count($webcodeMatches)) { $wcode = ltrim(current($webcodeMatches), '@+'); $za = Zend_Registry::get('container')->getService('webcode')->findArticleByWebcode($wcode); $article_no = $za->getId(); if (is_numeric($article_no)) { $selectKeywordClauseObj = new SQLSelectClause(); $selectKeywordClauseObj->addColumn('DISTINCT AI1.NrArticle'); $selectKeywordClauseObj->addColumn('AI1.IdLanguage'); $selectKeywordClauseObj->setTable('ArticleIndex AS AI1'); $selectKeywordClauseObj->addConditionalWhere("AI1.NrArticle = '{$article_no}'"); } } elseif ($matchAll && count($keywords) > 1) { $selectKeywordClauseObj = new SQLSelectClause(); $selectKeywordClauseObj->addColumn('DISTINCT AI1.NrArticle'); $selectKeywordClauseObj->addColumn('AI1.IdLanguage'); $selectKeywordClauseObj->setTable('ArticleIndex AS AI1'); $selectKeywordClauseObj->addJoin('LEFT JOIN KeywordIndex AS KI1 ON AI1.IdKeyword = KI1.Id'); for ($tableIndex = 2; $tableIndex <= count($keywords); $tableIndex++) { $selectKeywordClauseObj->addJoin("LEFT JOIN ArticleIndex AS AI{$tableIndex} " . "ON AI1.NrArticle = AI{$tableIndex}.NrArticle " . "AND AI1.IdLanguage = AI{$tableIndex}.IdLanguage"); $selectKeywordClauseObj->addJoin("LEFT JOIN KeywordIndex AS KI{$tableIndex} " . "ON AI{$tableIndex}.IdKeyword = KI{$tableIndex}.Id"); } $tableIndex = 1; foreach ($keywords as $keyword) { $keywordConstraint = "KI{$tableIndex}.Keyword = '" . $g_ado_db->escape($keyword) . "'"; $selectKeywordClauseObj->addWhere($keywordConstraint); $tableIndex++; } } else { $selectKeywordClauseObj = new SQLSelectClause(); $selectKeywordClauseObj->addColumn('DISTINCT AI1.NrArticle'); $selectKeywordClauseObj->addColumn('AI1.IdLanguage'); $selectKeywordClauseObj->setTable('ArticleIndex AS AI1'); $selectKeywordClauseObj->addJoin('LEFT JOIN KeywordIndex AS KI1 ON AI1.IdKeyword = KI1.Id'); foreach ($keywords as $keyword) { if (strtolower($p_symbol) == 'like') { $keywordConstraint = "KI1.Keyword LIKE " . $g_ado_db->escape('%' . $keyword . '%'); } else { $keywordConstraint = "KI1.Keyword = " . $g_ado_db->escape($keyword); } $selectKeywordClauseObj->addConditionalWhere($keywordConstraint); } } return $selectKeywordClauseObj->buildQuery(); }
/** * 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); if (empty($comparisonOperation)) { continue; } $whereCondition = $comparisonOperation['left'] . ' ' . $comparisonOperation['symbol'] . " '" . $g_ado_db->escape($comparisonOperation['right']) . "' "; $selectClauseObj->addWhere($whereCondition); } // sets the columns to be fetched $tmpBlogComment = new BlogComment(); $columnNames = $tmpBlogComment->getColumnNames(true); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } // sets the main table for the query $mainTblName = $tmpBlogComment->getDbTableName(); $selectClauseObj->setTable($mainTblName); unset($tmpBlogComment); 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 $blogCommentRes = $g_ado_db->SelectLimit($sqlQuery, $p_limit, $p_start); // builds the array of blogComment objects $blogCommentsList = array(); while ($blogComment = $blogCommentRes->FetchRow()) { $blogCommentObj = new BlogComment($blogComment['comment_id']); if ($blogCommentObj->exists()) { $blogCommentsList[] = $blogCommentObj; } } return $blogCommentsList; } // fn GetList
/** * Get all the topics in an array, where each element contains the entire * path for each topic. Each topic will be indexed by its ID. * For example, if we have the following topic structure (IDs are * in brackets): * * sports (1) * - baseball (2) * - soccer (3) * - player stats (4) * - matches (5) * politics (6) * - world (7) * - local (8) * * ...then the returned array would look like: * array(array(1 => "sports"), * array(1 => "sports", 2 => "baseball"), * array(1 => "sports", 3 => "soccer"), * array(1 => "sports", 3 => "soccer", 4 => "player stats"), * array(1 => "sports", 3 => "soccer", 5 => "matches"), * array(6 => "politics"), * array(6 => "politics", 7 => "world"), * array(6 => "politics", 8 => "local") * ); * * @param int $p_startingTopicId * @return array */ public static function GetTree($p_startingTopicId = 0) { global $g_ado_db; $topicObj = new Topic(); $query = new SQLSelectClause(); $query->addColumn('node.id'); $query->addColumn('(COUNT(parent.id) - 1) AS depth'); $query->setTable($topicObj->m_dbTableName . ' AS node'); $query->addTableFrom($topicObj->m_dbTableName . ' AS parent'); $query->addWhere('node.node_left BETWEEN parent.node_left AND parent.node_right'); if ($p_startingTopicId > 0) { $query->addTableFrom($topicObj->m_dbTableName . ' AS sub_parent'); $query->addWhere('node.node_left > sub_parent.node_left'); $query->addWhere('node.node_left < sub_parent.node_right'); $query->addWhere('sub_parent.id = ' . (int) $p_startingTopicId); } $query->addGroupField('node.id'); $query->addOrderBy('node.node_left'); $rows = $g_ado_db->GetAll($query->buildQuery()); if (empty($rows)) { // empty tree return array(); } $p_tree = array(); $startDepth = null; $currentPath = array(); foreach ($rows as $row) { $topicId = $row['id']; $depth = $row['depth'] - (int) $startDepth; $topic = new Topic($topicId); if (is_null($startDepth)) { $startDepth = $depth; $depth = 0; $currentPath[$topicId] = $topic; } elseif ($depth > count($currentPath)) { $currentPath[$topicId] = $topic; } elseif ($depth == 0) { $currentPath = array($topicId => $topic); } else { while ($depth < count($currentPath)) { array_pop($currentPath); } $currentPath[$topicId] = $topic; } $p_tree[] = $currentPath; } return $p_tree; }
/** * Returns an article images 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. * @param integer $p_count * The total count of the elements; this count is computed without * applying the start ($p_start) and limit parameters ($p_limit) * * @return array $articleImagesList * An array of Image objects */ public static function GetList(array $p_parameters, array $p_order = array(), $p_start = 0, $p_limit = 0, &$p_count, $p_skipCache = false) { global $g_ado_db; if (!$p_skipCache && CampCache::IsEnabled()) { $paramsArray['parameters'] = serialize($p_parameters); $paramsArray['order'] = is_null($p_order) ? 'null' : $p_order; $paramsArray['start'] = $p_start; $paramsArray['limit'] = $p_limit; $cacheListObj = new CampCacheList($paramsArray, __METHOD__); $articleImagesList = $cacheListObj->fetchFromCache(); if ($articleImagesList !== false && is_array($articleImagesList)) { return $articleImagesList; } } $hasArticleNr = false; $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); // sets the where conditions foreach ($p_parameters as $param) { $comparisonOperation = self::ProcessListParameters($param); if (sizeof($comparisonOperation) < 3) { break; } if (strpos($comparisonOperation['left'], 'NrArticle')) { $hasArticleNr = true; } $whereCondition = $g_ado_db->escapeOperation($comparisonOperation); $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } // validates whether article number was given if ($hasArticleNr === false) { CampTemplate::singleton()->trigger_error('Missing parameter Article ' . 'Number in statement list_article_images'); return; } // sets the columns to be fetched $tmpImage = new Image(); $columnNames = $tmpImage->getColumnNames(true); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } $countClauseObj->addColumn('COUNT(*)'); // sets the base table Attachment $selectClauseObj->setTable($tmpImage->getDbTableName()); $countClauseObj->setTable($tmpImage->getDbTableName()); unset($tmpImage); // adds the ArticleImages join and condition to the query $selectClauseObj->addTableFrom('ArticleImages'); $selectClauseObj->addWhere('ArticleImages.IdImage = Images.Id'); $countClauseObj->addTableFrom('ArticleImages'); $countClauseObj->addWhere('ArticleImages.IdImage = Images.Id'); // sets the ORDER BY condition $p_order = array_merge($p_order, self::$s_defaultOrder); $order = self::ProcessListOrder($p_order); foreach ($order as $orderDesc) { $orderColumn = $orderDesc['field']; $orderDirection = $orderDesc['dir']; $selectClauseObj->addOrderBy($orderColumn . ' ' . $orderDirection); } // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query executes it $selectQuery = $selectClauseObj->buildQuery(); $images = $g_ado_db->GetAll($selectQuery); if (is_array($images)) { $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); // builds the array of image objects $articleImagesList = array(); foreach ($images as $image) { $imgObj = new Image($image['Id']); if ($imgObj->exists()) { $articleImagesList[] = $imgObj; } } } else { $articleImagesList = array(); $p_count = 0; } if (!$p_skipCache && CampCache::IsEnabled()) { $cacheListObj->storeInCache($articleImagesList); } return $articleImagesList; }
/** * Gets an issue list based on the given parameters. * * @param array $p_parameters * An array of ComparisonOperation objects * @param string item * An indentifier which assignment should be used (publication/issue/section/article) * @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_item = null, $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); if (empty($comparisonOperation)) { continue; } if (strpos($comparisonOperation['left'], 'interview_id') !== false) { $interview_id = $g_ado_db->escape($comparisonOperation['right']); } else { $whereCondition = $comparisonOperation['left'] . ' ' . $comparisonOperation['symbol'] . " '" . $g_ado_db->escape($comparisonOperation['right']) . "' "; $selectClauseObj->addWhere($whereCondition); } } // sets the columns to be fetched $tmpInterviewItem = new InterviewItem(); $columnNames = $tmpInterviewItem->getColumnNames(true); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } // sets the main table for the query $mainTblName = $tmpInterviewItem->getDbTableName(); $selectClauseObj->setTable($mainTblName); unset($tmpInterviewItem); // set constraints which ever have to care of $selectClauseObj->addWhere("$mainTblName.fk_interview_id = '$interview_id'"); #$selectClauseObj->addWhere("$mainTblName.is_online = 1"); if (is_array($p_order)) { $order = InterviewItem::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 $interviewItemRes = $g_ado_db->SelectLimit($sqlQuery, $p_limit, $p_start); // builds the array of interview objects $interviewItemsList = array(); while ($interviewItem = $interviewItemRes->FetchRow()) { $interviewItemObj = new InterviewItem($interviewItem['interview_id'], $interviewItem['item_id']); if ($interviewItemObj->exists()) { $interviewItemsList[] = $interviewItemObj; } } return $interviewItemsList; } // fn GetList
/** * Return an array of Language objects based on the given contraints. * * @param int $p_id * @param string $p_languageCode * @param string $p_name * @param array $p_excludedLanguages * @param array $p_order * @return array */ public static function GetLanguages($p_id = null, $p_languageCode = null, $p_name = null, array $p_excludedLanguages = array(), array $p_order = array(), $p_skipCache = false) { global $g_ado_db; if (!$p_skipCache && CampCache::IsEnabled()) { $paramsArray['id'] = is_null($p_id) ? 'null' : $p_id; $paramsArray['language_code'] = is_null($p_languageCode) ? 'null' : $p_languageCode; $paramsArray['name'] = is_null($p_name) ? 'null' : $p_name; $paramsArray['excluded_languages'] = $p_excludedLanguages; $paramsArray['order'] = $p_order; $cacheListObj = new CampCacheList($paramsArray, __METHOD__); $languages = $cacheListObj->fetchFromCache(); if ($languages !== false && is_array($languages)) { return $languages; } } $selectClauseObj = new SQLSelectClause(); $tmpLanguage = new Language(); $selectClauseObj->setTable($tmpLanguage->getDbTableName()); if (!is_null($p_id)) { $selectClauseObj->addWhere($g_ado_db->escapeKeyVal('Id', (int) $p_id)); } if (!is_null($p_languageCode)) { $selectClauseObj->addWhere($g_ado_db->escapeKeyVal('Code', $p_languageCode)); } if (!is_null($p_name)) { $selectClauseObj->addWhere($g_ado_db->escapeKeyVal('Name', $p_name)); } if (count($p_excludedLanguages) > 0) { $excludedLanguages = array(); foreach ($p_excludedLanguages as $excludedLanguage) { $excludedLanguages[] = (int) $excludedLanguage; } $selectClauseObj->addWhere("Id NOT IN (" . implode(', ', $excludedLanguages) . ")"); } $order = Language::ProcessLanguageListOrder($p_order); foreach ($order as $orderDesc) { $selectClauseObj->addOrderBy($orderDesc['field'] . ' ' . $orderDesc['dir']); } $selectClause = $selectClauseObj->buildQuery(); $languages = DbObjectArray::Create('Language', $selectClause); if (!$p_skipCache && CampCache::IsEnabled()) { $cacheListObj->storeInCache($languages); } return $languages; }
/** * Returns an article attachments 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. * @param integer $p_count * The total count of the elements; this count is computed without * applying the start ($p_start) and limit parameters ($p_limit) * * @return array $articleAttachmentsList * An array of Attachment objects */ public static function GetList(array $p_parameters, $p_order = null, $p_start = 0, $p_limit = 0, &$p_count, $p_skipCache = false) { global $g_ado_db; if (!$p_skipCache && CampCache::IsEnabled()) { $paramsArray['parameters'] = serialize($p_parameters); $paramsArray['order'] = is_null($p_order) ? 'null' : $p_order; $paramsArray['start'] = $p_start; $paramsArray['limit'] = $p_limit; $cacheListObj = new CampCacheList($paramsArray, __METHOD__); $articleAttachmentsList = $cacheListObj->fetchFromCache(); if ($articleAttachmentsList !== false && is_array($articleAttachmentsList)) { return $articleAttachmentsList; } } $hasArticleNr = false; $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); // sets the where conditions foreach ($p_parameters as $param) { $comparisonOperation = self::ProcessParameters($param); if (sizeof($comparisonOperation) < 1) { break; } if (strpos($comparisonOperation['left'], 'fk_article_number')) { $whereCondition = $g_ado_db->escapeOperation($comparisonOperation); $hasArticleNr = true; } elseif (strpos($comparisonOperation['left'], 'fk_language_id')) { $whereCondition = '(' . $comparisonOperation['left'] . ' IS NULL OR ' . $comparisonOperation['left'] . " = " . $g_ado_db->escape($comparisonOperation['right']) . ")"; } else { $whereCondition = $g_ado_db->escapeOperation($comparisonOperation); } $selectClauseObj->addWhere($whereCondition); $countClauseObj->addWhere($whereCondition); } // validates whether article number was given if ($hasArticleNr === false) { CampTemplate::singleton()->trigger_error('missed parameter Article ' . 'Number in statement list_article_attachments'); return; } // sets the columns to be fetched $tmpAttachment = new Attachment(); $columnNames = $tmpAttachment->getColumnNames(true); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } $countClauseObj->addColumn('COUNT(*)'); // sets the main table for the query $selectClauseObj->setTable($tmpAttachment->getDbTableName()); $countClauseObj->setTable($tmpAttachment->getDbTableName()); unset($tmpAttachment); // adds the ArticleAttachments join and condition to the query $selectClauseObj->addTableFrom('ArticleAttachments'); $selectClauseObj->addWhere('ArticleAttachments.fk_attachment_id = Attachments.id'); $countClauseObj->addTableFrom('ArticleAttachments'); $countClauseObj->addWhere('ArticleAttachments.fk_attachment_id = Attachments.id'); if (!is_array($p_order)) { $p_order = array(); } // sets the order condition if any foreach ($p_order as $orderColumn => $orderDirection) { $selectClauseObj->addOrderBy($orderColumn . ' ' . $orderDirection); } // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query and executes it $selectQuery = $selectClauseObj->buildQuery(); $attachments = $g_ado_db->GetAll($selectQuery); if (is_array($attachments)) { $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); // builds the array of attachment objects $articleAttachmentsList = array(); foreach ($attachments as $attachment) { $attchObj = new Attachment($attachment['id']); if ($attchObj->exists()) { $articleAttachmentsList[] = $attchObj; } } } else { $articleAttachmentsList = array(); $p_count = 0; } if (!$p_skipCache && CampCache::IsEnabled()) { $cacheListObj->storeInCache($articleAttachmentsList); } return $articleAttachmentsList; }
/** * Performs a search against the given article field using the given * keywords. Returns the list of articles matching the given criteria. * * @param array $p_keywords * @param string $p_fieldName - may be 'title' or 'author' * @param bool $p_matchAll - true if all keyword have to match * @param array $p_constraints * @param array $p_order * @param int $p_start - return results starting from the given order number * @param int $p_limit - return at most $p_limit rows * @param int $p_count - sets $p_count to the total number of rows in the search * @param bool $p_countOnly - if true returns only the total number of rows * @return array */ public static function SearchByField(array $p_keywords, $p_fieldName, $p_matchAll = false, array $p_constraints = array(), array $p_order = array(), $p_start = 0, $p_limit = 0, &$p_count, $p_countOnly = false) { global $g_ado_db; static $searchFields = array( 'title'=>array('table_fields'=>array('Name'), 'table'=>'Articles'), 'author'=>array('table_fields'=>array('first_name', 'last_name'), 'table'=>'ArticleAuthors', 'join_fields'=>array('Number'=>'fk_article_number'))); $fieldName = strtolower($p_fieldName); if (!array_key_exists($fieldName, $searchFields)) { return false; } $selectClauseObj = new SQLSelectClause(); // set tables and joins between tables $selectClauseObj->setTable('Articles'); $joinTable = $searchFields[$fieldName]['table']; if ($joinTable != 'Articles') { $selectClauseObj->addTableFrom($joinTable); foreach ($searchFields[$fieldName]['join_fields'] as $leftJoinField=>$rightJoinField) { $selectClauseObj->addWhere("`Articles`.`$leftJoinField` = " . "`$joinTable`.`$rightJoinField`"); } if ($fieldName == 'author') { $joinTable = 'Authors'; $selectClauseObj->addTableFrom($joinTable); $selectClauseObj->addWhere("`ArticleAuthors`.`fk_author_id` = " . "`$joinTable`.`id`"); } } foreach ($searchFields[$fieldName]['table_fields'] as $matchField) { $matchFields[] = "`$joinTable`.`$matchField`"; } $matchCond = 'MATCH (' . implode(', ', $matchFields) . ") AGAINST ('"; foreach ($p_keywords as $keyword) { $matchCond .= ($p_matchAll ? '+' : '') . $g_ado_db->escape($keyword) . ' '; } $matchCond .= "' IN BOOLEAN MODE)"; $selectClauseObj->addWhere($matchCond); $joinTables = array(); // set other constraints foreach ($p_constraints as $constraint) { $leftOperand = $constraint->getLeftOperand(); $operandAttributes = explode('.', $leftOperand); if (count($operandAttributes) == 2) { $table = trim($operandAttributes[0]); if (strtolower($table) != 'articles') { $joinTables[] = $table; } } $symbol = $constraint->getOperator()->getSymbol('sql'); $rightOperand = "'" . $g_ado_db->escape($constraint->getRightOperand()) . "'"; $selectClauseObj->addWhere("$leftOperand $symbol $rightOperand"); } foreach ($joinTables as $table) { $selectClauseObj->addJoin("LEFT JOIN $table ON Articles.Number = $table.NrArticle"); } // create the count clause object $countClauseObj = clone $selectClauseObj; // set the columns for the select clause $selectClauseObj->addColumn('Articles.Number'); $selectClauseObj->addColumn('Articles.IdLanguage'); $selectClauseObj->addColumn($matchCond . ' AS score'); // set the order for the select clause $p_order = count($p_order) > 0 ? $p_order : Article::$s_defaultOrder; $order = Article::ProcessListOrder($p_order); $selectClauseObj->addOrderBy('score DESC'); foreach ($order as $orderDesc) { $orderField = $orderDesc['field']; $orderDirection = $orderDesc['dir']; $selectClauseObj->addOrderBy($orderField . ' ' . $orderDirection); } // sets the LIMIT start and offset values $selectClauseObj->setLimit($p_start, $p_limit); // set the column for the count clause $countClauseObj->addColumn('COUNT(*)'); $articlesList = array(); if (!$p_countOnly) { $selectQuery = $selectClauseObj->buildQuery(); $articles = $g_ado_db->GetAll($selectQuery); foreach ($articles as $article) { $articlesList[] = new Article($article['IdLanguage'], $article['Number']); } } $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); return $articlesList; }
/** * Returns map locations list based on the given parameters. * * @param array $p_parameters * An array of ComparionOperation objects * @param array $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 of IGeoMapLocation */ public static function GetList(array $p_parameters, array $p_order = array(), $p_start = 0, $p_limit = 0, &$p_count, $p_skipCache = false) { global $g_ado_db; $list_spec = array('params' => $p_parameters, 'order' => $p_order, 'start' => $p_start, 'limit' => $p_limit, 'skip_cache' => $p_skipCache); $list_spec_str = serialize($list_spec); if (!$p_skipCache && !empty(self::$s_found_maplocations_list) && isset(self::$s_found_maplocations_list[$list_spec_str])) { $list_res_data = self::$s_found_maplocations_list[$list_spec_str]; $p_count = $list_res_data['count']; $list = $list_res_data['list']; return $list; } $selectClauseObj = new SQLSelectClause(); $countClauseObj = new SQLSelectClause(); // set columns $tmpMapLoc = new self(NULL); $tmpLoc = new Geo_Location(NULL); $columnNames = array_merge($tmpMapLoc->getColumnNames(true), array_diff($tmpLoc->getColumnNames(true), array('Locations.id'))); foreach ($columnNames as $columnName) { $selectClauseObj->addColumn($columnName); } $selectClauseObj->addColumn('X(poi_location) as latitude'); $selectClauseObj->addColumn('Y(poi_location) as longitude'); $countClauseObj->addColumn('COUNT(*)'); // sets the base table $selectClauseObj->setTable($tmpMapLoc->getDbTableName()); $selectClauseObj->addJoin(sprintf('INNER JOIN `%s` ON fk_location_id = %s.id', $tmpLoc->getDbTableName(), $tmpLoc->getDbTableName())); $countClauseObj->setTable($tmpMapLoc->getDbTableName()); unset($tmpMapLoc); unset($tmpLoc); // process params foreach ($p_parameters as $param) { switch ($param->getLeftOperand()) { case 'article': $searchQuery = sprintf('fk_map_id IN (SELECT id FROM %s WHERE fk_article_number = %d)', Geo_Map::TABLE, $param->getRightOperand()); $selectClauseObj->addWhere($searchQuery); $countClauseObj->addWhere($searchQuery); break; } } // set order by rank and id $selectClauseObj->addOrderBy(self::TABLE . '.rank'); $selectClauseObj->addOrderBy(self::TABLE . '.id'); // sets the limit $selectClauseObj->setLimit($p_start, $p_limit); // builds the query and executes it $selectQuery = $selectClauseObj->buildQuery(); $rows = $g_ado_db->GetAll($selectQuery); $list = array(); $p_count = 0; if (is_array($rows)) { $countQuery = $countClauseObj->buildQuery(); $p_count = $g_ado_db->GetOne($countQuery); foreach ($rows as $row) { $map_loc = new self((array) $row, true); $row['id'] = $row['fk_location_id']; $map_loc->location = new Geo_Location($row, true); $list[] = $map_loc; } } if (empty(self::$s_found_maplocations_list)) { self::$s_found_maplocations_list = array(); } self::$s_found_maplocations_list[$list_spec_str] = array('count' => $p_count, 'list' => $list); return $list; }