Exemple #1
0
 /**
  * Запланировать запуск переиндексирования области или правила в указанное время
  * @param string $area_string
  * @param integer $timestamp
  */
 public static function schedule_indexing($area_string, $timestamp)
 {
     // Если данная область уже поставлена в очередь на более раннее или ближайшее
     // время, не нужно добавлять ещё раз
     $interval = $timestamp + nc_search::get_setting('MinScheduleInterval');
     $intent = nc_search::load('nc_search_scheduler_intent', "SELECT * FROM `%t%`" . " WHERE `StartTime` <= {$interval}" . "   AND `AreaString` = '" . nc_search_util::db_escape($area_string) . "'")->first();
     // type is ignored
     if ($intent) {
         // уже есть такое расписание!
         if ($intent->get('start_time') > $timestamp) {
             $intent->set('start_time', $timestamp);
             // let's run it sooner
         }
     } else {
         $intent = new nc_search_scheduler_intent(array('start_time' => $timestamp, 'type' => nc_search_scheduler_intent::ON_REQUEST, 'area_string' => $area_string));
     }
     $intent->save();
 }
Exemple #2
0
 /**
  * @return nc_search_rule self
  */
 public function schedule_next_run()
 {
     $type_scheduled = nc_search_scheduler_intent::SCHEDULED;
     $interval_type = $this->get('interval_type');
     $intent = new nc_search_scheduler_intent();
     // remove old scheduled intents
     $where = $intent->make_condition('area_string', $this->get_id(), 'type', $type_scheduled);
     nc_db()->query("DELETE FROM `{$intent->get_table_name()}` WHERE {$where}");
     if ($interval_type != 'on_request') {
         $interval = $this->get('interval');
         if ($interval_type == 'day_of_month') {
             $next_scheduled_time = $this->get_day_of_month_future_timestamp($interval, $this->get('hour'), $this->get('minute'));
         } else {
             // 'minute', 'hour', 'day'
             // hour, minute содержат время начала применения правила
             $start_timestamp = mktime($this->get('hour'), $this->get('minute'), 0);
             $next_scheduled_time = $this->get_interval_future_timestamp($start_timestamp, "{$interval} {$interval_type}");
         }
         $intent->set('start_time', $next_scheduled_time)->set('type', nc_search_scheduler_intent::SCHEDULED)->set('area_string', $this->get_id())->save();
     }
     return $this;
 }