Example #1
0
 /**
  * Добавляет уведомления по sql выражению в типе уведомления
  */
 public function addNotifierEventsByQuery()
 {
     //Получаем все типы событий
     $notifierEventTypes = NotifierEventType::model()->findAll(array('order' => 'id_mail_account'));
     $c = count($notifierEventTypes);
     for ($i = 0; $i < $c; $i++) {
         $curType = $notifierEventTypes[$i];
         if ($curType->interval_value != null) {
             //Если таймаут со времени последнего выполнения не прошел, то пропускаем
             if (!$curType->getTimeoutIsExpired()) {
                 continue;
             }
             $curType->updateLastTime();
         }
         $selectSql = trim($curType->selectQuery);
         if (empty($selectSql)) {
             continue;
         }
         //События добавляются вручную
         $needCache = NotifierEvent::getCacheSubscribersEmails();
         NotifierEvent::setCacheSubscribersEmails(true);
         //Заставляем кешировать результаты выборки подписчиков
         //Должны получить id_instance
         $dataReader = Yii::app()->db->createCommand($selectSql)->query();
         foreach ($dataReader as $row) {
             $idInstance = $row['id_instance'];
             $notifierEvent = new NotifierEvent();
             $notifierEvent->id_event_type = $curType->id_event_type;
             $notifierEvent->id_instance = $idInstance;
             $notifierEvent->save();
             $updateSql = trim($curType->doneQuery);
             if (empty($updateSql)) {
                 continue;
             }
             //Отмечаем добавленные экземпляры
             Yii::app()->db->createCommand(strtr($updateSql, array('<<id_instance>>' => $idInstance)))->execute();
         }
         $dataReader->close();
         NotifierEvent::setCacheSubscribersEmails($needCache);
     }
 }