vars['albums'] = NULL; $this->vars['album'] = $this->album($album_id); } else { $this->vars['albums'] = $this->albums(); $this->vars['album'] = NULL; } return $this->makePartial('body'); } /** * Loads widget assets */ protected function loadAssets() { $this->addJs('js/photoselector.js'); $this->addCss('css/photoselector.css'); } /** * * Callback for when the dialog is initially open * * @return string */ public function onDialogOpen() { return $this->render(); } /** * * Callback to generate albums list * * @return array */ public function onAlbumListLoad() { $this->vars['albums'] = $this->albums(); return [ '#listContainer' => $this->makePartial('albums'), ]; } /** * * Callback to generate photos list * Photos list is to replace albums list in dialog markup * * @return array */ public function onAlbumLoad() { $album_id = input('id'); $album = $this->album($album_id); $this->vars['album'] = $album; return [ '#listContainer' => $this->makePartial('photos'), ]; } /** * * Returns a collection of all user's albums * * @return Collection */ protected function albums() { $albums = Album::orderBy('created_at', 'desc') ->has('photos') ->with(['latestPhoto' => function ($query) { $query->with('image'); }]) ->with(['front' => function ($query) { $query->with('image'); }]) ->get(); foreach ($albums as $album) { // prepare thumb from $album->front if it is set or from latestPhoto otherwise $image = ($album->front) ? $album->front->image : $album->latestPhoto->image; $album->thumb = $image->getThumb( 160, 120, ['mode' => 'crop'] ); } return $albums; } /** * * Returns album with its photos loaded and prepared for display in dialog * * @param int $album_id * @return Album */ protected function album($album_id) { $album = Album::where('id', $album_id) ->with(['photos' => function ($query) { $query->orderBy('sort_order', 'desc'); $query->with('image'); // TODO implement pagination }]) ->first(); if ($album) { //prepare photo urls and thumbs foreach ($album->photos as $photo) { // set thumb $photo->thumb = $photo->image->getThumb( 160, 120, ['mode' => 'crop'] ); // set code $photo->code = $this->createPhotoCode($photo); } } return $album; } /** * * Create an insert markdown code for photo from plugin settings * * @param Photo $photo * @return string */ protected function createPhotoCode($photo) { $code_template = Settings::get('code', '![%title%]([photo:%id%])'); $code = str_replace( array('%id%', '%title%'), array($photo->id, $photo->title), $code_template ); return $code; } }