Esempio n. 1
0
 public function actionCreate()
 {
     $this->layout = '/adminka';
     $model = new Book();
     if ($model->load(Yii::$app->request->post())) {
         FileHelper::createDirectory(Yii::getAlias('@frontend') . '/web/upload/book-big');
         FileHelper::createDirectory(Yii::getAlias('@frontend') . '/web/upload/book-thumbs');
         $name = date("dmYHis", time());
         if (Yii::$app->request->isPost) {
             $model->image = UploadedFile::getInstance($model, 'image');
             $model->file = UploadedFile::getInstance($model, 'file');
             if ($model->image) {
                 $model->image->saveAs('upload/book-big/' . $name . '.' . $model->image->extension);
                 $full_name = $name . '.' . $model->image->extension;
                 $model->image = $full_name;
                 Image::thumbnail(Yii::getAlias('@frontend') . '/web/upload/book-big/' . $full_name, 1200, 500)->save(Yii::getAlias(Yii::getAlias('@frontend') . '/web/upload/book-thumbs/' . $full_name), ['quality' => 80]);
             }
             if ($model->file) {
                 $model->file->saveAs('book/' . $name . '.' . $model->file->extension);
                 $full_name_zip = $name . '.' . $model->file->extension;
                 $model->file = $full_name_zip;
                 $model->eng_name = $full_name_zip;
             }
             //vd($model);
             $model->download = 0;
             $model->save();
             Yii::$app->session->setFlash('success', 'Данные удачно сохранены');
         } else {
             Yii::$app->session->setFlash('error', 'Данные не удачно сохранены');
         }
         return $this->redirect(['view', 'id' => $model->id]);
     } else {
         return $this->render('create', ['model' => $model]);
     }
 }
 /**
  * Creates a new Book model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate()
 {
     $model = new Book();
     $model->date = strtotime(date('d.m.Y'));
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         return $this->redirect(['index', 'id' => $model->id]);
     } else {
         return $this->render('create', ['model' => $model]);
     }
 }
 /**
  * Creates a new Book model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate()
 {
     $model = new Book();
     if ($model->load(Yii::$app->request->post())) {
         $model->preview_file = UploadedFile::getInstance($model, 'preview_file');
         if ($model->save()) {
             return $this->redirect(Url::previous());
         }
     }
     return $this->render('create', ['model' => $model]);
 }
Esempio n. 4
0
 /**
  * Добавление книги.
  *
  * @return mixed
  * @throws \Exception
  * @throws \yii\base\Exception
  */
 public function actionCreate()
 {
     $model = new Book();
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         if (null !== ($image = UploadedFile::getInstance($model, 'preview'))) {
             $model->preview = $image;
             if (!$model->validate(['preview'])) {
                 Yii::$app->getSession()->setFlash('error', Html::errorSummary($model, ['header' => 'Пожалуйста, исправьте следующие ошибки:', 'encode' => false]));
                 return $this->redirect(['book/update', 'id' => $model->id]);
             }
             // работаем с новым загруженным изображением
             $uploadsDir = realpath(Yii::$app->params['booksUploadsDir']);
             $uploadsTmpDir = realpath(Yii::$app->params['frontendUploadsTmpDir']);
             // сохраняем изображение во временную директорию
             $tmpFilename = $uploadsTmpDir . DIRECTORY_SEPARATOR . 'book_preview_' . uniqid() . '.' . $image->getExtension();
             if (false === $image->saveAs($tmpFilename)) {
                 throw new Exception('Невозможно сохранить загруженное изображение для книги в файл: ' . $tmpFilename);
             } else {
                 // создаем вложенные директории
                 $path = Util::createNestedFolders($uploadsDir, $model->id);
                 $filename = $path . DIRECTORY_SEPARATOR . dechex($model->id) . '.' . $image->getExtension();
                 $previewFilename = $path . DIRECTORY_SEPARATOR . dechex($model->id) . '_thumb.' . $image->getExtension();
                 $imagine = Image::getImagine();
                 /** @var $i \Imagine\Gd\Image */
                 $i = $imagine->open($tmpFilename);
                 // если размеры изображения превышают лимиты, оно ресайзится
                 if ($i->getSize()->getWidth() > Yii::$app->params['maxImageWidth'] || $i->getSize()->getHeight() > Yii::$app->params['maxImageHeight']) {
                     $i->thumbnail(new Box(Yii::$app->params['maxImageWidth'], Yii::$app->params['maxImageHeight']), ImageInterface::THUMBNAIL_INSET)->save($filename, ['quality' => 100]);
                 } else {
                     $i->save($filename);
                 }
                 // создаем превьюшку из исходника
                 $i = $imagine->open($tmpFilename);
                 if ($i->getSize()->getWidth() > Yii::$app->params['thumbnailDefaultWidth'] || $i->getSize()->getHeight() > Yii::$app->params['thumbnailDefaultHeight']) {
                     $i->thumbnail(new Box(Yii::$app->params['thumbnailDefaultWidth'], Yii::$app->params['thumbnailDefaultHeight']), ImageInterface::THUMBNAIL_INSET)->save($previewFilename, ['quality' => 100]);
                 }
                 // удаляем временный файл
                 unlink($tmpFilename);
                 $filename = str_replace('\\', '/', $filename);
                 $filename = preg_replace('=^(.*?)(/uploads/books/.*)$=iu', '\\2', $filename);
                 $model->preview = $filename;
             }
             $model->update(false, ['preview']);
         }
         Yii::$app->session->setFlash('success', 'Новая книга успешно добавлена.');
         return $this->redirect(['index']);
     } else {
         return $this->render('create', ['model' => $model]);
     }
 }