/** * Для совместимости со старым кодом. Все записи * * @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(); }