public function actionEdit($book_id, $chap_id, $orig_id) { $ajax = $_POST["ajax"] || $_GET["ajax"]; $chap = $this->loadChapter($book_id, $chap_id); if (!$chap->book->can("chap_edit")) { throw new CHttpException(403, "Вы не можете редактировать оригинал в этом переводе."); } /** @var Orig $orig */ if ($orig_id == 0) { $orig = new Orig(); $orig->chap_id = $chap->id; $orig->chap = $chap; if (!isset($_POST["Orig"])) { $orig->initNew((int) $_GET["after"]); } } else { $orig = Orig::model()->findByPk((int) $orig_id, array("condition" => "chap_id = :chap_id", "params" => array(":chap_id" => $chap->id))); if (!$orig) { throw new CHttpException(404, "Фрагмента оригинала не существует. Вероятно, его кто-то удалил."); } $orig->chap = $chap; } $orig->setScenario("edit_{$chap->book->typ}"); if (isset($_POST["Orig"])) { $orig->setAttributes($_POST["Orig"]); if ($orig->save()) { $chap->setModified(); // Проверяем, нет ли фрагмента с таким же ord, и если есть, то смещаем все вниз if ($orig->ord != "") { $p = array(":chap_id" => $orig->chap_id, ":ord" => intval($orig->ord), ":id" => $orig->id); if (count(Yii::app()->db->createCommand("SELECT 1 FROM orig WHERE chap_id = :chap_id AND ord = :ord AND id != :id LIMIT 1")->queryAll(false, $p))) { Yii::app()->db->createCommand("UPDATE orig SET ord = ord + 1 WHERE chap_id = :chap_id AND ord >= :ord AND id != :id")->execute($p); } } if ($ajax) { $JSON = clone $orig; $JSON->t1 = $JSON->nicetime("t1"); $JSON->t2 = $JSON->nicetime("t2"); $JSON->body = $orig->render(); echo json_encode($JSON); Yii::app()->end(); } else { $this->redirect($orig->url); } } else { if ($ajax) { echo json_encode(array("error" => $orig->errorsString)); Yii::app()->end(); } else { Yii::app()->user->setFlash("error", $orig->errorsString); } } } $p = array("orig" => $orig, "ajax" => $ajax); $view = "edit_{$chap->book->typ}-" . intval(Yii::app()->user->ini["t.iface"]); if ($ajax) { $this->renderPartial($view, $p); } else { $this->render($view, $p); } }