예제 #1
0
 public function init()
 {
     parent::init();
     Html::addCssClass($this->htmlOptions, 'custom-dz');
     /** @var Image[] $files */
     $files = Image::find()->where(['and', 'object_id = :objectId', 'object_model_id = :modelId'], [':objectId' => $this->objectId, ':modelId' => $this->modelId])->orderBy(['sort_order' => SORT_ASC])->all();
     /** Image $file */
     foreach ($files as $file) {
         $thumbnail_src = $file->getThumbnail('80x80');
         $this->storedFiles[] = ['id' => $file->id, 'name' => $file->filename, 'file' => $file->file, 'thumbnail' => $thumbnail_src, 'description' => $file->image_description];
     }
     $params = ArrayHelper::merge(isset($this->options['params']) ? $this->options['params'] : [], ['objectId' => $this->objectId, 'modelId' => $this->modelId]);
     $this->sortable = true;
     $this->options = ArrayHelper::merge($this->options, ['acceptedFiles' => 'image/*', 'params' => $params, 'previewTemplate' => '<div class="file-row">
                     ' . Html::input('hidden', 'id[]') . Html::input('hidden', 'file[]') . '
                     <!-- This is used as the file preview template -->
                     <div>
                         <span class="preview"><img style="width: 80px; height: 80px;" data-dz-thumbnail /></span>
                     </div>
                     <div>
                         <p class="name" data-dz-name></p>
                         <div class="dz-error-message"><span data-dz-errormessage></span></div>
                     </div>
                     <div class="description">
                         ' . Html::textarea('description', '', ['style' => 'width: 100%; min-width: 80px; height: 80px;']) . '
                     </div>
                     <div>
                         <p class="size" data-dz-size></p>
                         <div class="dz-progress progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
                           <div class="progress-bar progress-bar-success" style="width:0%;" data-dz-uploadprogress></div>
                         </div>
                         <div class="dz-success-mark"><span>✔</span> OK</div>
                         <div class="dz-error-mark"><span>✘</span> ERROR</div>
                     </div>
                     <div>
                       <button data-dz-remove class="btn btn-danger delete">
                         <i class="fa fa-trash-o"></i>
                         <span>' . Yii::t('app', 'Delete') . '</span>
                       </button>
                     </div>
                   </div>', 'thumbnailWidth' => '80', 'thumbnailHeight' => '80', 'previewsContainer' => "#{$this->id}"]);
     $this->eventHandlers = ['removedfile' => 'function(file) {
             jQuery.get(
                 "' . Url::toRoute($this->removeUrl) . '",
                 {
                     "id" : jQuery(file.previewElement).find("[name=\\"id[]\\"]").val(),
                     "filename" : jQuery(file.previewElement).data("filename")
                 }
             ).done(function (data) { return data });
         }', 'success' => 'function(file, response) {
             response = jQuery.parseJSON(response);
             jQuery(file.previewElement).find("[data-dz-name]").text(response.filename);
             jQuery(file.previewElement).data("filename", response.filename);
             jQuery(file.previewElement).find("[name=\\"id[]\\"]").val(response.afterUpload.id);
             jQuery(file.previewElement).find("[name=\\"file[]\\"]").val(response.afterUpload.file);
             jQuery(file.previewElement).find(".description textarea").attr("name", "description["+response.afterUpload.id+"]");
         }', 'complete' => 'function(file) {
             jQuery(file.previewElement).removeClass("dz-processing");
         }'];
 }
예제 #2
0
 public function actionDelete($id)
 {
     if ($_POST['action'] == 1) {
         $model = Image::find($id);
         $model->delete();
         echo json_encode(array('id' => array($id), 'class' => 'alert-success', 'message' => __('delete success')));
         exit;
     }
 }
예제 #3
0
 public function actionCheckBroken()
 {
     /** @var Image[] $images */
     $images = Image::find()->all();
     ErrorImage::deleteAll();
     foreach ($images as $image) {
         $src = $image->filename;
         if (Yii::$app->fs->has($src) === false) {
             $errorImage = new ErrorImage();
             $errorImage->setAttributes(['img_id' => $image->id, 'class_name' => $image->className()]);
             $errorImage->save();
         }
     }
 }
예제 #4
0
 /**
  * Generate thumbnails for Image model
  * @param bool $updateThumbnailSrc
  * @param bool $deleteIfNotExists
  * @throws \Exception
  */
 public function actionThumbnails($updateThumbnailSrc = false, $deleteIfNotExists = false)
 {
     $images = Image::find()->all();
     /** @var $images Image[] */
     foreach ($images as $image) {
         $dir = '@webroot' . mb_substr($image->filename, 0, mb_strrpos($image->filename, '/')) . '/';
         $filename = \Yii::getAlias($dir . $image->filename);
         if (!file_exists($filename)) {
             echo "File not found: " . $filename . "\n";
             if ($deleteIfNotExists) {
                 $image->delete();
             }
             continue;
         }
         $img = \yii\imagine\Image::thumbnail($filename, 80, 80, ManipulatorInterface::THUMBNAIL_INSET);
         $img->save(\Yii::getAlias($dir . 'small-' . $image->filename));
         if ($updateThumbnailSrc) {
             $image->thumbnail_src = mb_substr($image->filename, 0, mb_strrpos($image->filename, '/')) . '/small-' . $image->filename;
             $image->save(true, ['thumbnail_src']);
         }
     }
 }