Your task will be to build a File/Media System with a Download Manager (restricting who can download files) in Laravel.
- use MySQL, Eloquent ORM & SoftDeletes
- cross-browser & mobile compatible
- implement a simple ajax-powered search (searching user, title, description & array of tags)
- I'll take care of slugs and tagging
Use entrust to implement:
- can_bulk_edit_files (for moderators)
- can_bulk_mark_files (for moderators, spam)
- can_delete_files (soft delete only)
- can_bulk_delete_files (for moderators, soft delete only)
- can_manage_files (optional permanent delete, also sees soft deleted files)
I think they are pretty self-explanatory.
# View: index
- Toggleable between Grid (Default) and List view (paginated)
- Filter by Filetype, upload date, download count & rating
- Sort ASC & DESC
- select/deselect all button and action dropdown (intended for moderators and admins)
--- bulk edit selected (can_bulk_edit_files)
--- mark selected as spam (can_bulk_mark_files)
--- delete selected (can_delete_files)
--- delete selected permanently (can_manage_files only)
--- restore selected (can_manage_files only)
- items (like WordPress media manager):
--- on hover show buttons for delete, report/spam, view/edit modal, select
--- on hover show rating
--- on click -> open Quick View modal (load via Ajax/Angular, see attached drawing in ZIP-file)
- search field
# View: show-file
- Show same like Quick View modal plus ratings overview, revisions list, ratings, write/edit rating, related files, other files by user.
- Show a little pencil icon next to editable contents like title or description, on click open a modal where user can edit those contents
- keep a history of those edits (don't make them a revision)
- upload either via Add Files button or drag and drop on index view
- bulk upload up to 10 files at a time (like on WordPress Media Manager)
- add options to config file which filetypes can be uploaded, what size each file can have, preview image sizes (like in WordPress, preview-xs, preview-sm, preview-md, preview-lg)
- automatically generate small, cropped preview images depending on set image sizes (where possible, otherwhise use a default with filetype icon)
Implement a simple revision system, where all users who have can_upload_file permission can upload newer versions of a file together with a short note of what has changed (like "Fixed typos").
On the show-file view, there should be a section, where all revisions are listed and downloadable.
# Attaching files to other Models
Files should be attachable to other models, therefor implement a Many To Many Polymorphic Relation via a `files_pivot` table (and of course FileableTrait & FileableInterface for attachable models like a post or sth).
There should be at least an attachFile() and a detachFile() method available.
# Download Manager / Restrictions
By default all files are only downloadable for logged in users (with permission (can_download_files), guests can only view but not download.
Furthermore Users with can_manage_files permission can always set files to be publicly accessible.
# File storage: Amazon AWS S3
Implement via Laravels Filesystem / Cloud Storage
see [url removed, login to view] (flysystem)
- use Laravel 5.1 or higher
- use Bootstrap 3.3.x
- use FontAwesome 4.x
- use jQuery 2.x
- use AngularJS (in case necessary)
- use valid HTML5
- provide well structured SCSS files
- make responsive
- well commented code (PHPDoc)
- meet PHP Coding Standards (see [url removed, login to view])
Of course if you have any further ideas or think we should do sth differently, I'm shall be glad to hear them.
Bu iş için 25 freelancer ortalamada €1017 teklif veriyor
The requirements are pretty explanatory and exhaustive. I would suggest using some Packagist packages and achieving some of the requirements. We can discuss the others in-depth