<?php namespace Graker\PhotoAlbums\Controllers; use BackendMenu; use Backend\Classes\Controller; use Input; use Graker\PhotoAlbums\Models\Album; use Graker\PhotoAlbums\Models\Photo; use ApplicationException; use Response; use Request; use Lang; use League\Flysystem\Exception; /** * Albums Back-end Controller */ class Albums extends Controller { public $implement = [ 'Backend.Behaviors.FormController', 'Backend.Behaviors.ListController', 'Backend.Behaviors.RelationController', ]; public $formConfig = 'config_form.yaml'; public $listConfig = 'config_list.yaml'; public $relationConfig = 'config_relation.yaml'; public function __construct() { parent::__construct(); BackendMenu::setContext('Graker.PhotoAlbums', 'photoalbums', 'albums'); } /** * Ajax callback to set Photo as Album's front photo * * @param null|int $recordId album id * @return string relation refresh or error string in json if there's error */ public function update_onRelationButtonSetFront($recordId = NULL) { // get album $album = Album::find($recordId); if (!$album) { // album not found return Response::json(Lang::get('graker.photoalbums::lang.errors.album_not_found'), 400); } // get first checked photo $input = Input::all(); $checked = $input['checked']; $photo_id = array_shift($checked); // validate photo $photo = Photo::find($photo_id); try { if (!$photo) { throw new ApplicationException(Lang::get('graker.photoalbums::lang.errors.cant_find_selected')); } if ($photo->album_id != $album->id) { // attempt to use other album's photo throw new ApplicationException(Lang::get('graker.photoalbums::lang.errors.not_this_album')); } } catch (Exception $e) { return Response::json($e->getMessage(), 400); } // set front id $album->front_id = $photo->id; $album->save(); $this->initRelation($album, 'photos'); return $this->relationRefresh('photos'); } /** * * Returns path to reorder current album * * @return string */ protected function getReorderPath() { if (!isset($this->vars['formModel']->id)) { return ''; } $uri = \Backend::url('graker/photoalbums/reorder/album/' . $this->vars['formModel']->id); return $uri; } }