Exemplo n.º 1
0
 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);
     }
 }