示例#1
0
文件: Nested.php 项目: Konro1/pms
 /**
  * $builder->root() select only the root items
  *
  * @param Jam_Builder    $builder
  * @param Jam_Event_Data $data
  * @return Jam_Builder
  */
 public function builder_call_root(Database_Query $builder, Jam_Event_Data $data, $is_root = TRUE)
 {
     if ($is_root) {
         $data->return = $builder->where_open()->where($this->_field, '=', 0)->or_where($this->_field, 'IS', NULL)->where_close();
     } else {
         $data->return = $builder->where($this->_field, '!=', 0)->where($this->_field, 'IS NOT', NULL);
     }
     $data->stop = TRUE;
 }
示例#2
0
 /**
  * 
  * @param string $keyword
  * @param boolean $only_title
  * @param string $modules
  * @param integer $limit
  * @param integer $offset
  * @param boolean $fulltextsearch
  * @return Database_Query
  */
 protected function _get_query(Database_Query $query, $keyword, $only_title = FALSE, $modules = NULL, $limit = 50, $offset = 0)
 {
     $keyword = $this->stem_query($keyword);
     if ($limit !== NULL) {
         $query->limit((int) $limit)->offset($offset);
     }
     if (is_array($modules)) {
         $query->where('search_index.module', 'in', $modules);
     } elseif ($modules !== NULL) {
         $query->where('search_index.module', '=', $modules);
     }
     if ($this->config('full_text_search') === TRUE) {
         $query->where(DB::expr('MATCH(`search_index`.`header`, `search_index`.`content`)'), 'AGAINST', DB::expr("('" . self::match_against_query($keyword) . "' IN BOOLEAN MODE)"));
     } else {
         $words = explode(' ', $keyword);
         $query->where_open();
         $query->where_open();
         foreach ($words as $word) {
             if (!empty($word)) {
                 $query->where('search_index.header', 'like', '%' . $word . '%');
             }
         }
         $query->where_close();
         if ($only_title === FALSE) {
             $query->or_where_open();
             foreach ($words as $word) {
                 if (!empty($word)) {
                     $query->where('search_index.content', 'like', '%' . $word . '%');
                 }
             }
             $query->where_close();
         }
         $query->where_close();
     }
     return $query;
 }
示例#3
0
 /**
  * Метод используется для поиска по документам по ключевому слову.
  * 
  * Ключевое слово передается в качестве $_GET запроса с ключем "keyword"
  * 
  * @param Database_Query $query
  * @return Database_Query
  */
 public function search_by_keyword(Database_Query $query)
 {
     $keyword = Request::initial()->query('keyword');
     if (empty($keyword)) {
         return $query;
     }
     if ($this->_section->is_indexable()) {
         $ids = Search::instance()->find_by_keyword($keyword, FALSE, 'ds_' . $this->_section->id(), NULL);
         $ids = Arr::get($ids, 'ds_' . $this->_section->id());
         if (!empty($ids)) {
             $query->where('d.id', 'in', array_keys($ids));
         } else {
             $query->where('d.id', '=', 0);
         }
     } else {
         $query->where_open()->where('d.id', 'like', '%' . $keyword . '%')->or_where('d.header', 'like', '%' . $keyword . '%')->where_close();
     }
     return $query;
 }
示例#4
0
 public function search_by_keyword(Database_Query $query)
 {
     $keyword = Request::initial()->query('search');
     if (is_array($keyword)) {
         $fields = array();
         foreach ($keyword as $field => $value) {
             if (in_array($field, $this->fields())) {
                 continue;
             }
             $fields[$field] = $value;
         }
         if (!empty($fields)) {
             $query->where_open();
             foreach ($fields as $field => $value) {
                 $field = Arr::get($this->fields(), $field);
                 $query->and_where(Arr::get($field, 'db_name'), 'like', '%' . $value . '%');
             }
             return $query->where_close();
         }
         return $query;
     } else {
         if (empty($keyword)) {
             return $query;
         }
     }
     $query->where_open()->or_where('d.id', 'like', '%' . $keyword . '%')->or_where('d.header', 'like', '%' . $keyword . '%');
     foreach ($this->fields() as $field) {
         if (Arr::get($field, 'searchable') === FALSE or Arr::get($field, 'db_name') === NULL) {
             continue;
         }
         $query->or_where(Arr::get($field, 'db_name'), 'like', '%' . $keyword . '%');
     }
     return $query->where_close();
 }