/**
  * Для совместимости со старым кодом. Все записи
  *
  * @return array
  */
 public function getItems()
 {
     // если запрос еще не выполнялся - выполним его
     if (!is_null($this->getQuery())) {
         $transaction = new CTransaction();
         $res = $this->getQuery()->execute();
         $transaction->commit();
         foreach ($res->getItems() as $item) {
             $ar = new CActiveRecord($item);
             $ar->setTable($this->getQuery()->getTable());
             $this->getItemsCache()->add($ar->getId(), $ar);
         }
     }
     return $this->getItemsCache()->getItems();
 }
 /**
  * Сохранение данных
  * Этот метод только POST-овый
  */
 private function actionJSONSave()
 {
     // получи название класса модели, которую надо использовать
     $modelClass = CRequest::getString("model");
     // создадим объект, посмотрим, в какой таблице он живет
     /**
      * @var $model CActiveModel
      */
     $model = new $modelClass();
     // проверим, может не реализует нужный интерфейс
     if (!is_a($model, "IJSONSerializable")) {
         throw new Exception("Класс " . $modelClass . " не реализует интерфейс IJSONSerializable");
     }
     $rest_json = file_get_contents("php://input");
     // пусть будет транзакционным по умолчанию
     $transaction = new CTransaction();
     $model->updateWithJsonString($rest_json);
     $model->save();
     $transaction->commit();
     // вернем модель после сохранения
     $_GET["model"] = $modelClass;
     $_GET["id"] = $model->getId();
     $this->actionJSONGet();
 }
 public function actionSaveMembers()
 {
     $aclItems = CRequest::getArray("members");
     $group = new CUserGroup();
     $group->setAttributes(CRequest::getArray($group::getClassName()));
     // удаляем все старые записи и создаем новые
     $transaction = new CTransaction();
     foreach ($group->getACLRelations()->getItems() as $item) {
         $item->remove();
     }
     // создаем новый записи
     foreach ($aclItems["id"] as $key => $value) {
         $entry = new CACLGroupEntry();
         $entry->group_id = $group->getId();
         $entry->setType($aclItems["type"][$key]);
         $entry->setValue($value);
         $entry->save();
     }
     $transaction->commit();
     $this->redirect("?action=index");
 }
 /**
  * Обслуживание таблиц доступа. Выполняется обновление читателей
  * и редакторов в соответствии со значениями по умолчанию
  */
 public function actionService()
 {
     $start = CRequest::getInt("start");
     $table = CACLManager::getACLTable(CRequest::getInt("id"));
     // будем работать простыми запросами чтобы память не заканчивалась и все не падало
     $transaction = new CTransaction();
     $res = mysql_query("SELECT * FROM " . $table->table . " LIMIT " . $start . ", " . ($start + 1000)) or die(mysql_error());
     if (mysql_num_rows($res) == 0) {
         $this->redirect("?action=index");
     }
     while ($row = mysql_fetch_assoc($res)) {
         $ar = new CActiveRecord($row);
         $model = new CActiveModel($ar);
         $model->getRecord()->setTable($table->table);
         $model->setReaders($table->getDefaultReaders());
         $model->setAuthors($table->getDefaultAuthors());
         $model->saveACLEntries();
     }
     $table->last_service = time();
     $table->save();
     $transaction->commit();
     echo "Processing...";
     echo '
     <script>
         window.location.href="' . WEB_ROOT . '_modules/_acl_manager/tables.php?action=service&id=' . $table->getId() . '&start=' . ($start + 1000) . '";
     </script>
     ';
 }
 /**
  * Удаление текущей записи из БД
  */
 public function remove()
 {
     /**
      * Перед удалением объекта выполним валидаторы onDelete для модели
      */
     $valid = $this->validateModel(VALIDATION_EVENT_REMOVE);
     if (!$valid) {
         $controller = CSession::getCurrentController();
         if (!is_null($controller)) {
             $url = WEB_ROOT;
             if (array_key_exists("HTTP_REFERER", $_SERVER)) {
                 $url = $_SERVER["HTTP_REFERER"];
             }
             $controller->redirect($url, $this->getValidationErrors());
         }
     }
     $transaction = new CTransaction();
     try {
         $this->getRecord()->remove();
     } catch (Exception $e) {
         $transaction->rollback();
         throw new Exception($e);
     }
     $transaction->commit();
 }