pageTitle = Lang::get('graker.photoalbums::lang.plugin.upload_photos'); $this->addJs('/modules/backend/assets/vendor/dropzone/dropzone.js'); $this->addJs('/plugins/graker/photoalbums/assets/js/upload.js'); $this->addCss('/plugins/graker/photoalbums/assets/css/dropzone.css'); return $this->makePartial('form'); } /** * File upload controller */ public function post_files() { try { if (!Input::hasFile('file')) { throw new ApplicationException(Lang::get('graker.photoalbums::lang.errors.no_file')); } $upload = Input::file('file'); $validationRules = ['max:' . File::getMaxFilesize()]; $validation = Validator::make( ['file' => $upload], ['file' => $validationRules] ); if ($validation->fails()) { throw new ValidationException($validation); } if (!$upload->isValid()) { throw new ApplicationException(Lang::get('graker.photoalbums::lang.errors.invalid_file', ['name' => $upload->getClientOriginalName()])); } $file = new File; $file->data = $upload; $file->is_public = true; $file->save(); return Response::json(['id' => $file->id], 200); } catch (Exception $e) { return Response::json($e->getMessage(), 400); } } /** * Form save callback */ public function onSave() { $input = Input::all(); $album = AlbumModel::find($input['album']); if ($album && !empty($input['file-id'])) { $this->savePhotos($album, $input['file-id'], $input['file-title']); Flash::success(Lang::get('graker.photoalbums::lang.messages.photos_saved')); return Redirect::to(Backend::url('graker/photoalbums/albums/update/' . $album->id)); } Flash::error(Lang::get('graker.photoalbums::lang.errors.album_not_found')); return Redirect::to(Backend::url('graker/photoalbums/albums')); } /** * File remove callback */ public function onFileRemove() { if (Input::has('file_id')) { $file_id = Input::get('file_id'); $file = File::find($file_id); if ($file) { $file->delete(); } } } /** * * Saves photos with files attached from $file_ids and attaches them to album * * @param AlbumModel $album * @param array $file_ids * @param string[] $file_titles arrray of titles */ protected function savePhotos($album, $file_ids, $file_titles) { $files = File::whereIn('id', $file_ids)->get(); $photos = array(); foreach ($files as $file) { $photo = new PhotoModel(); $photo->title = isset($file_titles[$file->id]) ? $file_titles[$file->id] : ''; $photo->save(); $photo->image()->save($file); $photos[] = $photo; } $album->photos()->saveMany($photos); } /** * @return array of [album id => album title] to use in select list */ protected function getAlbumsList() { $albums = AlbumModel::orderBy('created_at', 'desc')->get(); $options = []; foreach ($albums as $album) { $options[$album->id] = $album->title; } return $options; } public function __construct() { parent::__construct(); BackendMenu::setContext('Graker.PhotoAlbums', 'photoalbums', 'upload'); } }