4 * SearchableObjects, generated on Tue, 13 Jun 2006 12:15:44 +0200 by
5 * DataObject generation tool
7 * @http://www.projectpier.org/
9 class SearchableObjects
extends BaseSearchableObjects
{
12 * Search for specific search string ($search_for) in specific project
14 * @param string $search_for Search string
15 * @param Project $project Search in this project
16 * @param boolean $include_private
19 static function search($search_for, Project
$project, $include_private = false) {
20 return SearchableObjects
::doSearch(SearchableObjects
::getSearchConditions($search_for, $project, $include_private));
26 * @param string $search_for Search string
27 * @param Project $project Search in this project
28 * @param boolean $include_private
29 * @param integer $items_per_page
30 * @param integer $current_page
33 static function searchPaginated($search_for, Project
$project, $include_private = false, $items_per_page = 10, $current_page = 1) {
34 $conditions = SearchableObjects
::getSearchConditions($search_for, $project, $include_private);
35 $pagination = new DataPagination(SearchableObjects
::countUniqueObjects($conditions), $items_per_page, $current_page);
37 $items = SearchableObjects
::doSearch($conditions, $pagination->getItemsPerPage(), $pagination->getLimitStart());
38 return array($items, $pagination);
42 * Prepare search conditions string based on input params
44 * @param string $search_for Search string
45 * @param Project $project Search in this project
48 function getSearchConditions($search_for, Project
$project, $include_private = false) {
49 if($include_private) {
50 return DB
::prepareString('MATCH (`content`) AGAINST (? IN BOOLEAN MODE) AND `project_id` = ?', array($search_for, $project->getId()));
52 return DB
::prepareString('MATCH (`content`) AGAINST (? IN BOOLEAN MODE) AND `project_id` = ? AND `is_private` = ?', array($search_for, $project->getId(), false));
54 } // getSearchConditions
59 * @param string $conditions
60 * @param integer $limit
61 * @param integer $offset
64 function doSearch($conditions, $limit = null, $offset = null) {
65 $table_name = SearchableObjects
::instance()->getTableName(true);
68 if((integer) $limit > 0) {
69 $offset = (integer) $offset > 0 ?
(integer) $offset : 0;
70 $limit_string = " LIMIT $offset, $limit";
74 if(trim($conditions) <> '') $where = "WHERE $conditions";
76 $sql = "SELECT `rel_object_manager`, `rel_object_id` FROM $table_name $where $limit_string";
77 $result = DB
::executeAll($sql);
79 if(!is_array($result)) return null;
83 foreach($result as $row) {
84 $manager_class = array_var($row, 'rel_object_manager');
85 $object_id = array_var($row, 'rel_object_id');
87 if(!isset($loaded[$manager_class . '-' . $object_id]) ||
!($loaded[$manager_class . '-' . $object_id])) {
88 if(class_exists($manager_class)) {
89 $object = get_object_by_manager_and_id($object_id, $manager_class);
90 if($object instanceof ProjectDataObject
) {
91 $loaded[$manager_class . '-' . $object_id] = true;
98 return count($objects) ?
$objects : null;
102 * Return number of unique objects
104 * @param string $conditions
107 function countUniqueObjects($conditions) {
108 $table_name = SearchableObjects
::instance()->getTableName(true);
110 if(trim($conditions <> '')) $where = "WHERE $conditions";
112 $sql = "SELECT `rel_object_manager`, `rel_object_id` FROM $table_name $where";
113 $result = DB
::executeAll($sql);
114 if(!is_array($result) ||
!count($result)) return 0;
118 foreach($result as $row) {
119 if(!isset($counted[array_var($row, 'rel_object_manager') . array_var($row, 'rel_object_id')])) {
120 $counted[array_var($row, 'rel_object_manager') . array_var($row, 'rel_object_id')] = true;
126 } // countUniqueObjects
129 * Drop all content from table related to $object
131 * @param ProjectDataObject $object
134 static function dropContentByObject(ProjectDataObject
$object) {
135 return SearchableObjects
::delete(array('`rel_object_manager` = ? AND `rel_object_id` = ?', get_class($object->manager()), $object->getObjectId()));
136 } // dropContentByObject
138 } // SearchableObjects