Admin album editing

This commit is contained in:
Josef Citrine 2016-05-18 01:27:59 +01:00
parent fb7f291f31
commit 87d25bb8b8
6 changed files with 33 additions and 12 deletions

View file

@ -22,7 +22,9 @@ namespace Poniverse\Ponyfm\Commands;
use Poniverse\Ponyfm\Models\Album; use Poniverse\Ponyfm\Models\Album;
use Poniverse\Ponyfm\Models\Image; use Poniverse\Ponyfm\Models\Image;
use Poniverse\Ponyfm\Models\User;
use Auth; use Auth;
use Gate;
use DB; use DB;
use Validator; use Validator;
@ -48,7 +50,7 @@ class EditAlbumCommand extends CommandBase
{ {
$user = Auth::user(); $user = Auth::user();
return $this->_album && $user != null && $this->_album->user_id == $user->id; return $this->_album && $user != null && Gate::allows('edit', $this->_album);
} }
/** /**
@ -61,7 +63,8 @@ class EditAlbumCommand extends CommandBase
'title' => 'required|min:3|max:50', 'title' => 'required|min:3|max:50',
'cover' => 'image|mimes:png|min_width:350|min_height:350', 'cover' => 'image|mimes:png|min_width:350|min_height:350',
'cover_id' => 'exists:images,id', 'cover_id' => 'exists:images,id',
'track_ids' => 'exists:tracks,id' 'track_ids' => 'exists:tracks,id',
'username' => 'exists:users,username'
]; ];
$validator = Validator::make($this->_input, $rules); $validator = Validator::make($this->_input, $rules);
@ -86,6 +89,14 @@ class EditAlbumCommand extends CommandBase
} }
} }
if (isset($this->_input['username'])) {
$newid = User::where('username', $this->_input['username'])->first()->id;
if ($this->_album->user_id != $newid) {
$this->_album->user_id = $newid;
}
}
$trackIds = explode(',', $this->_input['track_ids']); $trackIds = explode(',', $this->_input['track_ids']);
$this->_album->syncTrackIds($trackIds); $this->_album->syncTrackIds($trackIds);
$this->_album->save(); $this->_album->save();

View file

@ -29,6 +29,7 @@ use Poniverse\Ponyfm\Http\Controllers\ApiControllerBase;
use Poniverse\Ponyfm\Models\Image; use Poniverse\Ponyfm\Models\Image;
use Poniverse\Ponyfm\Models\ResourceLogItem; use Poniverse\Ponyfm\Models\ResourceLogItem;
use Auth; use Auth;
use Gate;
use Input; use Input;
use Poniverse\Ponyfm\Models\User; use Poniverse\Ponyfm\Models\User;
use Response; use Response;
@ -171,7 +172,7 @@ class AlbumsController extends ApiControllerBase
return $this->notFound('Album ' . $id . ' not found!'); return $this->notFound('Album ' . $id . ' not found!');
} }
if ($album->user_id != Auth::user()->id) { if (Gate::denies('edit', Auth::user())) {
return $this->notAuthorized(); return $this->notAuthorized();
} }
@ -187,6 +188,7 @@ class AlbumsController extends ApiControllerBase
'id' => $album->id, 'id' => $album->id,
'title' => $album->title, 'title' => $album->title,
'user_id' => $album->user_id, 'user_id' => $album->user_id,
'username' => User::whereId($album->user_id)->first()->username,
'slug' => $album->slug, 'slug' => $album->slug,
'created_at' => $album->created_at, 'created_at' => $album->created_at,
'published_at' => $album->published_at, 'published_at' => $album->published_at,

View file

@ -25,6 +25,7 @@ use Helpers;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Auth; use Auth;
use Gate;
use Cache; use Cache;
use Poniverse\Ponyfm\Contracts\Searchable; use Poniverse\Ponyfm\Contracts\Searchable;
use Poniverse\Ponyfm\Exceptions\TrackFileNotFoundException; use Poniverse\Ponyfm\Exceptions\TrackFileNotFoundException;
@ -217,8 +218,8 @@ class Album extends Model implements Searchable
], ],
'user_data' => $userData, 'user_data' => $userData,
'permissions' => [ 'permissions' => [
'delete' => Auth::check() && Auth::user()->id == $album->user_id, 'delete' => Gate::allows('delete', $album),
'edit' => Auth::check() && Auth::user()->id == $album->user_id 'edit' => Gate::allows('edit', $album)
] ]
]; ];
} }

View file

@ -20,6 +20,11 @@
<textarea ng-disabled="isSaving" ng-change="touchModel()" placeholder="Description (optional)" id="description" ng-model="album.description"></textarea> <textarea ng-disabled="isSaving" ng-change="touchModel()" placeholder="Description (optional)" id="description" ng-model="album.description"></textarea>
<div class="error">{{errors.description}}</div> <div class="error">{{errors.description}}</div>
</div> </div>
<div class="form-row" ng-show="isAdmin" ng-class="{'has-error': errors.username != null}">
<label for="title" class="strong">User:</label>
<input ng-disabled="isSaving" ng-change="touchModel()" placeholder="Username" type="text" id="username" ng-model="album.username" />
<div class="error">{{errors.username}}</div>
</div>
<div class="form-row" ng-class="{'has-error': errors.cover != null}"> <div class="form-row" ng-class="{'has-error': errors.cover != null}">
<label class="strong">Album Cover: </label> <label class="strong">Album Cover: </label>
<pfm-image-upload set-image="setCover" image="album.cover" user-id="album.user_id"></pfm-image-upload> <pfm-image-upload set-image="setCover" image="album.cover" user-id="album.user_id"></pfm-image-upload>

View file

@ -108,11 +108,11 @@
</div> </div>
</div> </div>
<div class="row-fluid" ng-show="isAdmin"> <div class="row-fluid" ng-show="isAdmin">
<div class="span6 form-row" ng-class="{'has-error': errors.username != null}"> <div class="span6 form-row" ng-class="{'has-error': errors.username != null}">
<label for="title" class="strong">User:</label> <label for="title" class="strong">User:</label>
<input ng-disabled="isSaving" ng-change="touchModel()" placeholder="Username" type="text" id="username" ng-model="track.username" /> <input ng-disabled="isSaving" ng-change="touchModel()" placeholder="Username" type="text" id="username" ng-model="track.username" />
<div class="error">{{errors.username}}</div> <div class="error">{{errors.username}}</div>
</div> </div>
</div> </div>
<div class="form-row"> <div class="form-row">
<label class="strong">Choose a License:</label> <label class="strong">Choose a License:</label>

View file

@ -25,8 +25,8 @@ window.pfm.preloaders['account-albums-edit'] = [
] ]
module.exports = angular.module('ponyfm').controller "account-albums-edit", [ module.exports = angular.module('ponyfm').controller "account-albums-edit", [
'$scope', '$state', '$dialog', 'account-albums' '$scope', '$state', '$dialog', 'account-albums', 'auth'
($scope, $state, $dialog, albums) -> ($scope, $state, $dialog, albums, auth) ->
$scope.isNew = $state.params.album_id == undefined $scope.isNew = $state.params.album_id == undefined
$scope.data.isEditorOpen = true $scope.data.isEditorOpen = true
$scope.errors = {} $scope.errors = {}
@ -35,6 +35,7 @@ module.exports = angular.module('ponyfm').controller "account-albums-edit", [
$scope.isSaving = false $scope.isSaving = false
$scope.tracks = [] $scope.tracks = []
$scope.trackIds = {} $scope.trackIds = {}
$scope.isAdmin = auth.data.isAdmin
$scope.toggleTrack = (track) -> $scope.toggleTrack = (track) ->
if $scope.trackIds[track.id] if $scope.trackIds[track.id]
@ -140,6 +141,7 @@ module.exports = angular.module('ponyfm').controller "account-albums-edit", [
$scope.album = $scope.album =
id: album.id id: album.id
user_id: album.user_id user_id: album.user_id
username: album.username
title: album.title title: album.title
description: album.description description: album.description
remove_cover: false remove_cover: false