/** * Добавляет уведомления по 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); } }