/**
 * Return number of unique objects
 *
 * @param string $conditions
 * @return integer
 */
 function countUniqueObjects($conditions) {
   $table_name = SearchableObjects::instance()->getTableName(true);
   //$tags_table_name = Tags::instance()->getTableName();
   $where = '';
   if(trim($conditions <> '')) $where = "WHERE $conditions";
   
   $sql = "SELECT count(distinct `rel_object_manager`, `rel_object_id`) AS `count` FROM $table_name $where";
   $result = DB::executeAll($sql);
   if (!is_array($result) || !count($result)) return 0;
   
   return $result[0]['count'];
 } // countUniqueObjects
 /**
  * Return manager instance
  *
  * @access protected
  * @param void
  * @return SearchableObjects 
  */
 function manager()
 {
     if (!$this->manager instanceof SearchableObjects) {
         $this->manager = SearchableObjects::instance();
     }
     return $this->manager;
 }
 /**
 * Return manager instance
 *
 * @access protected
 * @param void
 * @return SearchableObjects 
 */
 function manager() {
   if(!($this->manager instanceof SearchableObjects)) $this->manager = SearchableObjects::instance();
   return $this->manager;
 } // manager
 /**
  * Return number of unique objects
  *
  * @param string $conditions
  * @return integer
  */
 function countUniqueObjects($conditions)
 {
     $table_name = SearchableObjects::instance()->getTableName(true);
     $where = '';
     if (trim($conditions != '')) {
         $where = "WHERE {$conditions}";
     }
     $sql = "SELECT `rel_object_manager`, `rel_object_id` FROM {$table_name} {$where}";
     $result = DB::executeAll($sql);
     if (!is_array($result) || !count($result)) {
         return 0;
     }
     $counted = array();
     $counter = 0;
     foreach ($result as $row) {
         if (!isset($counted[array_var($row, 'rel_object_manager') . array_var($row, 'rel_object_id')])) {
             $counted[array_var($row, 'rel_object_manager') . array_var($row, 'rel_object_id')] = true;
             $counter++;
         }
         // if
     }
     // foreach
     return $counter;
 }
 /**
  * This function will return paginated result. Result is an array where first element is 
  * array of returned object and second populated pagination object that can be used for 
  * obtaining and rendering pagination data using various helpers.
  * 
  * Items and pagination array vars are indexed with 0 for items and 1 for pagination
  * because you can't use associative indexing with list() construct
  *
  * @access public
  * @param array $arguments Query argumens (@see find()) Limit and offset are ignored!
  * @param integer $items_per_page Number of items per page
  * @param integer $current_page Current page number
  * @return array
  */
 function paginate($arguments = null, $items_per_page = 10, $current_page = 1)
 {
     if (isset($this) && instance_of($this, 'SearchableObjects')) {
         return parent::paginate($arguments, $items_per_page, $current_page);
     } else {
         return SearchableObjects::instance()->paginate($arguments, $items_per_page, $current_page);
         //$instance =& SearchableObjects::instance();
         //return $instance->paginate($arguments, $items_per_page, $current_page);
     }
     // if
 }