Further things

This commit is contained in:
nelsonlaquet 2013-07-26 19:15:07 -05:00
parent 8d834f41db
commit c56568b6f5
45 changed files with 1572 additions and 86 deletions

View file

@ -155,7 +155,7 @@ return array(
'DB' => 'Illuminate\Support\Facades\DB', 'DB' => 'Illuminate\Support\Facades\DB',
'Eloquent' => 'Illuminate\Database\Eloquent\Model', 'Eloquent' => 'Illuminate\Database\Eloquent\Model',
'Event' => 'Illuminate\Support\Facades\Event', 'Event' => 'Illuminate\Support\Facades\Event',
'File' => 'Illuminate\Support\Facades\File', // 'File' => 'Illuminate\Support\Facades\File',
'Form' => 'Illuminate\Support\Facades\Form', 'Form' => 'Illuminate\Support\Facades\Form',
'Hash' => 'Illuminate\Support\Facades\Hash', 'Hash' => 'Illuminate\Support\Facades\Hash',
'HTML' => 'Illuminate\Support\Facades\HTML', 'HTML' => 'Illuminate\Support\Facades\HTML',

View file

@ -5,6 +5,8 @@
use Commands\DeleteTrackCommand; use Commands\DeleteTrackCommand;
use Commands\EditTrackCommand; use Commands\EditTrackCommand;
use Commands\UploadTrackCommand; use Commands\UploadTrackCommand;
use Cover;
use Entities\Image;
use Entities\Track; use Entities\Track;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input; use Illuminate\Support\Facades\Input;
@ -51,12 +53,13 @@
'is_vocal' => $track->is_vocal, 'is_vocal' => $track->is_vocal,
'is_explicit' => $track->is_explicit, 'is_explicit' => $track->is_explicit,
'is_downloadable' => $track->is_downloadable, 'is_downloadable' => $track->is_downloadable,
'is_published' => $track->published_at != null, 'is_published' => $track->isPublished(),
'created_at' => $track->created_at, 'created_at' => $track->created_at,
'published_at' => $track->published_at, 'published_at' => $track->published_at,
'duration' => $track->duration, 'duration' => $track->duration,
'genre_id' => $track->genre_id, 'genre_id' => $track->genre_id,
'track_type_id' => $track->track_type_id, 'track_type_id' => $track->track_type_id,
'cover_url' => $track->getCoverUrl(Image::SMALL)
]; ];
} }
@ -78,7 +81,7 @@
'slug' => $track->slug, 'slug' => $track->slug,
'is_vocal' => (bool)$track->is_vocal, 'is_vocal' => (bool)$track->is_vocal,
'is_explicit' => (bool)$track->is_explicit, 'is_explicit' => (bool)$track->is_explicit,
'is_downloadable' => $track->published_at == null ? true : (bool)$track->is_downloadable, 'is_downloadable' => !$track->isPublished() ? true : (bool)$track->is_downloadable,
'is_published' => $track->published_at != null, 'is_published' => $track->published_at != null,
'created_at' => $track->created_at, 'created_at' => $track->created_at,
'published_at' => $track->published_at, 'published_at' => $track->published_at,
@ -88,7 +91,8 @@
'license_id' => $track->license_id != null ? $track->license_id : 3, 'license_id' => $track->license_id != null ? $track->license_id : 3,
'description' => $track->description, 'description' => $track->description,
'lyrics' => $track->lyrics, 'lyrics' => $track->lyrics,
'released_at' => $track->released_at 'released_at' => $track->released_at,
'cover_url' => $track->hasCover() ? $track->getCoverUrl(Image::NORMAL) : null
], 200); ], 200);
} }

View file

