public function actionFilemanager($related = null, $itemId = null, $tempId = null) { $relation = null; if (isset($related)) { if (!isset($this->module->relations[$related])) { throw new \yii\base\InvalidParamException('Related model not defined in config'); } $relation = $this->module->relations[$related]; } $this->layout = '@vendor/derekisbusy/yii2-filemanager/views/layouts/main'; $model = new Mediafile(); $query = Mediafile::find()->orderBy('created_at DESC'); if ($tempId) { $query->where(['temp_id' => $tempId]); } if ($relation && $itemId) { $query->andWhere([$relation['model_id'] => $itemId]); $query->innerJoin($relation['class']::tableName(), "`{$relation['file_id']}`=`id`"); } $event = new \derekisbusy\filemanager\events\FileManagerEvent(); $this->module->trigger(Module::EVENT_FILE_MANAGER, $event); $dataProvider = $model->search($query); $dataProvider->pagination->defaultPageSize = $event->defaultPageSize ? $event->defaultPageSize : $this->module->defaultPageSize; $view = $event->view ? $event->view : Module::VIEW_FILE_MANAGER; return $this->render($view, ['model' => $model, 'dataProvider' => $dataProvider, 'related' => $related, 'itemId' => $itemId, 'tempId' => $tempId]); }
/** * Moves the files from a temporary folder to a folder for the related item. * * @param type $related * @param type $itemId * @param type $tempId * @param type $defaultImage * @return type * @throws \yii\web\BadRequestHttpException */ public function assignTempToItem($related, $itemId, $tempId, $defaultImage = null) { if (!isset($this->relations[$related]) || !$itemId && !$tempId) { throw new \yii\web\BadRequestHttpException(); } // move files to item folder foreach (Mediafile::find()->where(['temp_id' => $tempId])->each() as $file) { if ($file->url == $defaultImage) { $file->moveTempFileToItemFolder($this->routes, $related, $itemId, $tempId); $defaultImage = $file->url; } else { $file->moveTempFileToItemFolder($this->routes, $related, $itemId, $tempId); } $file->createThumbs($this->routes, $this->thumbs); // create relation $thru = new $this->relations[$related]['class'](); $thru->{$this->relations[$related]['model_id']} = $itemId; $thru->{$this->relations[$related]['file_id']} = $file->id; $thru->save(); } // remove temp directory $uploadPath = $this->routes['uploadPath']; $uploadPath .= '/' . $this->routes['tempPath'] . '/' . $tempId; $structure = "{$this->routes['baseUrl']}/{$uploadPath}"; $basePath = Yii::getAlias($this->routes['basePath']); $dir = $basePath . $structure; $it = new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS); $files = new \RecursiveIteratorIterator($it, \RecursiveIteratorIterator::CHILD_FIRST); foreach ($files as $file) { if ($file->isDir()) { rmdir($file->getRealPath()); } else { unlink($file->getRealPath()); } } rmdir($dir); return $defaultImage; }