first import
[projectpier.git] / application / models / searchable_objects / base / BaseSearchableObjects.class.php
blob4fab628890fcfb5bed427a6c8639765b2a2c3f3b
1 <?php
4 /**
5 * SearchableObjects class
7 * @http://www.projectpier.org/
8 */
9 abstract class BaseSearchableObjects extends DataManager {
11 /**
12 * Column name => Column type map
14 * @var array
15 * @static
17 static private $columns = array('rel_object_manager' => DATA_TYPE_STRING, 'rel_object_id' => DATA_TYPE_INTEGER, 'column_name' => DATA_TYPE_STRING, 'content' => DATA_TYPE_STRING, 'project_id' => DATA_TYPE_INTEGER, 'is_private' => DATA_TYPE_BOOLEAN);
19 /**
20 * Construct
22 * @return BaseSearchableObjects
24 function __construct() {
25 parent::__construct('SearchableObject', 'searchable_objects', true);
26 } // __construct
28 // -------------------------------------------------------
29 // Description methods
30 // -------------------------------------------------------
32 /**
33 * Return array of object columns
35 * @access public
36 * @param void
37 * @return array
39 function getColumns() {
40 return array_keys(self::$columns);
41 } // getColumns
43 /**
44 * Return column type
46 * @access public
47 * @param string $column_name
48 * @return string
50 function getColumnType($column_name) {
51 if(isset(self::$columns[$column_name])) {
52 return self::$columns[$column_name];
53 } else {
54 return DATA_TYPE_STRING;
55 } // if
56 } // getColumnType
58 /**
59 * Return array of PK columns. If only one column is PK returns its name as string
61 * @access public
62 * @param void
63 * @return array or string
65 function getPkColumns() {
66 return array (
67 0 => 'rel_object_manager',
68 1 => 'rel_object_id',
69 2 => 'column_name',
71 } // getPkColumns
73 /**
74 * Return name of first auto_incremenent column if it exists
76 * @access public
77 * @param void
78 * @return string
80 function getAutoIncrementColumn() {
81 return NULL;
82 } // getAutoIncrementColumn
84 // -------------------------------------------------------
85 // Finders
86 // -------------------------------------------------------
88 /**
89 * Do a SELECT query over database with specified arguments
91 * @access public
92 * @param array $arguments Array of query arguments. Fields:
94 * - one - select first row
95 * - conditions - additional conditions
96 * - order - order by string
97 * - offset - limit offset, valid only if limit is present
98 * - limit
100 * @return one or SearchableObjects objects
101 * @throws DBQueryError
103 function find($arguments = null) {
104 if(isset($this) && instance_of($this, 'SearchableObjects')) {
105 return parent::find($arguments);
106 } else {
107 return SearchableObjects::instance()->find($arguments);
108 //$instance =& SearchableObjects::instance();
109 //return $instance->find($arguments);
110 } // if
111 } // find
114 * Find all records
116 * @access public
117 * @param array $arguments
118 * @return one or SearchableObjects objects
120 function findAll($arguments = null) {
121 if(isset($this) && instance_of($this, 'SearchableObjects')) {
122 return parent::findAll($arguments);
123 } else {
124 return SearchableObjects::instance()->findAll($arguments);
125 //$instance =& SearchableObjects::instance();
126 //return $instance->findAll($arguments);
127 } // if
128 } // findAll
131 * Find one specific record
133 * @access public
134 * @param array $arguments
135 * @return SearchableObject
137 function findOne($arguments = null) {
138 if(isset($this) && instance_of($this, 'SearchableObjects')) {
139 return parent::findOne($arguments);
140 } else {
141 return SearchableObjects::instance()->findOne($arguments);
142 //$instance =& SearchableObjects::instance();
143 //return $instance->findOne($arguments);
144 } // if
145 } // findOne
148 * Return object by its PK value
150 * @access public
151 * @param mixed $id
152 * @param boolean $force_reload If true cache will be skipped and data will be loaded from database
153 * @return SearchableObject
155 function findById($id, $force_reload = false) {
156 if(isset($this) && instance_of($this, 'SearchableObjects')) {
157 return parent::findById($id, $force_reload);
158 } else {
159 return SearchableObjects::instance()->findById($id, $force_reload);
160 //$instance =& SearchableObjects::instance();
161 //return $instance->findById($id, $force_reload);
162 } // if
163 } // findById
166 * Return number of rows in this table
168 * @access public
169 * @param string $conditions Query conditions
170 * @return integer
172 function count($condition = null) {
173 if(isset($this) && instance_of($this, 'SearchableObjects')) {
174 return parent::count($condition);
175 } else {
176 return SearchableObjects::instance()->count($condition);
177 //$instance =& SearchableObjects::instance();
178 //return $instance->count($condition);
179 } // if
180 } // count
183 * Delete rows that match specific conditions. If $conditions is NULL all rows from table will be deleted
185 * @access public
186 * @param string $conditions Query conditions
187 * @return boolean
189 function delete($condition = null) {
190 if(isset($this) && instance_of($this, 'SearchableObjects')) {
191 return parent::delete($condition);
192 } else {
193 return SearchableObjects::instance()->delete($condition);
194 //$instance =& SearchableObjects::instance();
195 //return $instance->delete($condition);
196 } // if
197 } // delete
200 * This function will return paginated result. Result is an array where first element is
201 * array of returned object and second populated pagination object that can be used for
202 * obtaining and rendering pagination data using various helpers.
204 * Items and pagination array vars are indexed with 0 for items and 1 for pagination
205 * because you can't use associative indexing with list() construct
207 * @access public
208 * @param array $arguments Query argumens (@see find()) Limit and offset are ignored!
209 * @param integer $items_per_page Number of items per page
210 * @param integer $current_page Current page number
211 * @return array
213 function paginate($arguments = null, $items_per_page = 10, $current_page = 1) {
214 if(isset($this) && instance_of($this, 'SearchableObjects')) {
215 return parent::paginate($arguments, $items_per_page, $current_page);
216 } else {
217 return SearchableObjects::instance()->paginate($arguments, $items_per_page, $current_page);
218 //$instance =& SearchableObjects::instance();
219 //return $instance->paginate($arguments, $items_per_page, $current_page);
220 } // if
221 } // paginate
224 * Return manager instance
226 * @return SearchableObjects
228 function instance() {
229 static $instance;
230 if(!instance_of($instance, 'SearchableObjects')) {
231 $instance = new SearchableObjects();
232 } // if
233 return $instance;
234 } // instance
236 } // SearchableObjects