@ -1,6 +1,6 @@
<?php <?php
class FavoritesController extends Controller { class FavouritesController extends Controller {
public function getTracks() { public function getTracks() {
return View::make('shared.null'); return View::make('shared.null');
} }

View file

@ -0,0 +1,20 @@
<?php
use Entities\Image;
use Entities\Track;
use Illuminate\Support\Facades\App;
class ImagesController extends Controller {
public function getImage($id, $type) {
$coverType = Image::GetImageTypeFromName($type);
if ($coverType == null)
App::abort(404);
$image = Image::find($id);
if (!$image)
App::abort(404);
return File::inline($image->getFile($coverType['id']), $image->mime, $image->filename);
}
}

View file

@ -1,5 +1,8 @@
<?php <?php
use Entities\Track;
use Illuminate\Support\Facades\App;
class TracksController extends Controller { class TracksController extends Controller {
public function getIndex() { public function getIndex() {
return View::make('tracks.index'); return View::make('tracks.index');

View file

@ -0,0 +1,19 @@
<?php
use Entities\Track;
use Illuminate\Support\Facades\App;
class UsersController extends Controller {
public function getAvatar($id, $type) {
$coverType = Cover::getCoverFromName($type);
if ($coverType == null)
App::abort(404);
$user = User::find($id);
if (!$user)
App::abort(404);
return File::inline($user->getAvatarFile($coverType['id']), 'image/png', 'cover.png');
}
}

View file

@ -39,7 +39,6 @@ class CreateTracksTable extends Migration {
$table->text('lyrics')->nullable(); $table->text('lyrics')->nullable();
$table->boolean('is_vocal'); $table->boolean('is_vocal');
$table->boolean('is_explicit'); $table->boolean('is_explicit');
$table->integer('cover_id')->nullable()->unsigned()->default(NULL);
$table->boolean('is_downloadable'); $table->boolean('is_downloadable');
$table->float('duration')->unsigned(); $table->float('duration')->unsigned();

View file

@ -0,0 +1,44 @@
<?php
use Illuminate\Database\Migrations\Migration;
class CreateImagesTable extends Migration {
public function up() {
Schema::create('images', function($table) {
$table->increments('id');
$table->string('filename', 256);
$table->string('mime', 100);
$table->string('extension', 32);
$table->integer('size');
$table->string('hash', 32);
$table->integer('uploaded_by')->unsigned();
$table->timestamps();
$table->foreign('uploaded_by')->references('id')->on('users');
});
Schema::table('users', function($table) {
$table->integer('avatar_id')->unsigned()->nullable();
$table->foreign('avatar_id')->references('id')->on('images');
});
DB::table('tracks')->update(['cover_id' => null]);
Schema::table('tracks', function($table) {
$table->foreign('cover_id')->references('id')->on('images');
});
}
public function down() {
Schema::table('tracks', function($table) {
$table->dropForeign('tracks_cover_id_foreign');
});
Schema::table('users', function($table) {
$table->dropForeign('users_avatar_id_foreign');
$table->dropColumn('avatar_id');
});
Schema::drop('images');
}
}

View file

@ -45,6 +45,7 @@
return new AssetCollection([ return new AssetCollection([
new FileAsset('scripts/base/jquery-2.0.2.js'), new FileAsset('scripts/base/jquery-2.0.2.js'),
new FileAsset('scripts/base/jquery-ui.js'), new FileAsset('scripts/base/jquery-ui.js'),
new FileAsset('scripts/base/jquery.colorbox.js'),
new FileAsset('scripts/base/underscore.js'), new FileAsset('scripts/base/underscore.js'),
new FileAsset('scripts/base/angular.js'), new FileAsset('scripts/base/angular.js'),
new FileAsset('scripts/base/ui-bootstrap-tpls-0.4.0.js'), new FileAsset('scripts/base/ui-bootstrap-tpls-0.4.0.js'),
@ -72,6 +73,7 @@
$css = new AssetCollection([ $css = new AssetCollection([
new FileAsset('styles/base/jquery-ui.css'), new FileAsset('styles/base/jquery-ui.css'),
new FileAsset('styles/base/colorbox.css'),
new FileAsset('styles/app.less'), new FileAsset('styles/app.less'),
new CacheBusterAsset($lastModifiedCollection->getLastModified()) new CacheBusterAsset($lastModifiedCollection->getLastModified())
], [new \Assetic\Filter\LessFilter('node')]); ], [new \Assetic\Filter\LessFilter('node')]);

14
app/library/External.php Normal file
View file

@ -0,0 +1,14 @@
<?php
use Illuminate\Support\Facades\Log;
class External {
public static function execute($command) {
$output = [];
$error = exec($command, $output);
if ($error != null) {
Log::error('"' . $command . '" failed with "' . $error . '"');
}
}
}

32
app/library/File.php Normal file
View file

@ -0,0 +1,32 @@
<?php
/**
* File
*
* Note: Remember to remove the "File" alias in APP_DIR/config/application.php
*
* @author Phill Sparks <me@phills.me.uk>
*/
class File extends \Illuminate\Support\Facades\File
{
public static function inline($path, $mime, $name = null)
{
if (is_null($name))
{
$name = basename($path);
}
$response = Response::make(static::get($path));
$response->header('Content-Type', $mime);
$response->header('Content-Disposition', 'inline; filename="'.$name.'"');
$response->header('Content-Transfer-Encoding', 'binary');
$response->header('Expires', 0);
$response->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
$response->header('Pragma', 'public');
$response->header('Content-Length', filesize($path));
return $response;
}
}

20
app/library/Gravatar.php Normal file
View file

@ -0,0 +1,20 @@
<?php
class Gravatar {
/**
 * Returns a Gravatar URL
 *
 * @param string $email The email address
 * @param string $s Size in pixels, defaults to 80px [ 1 - 2048 ]
 * @param string $d Default imageset to use [ 404 | mm | identicon | monsterid | wavatar ]
 * @param string $r Maximum rating (inclusive) [ g | pg | r | x ]
 * @return Gravatar URL
 * @source http://gravatar.com/site/implement/images/php/
 */
public static function getUrl( $email, $s = 80, $d = 'mm', $r = 'g') {
$url = 'http://www.gravatar.com/avatar/';
$url .= md5( strtolower( trim( $email ) ) );
$url .= "?s=$s&d=$d&r=$r";
return $url;
}
}

View file

@ -2,7 +2,11 @@
namespace Commands; namespace Commands;
use Entities\Image;
use Entities\Track; use Entities\Track;
use External;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class EditTrackCommand extends CommandBase { class EditTrackCommand extends CommandBase {
private $_trackId; private $_trackId;
@ -60,6 +64,12 @@
$track->published_at = new \DateTime(); $track->published_at = new \DateTime();
} }
if (isset($this->_input['cover'])) {
$cover = $this->_input['cover'];
$track->cover_id = Image::Upload($cover, Auth::user())->id;
} else
$track->cover_id = null;
$track->save(); $track->save();
return CommandResponse::succeed(); return CommandResponse::succeed();

View file

@ -44,14 +44,12 @@
$track->save(); $track->save();
$destination = $track->getDirectory(); $destination = $track->getDirectory();
$track->ensureDirectoryExists();
if (!is_dir($destination))
mkdir($destination, 755);
$source = $trackFile->getPathname(); $source = $trackFile->getPathname();
$index = 0; $index = 0;
$procs = []; $processes = [];
foreach (Track::$Formats as $name => $format) { foreach (Track::$Formats as $name => $format) {
$target = $destination . '/' . $track->getFilenameFor($name); $target = $destination . '/' . $track->getFilenameFor($name);
@ -65,10 +63,10 @@
$pipes = []; $pipes = [];
$proc = proc_open($command, [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'a']], $pipes); $proc = proc_open($command, [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'a']], $pipes);
$procs[] = $proc; $processes[] = $proc;
} }
foreach ($procs as $proc) foreach ($processes as $proc)
proc_close($proc); proc_close($proc);
} catch (\Exception $e) { } catch (\Exception $e) {

View file

@ -0,0 +1,95 @@
<?php
namespace Entities;
use External;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\URL;
class Image extends \Eloquent {
const NORMAL = 1;
const ORIGINAL = 2;
const THUMBNAIL = 3;
const SMALL = 4;
public static $ImageTypes = [
self::NORMAL => ['id' => self::NORMAL, 'name' => 'normal', 'width' => 350, 'height' => 350],
self::ORIGINAL => ['id' => self::ORIGINAL, 'name' => 'original', 'width' => null, 'height' => null],
self::SMALL => ['id' => self::SMALL, 'name' => 'small', 'width' => 100, 'height' => 100],
self::THUMBNAIL => ['id' => self::THUMBNAIL, 'name' => 'thumbnail', 'width' => 50, 'height' => 50]
];
public static function GetImageTypeFromName($name) {
foreach (self::$ImageTypes as $cover) {
if ($cover['name'] != $name)
continue;
return $cover;
}
return null;
}
public static function Upload($file, $user) {
$hash = md5_file($file->getPathname());
$image = Image::whereHash($hash)->whereUploadedBy($user->id)->first();
if ($image)
return $image;
$image = new Image();
try {
$image->uploaded_by = $user->id;
$image->size = $file->getSize();
$image->filename = $file->getClientOriginalName();
$image->extension = $file->getClientOriginalExtension();
$image->mime = $file->getMimeType();
$image->hash = $hash;
$image->save();
$image->ensureDirectoryExists();
foreach (self::$ImageTypes as $coverType) {
$command = 'convert 2>&1 "' . $file->getPathname() . '" -background transparent -flatten +matte -strip -quality 95 -format png ';
if (isset($coverType['width']) && isset($coverType['height']))
$command .= '-thumbnail ' . $coverType['width'] . 'x' . $coverType['height'] . '^ -gravity center -extent ' . $coverType['width'] . 'x' . $coverType['height'] . ' ';
$command .= '"' . $image->getFile($coverType['id']) . '"';
External::execute($command);
}
return $image;
}
catch (\Exception $e) {
$image->delete();
throw $e;
}
}
protected $table = 'images';
public function getUrl($type = Cover::NORMAL) {
$type = self::$ImageTypes[$type];
return URL::to('i' . $this->id . '/' . $type['name'] . '.png');
}
public function getFile($type = Cover::NORMAL) {
return $this->getDirectory() . '/' . $this->getFilename($type);
}
public function getFilename($type = Cover::NORMAL) {
$typeInfo = self::$ImageTypes[$type];
return $this->id . '_' . $typeInfo['name'] . '.png';
}
public function getDirectory() {
$dir = (string) ( floor( $this->id / 100 ) * 100 );
return Config::get('app.files_directory') . '/images/' . $dir;
}
public function ensureDirectoryExists() {
$destination = $this->getDirectory();
if (!is_dir($destination))
mkdir($destination, 755, true);
}
}

View file

@ -2,6 +2,7 @@
namespace Entities; namespace Entities;
use Cover;
use Whoops\Example\Exception; use Whoops\Example\Exception;
class Track extends \Eloquent { class Track extends \Eloquent {
@ -16,22 +17,48 @@
]; ];
public static function summary() { public static function summary() {
return self::select('id', 'title', 'user_id', 'slug', 'is_vocal', 'is_explicit', 'created_at', 'published_at', 'duration', 'is_downloadable', 'genre_id', 'track_type_id'); return self::select('id', 'title', 'user_id', 'slug', 'is_vocal', 'is_explicit', 'created_at', 'published_at', 'duration', 'is_downloadable', 'genre_id', 'track_type_id', 'cover_id');
} }
protected $table = 'tracks'; protected $table = 'tracks';
public function ensureDirectoryExists() {
$destination = $this->getDirectory();
if (!is_dir($destination))
mkdir($destination, 755);
}
public function hasCover() {
return $this->cover_id != null;
}
public function cover() {
return $this->belongsTo('Entities\Image');
}
public function isPublished() {
return $this->published_at != null && $this->deleted_at == null;
}
public function getCoverUrl($type = Cover::NORMAL) {
if (!$this->hasCover())
return $this->user->getAvatarUrl($type);
return $this->cover->getUrl($type);
}
public function getDirectory() {
$dir = (string) ( floor( $this->id / 100 ) * 100 );
return \Config::get('app.files_directory') . '/tracks/' . $dir;
}
public function getDates() { public function getDates() {
return ['created_at', 'deleted_at', 'published_at', 'released_at']; return ['created_at', 'deleted_at', 'published_at', 'released_at'];
} }
public function user() { public function user() {
return $this->belongsTo('User'); return $this->belongsTo('Entities\User');
}
public function getDirectory() {
$dir = (string) ( floor( $this->id / 100 ) * 100 );
return \Config::get('app.files_directory') . '/tracks/' . $dir;
} }
public function getFilenameFor($format) { public function getFilenameFor($format) {

View file

@ -2,6 +2,8 @@
namespace Entities; namespace Entities;
use Cover;
use Gravatar;
use Illuminate\Auth\UserInterface; use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface; use Illuminate\Auth\Reminders\RemindableInterface;
@ -9,6 +11,14 @@
protected $table = 'users'; protected $table = 'users';
protected $hidden = ['password_hash', 'password_salt', 'bio']; protected $hidden = ['password_hash', 'password_salt', 'bio'];
public function avatar() {
return $this->hasOne('Entities\Image');
}
public function cover() {
return $this->belongsTo('Entities\Image');
}
public function getAuthIdentifier() { public function getAuthIdentifier() {
return $this->getKey(); return $this->getKey();
} }
@ -20,4 +30,23 @@
public function getReminderEmail() { public function getReminderEmail() {
return $this->email; return $this->email;
} }
public function getAvatarUrl($type = Cover::NORMAL) {
if (!$this->uses_gravatar)
return $this->cover->getUrl();
$email = $this->gravatar;
if (!strlen($email))
$email = $this->email;
return Gravatar::getUrl($email, Image::$ImageTypes[$type]['width']);
}
public function getAvatarFile($type = Cover::NORMAL) {
if ($this->uses_gravatar)
return $this->user->getAvatar($type);
$cover = Cover::$Covers[$type];
return URL::to('t' . $this->id . '/cover_' . $cover['name'] . '.png?' . $this->cover_id);
}
} }

View file

@ -25,6 +25,10 @@
Route::get('/about', function() { return View::make('pages.about'); }); Route::get('/about', function() { return View::make('pages.about'); });
Route::get('/faq', function() { return View::make('pages.faq'); }); Route::get('/faq', function() { return View::make('pages.faq'); });
Route::get('i{id}/{type}.png', 'ImagesController@getImage');
Route::get('u{id}/avatar_{type}.png', 'UsersController@getAvatar');
Route::group(['prefix' => 'api/web'], function() { Route::group(['prefix' => 'api/web'], function() {
Route::get('/taxonomies/all', 'Api\Web\TaxonomiesController@getAll'); Route::get('/taxonomies/all', 'Api\Web\TaxonomiesController@getAll');
@ -47,9 +51,9 @@
Route::group(['prefix' => 'account'], function() { Route::group(['prefix' => 'account'], function() {
Route::group(['before' => 'auth'], function(){ Route::group(['before' => 'auth'], function(){
Route::get('/favorites', 'FavoritesController@getTracks'); Route::get('/favourites', 'FavouritesController@getTracks');
Route::get('/favorites/albums', 'FavoritesController@getAlbums'); Route::get('/favourites/albums', 'FavouritesController@getAlbums');
Route::get('/favorites/playlists', 'FavoritesController@getPlaylists'); Route::get('/favourites/playlists', 'FavouritesController@getPlaylists');
Route::get('/content/tracks', 'ContentController@getTracks'); Route::get('/content/tracks', 'ContentController@getTracks');
Route::get('/content/tracks/{id}', 'ContentController@getTracks'); Route::get('/content/tracks/{id}', 'ContentController@getTracks');

View file

@ -42,7 +42,7 @@
<li> <li>
<h3>Account</h3> <h3>Account</h3>
</li> </li>
<li ng-class="{selected: $state.includes('account-favorites')}"><a href="/account/favorites">Favorites</a></li> <li ng-class="{selected: $state.includes('account-favourites')}"><a href="/account/favourites">Favourites</a></li>
<li ng-class="{selected: $state.includes('account-content')}"><a href="/account/content/tracks">Your Content</a></li> <li ng-class="{selected: $state.includes('account-content')}"><a href="/account/content/tracks">Your Content</a></li>
<li ng-class="{selected: isActive('/account')}"><a href="/account">Settings</a></li> <li ng-class="{selected: isActive('/account')}"><a href="/account">Settings</a></li>
@endif @endif

View file

@ -30,22 +30,22 @@ angular.module 'ponyfm', ['ui.bootstrap', 'ui.state', 'ui.date'], [
url: '/playlists' url: '/playlists'
templateUrl: '/templates/account/content/playlists.html' templateUrl: '/templates/account/content/playlists.html'
state.state 'account-favorites', state.state 'account-favourites',
url: '/account/favorites' url: '/account/favourites'
abstract: true abstract: true
templateUrl: '/templates/account/favorites/_layout.html' templateUrl: '/templates/account/favourites/_layout.html'
state.state 'account-favorites.tracks', state.state 'account-favourites.tracks',
url: '' url: ''
templateUrl: '/templates/account/favorites/tracks.html' templateUrl: '/templates/account/favourites/tracks.html'
state.state 'account-favorites.playlists', state.state 'account-favourites.playlists',
url: '/playlists' url: '/playlists'
templateUrl: '/templates/account/favorites/playlists.html' templateUrl: '/templates/account/favourites/playlists.html'
state.state 'account-favorites.albums', state.state 'account-favourites.albums',
url: '/albums' url: '/albums'
templateUrl: '/templates/account/favorites/albums.html' templateUrl: '/templates/account/favourites/albums.html'
# Tracks # Tracks

View file

@ -1,6 +1,11 @@
angular.module('ponyfm').controller "account-content-tracks", [ angular.module('ponyfm').controller "account-content-tracks", [
'$scope', '$state', 'taxonomies', '$dialog' '$scope', '$state', 'taxonomies', '$dialog', 'lightbox'
($scope, $state, taxonomies, $dialog) -> ($scope, $state, taxonomies, $dialog, lightbox) ->
$('#coverPreview').load () ->
$scope.$apply -> $scope.isCoverLoaded = true
window.alignVertically(this)
$scope.isCoverLoaded = false
$scope.selectedTrack = null $scope.selectedTrack = null
$scope.isDirty = false $scope.isDirty = false
$scope.taxonomies = $scope.taxonomies =
@ -11,6 +16,10 @@ angular.module('ponyfm').controller "account-content-tracks", [
$scope.updateIsVocal = () -> $scope.updateIsVocal = () ->
delete $scope.errors.lyrics if !$scope.edit.is_vocal delete $scope.errors.lyrics if !$scope.edit.is_vocal
$scope.previewCover = () ->
return if !$scope.edit.cover
lightbox.openDataUrl $('#coverPreview').attr 'src'
$scope.updateTrack = (track) -> $scope.updateTrack = (track) ->
xhr = new XMLHttpRequest() xhr = new XMLHttpRequest()
xhr.onload = -> $scope.$apply -> xhr.onload = -> $scope.$apply ->
@ -49,6 +58,8 @@ angular.module('ponyfm').controller "account-content-tracks", [
if file.type != 'image/png' if file.type != 'image/png'
$scope.errors.cover = 'Cover image must be a png!' $scope.errors.cover = 'Cover image must be a png!'
$scope.isCoverLoaded = false
$scope.edit.cover = null
return return
delete $scope.errors.cover delete $scope.errors.cover
@ -58,6 +69,10 @@ angular.module('ponyfm').controller "account-content-tracks", [
reader.readAsDataURL file reader.readAsDataURL file
$scope.edit.cover = file $scope.edit.cover = file
$scope.clearTrackCover = () ->
$scope.isCoverLoaded = false
delete $scope.edit.cover
$scope.filters = $scope.filters =
published: [ published: [
{title: 'Either', query: ''}, {title: 'Either', query: ''},
@ -129,6 +144,7 @@ angular.module('ponyfm').controller "account-content-tracks", [
selectTrack = (t) -> selectTrack = (t) ->
$scope.selectedTrack = t $scope.selectedTrack = t
$scope.isCoverLoaded = false
return if !t return if !t
$.getJSON('/api/web/tracks/edit/' + t.id) $.getJSON('/api/web/tracks/edit/' + t.id)
.done (track) -> $scope.$apply -> .done (track) -> $scope.$apply ->

View file

@ -0,0 +1,8 @@
angular.module('ponyfm').factory('lightbox', [
() ->
openDataUrl: (src) ->
$.colorbox
html: '<img src="' + src + '" />'
transition: 'none'
])

File diff suppressed because it is too large Load diff

View file

@ -7,6 +7,11 @@ window.handleResize = () ->
$this = $ this $this = $ this
$this.height windowHeight - $this.offset().top $this.height windowHeight - $this.offset().top
window.alignVertically = (element) ->
$element = $(element)
$parent = $element.parent()
$element.css 'top', $parent.height() / 2 - $element.height() / 2
window.handleResize() window.handleResize()
$(window).resize window.handleResize $(window).resize window.handleResize

View file

@ -58,8 +58,8 @@
.image { .image {
width: 32px; width: 32px;
height: 32px; height: 32px;
background: #444;
float: left; float: left;
display: block;
} }
.title { .title {
@ -119,6 +119,11 @@
.cover-upload { .cover-upload {
overflow: hidden; overflow: hidden;
.error {
clear: left;
margin-top: 14px;
}
input[type=file] { input[type=file] {
display: none; display: none;
} }
@ -128,21 +133,37 @@
} }
.preview { .preview {
border: 1px dashed silver; .img-polaroid();
width: 50px; overflow: hidden;
height: 50px; width: 46px;
height: 46px;
float: left; float: left;
img { img {
position: relative;
display: block; display: block;
width: 100%; width: 100%;
} }
&.canOpen {
cursor: pointer;
&:hover {
border-color: @blue;
border-style: solid;
}
}
}
p, .btn-group {
color: #555;
margin-left: 60px;
display: block;
margin-bottom: 1px;
} }
p { p {
font-size: 9pt; font-size: 9pt;
color: #555;
margin-left: 60px;
} }
} }

View file

@ -0,0 +1,44 @@
/*
Colorbox Core Style:
The following CSS is consistent between example themes and should not be altered.
*/
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
#cboxOverlay{position:fixed; width:100%; height:100%;}
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
#cboxContent{position:relative;}
#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
#cboxTitle{margin:0;}
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
.cboxIframe{width:100%; height:100%; display:block; border:0;}
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
/*
User Style:
Change the following styles to modify the appearance of Colorbox. They are
ordered & tabbed in a way that represents the nesting of the generated HTML.
*/
#cboxOverlay{background:#000;}
#colorbox{outline:0;}
#cboxContent{margin-top:20px;background:#000;}
.cboxIframe{background:#fff;}
#cboxError{padding:50px; border:1px solid #ccc;}
#cboxLoadedContent{border:5px solid #000; background:#fff;}
#cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;}
#cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;}
#cboxLoadingGraphic{background:url(/styles/base/images/loading.gif) no-repeat center center;}
/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
#cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;}
#cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(/styles/base/images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;}
#cboxPrevious:hover{background-position:bottom left;}
#cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(/styles/base/images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;}
#cboxNext:hover{background-position:bottom right;}
#cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(/styles/base/images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;}
#cboxClose:hover{background-position:bottom center;}

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

View file

@ -535,7 +535,7 @@ button.ui-button::-moz-focus-inner {
height: 100%; height: 100%;
} }
.ui-progressbar .ui-progressbar-overlay { .ui-progressbar .ui-progressbar-overlay {
background: url("images/animated-overlay.gif"); background: url("/styles/base/images/animated-overlay.gif");
height: 100%; height: 100%;
filter: alpha(opacity=25); filter: alpha(opacity=25);
opacity: 0.25; opacity: 0.25;
@ -812,7 +812,7 @@ body .ui-tooltip {
} }
.ui-widget-content { .ui-widget-content {
border: 1px solid #aaaaaa/*{borderColorContent}*/; border: 1px solid #aaaaaa/*{borderColorContent}*/;
background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; background: #ffffff/*{bgColorContent}*/ url(/styles/base/images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
color: #222222/*{fcContent}*/; color: #222222/*{fcContent}*/;
} }
.ui-widget-content a { .ui-widget-content a {
@ -820,7 +820,7 @@ body .ui-tooltip {
} }
.ui-widget-header { .ui-widget-header {
border: 1px solid #aaaaaa/*{borderColorHeader}*/; border: 1px solid #aaaaaa/*{borderColorHeader}*/;
background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; background: #cccccc/*{bgColorHeader}*/ url(/styles/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
color: #222222/*{fcHeader}*/; color: #222222/*{fcHeader}*/;
font-weight: bold; font-weight: bold;
} }
@ -834,7 +834,7 @@ body .ui-tooltip {
.ui-widget-content .ui-state-default, .ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default { .ui-widget-header .ui-state-default {
border: 1px solid #d3d3d3/*{borderColorDefault}*/; border: 1px solid #d3d3d3/*{borderColorDefault}*/;
background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; background: #e6e6e6/*{bgColorDefault}*/ url(/styles/base/images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
font-weight: normal/*{fwDefault}*/; font-weight: normal/*{fwDefault}*/;
color: #555555/*{fcDefault}*/; color: #555555/*{fcDefault}*/;
} }
@ -851,7 +851,7 @@ body .ui-tooltip {
.ui-widget-content .ui-state-focus, .ui-widget-content .ui-state-focus,
.ui-widget-header .ui-state-focus { .ui-widget-header .ui-state-focus {
border: 1px solid #999999/*{borderColorHover}*/; border: 1px solid #999999/*{borderColorHover}*/;
background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; background: #dadada/*{bgColorHover}*/ url(/styles/base/images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
font-weight: normal/*{fwDefault}*/; font-weight: normal/*{fwDefault}*/;
color: #212121/*{fcHover}*/; color: #212121/*{fcHover}*/;
} }
@ -866,7 +866,7 @@ body .ui-tooltip {
.ui-widget-content .ui-state-active, .ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active { .ui-widget-header .ui-state-active {
border: 1px solid #aaaaaa/*{borderColorActive}*/; border: 1px solid #aaaaaa/*{borderColorActive}*/;
background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; background: #ffffff/*{bgColorActive}*/ url(/styles/base/images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
font-weight: normal/*{fwDefault}*/; font-weight: normal/*{fwDefault}*/;
color: #212121/*{fcActive}*/; color: #212121/*{fcActive}*/;
} }
@ -883,7 +883,7 @@ body .ui-tooltip {
.ui-widget-content .ui-state-highlight, .ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight { .ui-widget-header .ui-state-highlight {
border: 1px solid #fcefa1/*{borderColorHighlight}*/; border: 1px solid #fcefa1/*{borderColorHighlight}*/;
background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(/styles/base/images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
color: #363636/*{fcHighlight}*/; color: #363636/*{fcHighlight}*/;
} }
.ui-state-highlight a, .ui-state-highlight a,
@ -895,7 +895,7 @@ body .ui-tooltip {
.ui-widget-content .ui-state-error, .ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error { .ui-widget-header .ui-state-error {
border: 1px solid #cd0a0a/*{borderColorError}*/; border: 1px solid #cd0a0a/*{borderColorError}*/;
background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; background: #fef1ec/*{bgColorError}*/ url(/styles/base/images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
color: #cd0a0a/*{fcError}*/; color: #cd0a0a/*{fcError}*/;
} }
.ui-state-error a, .ui-state-error a,
@ -941,27 +941,27 @@ body .ui-tooltip {
} }
.ui-icon, .ui-icon,
.ui-widget-content .ui-icon { .ui-widget-content .ui-icon {
background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; background-image: url(/styles/base/images/ui-icons_222222_256x240.png)/*{iconsContent}*/;
} }
.ui-widget-header .ui-icon { .ui-widget-header .ui-icon {
background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; background-image: url(/styles/base/images/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
} }
.ui-state-default .ui-icon { .ui-state-default .ui-icon {
background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; background-image: url(/styles/base/images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
} }
.ui-state-hover .ui-icon, .ui-state-hover .ui-icon,
.ui-state-focus .ui-icon { .ui-state-focus .ui-icon {
background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; background-image: url(/styles/base/images/ui-icons_454545_256x240.png)/*{iconsHover}*/;
} }
.ui-state-active .ui-icon { .ui-state-active .ui-icon {
background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; background-image: url(/styles/base/images/ui-icons_454545_256x240.png)/*{iconsActive}*/;
} }
.ui-state-highlight .ui-icon { .ui-state-highlight .ui-icon {
background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; background-image: url(/styles/base/images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/;
} }
.ui-state-error .ui-icon, .ui-state-error .ui-icon,
.ui-state-error-text .ui-icon { .ui-state-error-text .ui-icon {
background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; background-image: url(/styles/base/images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
} }
/* positioning */ /* positioning */
@ -1174,14 +1174,14 @@ body .ui-tooltip {
/* Overlays */ /* Overlays */
.ui-widget-overlay { .ui-widget-overlay {
background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; background: #aaaaaa/*{bgColorOverlay}*/ url(/styles/base/images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
opacity: .3/*{opacityOverlay}*/; opacity: .3/*{opacityOverlay}*/;
filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/; filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/;
} }
.ui-widget-shadow { .ui-widget-shadow {
margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
padding: 8px/*{thicknessShadow}*/; padding: 8px/*{thicknessShadow}*/;
background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; background: #aaaaaa/*{bgColorShadow}*/ url(/styles/base/images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
opacity: .3/*{opacityShadow}*/; opacity: .3/*{opacityShadow}*/;
filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/; filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/;
border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/;

View file

@ -9,9 +9,6 @@ html body {
background: #2D2D2D; background: #2D2D2D;
height: 100%; height: 100%;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
background-image: url('http://mlpforums.com/public/style_images/mlp/bg1-night-lightsout.png'), url('http://mlpforums.com/public/style_images/mlp/bg3-night.jpg');
background-position: bottom center, 50% 350px;
} }
.site-content { .site-content {

View file

@ -46,7 +46,7 @@
<ul class="account-tracks-listing strech-to-bottom"> <ul class="account-tracks-listing strech-to-bottom">
<li ng-repeat="track in tracks" ng-class="{selected: track.id == selectedTrack.id, 'is-published': track.is_published}"> <li ng-repeat="track in tracks" ng-class="{selected: track.id == selectedTrack.id, 'is-published': track.is_published}">
<a href="/account/content/tracks/{{track.id}}"> <a href="/account/content/tracks/{{track.id}}">
<div class="image"></div> <img class="image" src="{{track.cover_url}}" />
<span class="title">{{track.title}}</span> <span class="title">{{track.title}}</span>
<span class="published">{{track.created_at | pfmdate:'MM/dd/yyyy'}}</span> <span class="published">{{track.created_at | pfmdate:'MM/dd/yyyy'}}</span>
</a> </a>
@ -103,12 +103,15 @@
<div class="form-row span6" ng-class="{'has-error': errors.cover != null}"> <div class="form-row span6" ng-class="{'has-error': errors.cover != null}">
<label class="strong">Track Cover: </label> <label class="strong">Track Cover: </label>
<div class="cover-upload"> <div class="cover-upload">
<div class="preview"><img id="coverPreview" /></div> <div class="preview" ng-class="{canOpen: isCoverLoaded}" ng-click="previewCover()"><img id="coverPreview" ng-show="isCoverLoaded" /></div>
<p> <p>
Track cover must be a PNG that is at least 350x350. <br /> Track cover must be a PNG that is at least 350x350. <br />
<a href="#" pfm-eat-click ng-click="uploadTrackCover()" class="btn btn-info btn-small"><i class="icon-upload"></i> Upload Track Cover</a>
<input type="file" id="coverImage" onchange="angular.element(this).scope().setCoverImage(this)" /> <input type="file" id="coverImage" onchange="angular.element(this).scope().setCoverImage(this)" />
</p> </p>
<div class="btn-group">
<a href="#" pfm-eat-click ng-click="uploadTrackCover()" class="btn btn-info btn-small"><i class="icon-upload"></i> Upload</a>
<a href="#" pfm-eat-click ng-click="clearTrackCover()" class="btn btn-danger btn-small" ng-show="edit.cover"><i class="icon-remove"></i></a>
</div>
<div class="error">{{errors.cover}}</div> <div class="error">{{errors.cover}}</div>
</div> </div>
</div> </div>

View file

@ -1,14 +0,0 @@
<div>
<ul class="tabs">
<li ng-class="{active: $state.includes('account-favorites.tracks')}"><a href="/account/favorites">Tracks</a></li>
<li ng-class="{active: $state.includes('account-favorites.albums')}"><a href="/account/favorites/albums">Albums</a></li>
<li ng-class="{active: $state.includes('account-favorites.playlists')}"><a href="/account/favorites/playlists">Playlists</a></li>
</ul>
<ui-view></ui-view>
<pre>
$state = {{$state.current.name}}
$stateParams = {{$stateParams}}
</pre>
</div>

View file

@ -1 +0,0 @@
<h2>Favorite Albums</h2>

View file

@ -1 +0,0 @@
<h2>Favorite Playlists</h2>

View file

@ -1 +0,0 @@
<h2>Favorite tracks</h2>

View file

@ -0,0 +1,14 @@
<div>
<ul class="tabs">
<li ng-class="{active: $state.includes('account-favourites.tracks')}"><a href="/account/favourites">Tracks</a></li>
<li ng-class="{active: $state.includes('account-favourites.albums')}"><a href="/account/favourites/albums">Albums</a></li>
<li ng-class="{active: $state.includes('account-favourites.playlists')}"><a href="/account/favourites/playlists">Playlists</a></li>
</ul>
<ui-view></ui-view>
<pre>
$state = {{$state.current.name}}
$stateParams = {{$stateParams}}
</pre>
</div>

View file

@ -0,0 +1 @@
<h2>Favourite Albums</h2>

View file

@ -0,0 +1 @@
<h2>Favourite Playlists</h2>

View file

@ -0,0 +1 @@
<h2>Favourite tracks</h2>

2
vendor/autoload.php vendored
View file

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer' . '/autoload_real.php'; require_once __DIR__ . '/composer' . '/autoload_real.php';
return ComposerAutoloaderInit228de5cdbd28cc56fb0110585167d4be::getLoader(); return ComposerAutoloaderInit3b14f774048abcb51cb73f0018822c49::getLoader();

View file

@ -9,7 +9,9 @@ return array(
'AbstractOutputProvider' => $vendorDir . '/codescale/ffmpeg-php/provider/AbstractOutputProvider.php', 'AbstractOutputProvider' => $vendorDir . '/codescale/ffmpeg-php/provider/AbstractOutputProvider.php',
'AccountController' => $baseDir . '/app/controllers/AccountController.php', 'AccountController' => $baseDir . '/app/controllers/AccountController.php',
'AlbumsController' => $baseDir . '/app/controllers/AlbumsController.php', 'AlbumsController' => $baseDir . '/app/controllers/AlbumsController.php',
'ApiControllerBase' => $baseDir . '/app/controllers/ApiControllerBase.php',
'Api\\Web\\AuthController' => $baseDir . '/app/controllers/Api/Web/AuthController.php', 'Api\\Web\\AuthController' => $baseDir . '/app/controllers/Api/Web/AuthController.php',
'Api\\Web\\TaxonomiesController' => $baseDir . '/app/controllers/Api/Web/TaxonomiesController.php',
'Api\\Web\\TracksController' => $baseDir . '/app/controllers/Api/Web/TracksController.php', 'Api\\Web\\TracksController' => $baseDir . '/app/controllers/Api/Web/TracksController.php',
'ArtistsController' => $baseDir . '/app/controllers/ArtistsController.php', 'ArtistsController' => $baseDir . '/app/controllers/ArtistsController.php',
'Assetic\\AssetManager' => $vendorDir . '/kriswallsmith/assetic/src/Assetic/AssetManager.php', 'Assetic\\AssetManager' => $vendorDir . '/kriswallsmith/assetic/src/Assetic/AssetManager.php',
@ -123,9 +125,12 @@ return array(
'ClassPreloader\\Parser\\NodeTraverser' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/NodeTraverser.php', 'ClassPreloader\\Parser\\NodeTraverser' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/NodeTraverser.php',
'Commands\\CommandBase' => $baseDir . '/app/models/Commands/CommandBase.php', 'Commands\\CommandBase' => $baseDir . '/app/models/Commands/CommandBase.php',
'Commands\\CommandResponse' => $baseDir . '/app/models/Commands/CommandResponse.php', 'Commands\\CommandResponse' => $baseDir . '/app/models/Commands/CommandResponse.php',
'Commands\\RegisterUserCommand' => $baseDir . '/app/models/Commands/RegisterUserCommand.php', 'Commands\\DeleteTrackCommand' => $baseDir . '/app/models/Commands/DeleteTrackCommand.php',
'Commands\\EditTrackCommand' => $baseDir . '/app/models/Commands/EditTrackCommand.php',
'Commands\\UploadTrackCommand' => $baseDir . '/app/models/Commands/UploadTrackCommand.php', 'Commands\\UploadTrackCommand' => $baseDir . '/app/models/Commands/UploadTrackCommand.php',
'ContentController' => $baseDir . '/app/controllers/ContentController.php', 'ContentController' => $baseDir . '/app/controllers/ContentController.php',
'Cover' => $baseDir . '/app/models/Cover.php',
'CreateImagesTable' => $baseDir . '/app/database/migrations/2013_07_26_230827_create_images_table.php',
'CreateTracksTable' => $baseDir . '/app/database/migrations/2013_06_27_015259_create_tracks_table.php', 'CreateTracksTable' => $baseDir . '/app/database/migrations/2013_06_27_015259_create_tracks_table.php',
'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_06_07_003952_create_users_table.php', 'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_06_07_003952_create_users_table.php',
'DatabaseSeeder' => $baseDir . '/app/database/seeds/DatabaseSeeder.php', 'DatabaseSeeder' => $baseDir . '/app/database/seeds/DatabaseSeeder.php',
@ -394,7 +399,10 @@ return array(
'Doctrine\\DBAL\\Types\\Type' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php', 'Doctrine\\DBAL\\Types\\Type' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php',
'Doctrine\\DBAL\\Types\\VarDateTimeType' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeType.php', 'Doctrine\\DBAL\\Types\\VarDateTimeType' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeType.php',
'Doctrine\\DBAL\\Version' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Version.php', 'Doctrine\\DBAL\\Version' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Version.php',
'Entities\\Genre' => $baseDir . '/app/models/Entities/Genre.php',
'Entities\\License' => $baseDir . '/app/models/Entities/License.php',
'Entities\\Track' => $baseDir . '/app/models/Entities/Track.php', 'Entities\\Track' => $baseDir . '/app/models/Entities/Track.php',
'Entities\\TrackType' => $baseDir . '/app/models/Entities/TrackType.php',
'Entities\\User' => $baseDir . '/app/models/Entities/User.php', 'Entities\\User' => $baseDir . '/app/models/Entities/User.php',
'Evenement\\EventEmitter' => $vendorDir . '/evenement/evenement/src/Evenement/EventEmitter.php', 'Evenement\\EventEmitter' => $vendorDir . '/evenement/evenement/src/Evenement/EventEmitter.php',
'Evenement\\EventEmitter2' => $vendorDir . '/evenement/evenement/src/Evenement/EventEmitter2.php', 'Evenement\\EventEmitter2' => $vendorDir . '/evenement/evenement/src/Evenement/EventEmitter2.php',
@ -411,7 +419,7 @@ return array(
'FFmpegOutputProviderTest' => $vendorDir . '/codescale/ffmpeg-php/test/provider/FFmpegOutputProviderTest.php', 'FFmpegOutputProviderTest' => $vendorDir . '/codescale/ffmpeg-php/test/provider/FFmpegOutputProviderTest.php',
'FFprobeOutputProvider' => $vendorDir . '/codescale/ffmpeg-php/provider/FFprobeOutputProvider.php', 'FFprobeOutputProvider' => $vendorDir . '/codescale/ffmpeg-php/provider/FFprobeOutputProvider.php',
'FFprobeOutputProviderTest' => $vendorDir . '/codescale/ffmpeg-php/test/provider/FFprobeOutputProviderTest.php', 'FFprobeOutputProviderTest' => $vendorDir . '/codescale/ffmpeg-php/test/provider/FFprobeOutputProviderTest.php',
'FavoritesController' => $baseDir . '/app/controllers/FavoritesController.php', 'FavouritesController' => $baseDir . '/app/controllers/FavouritesController.php',
'Guzzle\\Common\\AbstractHasDispatcher' => $vendorDir . '/guzzle/common/Guzzle/Common/AbstractHasDispatcher.php', 'Guzzle\\Common\\AbstractHasDispatcher' => $vendorDir . '/guzzle/common/Guzzle/Common/AbstractHasDispatcher.php',
'Guzzle\\Common\\Collection' => $vendorDir . '/guzzle/common/Guzzle/Common/Collection.php', 'Guzzle\\Common\\Collection' => $vendorDir . '/guzzle/common/Guzzle/Common/Collection.php',
'Guzzle\\Common\\Event' => $vendorDir . '/guzzle/common/Guzzle/Common/Event.php', 'Guzzle\\Common\\Event' => $vendorDir . '/guzzle/common/Guzzle/Common/Event.php',
@ -1814,6 +1822,7 @@ return array(
'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => $vendorDir . '/symfony/translation/Symfony/Component/Translation/Writer/TranslationWriter.php', 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => $vendorDir . '/symfony/translation/Symfony/Component/Translation/Writer/TranslationWriter.php',
'TestCase' => $baseDir . '/app/tests/TestCase.php', 'TestCase' => $baseDir . '/app/tests/TestCase.php',
'TracksController' => $baseDir . '/app/controllers/TracksController.php', 'TracksController' => $baseDir . '/app/controllers/TracksController.php',
'UsersController' => $baseDir . '/app/controllers/UsersController.php',
'Whoops\\Exception\\ErrorException' => $vendorDir . '/filp/whoops/src/Whoops/Exception/ErrorException.php', 'Whoops\\Exception\\ErrorException' => $vendorDir . '/filp/whoops/src/Whoops/Exception/ErrorException.php',
'Whoops\\Exception\\Frame' => $vendorDir . '/filp/whoops/src/Whoops/Exception/Frame.php', 'Whoops\\Exception\\Frame' => $vendorDir . '/filp/whoops/src/Whoops/Exception/Frame.php',
'Whoops\\Exception\\FrameCollection' => $vendorDir . '/filp/whoops/src/Whoops/Exception/FrameCollection.php', 'Whoops\\Exception\\FrameCollection' => $vendorDir . '/filp/whoops/src/Whoops/Exception/FrameCollection.php',

View file

@ -2,7 +2,7 @@
// autoload_real.php generated by Composer // autoload_real.php generated by Composer
class ComposerAutoloaderInit228de5cdbd28cc56fb0110585167d4be class ComposerAutoloaderInit3b14f774048abcb51cb73f0018822c49
{ {
private static $loader; private static $loader;
@ -19,9 +19,9 @@ class ComposerAutoloaderInit228de5cdbd28cc56fb0110585167d4be
return self::$loader; return self::$loader;
} }
spl_autoload_register(array('ComposerAutoloaderInit228de5cdbd28cc56fb0110585167d4be', 'loadClassLoader'), true, true); spl_autoload_register(array('ComposerAutoloaderInit3b14f774048abcb51cb73f0018822c49', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(); self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit228de5cdbd28cc56fb0110585167d4be', 'loadClassLoader')); spl_autoload_unregister(array('ComposerAutoloaderInit3b14f774048abcb51cb73f0018822c49', 'loadClassLoader'));
$vendorDir = dirname(__DIR__); $vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir); $baseDir = dirname($vendorDir);