예제 #1
0
 public function actionIndex()
 {
     $C = new CDbCriteria(array("condition" => "t.topics BETWEEN 80 AND 89 AND book.ac_read = 'a'", "order" => "t.cdate desc"));
     $filter = new SearchFilter("announces");
     $filter->setAttributes($_GET, true);
     if ($filter->validate()) {
         if ($filter->cat) {
             $n = count($filter->category->mp);
             $C->addCondition("cat.mp[1:{$n}] = '{" . join(",", $filter->category->mp) . "}'");
         }
         if ($filter->s_lang != 0) {
             $C->addCondition("book.s_lang = {$filter->s_lang}");
         }
         if ($filter->t_lang != 0) {
             $C->addCondition("book.t_lang = {$filter->t_lang}");
         }
         if ($filter->ready == 1) {
             $C->addCondition("book.n_verses != 0 AND book.d_vars >= book.n_verses");
         } elseif ($filter->ready == 2) {
             $C->addCondition("book.n_verses != 0 AND book.d_vars < book.n_verses");
         } elseif ($filter->ready == 3) {
             $C->addCondition("book.n_vars != 0 AND book.d_vars < book.n_verses");
         }
         if ($filter->gen) {
             $C->addCondition("book.ac_read = 'a' AND book.ac_gen = 'a'");
         }
         if ($filter->tr) {
             $C->addCondition("book.ac_tr = 'a'");
         }
         if ($filter->topic) {
             $C->addCondition("t.topics = '{$filter->topic}'");
         }
     }
     $dp = new CActiveDataProvider(Announce::model()->with("book.cat", "book.owner", "seen"), array("criteria" => $C, "pagination" => array("pageSize" => 20)));
     $this->side_view = array("index_side" => array("filter" => $filter));
     $this->render("index", array("dp" => $dp));
 }
예제 #2
0
 public function actionIndex()
 {
     $filter = new SearchFilter("search");
     // Критерий с условиями поиска
     $C = new CDbCriteria();
     $C->with = array("owner", "cat");
     $filter->setAttributes($_GET, true);
     if ($filter->validate()) {
         if ($_GET["from"] == "header" && mb_substr($filter->t, 0, 1) == "@") {
             $this->redirect("/users/go?login="******"/", "", $filter->t);
         if ($filter->t != "") {
             $words = explode(" ", $filter->t);
             $words_cnt = 0;
             foreach ($words as $i => $w) {
                 $w = trim($w);
                 if (mb_strlen($w) <= 2) {
                     continue;
                 }
                 $param = "word_" . $i;
                 $w = pg_escape_string($w);
                 $C->addCondition("s_title ILIKE :{$param} OR t_title ILIKE :{$param}");
                 $C->params[$param] = '%' . $w . '%';
                 $words_cnt++;
             }
             if ($words_cnt == 0) {
                 $filter->t = "";
             }
         }
         if ($filter->cat) {
             $n = count($filter->category->mp);
             $C->addCondition("cat.mp[1:{$n}] = '{" . join(",", $filter->category->mp) . "}'");
         }
         if ($filter->s_lang != 0) {
             $C->addCondition("s_lang = {$filter->s_lang}");
         }
         if ($filter->t_lang != 0) {
             $C->addCondition("t_lang = {$filter->t_lang}");
         }
         if ($filter->ready) {
             $C->addCondition("t.n_verses != 0 AND t.d_vars >= t.n_verses");
         }
         if ($filter->gen) {
             $C->addCondition("t.ac_read = 'a' AND t.ac_gen = 'a'");
         }
         if ($filter->tr) {
             $C->addCondition("ac_tr = 'a'");
         }
     }
     $C->order = SearchFilter::$sortSQL[$filter->sort];
     $dp = new CActiveDataProvider(Book::model()->with("owner"), array("criteria" => $C, "pagination" => array("pageSize" => 50)));
     if ($filter->doSearch) {
         $dp->totalItemCount = Yii::app()->db->createCommand("SELECT COUNT(*) FROM books t LEFT JOIN catalog cat ON t.cat_id = cat.id WHERE {$C->condition}")->queryScalar($C->params);
         // Пишем в логи
         if ($dp->totalItemCount > 0 && $_GET["from"] != "stop" && $filter->t != "") {
             Yii::app()->db->createCommand("INSERT INTO search_history (ip, request) VALUES (:ip, :request)")->execute(array(":ip" => $_SERVER["HTTP_X_REAL_IP"] ? $_SERVER["HTTP_X_REAL_IP"] : $_SERVER["REMOTE_ADDR"], ":request" => $filter->t));
         }
     }
     $this->side_view = array("index_side" => array("filter" => $filter));
     $this->render("index", array("filter" => $filter, "dp" => $dp));
 }