/** * * @return nc_search_data_persistent */ public function save() { $this->set('timestamp', nc_search_util::sql_datetime()); return parent::save(); }
$order_by = "`Timestamp` DESC"; } elseif ($sort_by == 'query') { $order_by = "`QueryString` ASC"; } $where = array(1); if (strlen($this->get_input('fragment'))) { $where[] = "`QueryString` LIKE '%" . nc_search_util::db_escape($this->get_input('fragment')) . "%'"; } // если установлен день или час, считать, что речь идёт о текущем дне/месяце/годе $from_today = $this->get_input('datetime_from_d') || $this->get_input('datetime_from_H'); $timestamp_from = call_user_func_array('mktime', array((int) $this->get_input('datetime_from_H', 0), (int) $this->get_input('datetime_from_M', 0), 0, (int) $this->get_input('datetime_from_m', $from_today ? date("m") : 1), (int) $this->get_input('datetime_from_d', $from_today ? date("d") : 1), (int) $this->get_input('datetime_from_Y', $from_today ? date("Y") : 2000))); // если установлен день или час, считать, что речь идёт о текущем дне/месяце/годе $to_today = $this->get_input('datetime_to_d') || $this->get_input('datetime_to_H'); $timestamp_to = call_user_func_array('mktime', array((int) $this->get_input('datetime_to_H', 23), (int) $this->get_input('datetime_to_M', 59), 59, (int) $this->get_input('datetime_to_m', $to_today ? date("m") : 12), (int) $this->get_input('datetime_to_d', $to_today ? date("d") : 31), (int) $this->get_input('datetime_to_Y', $to_today ? date("Y") : 2037))); $sql_datetime_from = nc_search_util::sql_datetime($timestamp_from); $sql_datetime_to = nc_search_util::sql_datetime($timestamp_to); if ($sql_datetime_from != '2000-01-01 00:00:00' || $sql_datetime_to != '2037-12-31 23:59:59') { $where[] = "`Timestamp` BETWEEN '{$sql_datetime_from}' AND '{$sql_datetime_to}'"; } if ($results == 'none') { $where[] = '`ResultsCount` = 0'; } elseif ($results == 'matched') { $where[] = '`ResultsCount` > 0'; } $where = join(" AND ", $where); $offset = (int) $this->get_input('offset'); $query = "SELECT `latest`.`Timestamp`,\n `latest`.`QueryString`,\n `latest`.`ResultsCount`,\n `latest`.`IP`,\n `latest`.`User_ID`,\n `q`.`QueryCount`,\n `u`.`Login`\n FROM (SELECT MAX(`Query_ID`) AS `Query_ID`,\n COUNT(`Query_ID`) AS `QueryCount`\n FROM `Search_Query`\n WHERE {$where}\n GROUP BY `QueryString`\n ORDER BY {$order_by}\n LIMIT {$per_page} OFFSET {$offset}) AS `q`\n JOIN `Search_Query` AS `latest` ON (`q`.`Query_ID` = `latest`.`Query_ID`)\n LEFT JOIN `User` AS `u` ON (`latest`.`User_ID` = `u`.`User_ID`)"; $res = $this->get_db()->get_results($query, ARRAY_A); if ($res) { $found_rows = $this->get_db()->get_var("SELECT COUNT(DISTINCT(`QueryString`))\n FROM `Search_Query`\n WHERE {$where}"); // строка с вариантами сортировки
/** * */ public static function purge_log() { $days_to_keep = self::get_setting('DaysToKeepEventLog'); $time = nc_search_util::sql_datetime(strtotime("-{$days_to_keep} days")); nc_Core::get_object()->db->query("DELETE FROM `Search_Log` WHERE `Timestamp` < '{$time}'"); }