diff --git a/.gitignore b/.gitignore
new file mode 100755
index 00000000..9a73e662
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.idea
+/server/vendor
+/client/node_modules
+.env
+public/assets/js/bundle.js
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 00000000..d3e5d1a1
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,19 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 devfake
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..63470395
--- /dev/null
+++ b/README.md
@@ -0,0 +1,46 @@
+![flox](http://80.240.132.120/flox/public/assets/img/logo-big.png)
+
+###[Try Demo](http://80.240.132.120/flox/public/)
+
+Flox is a self hosted Movies, Series and Anime watch list. It's build on top of PHP (Laravel), MySQL and React and uses [The Movie Database](https://www.themoviedb.org/) API.
+
+**The current status miss some important features. See Todo.**
+
+The rating based on an 5-Point system.
+
+### Requirements
+
+* PHP 5.5.9+
+* [Composer](https://getcomposer.org/)
+* [The Movie Database](https://www.themoviedb.org/) Account for the [API-Key](https://www.themoviedb.org/faq/api).
+
+### Install
+
+##### Server
+
+* Download Flox and `cd` into `server`.
+* Rename `.env.example` to `.env` and fill all your credentials out (your database and TMDb API-Key).
+* Run `composer install`.
+* Give `storage` recursive write access.
+* Run `php artisan migrate`. This builds the database schema for Flox.
+* Since the insertion of new items currently not working, run `php artisan db:seed` for prefabricated items.
+
+##### Client / Public
+
+* Open the `public/assets/js/config.js` file and modify them. The `uri` is needed for the react-router. If your app lives in the root folder, change it to `/`. The rest should be clear.
+
+**Only for development:**
+* Run `npm install` in your `client` folder.
+* Run `gulp watch` or `gulp watch --production` and make your work.
+
+### Todo
+
+* Fix load icon jerk.
+* Edit, remove and add items.
+* Login for admin (maybe with options).
+* Detail page for items (rather than direct to youtube).
+* Easy installer.
+* Rewrite Server API.
+* Light Theme.
+* Modify and add own categorys.
+* For series and animes a list of episodes.
diff --git a/client/app/api.js b/client/app/api.js
new file mode 100644
index 00000000..2ca0e2ac
--- /dev/null
+++ b/client/app/api.js
@@ -0,0 +1,38 @@
+import React from 'react';
+
+class Api extends React.Component {
+
+ static categories() {
+ return $.get(config.api + 'all-categories');
+ }
+
+ static categoryItems(category) {
+ return $.get(config.api + 'category-items/' + category + '/' + this.usersFilterFor(category));
+ }
+
+ static usersFilterFor(category) {
+ if( ! localStorage.getItem('category-' + category)) {
+ localStorage.setItem('category-' + category, 'seen');
+ }
+
+ return localStorage.getItem('category-' + category);
+ }
+
+ static changeUsersFilterFor(category, type) {
+ localStorage.setItem('category-' + category, type);
+ }
+
+ static search(type, value) {
+ return $.get(config.api + 'search/' + type + '/' + value);
+ }
+
+ /*static searchTMDBByID(id) {
+ return $.get(config.api + 'search/tmdb/id/' + id);
+ }
+
+ static searchItemBySlug(slug) {
+ return $.get(config.api + 'item/' + slug)
+ }*/
+}
+
+export default Api;
diff --git a/client/app/app.js b/client/app/app.js
new file mode 100644
index 00000000..f1abdad2
--- /dev/null
+++ b/client/app/app.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import Router from 'react-router';
+import Api from './api';
+import Home from './sites/home';
+import Category from './sites/category';
+//import Show from './partials/show';
+import Header from './partials/header';
+import Footer from './partials/footer';
+
+let Route = Router.Route;
+
+let RouteHandler = Router.RouteHandler;
+
+class Flox extends React.Component {
+
+ render() {
+ return (
+
+
+
+
+
+ );
+ }
+}
+
+// Mäh...
+//
+let routes = (
+
+
+
+
+);
+
+Router.run(routes, Router.HistoryLocation, (Root) => {
+ React.render( , document.querySelector('.flox'));
+});
diff --git a/client/app/partials/box.js b/client/app/partials/box.js
new file mode 100644
index 00000000..2430445d
--- /dev/null
+++ b/client/app/partials/box.js
@@ -0,0 +1,60 @@
+import React from 'react';
+import Router from 'react-router';
+import FilterOptions from './filter-options';
+import Item from './item';
+import Api from '../api';
+
+let Link = Router.Link;
+
+class Box extends React.Component {
+
+ state = {
+ // No need to sync parent items.
+ items: this.props.items
+ }
+
+ render() {
+ let items = this.state.items.map((value, key) => {
+ return
+ });
+
+ return (
+
+
+
+
+
+ {this.props.category.name} ({this.props.category.items_count.aggregate})
+
+
+
+
+
+ { ! this.state.items.length ? : items}
+
+
+
+
+
+ );
+ }
+
+ changeFilter(filterBy, category) {
+ Api.changeUsersFilterFor(category, filterBy);
+
+ this.setState({
+ items: []
+ })
+
+ // todo: Move to api.
+ setTimeout(() => {
+ $.get(config.api + this.props.type + '-items/' + this.props.category.slug + '/' + filterBy, (value) => {
+ this.setState({
+ items: value.items
+ })
+ });
+ }, 200);
+ }
+}
+
+export default Box;
diff --git a/client/app/partials/filter-options.js b/client/app/partials/filter-options.js
new file mode 100644
index 00000000..deafee0c
--- /dev/null
+++ b/client/app/partials/filter-options.js
@@ -0,0 +1,22 @@
+import React from 'react';
+import Api from '../api';
+
+class FilterOptions extends React.Component {
+
+ render() {
+ return (
+
+
+
+
+
+
+ );
+ }
+
+ setActiveIf(type) {
+ if(type === Api.usersFilterFor(this.props.category)) return 'active';
+ }
+}
+
+export default FilterOptions;
diff --git a/client/app/partials/flox-item.js b/client/app/partials/flox-item.js
new file mode 100644
index 00000000..febdd8b6
--- /dev/null
+++ b/client/app/partials/flox-item.js
@@ -0,0 +1,28 @@
+import React from 'react';
+
+class FloxItem extends React.Component {
+
+ render() {
+ return (
+
+
+
+ );
+ }
+}
+
+export default FloxItem;
\ No newline at end of file
diff --git a/client/app/partials/footer.js b/client/app/partials/footer.js
new file mode 100644
index 00000000..933005b8
--- /dev/null
+++ b/client/app/partials/footer.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import Router from 'react-router';
+
+let Link = Router.Link;
+
+class Footer extends React.Component {
+
+ render() {
+ return (
+
+
+
+
+ This product uses the TMDb API but is not endorsed or certified by TMDb
+
+
+
+
+
+ );
+ }
+}
+
+export default Footer;
\ No newline at end of file
diff --git a/client/app/partials/header.js b/client/app/partials/header.js
new file mode 100644
index 00000000..8a2696ff
--- /dev/null
+++ b/client/app/partials/header.js
@@ -0,0 +1,54 @@
+import React from 'react';
+import Router from 'react-router';
+import Modal from './modal';
+
+let Link = Router.Link;
+
+class Header extends React.Component {
+
+ state = {
+ showModal: false,
+ type: ''
+ }
+
+ render() {
+ return (
+
+
+ {this.state.showModal ?
: ''}
+
+
+
+
+
+
+
+
+
+
+
+ All
+ Movies
+ Series
+ Animes
+
+
+
+
+
+
+
+
+
+ );
+ }
+
+ changeModal(type = '') {
+ this.setState({
+ showModal: ! this.state.showModal,
+ type: type
+ })
+ }
+}
+
+export default Header;
diff --git a/client/app/partials/item.js b/client/app/partials/item.js
new file mode 100644
index 00000000..27b2c75d
--- /dev/null
+++ b/client/app/partials/item.js
@@ -0,0 +1,57 @@
+import React from 'react';
+import Router from 'react-router';
+import Api from '../api';
+import FloxItem from './flox-item';
+import TMDBItem from './tmdb-item';
+
+let Link = Router.Link;
+
+class Item extends React.Component {
+
+ state = {
+ loadClass: 'loading'
+ }
+
+ componentDidMount() {
+ // todo: Move to React animation.
+ setTimeout(() => {
+ this.setState({
+ loadClass: ''
+ });
+ }, 20);
+ }
+
+ render() {
+ let style = {
+ backgroundImage:
+ this.props.data.poster === 'null' || this.props.data.poster === null || typeof this.props.data.poster === 'undefined'
+ ? ''
+ : 'url(' + config.posterSmall + this.props.data.poster + ')'
+ }
+
+ return (
+
+ this.props.tmdb
+ ?
+ :
+
+ )
+ }
+
+ released() {
+ let released = new Date(this.props.data.released * 1000);
+ let language = navigator.language || navigator.userLanguage;
+
+ return {
+ year: released.getFullYear(),
+ full: released.toLocaleDateString(language, {
+ weekday: 'long',
+ year: 'numeric',
+ month: 'long',
+ day: 'numeric'
+ })
+ }
+ }
+}
+
+export default Item;
\ No newline at end of file
diff --git a/client/app/partials/modal.js b/client/app/partials/modal.js
new file mode 100644
index 00000000..381cc435
--- /dev/null
+++ b/client/app/partials/modal.js
@@ -0,0 +1,92 @@
+import React from 'react';
+import Api from '../api';
+import Item from './item';
+
+class Modal extends React.Component {
+
+ state = {
+ items: [],
+ searching: false,
+ searched: false,
+ loadClass: 'loading'
+ }
+
+ componentDidMount() {
+ // Avoid 'jerk' if overflow from body is hidden.
+ setTimeout(() => {
+ $('body').addClass('modal-active');
+ }, 200);
+
+ React.findDOMNode(this.refs.input).focus();
+
+ setTimeout(() => {
+ this.setState({
+ loadClass: ''
+ });
+ }, 20);
+ }
+
+ componentWillUnmount() {
+ $('body').removeClass('modal-active');
+ }
+
+ render() {
+ let content = '';
+ let items = this.state.items.map((value, key) => {
+ return
+ });
+
+ if( ! this.state.items.length && this.state.searched) {
+ content = No items found :(
+ } else if(this.state.searching) {
+ content =
+ } else if(this.state.items.length && ! this.state.searching) {
+ content = items;
+ }
+
+ return (
+
+
+
+
+
+
+ {this.props.type === 'flox' ? 'Search' : 'Add'}
+
+
+
+
+ {content}
+
+
+
+
+
+
+ );
+ }
+
+ searchKeyEvents(event) {
+ if(event.key === 'Enter') {
+ this.setState({
+ searching: true,
+ searched: false
+ });
+
+ Api.search(this.props.type, event.target.value).then((value) => {
+ console.log(value);
+ setTimeout(() => {
+ this.setState({
+ searching: false,
+ searched: true,
+ items: value
+ });
+ }, 200);
+ });
+ } else if(event.key === 'Escape') {
+ this.props.closeModal();
+ }
+ }
+}
+
+export default Modal;
\ No newline at end of file
diff --git a/client/app/partials/tmdb-item.js b/client/app/partials/tmdb-item.js
new file mode 100644
index 00000000..e099a1c7
--- /dev/null
+++ b/client/app/partials/tmdb-item.js
@@ -0,0 +1,24 @@
+import React from 'react';
+
+class TMDBItem extends React.Component {
+
+ render() {
+ return (
+
+
+
+
+ {this.props.bgStyle.backgroundImage ? '' : }
+
+
+
+
{this.props.released().year}
+
{this.props.data.title}
+
+
+
+ );
+ }
+}
+
+export default TMDBItem;
\ No newline at end of file
diff --git a/client/app/sites/category.js b/client/app/sites/category.js
new file mode 100644
index 00000000..cbe2834f
--- /dev/null
+++ b/client/app/sites/category.js
@@ -0,0 +1,47 @@
+import React from 'react';
+import Box from '../partials/box';
+import Api from '../api';
+
+class Category extends React.Component {
+
+ state = {
+ category: {},
+ items: []
+ }
+
+ componentWillReceiveProps(nextProps) {
+ this.setState({
+ category: {},
+ items: []
+ });
+
+ this.loadCategoryItems(nextProps);
+ }
+
+ constructor(props) {
+ super(props);
+ this.loadCategoryItems(props);
+ }
+
+ // todo: fix icon load.
+ render() {
+ return (
+
+ { ! this.state.items.length ? : }
+
+ );
+ }
+
+ loadCategoryItems(props) {
+ setTimeout(() => {
+ Api.categoryItems(props.params.category).then((value) => {
+ this.setState({
+ category: value.category,
+ items: value.items
+ });
+ });
+ }, 200);
+ }
+}
+
+export default Category;
diff --git a/client/app/sites/home.js b/client/app/sites/home.js
new file mode 100644
index 00000000..796b0905
--- /dev/null
+++ b/client/app/sites/home.js
@@ -0,0 +1,56 @@
+import React from 'react';
+import Box from '../partials/box';
+import Api from '../api';
+
+class Home extends React.Component {
+
+ state = {
+ items: []
+ }
+
+ constructor() {
+ super();
+ this.loadHomeItems();
+ }
+
+ render() {
+ let boxes = this.state.items.map((value, key) => {
+ return
+ });
+
+ return (
+
+
+ { ! this.state.items.length ? : boxes}
+
+
+ );
+ }
+
+ loadHomeItems() {
+ let items = [];
+ let requests = [];
+ let self = this;
+
+ Api.categories().then((value) => {
+ value.forEach((data) => {
+ requests.push($.get(config.api + 'home-items/' + data.slug + '/' + Api.usersFilterFor(data.slug)));
+ });
+
+ $.when.apply($, requests).then(function() {
+ for(let i = 0; i < arguments.length; i++) {
+ items.push({
+ category: arguments[i][0].category,
+ items: arguments[i][0].items
+ });
+ }
+
+ self.setState({
+ items: items
+ });
+ });
+ });
+ }
+}
+
+export default Home;
diff --git a/client/app/sites/show.js b/client/app/sites/show.js
new file mode 100644
index 00000000..010f0350
--- /dev/null
+++ b/client/app/sites/show.js
@@ -0,0 +1,51 @@
+import React from 'react';
+import Api from '../api';
+
+// Todo: Make it work!
+class Show extends React.Component {
+
+ state = {
+ item: {}
+ }
+
+ constructor(props) {
+ super(props);
+ this.loadItem();
+ }
+
+ render() {
+ let style = {
+ backgroundImage:
+ this.state.item.poster == 'null' || typeof this.state.item.poster === 'undefined' ? '' : 'url(' + config.posterBig + this.state.item.poster + ')'
+ }
+
+ return (
+
+
+
+
+
+
+ {style.backgroundImage ? '' :
}
+
+
+
+
+
+
{this.state.item.title}
+
+
+
+
+
+ );
+ }
+
+ loadItem() {
+ Api.searchItemBySlug(this.props.params.item).then((value) => {
+ Api.searchTMDBByID(value.tmdb_id);
+ });
+ }
+}
+
+export default Show;
diff --git a/client/assets/sass/_base.scss b/client/assets/sass/_base.scss
new file mode 100644
index 00000000..ab55665e
--- /dev/null
+++ b/client/assets/sass/_base.scss
@@ -0,0 +1,53 @@
+* {
+ margin: 0;
+ padding: 0;
+
+ box-sizing: border-box;
+}
+
+.wrap {
+ //max-width: 1200px;
+ //width: 100%;
+ width: 1100px;
+ margin: 0 auto;
+ padding: 0 20px;
+}
+
+body {
+ background: $dark;
+ font-family: 'Titillium Web', sans-serif;
+ padding: 65px 0 0 0;
+ overflow-y: scroll;
+}
+
+.modal-active {
+ overflow: hidden;
+}
+
+::-moz-selection {
+ background: rgba(#474747, .99);
+ color: #fff;
+}
+
+::selection {
+ background: rgba(#474747, .99);
+ color: #fff;
+}
+
+::-webkit-input-placeholder {
+ color: #636363;
+}
+
+::-moz-placeholder {
+ color: #636363;
+ opacity: 1;
+}
+
+::-ms-input-placeholder {
+ color: #636363;
+}
+
+ul { list-style: none; }
+a { text-decoration: none; outline: 0; }
+img { border: 0; }
+textarea, input { outline: 0; }
diff --git a/client/assets/sass/_content.scss b/client/assets/sass/_content.scss
new file mode 100644
index 00000000..e632ef3f
--- /dev/null
+++ b/client/assets/sass/_content.scss
@@ -0,0 +1,219 @@
+.flox {
+ position: relative;
+ width: 100%;
+ min-height: calc(100vh + 120px);
+ float: left;
+ padding: 0 0 120px 0;
+}
+
+.box {
+ float: left;
+ width: 100%;
+ padding: 60px 0;
+ position: relative;
+
+ &:nth-child(2) {
+ background: #242424;
+ }
+}
+
+.box-headline {
+ font-size: 22px;
+ color: #555;
+
+ &:hover,
+ &:hover {
+ background: $main;
+ color: #fff;
+ }
+}
+
+.box-options {
+ float: right;
+
+ i {
+ float: left;
+ cursor: pointer;
+ margin: 0 0 0 20px;
+ opacity: .8;
+
+ &:active {
+ opacity: .6;
+ }
+ }
+}
+
+.icon-time {
+
+ &.active {
+ @extend .icon-time-active;
+ }
+}
+
+.icon-star {
+
+ &.active {
+ @extend .icon-star-active;
+ }
+}
+
+.items {
+ float: left;
+ width: 100%;
+ min-height: 400px;
+}
+
+.item {
+ float: left;
+ width: 185px;
+ margin: 50px 33px 0 0;
+ position: relative;
+
+ &:nth-child(5n) {
+ margin: 50px 0 0 0;
+ }
+
+ &:hover .icon-edit-wrap {
+ display: block;
+ }
+}
+
+.icon-edit-wrap {
+ padding: 10px;
+ background: $main;
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 50;
+ display: none;
+ cursor: pointer;
+ opacity: .85;
+ transition: opacity .2s ease-in-out 0s;
+
+ i {
+ float: left;
+ }
+
+ &:hover {
+ opacity: 1;
+ }
+}
+
+.rating {
+ float: right;
+ width: 10px;
+ height: 270px;
+ opacity: .9;
+ background: silver;
+
+ .item-image-big & {
+ height: 450px;
+ }
+}
+
+.rating-1 { background: #ac1b1b; }
+.rating-2 { background: #c15e33; }
+.rating-3 { background: #dea621; }
+.rating-4 { background: #73a01c; }
+.rating-5 { background: $main; }
+
+.item-image {
+ background-color: #101010;
+ float: left;
+ width: 185px;
+ height: 270px;
+ position: relative;
+ top: 0;
+ opacity: 1;
+
+ transition: top .4s ease-in-out 0s, opacity .4s ease-in-out 0s;
+
+ .loading & {
+ top: -5px;
+ opacity: 0;
+ }
+}
+
+.item-image-big {
+ width: 300px;
+ height: 450px;
+}
+
+.item-content {
+ float: left;
+ margin: 20px 0 0 0;
+ padding: 0 5px;
+ width: 100%;
+}
+
+.icon-no-image {
+ position: absolute;
+ top: 95px;
+ left: 60px;
+
+ .item-image-big & {
+ top: 175px;
+ left: 120px;
+ }
+}
+
+.item-date {
+ float: left;
+ clear: both;
+ color: #555;
+ font-size: 15px;
+}
+
+.item-title {
+ float: left;
+ clear: both;
+ font-size: 17px;
+ color: #909090;
+ border-bottom: 1px solid transparent;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ max-width: 100%;
+
+ &:hover,
+ &:active {
+ background: $main;
+ color: #fff;
+ }
+}
+
+.icon-content-load,
+.icon-box-load {
+ background: url(../img/content-load.gif) no-repeats;
+ width: 32px;
+ height: 32px;
+ position: absolute;
+ left: 50%;
+ top: 50vh;
+ transform: translateX(-50%);
+}
+
+.icon-box-load {
+ top: 280px;
+}
+
+.show-item-wrap {
+ float: left;
+ width: 100%;
+ margin: 50px 0 0 0;
+}
+
+.image-wrap {
+ float: left;
+ width: 350px;
+}
+
+.show-content {
+ float: left;
+ width: 710px;
+
+ h2 {
+ color: $main;
+ font-size: 32px;
+ }
+}
\ No newline at end of file
diff --git a/client/assets/sass/_fonts.scss b/client/assets/sass/_fonts.scss
new file mode 100644
index 00000000..ca8dc2cc
--- /dev/null
+++ b/client/assets/sass/_fonts.scss
@@ -0,0 +1,12 @@
+@font-face {
+ font-family: 'Titillium Web';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Titillium Web'), local('TitilliumWeb-Regular'), url(http://fonts.gstatic.com/s/titilliumweb/v4/7XUFZ5tgS-tD6QamInJTcZSnX671uNZIV63UdXh3Mg0.woff2) format('woff2'), url(http://fonts.gstatic.com/s/titilliumweb/v4/7XUFZ5tgS-tD6QamInJTcdGU7DQ8I6RFMlK0vgclk7w.woff) format('woff');
+}
+@font-face {
+ font-family: 'Titillium Web';
+ font-style: normal;
+ font-weight: 600;
+ src: local('Titillium WebSemiBold'), local('TitilliumWeb-SemiBold'), url(http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr46gJz9aNFrmnwBdd69aqzY.woff2) format('woff2'), url(http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wprx7IBmrqA5IG9z8WNe77b9o.woff) format('woff');
+}
\ No newline at end of file
diff --git a/client/assets/sass/_footer.scss b/client/assets/sass/_footer.scss
new file mode 100644
index 00000000..7269b23d
--- /dev/null
+++ b/client/assets/sass/_footer.scss
@@ -0,0 +1,27 @@
+.site-footer {
+ float: left;
+ width: 100%;
+ background: darken($dark, 3%);
+ padding: 40px 0;
+ position: absolute;
+ bottom: 0;
+ font-size: 14px;
+
+ a:active {
+ opacity: .5;
+ }
+}
+
+.attribution {
+ color: #555;
+ float: left;
+}
+
+.icon-tmdb {
+ float: left;
+ margin: 3px 10px 0 0;
+}
+
+.icon-github {
+ float: right;
+}
\ No newline at end of file
diff --git a/client/assets/sass/_header.scss b/client/assets/sass/_header.scss
new file mode 100644
index 00000000..4276a785
--- /dev/null
+++ b/client/assets/sass/_header.scss
@@ -0,0 +1,58 @@
+.site-header {
+ position: fixed;
+ width: 100%;
+ left: 0;
+ top: 0;
+ background: rgba($main, .95);
+ height: 65px;
+ overflow: hidden;
+ z-index: 100;
+}
+
+.logo {
+ float: left;
+ padding: 19px 0;
+}
+
+.site-nav {
+ float: right;
+ margin: 0 20px 0 0;
+ padding: 0 20px 0 0;
+ border-right: 1px solid #c86ede;
+
+ li {
+ float: left;
+ }
+
+ a {
+ color: #fff;
+ padding: 16px 20px 18px 20px;
+ float: left;
+ font-size: 17px;
+ border-top: 3px solid transparent;
+ transition: border .2s ease-in-out 0s;
+
+ &.active {
+ border-top: 3px solid #fff;
+ }
+ }
+}
+
+.add-wrap,
+.icon-search-wrap {
+ float: right;
+ padding: 16px 0 19px 0;
+ cursor: pointer;
+
+ i {
+ display: block;
+ }
+
+ &:active {
+ opacity: .8;
+ }
+}
+
+.icon-search-wrap {
+ margin: 0 0 0 10px;
+}
diff --git a/client/assets/sass/_mixins.scss b/client/assets/sass/_mixins.scss
new file mode 100644
index 00000000..14cbf206
--- /dev/null
+++ b/client/assets/sass/_mixins.scss
@@ -0,0 +1,2 @@
+$main: #ba59d2;
+$dark: #1b1b1b;
diff --git a/client/assets/sass/_modal.scss b/client/assets/sass/_modal.scss
new file mode 100644
index 00000000..4ce3f098
--- /dev/null
+++ b/client/assets/sass/_modal.scss
@@ -0,0 +1,89 @@
+.modal-wrap {
+ background: rgba(#0e0e0e, .98);
+ position: fixed;
+ left: 0;
+ top: 0;
+ height: 100%;
+ width: 100%;
+ z-index: 200;
+ opacity: 1;
+ transition: opacity .1s ease-in-out 0s;
+
+ .modal-active & {
+ overflow-y: scroll;
+ }
+
+ &.loading {
+ opacity: 0;
+ }
+}
+
+.modal-header {
+ background: $main;
+ float: left;
+ width: 100%;
+ height: 65px;
+ position: fixed;
+ left: 0;
+ top: 0;
+ transition: top .5s ease-in-out 0s;
+
+ .loading & {
+ top: -100%;
+ }
+
+ .icon-search {
+ float: left;
+ margin: 17px 0 0 0;
+ }
+}
+
+.icon-close-wrap {
+ padding: 16px;
+ float: right;
+ cursor: pointer;
+ margin: 5px 0 0 0;
+
+ .icon-close {
+ float: left;
+ }
+
+ &:active {
+ opacity: .6;
+ }
+}
+
+.modal-input {
+ border: 0;
+ background: transparent;
+ font-size: 38px;
+ color: $main;
+ width: 100%;
+}
+
+.search-wrap {
+ float: left;
+ width: calc(100% - 100px);
+}
+
+.search-items {
+ width: 100%;
+ float: left;
+ padding: 80px 0;
+}
+
+.no-items-found {
+ width: 100%;
+ float: left;
+ margin: 30vh 0 0 0;
+ text-align: center;
+ color: #474747;
+ font-size: 32px;
+}
+
+.modal-label {
+ float: left;
+ text-transform: uppercase;
+ color: #3e3e3e;
+ font-size: 15px;
+}
\ No newline at end of file
diff --git a/client/assets/sass/_normalize.scss b/client/assets/sass/_normalize.scss
new file mode 100644
index 00000000..458eea1e
--- /dev/null
+++ b/client/assets/sass/_normalize.scss
@@ -0,0 +1,427 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/client/assets/sass/_sprite.scss b/client/assets/sass/_sprite.scss
new file mode 100644
index 00000000..c81c80da
--- /dev/null
+++ b/client/assets/sass/_sprite.scss
@@ -0,0 +1,73 @@
+/*
+Icon classes can be used entirely standalone. They are named after their original file names.
+
+```html
+
+```
+*/
+.icon-add {
+ background-image: url(../img/sprite.png);
+ background-position: -32px -64px;
+ width: 32px;
+ height: 32px;
+}
+.icon-close {
+ background-image: url(../img/sprite.png);
+ background-position: -64px -64px;
+ width: 32px;
+ height: 32px;
+}
+.icon-edit {
+ background-image: url(../img/sprite.png);
+ background-position: -128px -18px;
+ width: 16px;
+ height: 16px;
+}
+.icon-github {
+ background-image: url(../img/sprite.png);
+ background-position: 0px -96px;
+ width: 33px;
+ height: 27px;
+}
+.icon-no-image {
+ background-image: url(../img/sprite.png);
+ background-position: 0px 0px;
+ width: 64px;
+ height: 64px;
+}
+.icon-search {
+ background-image: url(../img/sprite.png);
+ background-position: -64px 0px;
+ width: 32px;
+ height: 32px;
+}
+.icon-star-active {
+ background-image: url(../img/sprite.png);
+ background-position: -96px 0px;
+ width: 32px;
+ height: 32px;
+}
+.icon-star {
+ background-image: url(../img/sprite.png);
+ background-position: -96px -32px;
+ width: 32px;
+ height: 32px;
+}
+.icon-time-active {
+ background-image: url(../img/sprite.png);
+ background-position: 0px -64px;
+ width: 32px;
+ height: 32px;
+}
+.icon-time {
+ background-image: url(../img/sprite.png);
+ background-position: -64px -32px;
+ width: 32px;
+ height: 32px;
+}
+.icon-tmdb {
+ background-image: url(../img/sprite.png);
+ background-position: -128px 0px;
+ width: 138px;
+ height: 18px;
+}
diff --git a/client/assets/sass/app.scss b/client/assets/sass/app.scss
new file mode 100644
index 00000000..ef35555d
--- /dev/null
+++ b/client/assets/sass/app.scss
@@ -0,0 +1,12 @@
+@import
+
+'normalize',
+'mixins',
+'fonts',
+'base',
+'sprite',
+
+'header',
+'content',
+'modal',
+'footer';
diff --git a/client/assets/sprites/add.png b/client/assets/sprites/add.png
new file mode 100644
index 00000000..2afeac55
Binary files /dev/null and b/client/assets/sprites/add.png differ
diff --git a/client/assets/sprites/close.png b/client/assets/sprites/close.png
new file mode 100644
index 00000000..8fd7c61d
Binary files /dev/null and b/client/assets/sprites/close.png differ
diff --git a/client/assets/sprites/edit.png b/client/assets/sprites/edit.png
new file mode 100644
index 00000000..1329525b
Binary files /dev/null and b/client/assets/sprites/edit.png differ
diff --git a/client/assets/sprites/github.png b/client/assets/sprites/github.png
new file mode 100644
index 00000000..58836e1a
Binary files /dev/null and b/client/assets/sprites/github.png differ
diff --git a/client/assets/sprites/no-image.png b/client/assets/sprites/no-image.png
new file mode 100644
index 00000000..d26128cc
Binary files /dev/null and b/client/assets/sprites/no-image.png differ
diff --git a/client/assets/sprites/search.png b/client/assets/sprites/search.png
new file mode 100644
index 00000000..490fb1f8
Binary files /dev/null and b/client/assets/sprites/search.png differ
diff --git a/client/assets/sprites/star-active.png b/client/assets/sprites/star-active.png
new file mode 100644
index 00000000..7122948f
Binary files /dev/null and b/client/assets/sprites/star-active.png differ
diff --git a/client/assets/sprites/star.png b/client/assets/sprites/star.png
new file mode 100644
index 00000000..6160cbbb
Binary files /dev/null and b/client/assets/sprites/star.png differ
diff --git a/client/assets/sprites/time-active.png b/client/assets/sprites/time-active.png
new file mode 100644
index 00000000..f9c5b50e
Binary files /dev/null and b/client/assets/sprites/time-active.png differ
diff --git a/client/assets/sprites/time.png b/client/assets/sprites/time.png
new file mode 100644
index 00000000..006a3d91
Binary files /dev/null and b/client/assets/sprites/time.png differ
diff --git a/client/assets/sprites/tmdb.png b/client/assets/sprites/tmdb.png
new file mode 100644
index 00000000..09dd2eff
Binary files /dev/null and b/client/assets/sprites/tmdb.png differ
diff --git a/client/gulpfile.js b/client/gulpfile.js
new file mode 100644
index 00000000..d05ba594
--- /dev/null
+++ b/client/gulpfile.js
@@ -0,0 +1,25 @@
+var elixir = require('laravel-elixir');
+
+require('laravel-elixir-spritesmith');
+
+elixir.config.sourcemaps = false;
+
+elixir.config.cssOutput = './../public/assets/css';
+elixir.config.jsOutput = './../public/assets/js';
+elixir.config.assetsDir = 'assets/';
+elixir.config.publicDir = '../public/';
+
+elixir(function(mix) {
+ mix.sass('app.scss');
+
+ mix.browserify('../../app/app.js');
+
+ mix.spritesmith('assets/sprites', {
+ imgOutput: '../public/assets/img',
+ cssOutput: 'assets/sass',
+ cssName: '_sprite.scss',
+ cssFormat: 'css'
+ });
+
+ mix.task('browserify', '../../app/**/*.js');
+});
diff --git a/client/package.json b/client/package.json
new file mode 100644
index 00000000..e7d031c2
--- /dev/null
+++ b/client/package.json
@@ -0,0 +1,12 @@
+{
+ "private": true,
+ "devDependencies": {
+ "gulp": "^3.8.8"
+ },
+ "dependencies": {
+ "laravel-elixir": "^2.0.0",
+ "laravel-elixir-spritesmith": "^0.1.5",
+ "react": "^0.13.3",
+ "react-router": "^0.13.3"
+ }
+}
diff --git a/client/views/app.blade.php b/client/views/app.blade.php
new file mode 100644
index 00000000..ef321f2c
--- /dev/null
+++ b/client/views/app.blade.php
@@ -0,0 +1,21 @@
+
+
+
+
+
+ Flox - Collect your Movies, Series and Anime watch list
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/.htaccess b/public/.htaccess
new file mode 100755
index 00000000..8eb2dd0d
--- /dev/null
+++ b/public/.htaccess
@@ -0,0 +1,16 @@
+
+
+ Options -MultiViews
+
+
+ RewriteEngine On
+
+ # Redirect Trailing Slashes If Not A Folder...
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteRule ^(.*)/$ /$1 [L,R=301]
+
+ # Handle Front Controller...
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^ index.php [L]
+
diff --git a/public/assets/css/app.css b/public/assets/css/app.css
new file mode 100644
index 00000000..0fe49e15
--- /dev/null
+++ b/public/assets/css/app.css
@@ -0,0 +1 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Titillium Web';font-style:normal;font-weight:400;src:local("Titillium Web"),local("TitilliumWeb-Regular"),url(http://fonts.gstatic.com/s/titilliumweb/v4/7XUFZ5tgS-tD6QamInJTcZSnX671uNZIV63UdXh3Mg0.woff2) format("woff2"),url(http://fonts.gstatic.com/s/titilliumweb/v4/7XUFZ5tgS-tD6QamInJTcdGU7DQ8I6RFMlK0vgclk7w.woff) format("woff")}@font-face{font-family:'Titillium Web';font-style:normal;font-weight:600;src:local("Titillium WebSemiBold"),local("TitilliumWeb-SemiBold"),url(http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wpr46gJz9aNFrmnwBdd69aqzY.woff2) format("woff2"),url(http://fonts.gstatic.com/s/titilliumweb/v4/anMUvcNT0H1YN4FII8wprx7IBmrqA5IG9z8WNe77b9o.woff) format("woff")}*{margin:0;padding:0;box-sizing:border-box}.wrap{width:1100px;margin:0 auto;padding:0 20px}body{background:#1b1b1b;font-family:'Titillium Web',sans-serif;padding:65px 0 0;overflow-y:scroll}.modal-active{overflow:hidden}::-moz-selection{background:rgba(71,71,71,.99);color:#fff}::selection{background:rgba(71,71,71,.99);color:#fff}::-webkit-input-placeholder{color:#636363}::-moz-placeholder{color:#636363;opacity:1}::-ms-input-placeholder{color:#636363}ul{list-style:none}a{text-decoration:none;outline:0}img{border:0}input,textarea{outline:0}.icon-add{background-image:url(../img/sprite.png);background-position:-32px -64px;width:32px;height:32px}.icon-close{background-image:url(../img/sprite.png);background-position:-64px -64px;width:32px;height:32px}.icon-edit{background-image:url(../img/sprite.png);background-position:-128px -18px;width:16px;height:16px}.icon-github{background-image:url(../img/sprite.png);background-position:0 -96px;width:33px;height:27px}.icon-no-image{background-image:url(../img/sprite.png);background-position:0 0;width:64px;height:64px}.icon-search{background-image:url(../img/sprite.png);background-position:-64px 0;width:32px;height:32px}.icon-star-active,.icon-star.active{background-image:url(../img/sprite.png);background-position:-96px 0;width:32px;height:32px}.icon-star{background-image:url(../img/sprite.png);background-position:-96px -32px;width:32px;height:32px}.icon-time-active,.icon-time.active{background-image:url(../img/sprite.png);background-position:0 -64px;width:32px;height:32px}.icon-time{background-image:url(../img/sprite.png);background-position:-64px -32px;width:32px;height:32px}.icon-tmdb{background-image:url(../img/sprite.png);background-position:-128px 0;width:138px;height:18px}.site-header{position:fixed;width:100%;left:0;top:0;background:rgba(186,89,210,.95);height:65px;overflow:hidden;z-index:100}.logo{float:left;padding:19px 0}.site-nav{float:right;margin:0 20px 0 0;padding:0 20px 0 0;border-right:1px solid #c86ede}.site-nav li{float:left}.site-nav a{color:#fff;padding:16px 20px 18px;float:left;font-size:17px;border-top:3px solid transparent;transition:border .2s ease-in-out 0s}.site-nav a.active{border-top:3px solid #fff}.add-wrap,.icon-search-wrap{float:right;padding:16px 0 19px;cursor:pointer}.add-wrap i,.icon-search-wrap i{display:block}.add-wrap:active,.icon-search-wrap:active{opacity:.8}.icon-search-wrap{margin:0 0 0 10px}.flox{position:relative;width:100%;min-height:calc(100vh + 120px);float:left;padding:0 0 120px}.box{float:left;width:100%;padding:60px 0;position:relative}.box:nth-child(2){background:#242424}.box-headline{font-size:22px;color:#555}.box-headline:hover{background:#ba59d2;color:#fff}.box-options{float:right}.box-options i{float:left;cursor:pointer;margin:0 0 0 20px;opacity:.8}.box-options i:active{opacity:.6}.items{float:left;width:100%;min-height:400px}.item{float:left;width:185px;margin:50px 33px 0 0;position:relative}.item:nth-child(5n){margin:50px 0 0}.item:hover .icon-edit-wrap{display:block}.icon-edit-wrap{padding:10px;background:#ba59d2;position:absolute;left:0;top:0;z-index:50;display:none;cursor:pointer;opacity:.85;transition:opacity .2s ease-in-out 0s}.icon-edit-wrap i{float:left}.icon-edit-wrap:hover{opacity:1}.rating{float:right;width:10px;height:270px;opacity:.9;background:silver}.item-image-big .rating{height:450px}.rating-1{background:#ac1b1b}.rating-2{background:#c15e33}.rating-3{background:#dea621}.rating-4{background:#73a01c}.rating-5{background:#ba59d2}.item-image{background-color:#101010;float:left;width:185px;height:270px;position:relative;top:0;opacity:1;transition:top .4s ease-in-out 0s,opacity .4s ease-in-out 0s}.loading .item-image{top:-5px;opacity:0}.item-image-big{width:300px;height:450px}.item-content{float:left;margin:20px 0 0;padding:0 5px;width:100%}.icon-no-image{position:absolute;top:95px;left:60px}.item-image-big .icon-no-image{top:175px;left:120px}.item-date{float:left;clear:both;color:#555;font-size:15px}.item-title{float:left;clear:both;font-size:17px;color:#909090;border-bottom:1px solid transparent;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.item-title:active,.item-title:hover{background:#ba59d2;color:#fff}.icon-box-load,.icon-content-load{background:url(../img/content-load.gif);width:32px;height:32px;position:absolute;left:50%;top:50vh;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.icon-box-load{top:280px}.show-item-wrap{float:left;width:100%;margin:50px 0 0}.image-wrap{float:left;width:350px}.show-content{float:left;width:710px}.show-content h2{color:#ba59d2;font-size:32px}.modal-wrap{background:rgba(14,14,14,.98);position:fixed;left:0;top:0;height:100%;width:100%;z-index:200;opacity:1;transition:opacity .1s ease-in-out 0s}.modal-active .modal-wrap{overflow-y:scroll}.modal-wrap.loading{opacity:0}.modal-header{background:#ba59d2;float:left;width:100%;height:65px;position:fixed;left:0;top:0;transition:top .5s ease-in-out 0s}.loading .modal-header{top:-100%}.modal-header .icon-search{float:left;margin:17px 0 0}.icon-close-wrap{padding:16px;float:right;cursor:pointer;margin:5px 0 0}.icon-close-wrap .icon-close{float:left}.icon-close-wrap:active{opacity:.6}.modal-input{border:0;background:0 0;font-size:38px;color:#ba59d2;width:100%}.search-wrap{float:left;width:calc(100% - 100px)}.search-items{width:100%;float:left;padding:80px 0}.no-items-found{width:100%;float:left;margin:30vh 0 0;text-align:center;color:#474747;font-size:32px}.modal-label{float:left;text-transform:uppercase;color:#3e3e3e;font-size:15px}.site-footer{float:left;width:100%;background:#131313;padding:40px 0;position:absolute;bottom:0;font-size:14px}.site-footer a:active{opacity:.5}.attribution{color:#555;float:left}.icon-tmdb{float:left;margin:3px 10px 0 0}.icon-github{float:right}
\ No newline at end of file
diff --git a/public/assets/favicon.ico b/public/assets/favicon.ico
new file mode 100644
index 00000000..5f5735ea
Binary files /dev/null and b/public/assets/favicon.ico differ
diff --git a/public/assets/img/content-load.gif b/public/assets/img/content-load.gif
new file mode 100644
index 00000000..267f07b7
Binary files /dev/null and b/public/assets/img/content-load.gif differ
diff --git a/public/assets/img/logo-big.png b/public/assets/img/logo-big.png
new file mode 100644
index 00000000..3333b934
Binary files /dev/null and b/public/assets/img/logo-big.png differ
diff --git a/public/assets/img/logo.png b/public/assets/img/logo.png
new file mode 100644
index 00000000..a728fbe6
Binary files /dev/null and b/public/assets/img/logo.png differ
diff --git a/public/assets/img/sprite.png b/public/assets/img/sprite.png
new file mode 100644
index 00000000..069aa3ab
Binary files /dev/null and b/public/assets/img/sprite.png differ
diff --git a/public/assets/js/config.js b/public/assets/js/config.js
new file mode 100644
index 00000000..baa9635d
--- /dev/null
+++ b/public/assets/js/config.js
@@ -0,0 +1,9 @@
+window.config = {
+
+ uri: '/flox/public/',
+ url: 'http://localhost:8888/flox/public/',
+ api: 'http://localhost:8888/flox/public/api/',
+ posterSmall: 'http://image.tmdb.org/t/p/w185',
+ posterBig: 'http://image.tmdb.org/t/p/w300'
+
+};
diff --git a/public/index.php b/public/index.php
new file mode 100755
index 00000000..d3199e48
--- /dev/null
+++ b/public/index.php
@@ -0,0 +1,58 @@
+
+ */
+
+/*
+|--------------------------------------------------------------------------
+| Register The Auto Loader
+|--------------------------------------------------------------------------
+|
+| Composer provides a convenient, automatically generated class loader for
+| our application. We just need to utilize it! We'll simply require it
+| into the script here so that we don't have to worry about manual
+| loading any of our classes later on. It feels nice to relax.
+|
+*/
+
+require __DIR__.'/../server/bootstrap/autoload.php';
+
+/*
+|--------------------------------------------------------------------------
+| Turn On The Lights
+|--------------------------------------------------------------------------
+|
+| We need to illuminate PHP development, so let us turn on the lights.
+| This bootstraps the framework and gets it ready for use, then it
+| will load up this application so that we can run it and send
+| the responses back to the browser and delight our users.
+|
+*/
+
+$app = require_once __DIR__.'/../server/bootstrap/app.php';
+
+/*
+|--------------------------------------------------------------------------
+| Run The Application
+|--------------------------------------------------------------------------
+|
+| Once we have the application, we can handle the incoming request
+| through the kernel, and send the associated response back to
+| the client's browser allowing them to enjoy the creative
+| and wonderful application we have prepared for them.
+|
+*/
+
+$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
+
+$response = $kernel->handle(
+ $request = Illuminate\Http\Request::capture()
+);
+
+$response->send();
+
+$kernel->terminate($request, $response);
diff --git a/server/.env.example b/server/.env.example
new file mode 100644
index 00000000..e19d12f6
--- /dev/null
+++ b/server/.env.example
@@ -0,0 +1,14 @@
+APP_ENV=local
+APP_DEBUG=true
+APP_KEY=SomeRandomString
+
+DB_HOST=localhost
+DB_DATABASE=homestead
+DB_USERNAME=homestead
+DB_PASSWORD=secret
+
+CACHE_DRIVER=file
+SESSION_DRIVER=file
+QUEUE_DRIVER=sync
+
+TMDB_API_KEY=xxx
\ No newline at end of file
diff --git a/server/.gitattributes b/server/.gitattributes
new file mode 100644
index 00000000..95883dea
--- /dev/null
+++ b/server/.gitattributes
@@ -0,0 +1,3 @@
+* text=auto
+*.css linguist-vendored
+*.less linguist-vendored
diff --git a/server/app/Category.php b/server/app/Category.php
new file mode 100644
index 00000000..c2da926b
--- /dev/null
+++ b/server/app/Category.php
@@ -0,0 +1,44 @@
+ 'title',
+ 'save_to' => 'slug',
+ ];
+
+ public function items()
+ {
+ return $this->hasMany('Flox\Item');
+ }
+
+ /**
+ * http://softonsofa.com/tweaking-eloquent-relations-how-to-get-hasmany-relation-count-efficiently/
+ */
+ public function itemsCount()
+ {
+ return $this->hasOne('Flox\Item')
+ ->selectRaw('category_id, count(*) as aggregate')
+ ->groupBy('category_id');
+ }
+
+ public function getItemsCountAttribute()
+ {
+ if ( ! $this->relationLoaded('itemsCount')) {
+ $this->load('itemsCount');
+ }
+
+ $related = $this->getRelation('itemsCount');
+
+ return ($related) ? (int) $related->aggregate : 0;
+ }
+}
diff --git a/server/app/Console/Commands/Inspire.php b/server/app/Console/Commands/Inspire.php
new file mode 100644
index 00000000..4fcc4919
--- /dev/null
+++ b/server/app/Console/Commands/Inspire.php
@@ -0,0 +1,33 @@
+comment(PHP_EOL.Inspiring::quote().PHP_EOL);
+ }
+}
diff --git a/server/app/Console/Kernel.php b/server/app/Console/Kernel.php
new file mode 100644
index 00000000..b2e6cfbe
--- /dev/null
+++ b/server/app/Console/Kernel.php
@@ -0,0 +1,30 @@
+command('inspire')
+ ->hourly();
+ }
+}
diff --git a/server/app/Events/Event.php b/server/app/Events/Event.php
new file mode 100644
index 00000000..437369cd
--- /dev/null
+++ b/server/app/Events/Event.php
@@ -0,0 +1,8 @@
+getItems($category, $orderBy, 5);
+ }
+
+ public function categoryItems($category, $orderBy)
+ {
+ return $this->getItems($category, $orderBy, 20);
+ }
+
+ public function allCategories()
+ {
+ return Category::all();
+ }
+
+ public function slugItem($slug)
+ {
+ return Item::where('slug', $slug)->first();
+ }
+
+ private function getItems($category, $orderBy, $count)
+ {
+ $category = Category::where('slug', $category)->with('itemsCount')->first();
+
+ $items = Item::where('category_id', $category->id)->orderBy($orderBy, 'desc')->take($count)->get();
+
+ return [
+ 'items' => $items,
+ 'category' => $category
+ ];
+ }
+
+ public function searchFloxByTitle($title)
+ {
+ // todo: Implement Levenshtein ;)
+ return Item::where('title', 'LIKE', '%' . $title . '%')->with('categories')->get();
+ }
+
+ public function searchTMDBByTitle($title)
+ {
+ $items = [];
+ $client = new Client(['base_uri' => 'http://api.themoviedb.org/']);
+
+ $response = $client->get('/3/search/multi', ['query' => ['api_key' => env('TMDB_API_KEY'), 'query' => $title]]);
+ $response = json_decode($response->getBody());
+
+ foreach($response->results as $result) {
+ if($result->media_type == 'person') continue;
+
+ $dtime = DateTime::createFromFormat('Y-m-d', (array_key_exists('release_date', $result)
+ ? ($result->release_date ?: '1970-12-1')
+ : ($result->first_air_date ?: '1970-12-1')
+ ));
+
+ $items[] = [
+ 'tmdb_id' => $result->id,
+ 'title' => array_key_exists('name', $result) ? $result->name : $result->title,
+ 'poster' => $result->poster_path,
+ 'released' => $dtime->getTimestamp(),
+ ];
+ }
+
+ return $items;
+ }
+ }
diff --git a/server/app/Http/Controllers/Controller.php b/server/app/Http/Controllers/Controller.php
new file mode 100644
index 00000000..158c0a5e
--- /dev/null
+++ b/server/app/Http/Controllers/Controller.php
@@ -0,0 +1,12 @@
+ \Flox\Http\Middleware\Authenticate::class,
+ 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
+ 'guest' => \Flox\Http\Middleware\RedirectIfAuthenticated::class,
+ ];
+}
diff --git a/server/app/Http/Middleware/Authenticate.php b/server/app/Http/Middleware/Authenticate.php
new file mode 100644
index 00000000..237f57c4
--- /dev/null
+++ b/server/app/Http/Middleware/Authenticate.php
@@ -0,0 +1,47 @@
+auth = $auth;
+ }
+
+ /**
+ * Handle an incoming request.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \Closure $next
+ * @return mixed
+ */
+ public function handle($request, Closure $next)
+ {
+ if ($this->auth->guest()) {
+ if ($request->ajax()) {
+ return response('Unauthorized.', 401);
+ } else {
+ return redirect()->guest('auth/login');
+ }
+ }
+
+ return $next($request);
+ }
+}
diff --git a/server/app/Http/Middleware/EncryptCookies.php b/server/app/Http/Middleware/EncryptCookies.php
new file mode 100644
index 00000000..57b90a02
--- /dev/null
+++ b/server/app/Http/Middleware/EncryptCookies.php
@@ -0,0 +1,17 @@
+auth = $auth;
+ }
+
+ /**
+ * Handle an incoming request.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \Closure $next
+ * @return mixed
+ */
+ public function handle($request, Closure $next)
+ {
+ if ($this->auth->check()) {
+ return redirect('/home');
+ }
+
+ return $next($request);
+ }
+}
diff --git a/server/app/Http/Middleware/VerifyCsrfToken.php b/server/app/Http/Middleware/VerifyCsrfToken.php
new file mode 100644
index 00000000..91937d01
--- /dev/null
+++ b/server/app/Http/Middleware/VerifyCsrfToken.php
@@ -0,0 +1,17 @@
+ 'api'], function() {
+
+ get('all-categories', 'APIController@allCategories');
+ get('home-items/{category}/{orderBy}', 'APIController@homeItems');
+ get('category-items/{category}/{orderBy}', 'APIController@categoryItems');
+ //get('item/{slug}', 'APIController@slugItem');
+
+ get('search/flox/{title}', 'APIController@searchFloxByTitle');
+ get('search/tmdb/{title}', 'APIController@searchTMDBByTitle');
+ //get('search/tmdb/id/{id}', 'APIController@searchTMDBByID');
+
+ });
+
+ Route::get('/{uri}', function() {
+ return view('app');
+ })->where('uri', '(.*)');
diff --git a/server/app/Item.php b/server/app/Item.php
new file mode 100644
index 00000000..d71eb811
--- /dev/null
+++ b/server/app/Item.php
@@ -0,0 +1,25 @@
+ 'title',
+ 'save_to' => 'slug',
+ ];
+
+ public $timestamps = false;
+
+ public function categories()
+ {
+ return $this->belongsTo('Flox\Category', 'category_id');
+ }
+}
diff --git a/server/app/Jobs/Job.php b/server/app/Jobs/Job.php
new file mode 100644
index 00000000..c11270a4
--- /dev/null
+++ b/server/app/Jobs/Job.php
@@ -0,0 +1,21 @@
+ [
+ 'Flox\Listeners\EventListener',
+ ],
+ ];
+
+ /**
+ * Register any other events for your application.
+ *
+ * @param \Illuminate\Contracts\Events\Dispatcher $events
+ * @return void
+ */
+ public function boot(DispatcherContract $events)
+ {
+ parent::boot($events);
+
+ //
+ }
+}
diff --git a/server/app/Providers/RouteServiceProvider.php b/server/app/Providers/RouteServiceProvider.php
new file mode 100644
index 00000000..afc0eeec
--- /dev/null
+++ b/server/app/Providers/RouteServiceProvider.php
@@ -0,0 +1,44 @@
+group(['namespace' => $this->namespace], function ($router) {
+ require app_path('Http/routes.php');
+ });
+ }
+}
diff --git a/server/app/User.php b/server/app/User.php
new file mode 100644
index 00000000..990b3141
--- /dev/null
+++ b/server/app/User.php
@@ -0,0 +1,35 @@
+make(Illuminate\Contracts\Console\Kernel::class);
+
+$status = $kernel->handle(
+ $input = new Symfony\Component\Console\Input\ArgvInput,
+ new Symfony\Component\Console\Output\ConsoleOutput
+);
+
+/*
+|--------------------------------------------------------------------------
+| Shutdown The Application
+|--------------------------------------------------------------------------
+|
+| Once Artisan has finished running. We will fire off the shutdown events
+| so that any final work may be done by the application before we shut
+| down the process. This is the last thing to happen to the request.
+|
+*/
+
+$kernel->terminate($input, $status);
+
+exit($status);
diff --git a/server/bootstrap/app.php b/server/bootstrap/app.php
new file mode 100644
index 00000000..6cfb2b1d
--- /dev/null
+++ b/server/bootstrap/app.php
@@ -0,0 +1,55 @@
+singleton(
+ Illuminate\Contracts\Http\Kernel::class,
+ Flox\Http\Kernel::class
+);
+
+$app->singleton(
+ Illuminate\Contracts\Console\Kernel::class,
+ Flox\Console\Kernel::class
+);
+
+$app->singleton(
+ Illuminate\Contracts\Debug\ExceptionHandler::class,
+ Flox\Exceptions\Handler::class
+);
+
+/*
+|--------------------------------------------------------------------------
+| Return The Application
+|--------------------------------------------------------------------------
+|
+| This script returns the application instance. The instance is given to
+| the calling script so we can separate the building of the instances
+| from the actual running of the application and sending responses.
+|
+*/
+
+return $app;
diff --git a/server/bootstrap/autoload.php b/server/bootstrap/autoload.php
new file mode 100644
index 00000000..38301379
--- /dev/null
+++ b/server/bootstrap/autoload.php
@@ -0,0 +1,34 @@
+=5.5.9",
+ "laravel/framework": "5.1.*",
+ "guzzlehttp/guzzle": "~6.0",
+ "cviebrock/eloquent-sluggable": "^3.0"
+ },
+ "require-dev": {
+ "fzaninotto/faker": "~1.4",
+ "mockery/mockery": "0.9.*",
+ "phpunit/phpunit": "~4.0",
+ "phpspec/phpspec": "~2.1"
+ },
+ "autoload": {
+ "classmap": [
+ "database"
+ ],
+ "psr-4": {
+ "Flox\\": "app/"
+ }
+ },
+ "autoload-dev": {
+ "classmap": [
+ "tests/TestCase.php"
+ ]
+ },
+ "scripts": {
+ "post-install-cmd": [
+ "php artisan clear-compiled",
+ "php artisan optimize"
+ ],
+ "pre-update-cmd": [
+ "php artisan clear-compiled"
+ ],
+ "post-update-cmd": [
+ "php artisan optimize"
+ ],
+ "post-root-package-install": [
+ "php -r \"copy('.env.example', '.env');\""
+ ],
+ "post-create-project-cmd": [
+ "php artisan key:generate"
+ ]
+ },
+ "config": {
+ "preferred-install": "dist"
+ }
+}
diff --git a/server/composer.lock b/server/composer.lock
new file mode 100644
index 00000000..792ef70e
--- /dev/null
+++ b/server/composer.lock
@@ -0,0 +1,3265 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "55aa4c85b5e8ecb7599781ad35e4def9",
+ "packages": [
+ {
+ "name": "classpreloader/classpreloader",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ClassPreloader/ClassPreloader.git",
+ "reference": "8c3c14b10309e3b40bce833913a6c0c0b8c8f962"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/8c3c14b10309e3b40bce833913a6c0c0b8c8f962",
+ "reference": "8c3c14b10309e3b40bce833913a6c0c0b8c8f962",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "~1.3",
+ "php": ">=5.5.9"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "ClassPreloader\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "graham@alt-three.com"
+ }
+ ],
+ "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case",
+ "keywords": [
+ "autoload",
+ "class",
+ "preload"
+ ],
+ "time": "2015-06-28 21:39:13"
+ },
+ {
+ "name": "cocur/slugify",
+ "version": "v1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cocur/slugify.git",
+ "reference": "2b67d4e2b75dbaed2ebefa9eb5683e8940513847"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cocur/slugify/zipball/2b67d4e2b75dbaed2ebefa9eb5683e8940513847",
+ "reference": "2b67d4e2b75dbaed2ebefa9eb5683e8940513847",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "codeclimate/php-test-reporter": "dev-master",
+ "laravel/framework": "~4.1",
+ "latte/latte": "~2.2",
+ "mockery/mockery": "~0.9",
+ "nette/di": "~2.2",
+ "phpunit/phpunit": "~3.7",
+ "sami/sami": "~1.3",
+ "satooshi/php-coveralls": "0.6.*",
+ "silex/silex": "~1.2",
+ "symfony/dependency-injection": "~2.4",
+ "symfony/http-kernel": "~2.4",
+ "twig/twig": "~1",
+ "zendframework/zend-modulemanager": "~2.2",
+ "zendframework/zend-servicemanager": "~2.2",
+ "zendframework/zend-view": "~2.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cocur\\Slugify\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ivo Bathke",
+ "email": "ivo.bathke@gmail.com"
+ },
+ {
+ "name": "Florian Eckerstorfer",
+ "email": "florian@eckerstorfer.co",
+ "homepage": "https://florian.ec"
+ }
+ ],
+ "description": "Converts a string into a slug.",
+ "keywords": [
+ "slug",
+ "slugify"
+ ],
+ "time": "2015-03-18 08:21:30"
+ },
+ {
+ "name": "cviebrock/eloquent-sluggable",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cviebrock/eloquent-sluggable.git",
+ "reference": "eaf7b573d7c82f004fc3efde0e0f9f63200d4c32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cviebrock/eloquent-sluggable/zipball/eaf7b573d7c82f004fc3efde0e0f9f63200d4c32",
+ "reference": "eaf7b573d7c82f004fc3efde0e0f9f63200d4c32",
+ "shasum": ""
+ },
+ "require": {
+ "cocur/slugify": "1.1.*",
+ "illuminate/config": "5.*",
+ "illuminate/database": "5.*",
+ "illuminate/support": "5.*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "orchestra/testbench": "3.0.*",
+ "phpunit/phpunit": "4.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cviebrock\\EloquentSluggable\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Colin Viebrock",
+ "email": "colin@viebrock.ca"
+ }
+ ],
+ "description": "Easy creation of slugs for your Eloquent models in Laravel",
+ "homepage": "https://github.com/cviebrock/eloquent-sluggable",
+ "keywords": [
+ "eloquent",
+ "laravel",
+ "slug"
+ ],
+ "time": "2015-07-06 15:09:35"
+ },
+ {
+ "name": "danielstjules/stringy",
+ "version": "1.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/danielstjules/Stringy.git",
+ "reference": "3cf18e9e424a6dedc38b7eb7ef580edb0929461b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/danielstjules/Stringy/zipball/3cf18e9e424a6dedc38b7eb7ef580edb0929461b",
+ "reference": "3cf18e9e424a6dedc38b7eb7ef580edb0929461b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Stringy\\": "src/"
+ },
+ "files": [
+ "src/Create.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel St. Jules",
+ "email": "danielst.jules@gmail.com",
+ "homepage": "http://www.danielstjules.com"
+ }
+ ],
+ "description": "A string manipulation library with multibyte support",
+ "homepage": "https://github.com/danielstjules/Stringy",
+ "keywords": [
+ "UTF",
+ "helpers",
+ "manipulation",
+ "methods",
+ "multibyte",
+ "string",
+ "utf-8",
+ "utility",
+ "utils"
+ ],
+ "time": "2015-02-10 06:19:18"
+ },
+ {
+ "name": "dnoegel/php-xdg-base-dir",
+ "version": "0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
+ "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
+ "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "@stable"
+ },
+ "type": "project",
+ "autoload": {
+ "psr-4": {
+ "XdgBaseDir\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "implementation of xdg base directory specification for php",
+ "time": "2014-10-24 07:27:01"
+ },
+ {
+ "name": "doctrine/inflector",
+ "version": "v1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/0bcb2e79d8571787f18b7eb036ed3d004908e604",
+ "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common\\Inflector\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Common String Manipulations with regard to casing and singular/plural rules.",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "inflection",
+ "pluralize",
+ "singularize",
+ "string"
+ ],
+ "time": "2014-12-20 21:24:13"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "6.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "a8dfeff00eb84616a17fea7a4d72af35e750410f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a8dfeff00eb84616a17fea7a4d72af35e750410f",
+ "reference": "a8dfeff00eb84616a17fea7a4d72af35e750410f",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/promises": "~1.0",
+ "guzzlehttp/psr7": "~1.1",
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "ext-curl": "*",
+ "phpunit/phpunit": "~4.0",
+ "psr/log": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Guzzle is a PHP HTTP client library",
+ "homepage": "http://guzzlephp.org/",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "rest",
+ "web service"
+ ],
+ "time": "2015-07-04 20:09:24"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "2ee5bc7f1a92efecc90da7f6711a53a7be26b5b7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/2ee5bc7f1a92efecc90da7f6711a53a7be26b5b7",
+ "reference": "2ee5bc7f1a92efecc90da7f6711a53a7be26b5b7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ },
+ "files": [
+ "src/functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "time": "2015-06-24 16:16:25"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/af0e1758de355eb113917ad79c3c0e3604bce4bd",
+ "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0",
+ "psr/http-message": "~1.0"
+ },
+ "provide": {
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ },
+ "files": [
+ "src/functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "PSR-7 message implementation",
+ "keywords": [
+ "http",
+ "message",
+ "stream",
+ "uri"
+ ],
+ "time": "2015-06-24 19:55:15"
+ },
+ {
+ "name": "jakub-onderka/php-console-color",
+ "version": "0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
+ "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1",
+ "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "jakub-onderka/php-code-style": "1.0",
+ "jakub-onderka/php-parallel-lint": "0.*",
+ "jakub-onderka/php-var-dump-check": "0.*",
+ "phpunit/phpunit": "3.7.*",
+ "squizlabs/php_codesniffer": "1.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "JakubOnderka\\PhpConsoleColor": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jakub Onderka",
+ "email": "jakub.onderka@gmail.com",
+ "homepage": "http://www.acci.cz"
+ }
+ ],
+ "time": "2014-04-08 15:00:19"
+ },
+ {
+ "name": "jakub-onderka/php-console-highlighter",
+ "version": "v0.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
+ "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5",
+ "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5",
+ "shasum": ""
+ },
+ "require": {
+ "jakub-onderka/php-console-color": "~0.1",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "jakub-onderka/php-code-style": "~1.0",
+ "jakub-onderka/php-parallel-lint": "~0.5",
+ "jakub-onderka/php-var-dump-check": "~0.1",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~1.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "JakubOnderka\\PhpConsoleHighlighter": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jakub Onderka",
+ "email": "acci@acci.cz",
+ "homepage": "http://www.acci.cz/"
+ }
+ ],
+ "time": "2015-04-20 18:58:01"
+ },
+ {
+ "name": "jeremeamia/SuperClosure",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jeremeamia/super_closure.git",
+ "reference": "b712f39c671e5ead60c7ebfe662545456aade833"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/b712f39c671e5ead60c7ebfe662545456aade833",
+ "reference": "b712f39c671e5ead60c7ebfe662545456aade833",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "~1.0",
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "codeclimate/php-test-reporter": "~0.1.2",
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SuperClosure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia",
+ "role": "Developer"
+ }
+ ],
+ "description": "Serialize Closure objects, including their context and binding",
+ "homepage": "https://github.com/jeremeamia/super_closure",
+ "keywords": [
+ "closure",
+ "function",
+ "lambda",
+ "parser",
+ "serializable",
+ "serialize",
+ "tokenizer"
+ ],
+ "time": "2015-03-11 20:06:43"
+ },
+ {
+ "name": "laravel/framework",
+ "version": "v5.1.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/framework.git",
+ "reference": "5e942882319845f71c681ce6e85831129bf66426"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/5e942882319845f71c681ce6e85831129bf66426",
+ "reference": "5e942882319845f71c681ce6e85831129bf66426",
+ "shasum": ""
+ },
+ "require": {
+ "classpreloader/classpreloader": "~2.0",
+ "danielstjules/stringy": "~1.8",
+ "doctrine/inflector": "~1.0",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "jeremeamia/superclosure": "~2.0",
+ "league/flysystem": "~1.0",
+ "monolog/monolog": "~1.11",
+ "mtdowling/cron-expression": "~1.0",
+ "nesbot/carbon": "~1.19",
+ "php": ">=5.5.9",
+ "psy/psysh": "~0.5.1",
+ "swiftmailer/swiftmailer": "~5.1",
+ "symfony/console": "2.7.*",
+ "symfony/css-selector": "2.7.*",
+ "symfony/debug": "2.7.*",
+ "symfony/dom-crawler": "2.7.*",
+ "symfony/finder": "2.7.*",
+ "symfony/http-foundation": "2.7.*",
+ "symfony/http-kernel": "2.7.*",
+ "symfony/process": "2.7.*",
+ "symfony/routing": "2.7.*",
+ "symfony/translation": "2.7.*",
+ "symfony/var-dumper": "2.7.*",
+ "vlucas/phpdotenv": "~1.0"
+ },
+ "replace": {
+ "illuminate/auth": "self.version",
+ "illuminate/broadcasting": "self.version",
+ "illuminate/bus": "self.version",
+ "illuminate/cache": "self.version",
+ "illuminate/config": "self.version",
+ "illuminate/console": "self.version",
+ "illuminate/container": "self.version",
+ "illuminate/contracts": "self.version",
+ "illuminate/cookie": "self.version",
+ "illuminate/database": "self.version",
+ "illuminate/encryption": "self.version",
+ "illuminate/events": "self.version",
+ "illuminate/exception": "self.version",
+ "illuminate/filesystem": "self.version",
+ "illuminate/foundation": "self.version",
+ "illuminate/hashing": "self.version",
+ "illuminate/http": "self.version",
+ "illuminate/log": "self.version",
+ "illuminate/mail": "self.version",
+ "illuminate/pagination": "self.version",
+ "illuminate/pipeline": "self.version",
+ "illuminate/queue": "self.version",
+ "illuminate/redis": "self.version",
+ "illuminate/routing": "self.version",
+ "illuminate/session": "self.version",
+ "illuminate/support": "self.version",
+ "illuminate/translation": "self.version",
+ "illuminate/validation": "self.version",
+ "illuminate/view": "self.version"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "~3.0",
+ "iron-io/iron_mq": "~2.0",
+ "mockery/mockery": "~0.9.1",
+ "pda/pheanstalk": "~3.0",
+ "phpunit/phpunit": "~4.0",
+ "predis/predis": "~1.0"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).",
+ "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).",
+ "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).",
+ "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers (~5.3|~6.0).",
+ "iron-io/iron_mq": "Required to use the iron queue driver (~2.0).",
+ "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).",
+ "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).",
+ "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).",
+ "predis/predis": "Required to use the redis cache and queue drivers (~1.0).",
+ "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/Illuminate/Queue/IlluminateQueueClosure.php"
+ ],
+ "files": [
+ "src/Illuminate/Foundation/helpers.php",
+ "src/Illuminate/Support/helpers.php"
+ ],
+ "psr-4": {
+ "Illuminate\\": "src/Illuminate/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylorotwell@gmail.com"
+ }
+ ],
+ "description": "The Laravel Framework.",
+ "homepage": "http://laravel.com",
+ "keywords": [
+ "framework",
+ "laravel"
+ ],
+ "time": "2015-07-12 02:27:36"
+ },
+ {
+ "name": "league/flysystem",
+ "version": "1.0.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "c42bed650525ec9ea1a83b715e37f4fc690f99aa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c42bed650525ec9ea1a83b715e37f4fc690f99aa",
+ "reference": "c42bed650525ec9ea1a83b715e37f4fc690f99aa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "ext-fileinfo": "*",
+ "mockery/mockery": "~0.9",
+ "phpspec/phpspec": "^2.2",
+ "phpspec/prophecy-phpunit": "~1.0",
+ "phpunit/phpunit": "~4.1"
+ },
+ "suggest": {
+ "ext-fileinfo": "Required for MimeType",
+ "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
+ "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
+ "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
+ "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
+ "league/flysystem-copy": "Allows you to use Copy.com storage",
+ "league/flysystem-dropbox": "Allows you to use Dropbox storage",
+ "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
+ "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
+ "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
+ "league/flysystem-webdav": "Allows you to use WebDAV storage",
+ "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Filesystem abstraction: Many filesystems, one API.",
+ "keywords": [
+ "Cloud Files",
+ "WebDAV",
+ "abstraction",
+ "aws",
+ "cloud",
+ "copy.com",
+ "dropbox",
+ "file systems",
+ "files",
+ "filesystem",
+ "filesystems",
+ "ftp",
+ "rackspace",
+ "remote",
+ "s3",
+ "sftp",
+ "storage"
+ ],
+ "time": "2015-07-13 09:25:28"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "1.15.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "dc5150cc608f2334c72c3b6a553ec9668a4156b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/dc5150cc608f2334c72c3b6a553ec9668a4156b0",
+ "reference": "dc5150cc608f2334c72c3b6a553ec9668a4156b0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "psr/log": "~1.0"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0.0"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^2.4.9",
+ "doctrine/couchdb": "~1.0@dev",
+ "graylog2/gelf-php": "~1.0",
+ "php-console/php-console": "^3.1.3",
+ "phpunit/phpunit": "~4.5",
+ "phpunit/phpunit-mock-objects": "2.3.0",
+ "raven/raven": "~0.8",
+ "ruflin/elastica": ">=0.90 <3.0",
+ "swiftmailer/swiftmailer": "~5.3",
+ "videlalvaro/php-amqplib": "~2.4"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-mongo": "Allow sending log messages to a MongoDB server",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "php-console/php-console": "Allow sending log messages to Google Chrome",
+ "raven/raven": "Allow sending log messages to a Sentry server",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
+ "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.15.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Monolog\\": "src/Monolog"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "http://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging",
+ "psr-3"
+ ],
+ "time": "2015-07-12 13:54:09"
+ },
+ {
+ "name": "mtdowling/cron-expression",
+ "version": "v1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mtdowling/cron-expression.git",
+ "reference": "fd92e883195e5dfa77720b1868cf084b08be4412"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/fd92e883195e5dfa77720b1868cf084b08be4412",
+ "reference": "fd92e883195e5dfa77720b1868cf084b08be4412",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Cron": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "time": "2015-01-11 23:07:46"
+ },
+ {
+ "name": "nesbot/carbon",
+ "version": "1.20.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/briannesbitt/Carbon.git",
+ "reference": "bfd3eaba109c9a2405c92174c8e17f20c2b9caf3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bfd3eaba109c9a2405c92174c8e17f20c2b9caf3",
+ "reference": "bfd3eaba109c9a2405c92174c8e17f20c2b9caf3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "symfony/translation": "~2.6|~3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Carbon": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "http://nesbot.com"
+ }
+ ],
+ "description": "A simple API extension for DateTime.",
+ "homepage": "http://carbon.nesbot.com",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "time": "2015-06-25 04:19:39"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "196f177cfefa0f1f7166c0a05d8255889be12418"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/196f177cfefa0f1f7166c0a05d8255889be12418",
+ "reference": "196f177cfefa0f1f7166c0a05d8255889be12418",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=5.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "lib/bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "time": "2015-07-14 17:31:05"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+ "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "time": "2015-05-04 20:22:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
+ "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Psr\\Log\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2012-12-21 11:40:51"
+ },
+ {
+ "name": "psy/psysh",
+ "version": "v0.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bobthecow/psysh.git",
+ "reference": "aaf8772ade08b5f0f6830774a5d5c2f800415975"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/aaf8772ade08b5f0f6830774a5d5c2f800415975",
+ "reference": "aaf8772ade08b5f0f6830774a5d5c2f800415975",
+ "shasum": ""
+ },
+ "require": {
+ "dnoegel/php-xdg-base-dir": "0.1",
+ "jakub-onderka/php-console-highlighter": "0.3.*",
+ "nikic/php-parser": "^1.2.1",
+ "php": ">=5.3.9",
+ "symfony/console": "~2.3.10|^2.4.2|~3.0",
+ "symfony/var-dumper": "~2.7|~3.0"
+ },
+ "require-dev": {
+ "fabpot/php-cs-fixer": "~1.5",
+ "phpunit/phpunit": "~3.7|~4.0",
+ "squizlabs/php_codesniffer": "~2.0",
+ "symfony/finder": "~2.1|~3.0"
+ },
+ "suggest": {
+ "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+ "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
+ "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history."
+ },
+ "bin": [
+ "bin/psysh"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-develop": "0.6.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Psy/functions.php"
+ ],
+ "psr-0": {
+ "Psy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info",
+ "homepage": "http://justinhileman.com"
+ }
+ ],
+ "description": "An interactive shell for modern PHP.",
+ "homepage": "http://psysh.org",
+ "keywords": [
+ "REPL",
+ "console",
+ "interactive",
+ "shell"
+ ],
+ "time": "2015-07-16 15:26:57"
+ },
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "v5.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swiftmailer/swiftmailer.git",
+ "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421",
+ "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "mockery/mockery": "~0.9.1,<0.9.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.4-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "lib/swift_required.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Corbyn"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Swiftmailer, free feature-rich PHP mailer",
+ "homepage": "http://swiftmailer.org",
+ "keywords": [
+ "email",
+ "mail",
+ "mailer"
+ ],
+ "time": "2015-06-06 14:19:39"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Console.git",
+ "reference": "8cf484449130cabfd98dcb4694ca9945802a21ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Console/zipball/8cf484449130cabfd98dcb4694ca9945802a21ed",
+ "reference": "8cf484449130cabfd98dcb4694ca9945802a21ed",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/event-dispatcher": "~2.1",
+ "symfony/phpunit-bridge": "~2.7",
+ "symfony/process": "~2.1"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Console Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-07-09 16:07:40"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/CssSelector.git",
+ "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/CssSelector/zipball/0b5c07b516226b7dd32afbbc82fe547a469c5092",
+ "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony CssSelector Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-05-15 13:33:16"
+ },
+ {
+ "name": "symfony/debug",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Debug.git",
+ "reference": "9daa1bf9f7e615fa2fba30357e479a90141222e3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Debug/zipball/9daa1bf9f7e615fa2fba30357e479a90141222e3",
+ "reference": "9daa1bf9f7e615fa2fba30357e479a90141222e3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9",
+ "psr/log": "~1.0"
+ },
+ "conflict": {
+ "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+ },
+ "require-dev": {
+ "symfony/class-loader": "~2.2",
+ "symfony/http-foundation": "~2.1",
+ "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2",
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "suggest": {
+ "symfony/http-foundation": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Debug\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Debug Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-07-09 16:07:40"
+ },
+ {
+ "name": "symfony/dom-crawler",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/DomCrawler.git",
+ "reference": "9dabece63182e95c42b06967a0d929a5df78bc35"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/9dabece63182e95c42b06967a0d929a5df78bc35",
+ "reference": "9dabece63182e95c42b06967a0d929a5df78bc35",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "symfony/css-selector": "~2.3",
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "suggest": {
+ "symfony/css-selector": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\DomCrawler\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony DomCrawler Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-07-09 16:07:40"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/EventDispatcher.git",
+ "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/9310b5f9a87ec2ea75d20fec0b0017c77c66dac3",
+ "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "~2.0,>=2.0.5",
+ "symfony/dependency-injection": "~2.6",
+ "symfony/expression-language": "~2.6",
+ "symfony/phpunit-bridge": "~2.7",
+ "symfony/stopwatch": "~2.3"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony EventDispatcher Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-06-18 19:21:56"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Finder.git",
+ "reference": "ae0f363277485094edc04c9f3cbe595b183b78e4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Finder/zipball/ae0f363277485094edc04c9f3cbe595b183b78e4",
+ "reference": "ae0f363277485094edc04c9f3cbe595b183b78e4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Finder Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-07-09 16:07:40"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/HttpFoundation.git",
+ "reference": "88903c0531b90d4ecd90282b18f08c0c77bde0b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/88903c0531b90d4ecd90282b18f08c0c77bde0b2",
+ "reference": "88903c0531b90d4ecd90282b18f08c0c77bde0b2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "symfony/expression-language": "~2.4",
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpFoundation\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony HttpFoundation Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-07-09 16:07:40"
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/HttpKernel.git",
+ "reference": "4a8a6f2a847475b3a38da50363a07f69b5cbf37e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/4a8a6f2a847475b3a38da50363a07f69b5cbf37e",
+ "reference": "4a8a6f2a847475b3a38da50363a07f69b5cbf37e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9",
+ "psr/log": "~1.0",
+ "symfony/debug": "~2.6,>=2.6.2",
+ "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
+ "symfony/http-foundation": "~2.5,>=2.5.4"
+ },
+ "conflict": {
+ "symfony/config": "<2.7"
+ },
+ "require-dev": {
+ "symfony/browser-kit": "~2.3",
+ "symfony/class-loader": "~2.1",
+ "symfony/config": "~2.7",
+ "symfony/console": "~2.3",
+ "symfony/css-selector": "~2.0,>=2.0.5",
+ "symfony/dependency-injection": "~2.2",
+ "symfony/dom-crawler": "~2.0,>=2.0.5",
+ "symfony/expression-language": "~2.4",
+ "symfony/finder": "~2.0,>=2.0.5",
+ "symfony/phpunit-bridge": "~2.7",
+ "symfony/process": "~2.0,>=2.0.5",
+ "symfony/routing": "~2.2",
+ "symfony/stopwatch": "~2.3",
+ "symfony/templating": "~2.2",
+ "symfony/translation": "~2.0,>=2.0.5",
+ "symfony/var-dumper": "~2.6"
+ },
+ "suggest": {
+ "symfony/browser-kit": "",
+ "symfony/class-loader": "",
+ "symfony/config": "",
+ "symfony/console": "",
+ "symfony/dependency-injection": "",
+ "symfony/finder": "",
+ "symfony/var-dumper": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpKernel\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony HttpKernel Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-07-13 19:27:49"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Process.git",
+ "reference": "48aeb0e48600321c272955132d7606ab0a49adb3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Process/zipball/48aeb0e48600321c272955132d7606ab0a49adb3",
+ "reference": "48aeb0e48600321c272955132d7606ab0a49adb3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Process Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-07-01 11:25:50"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Routing.git",
+ "reference": "ea9134f277162b02e5f80ac058b75a77637b0d26"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Routing/zipball/ea9134f277162b02e5f80ac058b75a77637b0d26",
+ "reference": "ea9134f277162b02e5f80ac058b75a77637b0d26",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "conflict": {
+ "symfony/config": "<2.7"
+ },
+ "require-dev": {
+ "doctrine/annotations": "~1.0",
+ "doctrine/common": "~2.2",
+ "psr/log": "~1.0",
+ "symfony/config": "~2.7",
+ "symfony/expression-language": "~2.4",
+ "symfony/http-foundation": "~2.3",
+ "symfony/phpunit-bridge": "~2.7",
+ "symfony/yaml": "~2.0,>=2.0.5"
+ },
+ "suggest": {
+ "doctrine/annotations": "For using the annotation loader",
+ "symfony/config": "For using the all-in-one router or any loader",
+ "symfony/expression-language": "For using expression matching",
+ "symfony/yaml": "For using the YAML loader"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Routing\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Routing Component",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "router",
+ "routing",
+ "uri",
+ "url"
+ ],
+ "time": "2015-07-09 16:07:40"
+ },
+ {
+ "name": "symfony/translation",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Translation.git",
+ "reference": "c8dc34cc936152c609cdd722af317e4239d10dd6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Translation/zipball/c8dc34cc936152c609cdd722af317e4239d10dd6",
+ "reference": "c8dc34cc936152c609cdd722af317e4239d10dd6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "conflict": {
+ "symfony/config": "<2.7"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "~2.7",
+ "symfony/intl": "~2.3",
+ "symfony/phpunit-bridge": "~2.7",
+ "symfony/yaml": "~2.2"
+ },
+ "suggest": {
+ "psr/log": "To use logging capability in translator",
+ "symfony/config": "",
+ "symfony/yaml": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Translation\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Translation Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-07-09 16:07:40"
+ },
+ {
+ "name": "symfony/var-dumper",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "fde603d9f4b2418ff0f0315b93eb039c9aa41205"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/fde603d9f4b2418ff0f0315b93eb039c9aa41205",
+ "reference": "fde603d9f4b2418ff0f0315b93eb039c9aa41205",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "suggest": {
+ "ext-symfony_debug": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "Resources/functions/dump.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\VarDumper\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony mechanism for exploring and dumping PHP variables",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "time": "2015-07-01 12:07:40"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa",
+ "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Dotenv": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD"
+ ],
+ "authors": [
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "http://www.vancelucas.com"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "homepage": "http://github.com/vlucas/phpdotenv",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "time": "2015-05-30 15:59:26"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3,<8.0-DEV"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://github.com/doctrine/instantiator",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2015-06-14 21:17:01"
+ },
+ {
+ "name": "fzaninotto/faker",
+ "version": "v1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fzaninotto/Faker.git",
+ "reference": "d0190b156bcca848d401fb80f31f504f37141c8d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d0190b156bcca848d401fb80f31f504f37141c8d",
+ "reference": "d0190b156bcca848d401fb80f31f504f37141c8d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~1.5"
+ },
+ "suggest": {
+ "ext-intl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "time": "2015-05-29 06:29:14"
+ },
+ {
+ "name": "hamcrest/hamcrest-php",
+ "version": "v1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/hamcrest/hamcrest-php.git",
+ "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c",
+ "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "replace": {
+ "cordoval/hamcrest-php": "*",
+ "davedevelopment/hamcrest-php": "*",
+ "kodova/hamcrest-php": "*"
+ },
+ "require-dev": {
+ "phpunit/php-file-iterator": "1.3.3",
+ "satooshi/php-coveralls": "dev-master"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "hamcrest"
+ ],
+ "files": [
+ "hamcrest/Hamcrest.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD"
+ ],
+ "description": "This is the PHP port of Hamcrest Matchers",
+ "keywords": [
+ "test"
+ ],
+ "time": "2015-05-11 14:41:42"
+ },
+ {
+ "name": "mockery/mockery",
+ "version": "0.9.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/padraic/mockery.git",
+ "reference": "70bba85e4aabc9449626651f48b9018ede04f86b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/padraic/mockery/zipball/70bba85e4aabc9449626651f48b9018ede04f86b",
+ "reference": "70bba85e4aabc9449626651f48b9018ede04f86b",
+ "shasum": ""
+ },
+ "require": {
+ "hamcrest/hamcrest-php": "~1.1",
+ "lib-pcre": ">=7.0",
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.9.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Mockery": "library/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Pádraic Brady",
+ "email": "padraic.brady@gmail.com",
+ "homepage": "http://blog.astrumfutura.com"
+ },
+ {
+ "name": "Dave Marshall",
+ "email": "dave.marshall@atstsolutions.co.uk",
+ "homepage": "http://davedevelopment.co.uk"
+ }
+ ],
+ "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.",
+ "homepage": "http://github.com/padraic/mockery",
+ "keywords": [
+ "BDD",
+ "TDD",
+ "library",
+ "mock",
+ "mock objects",
+ "mockery",
+ "stub",
+ "test",
+ "test double",
+ "testing"
+ ],
+ "time": "2015-04-02 19:54:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "suggest": {
+ "dflydev/markdown": "~1.0",
+ "erusev/parsedown": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "phpDocumentor": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "mike.vanriel@naenius.com"
+ }
+ ],
+ "time": "2015-02-03 12:10:50"
+ },
+ {
+ "name": "phpspec/php-diff",
+ "version": "v1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/php-diff.git",
+ "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/php-diff/zipball/30e103d19519fe678ae64a60d77884ef3d71b28a",
+ "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Diff": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Chris Boulton",
+ "homepage": "http://github.com/chrisboulton",
+ "role": "Original developer"
+ }
+ ],
+ "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).",
+ "time": "2013-11-01 13:02:21"
+ },
+ {
+ "name": "phpspec/phpspec",
+ "version": "2.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/phpspec.git",
+ "reference": "e9a40577323e67f1de2e214abf32976a0352d8f8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/phpspec/zipball/e9a40577323e67f1de2e214abf32976a0352d8f8",
+ "reference": "e9a40577323e67f1de2e214abf32976a0352d8f8",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.1",
+ "php": ">=5.3.3",
+ "phpspec/php-diff": "~1.0.0",
+ "phpspec/prophecy": "~1.4",
+ "sebastian/exporter": "~1.0",
+ "symfony/console": "~2.3",
+ "symfony/event-dispatcher": "~2.1",
+ "symfony/finder": "~2.1",
+ "symfony/process": "~2.1",
+ "symfony/yaml": "~2.1"
+ },
+ "require-dev": {
+ "behat/behat": "^3.0.11",
+ "bossa/phpspec2-expect": "~1.0",
+ "phpunit/phpunit": "~4.4",
+ "symfony/filesystem": "~2.1",
+ "symfony/process": "~2.1"
+ },
+ "suggest": {
+ "phpspec/nyan-formatters": "~1.0 – Adds Nyan formatters"
+ },
+ "bin": [
+ "bin/phpspec"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "PhpSpec": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "homepage": "http://marcelloduarte.net/"
+ }
+ ],
+ "description": "Specification-oriented BDD framework for PHP 5.3+",
+ "homepage": "http://phpspec.net/",
+ "keywords": [
+ "BDD",
+ "SpecBDD",
+ "TDD",
+ "spec",
+ "specification",
+ "testing",
+ "tests"
+ ],
+ "time": "2015-05-30 15:21:40"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373",
+ "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "phpdocumentor/reflection-docblock": "~2.0",
+ "sebastian/comparator": "~1.1"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Prophecy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "time": "2015-04-27 22:15:08"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "2.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "6044546998c7627ab997501a3d0db972b3db9790"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6044546998c7627ab997501a3d0db972b3db9790",
+ "reference": "6044546998c7627ab997501a3d0db972b3db9790",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "phpunit/php-file-iterator": "~1.3",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-token-stream": "~1.3",
+ "sebastian/environment": "~1.0",
+ "sebastian/version": "~1.0"
+ },
+ "require-dev": {
+ "ext-xdebug": ">=2.1.4",
+ "phpunit/phpunit": "~4"
+ },
+ "suggest": {
+ "ext-dom": "*",
+ "ext-xdebug": ">=2.2.1",
+ "ext-xmlwriter": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "time": "2015-07-13 11:25:58"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb",
+ "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "time": "2015-04-02 05:19:05"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2015-06-21 13:50:34"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "1.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/83fe1bdc5d47658b727595c14da140da92b3d66d",
+ "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "time": "2015-06-13 07:35:30"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "1.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
+ "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "time": "2015-06-19 03:43:16"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "4.7.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "9b97f9d807b862c2de2a36e86690000801c85724"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9b97f9d807b862c2de2a36e86690000801c85724",
+ "reference": "9b97f9d807b862c2de2a36e86690000801c85724",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "php": ">=5.3.3",
+ "phpspec/prophecy": "~1.3,>=1.3.1",
+ "phpunit/php-code-coverage": "~2.1",
+ "phpunit/php-file-iterator": "~1.4",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-timer": ">=1.0.6",
+ "phpunit/phpunit-mock-objects": "~2.3",
+ "sebastian/comparator": "~1.1",
+ "sebastian/diff": "~1.2",
+ "sebastian/environment": "~1.2",
+ "sebastian/exporter": "~1.2",
+ "sebastian/global-state": "~1.0",
+ "sebastian/version": "~1.0",
+ "symfony/yaml": "~2.1|~3.0"
+ },
+ "suggest": {
+ "phpunit/php-invoker": "~1.1"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.7.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "time": "2015-07-13 11:28:34"
+ },
+ {
+ "name": "phpunit/phpunit-mock-objects",
+ "version": "2.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+ "reference": "1c330b1b6e1ea8fd15f2fbea46770576e366855c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/1c330b1b6e1ea8fd15f2fbea46770576e366855c",
+ "reference": "1c330b1b6e1ea8fd15f2fbea46770576e366855c",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "~1.0,>=1.0.2",
+ "php": ">=5.3.3",
+ "phpunit/php-text-template": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "suggest": {
+ "ext-soap": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Mock Object library for PHPUnit",
+ "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+ "keywords": [
+ "mock",
+ "xunit"
+ ],
+ "time": "2015-07-04 05:41:32"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "1dd8869519a225f7f2b9eb663e225298fade819e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e",
+ "reference": "1dd8869519a225f7f2b9eb663e225298fade819e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "sebastian/diff": "~1.2",
+ "sebastian/exporter": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "http://www.github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "time": "2015-01-29 16:28:08"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3",
+ "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "http://www.github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff"
+ ],
+ "time": "2015-02-22 15:13:53"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e",
+ "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "time": "2015-01-01 10:01:08"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "84839970d05254c73cde183a721c7af13aede943"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943",
+ "reference": "84839970d05254c73cde183a721c7af13aede943",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "sebastian/recursion-context": "~1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "time": "2015-01-27 07:23:06"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
+ "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "time": "2014-10-06 09:23:50"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "3989662bbb30a29d20d9faa04a846af79b276252"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252",
+ "reference": "3989662bbb30a29d20d9faa04a846af79b276252",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "time": "2015-01-24 09:48:32"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "1.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "time": "2015-06-21 13:59:46"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Yaml.git",
+ "reference": "4bfbe0ed3909bfddd75b70c094391ec1f142f860"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Yaml/zipball/4bfbe0ed3909bfddd75b70c094391ec1f142f860",
+ "reference": "4bfbe0ed3909bfddd75b70c094391ec1f142f860",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Yaml Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-07-01 11:25:50"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=5.5.9"
+ },
+ "platform-dev": []
+}
diff --git a/server/config/app.php b/server/config/app.php
new file mode 100644
index 00000000..ff02fb8d
--- /dev/null
+++ b/server/config/app.php
@@ -0,0 +1,198 @@
+ env('APP_DEBUG', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application URL
+ |--------------------------------------------------------------------------
+ |
+ | This URL is used by the console to properly generate URLs when using
+ | the Artisan command line tool. You should set this to the root of
+ | your application so that it is used when running Artisan tasks.
+ |
+ */
+
+ 'url' => 'http://localhost',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Timezone
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the default timezone for your application, which
+ | will be used by the PHP date and date-time functions. We have gone
+ | ahead and set this to a sensible default for you out of the box.
+ |
+ */
+
+ 'timezone' => 'UTC',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Locale Configuration
+ |--------------------------------------------------------------------------
+ |
+ | The application locale determines the default locale that will be used
+ | by the translation service provider. You are free to set this value
+ | to any of the locales which will be supported by the application.
+ |
+ */
+
+ 'locale' => 'en',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Fallback Locale
+ |--------------------------------------------------------------------------
+ |
+ | The fallback locale determines the locale to use when the current one
+ | is not available. You may change the value to correspond to any of
+ | the language folders that are provided through your application.
+ |
+ */
+
+ 'fallback_locale' => 'en',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Encryption Key
+ |--------------------------------------------------------------------------
+ |
+ | This key is used by the Illuminate encrypter service and should be set
+ | to a random, 32 character string, otherwise these encrypted strings
+ | will not be safe. Please do this before deploying an application!
+ |
+ */
+
+ 'key' => env('APP_KEY', 'SomeRandomString'),
+
+ 'cipher' => 'AES-256-CBC',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Logging Configuration
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the log settings for your application. Out of
+ | the box, Laravel uses the Monolog PHP logging library. This gives
+ | you a variety of powerful log handlers / formatters to utilize.
+ |
+ | Available Settings: "single", "daily", "syslog", "errorlog"
+ |
+ */
+
+ 'log' => 'single',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Autoloaded Service Providers
+ |--------------------------------------------------------------------------
+ |
+ | The service providers listed here will be automatically loaded on the
+ | request to your application. Feel free to add your own services to
+ | this array to grant expanded functionality to your applications.
+ |
+ */
+
+ 'providers' => [
+
+ /*
+ * Laravel Framework Service Providers...
+ */
+ Illuminate\Foundation\Providers\ArtisanServiceProvider::class,
+ Illuminate\Auth\AuthServiceProvider::class,
+ Illuminate\Broadcasting\BroadcastServiceProvider::class,
+ Illuminate\Bus\BusServiceProvider::class,
+ Illuminate\Cache\CacheServiceProvider::class,
+ Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
+ Illuminate\Routing\ControllerServiceProvider::class,
+ Illuminate\Cookie\CookieServiceProvider::class,
+ Illuminate\Database\DatabaseServiceProvider::class,
+ Illuminate\Encryption\EncryptionServiceProvider::class,
+ Illuminate\Filesystem\FilesystemServiceProvider::class,
+ Illuminate\Foundation\Providers\FoundationServiceProvider::class,
+ Illuminate\Hashing\HashServiceProvider::class,
+ Illuminate\Mail\MailServiceProvider::class,
+ Illuminate\Pagination\PaginationServiceProvider::class,
+ Illuminate\Pipeline\PipelineServiceProvider::class,
+ Illuminate\Queue\QueueServiceProvider::class,
+ Illuminate\Redis\RedisServiceProvider::class,
+ Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
+ Illuminate\Session\SessionServiceProvider::class,
+ Illuminate\Translation\TranslationServiceProvider::class,
+ Illuminate\Validation\ValidationServiceProvider::class,
+ Illuminate\View\ViewServiceProvider::class,
+ 'Cviebrock\EloquentSluggable\SluggableServiceProvider',
+
+ /*
+ * Application Service Providers...
+ */
+ Flox\Providers\AppServiceProvider::class,
+ Flox\Providers\EventServiceProvider::class,
+ Flox\Providers\RouteServiceProvider::class,
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Class Aliases
+ |--------------------------------------------------------------------------
+ |
+ | This array of class aliases will be registered when this application
+ | is started. However, feel free to register as many as you wish as
+ | the aliases are "lazy" loaded so they don't hinder performance.
+ |
+ */
+
+ 'aliases' => [
+
+ 'App' => Illuminate\Support\Facades\App::class,
+ 'Artisan' => Illuminate\Support\Facades\Artisan::class,
+ 'Auth' => Illuminate\Support\Facades\Auth::class,
+ 'Blade' => Illuminate\Support\Facades\Blade::class,
+ 'Bus' => Illuminate\Support\Facades\Bus::class,
+ 'Cache' => Illuminate\Support\Facades\Cache::class,
+ 'Config' => Illuminate\Support\Facades\Config::class,
+ 'Cookie' => Illuminate\Support\Facades\Cookie::class,
+ 'Crypt' => Illuminate\Support\Facades\Crypt::class,
+ 'DB' => Illuminate\Support\Facades\DB::class,
+ 'Eloquent' => Illuminate\Database\Eloquent\Model::class,
+ 'Event' => Illuminate\Support\Facades\Event::class,
+ 'File' => Illuminate\Support\Facades\File::class,
+ 'Hash' => Illuminate\Support\Facades\Hash::class,
+ 'Input' => Illuminate\Support\Facades\Input::class,
+ 'Inspiring' => Illuminate\Foundation\Inspiring::class,
+ 'Lang' => Illuminate\Support\Facades\Lang::class,
+ 'Log' => Illuminate\Support\Facades\Log::class,
+ 'Mail' => Illuminate\Support\Facades\Mail::class,
+ 'Password' => Illuminate\Support\Facades\Password::class,
+ 'Queue' => Illuminate\Support\Facades\Queue::class,
+ 'Redirect' => Illuminate\Support\Facades\Redirect::class,
+ 'Redis' => Illuminate\Support\Facades\Redis::class,
+ 'Request' => Illuminate\Support\Facades\Request::class,
+ 'Response' => Illuminate\Support\Facades\Response::class,
+ 'Route' => Illuminate\Support\Facades\Route::class,
+ 'Schema' => Illuminate\Support\Facades\Schema::class,
+ 'Session' => Illuminate\Support\Facades\Session::class,
+ 'Storage' => Illuminate\Support\Facades\Storage::class,
+ 'URL' => Illuminate\Support\Facades\URL::class,
+ 'Validator' => Illuminate\Support\Facades\Validator::class,
+ 'View' => Illuminate\Support\Facades\View::class,
+
+ ],
+
+];
diff --git a/server/config/auth.php b/server/config/auth.php
new file mode 100644
index 00000000..fe99db85
--- /dev/null
+++ b/server/config/auth.php
@@ -0,0 +1,67 @@
+ 'eloquent',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Authentication Model
+ |--------------------------------------------------------------------------
+ |
+ | When using the "Eloquent" authentication driver, we need to know which
+ | Eloquent model should be used to retrieve your users. Of course, it
+ | is often just the "User" model but you may use whatever you like.
+ |
+ */
+
+ 'model' => Flox\User::class,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Authentication Table
+ |--------------------------------------------------------------------------
+ |
+ | When using the "Database" authentication driver, we need to know which
+ | table should be used to retrieve your users. We have chosen a basic
+ | default value but you may easily change it to any table you like.
+ |
+ */
+
+ 'table' => 'users',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Password Reset Settings
+ |--------------------------------------------------------------------------
+ |
+ | Here you may set the options for resetting passwords including the view
+ | that is your password reset e-mail. You can also set the name of the
+ | table that maintains all of the reset tokens for your application.
+ |
+ | The expire time is the number of minutes that the reset token should be
+ | considered valid. This security feature keeps tokens short-lived so
+ | they have less time to be guessed. You may change this as needed.
+ |
+ */
+
+ 'password' => [
+ 'email' => 'emails.password',
+ 'table' => 'password_resets',
+ 'expire' => 60,
+ ],
+
+];
diff --git a/server/config/broadcasting.php b/server/config/broadcasting.php
new file mode 100644
index 00000000..36f9b3c1
--- /dev/null
+++ b/server/config/broadcasting.php
@@ -0,0 +1,49 @@
+ env('BROADCAST_DRIVER', 'pusher'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Broadcast Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define all of the broadcast connections that will be used
+ | to broadcast events to other systems or over websockets. Samples of
+ | each available type of connection are provided inside this array.
+ |
+ */
+
+ 'connections' => [
+
+ 'pusher' => [
+ 'driver' => 'pusher',
+ 'key' => env('PUSHER_KEY'),
+ 'secret' => env('PUSHER_SECRET'),
+ 'app_id' => env('PUSHER_APP_ID'),
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => 'default',
+ ],
+
+ 'log' => [
+ 'driver' => 'log',
+ ],
+
+ ],
+
+];
diff --git a/server/config/cache.php b/server/config/cache.php
new file mode 100644
index 00000000..379135b0
--- /dev/null
+++ b/server/config/cache.php
@@ -0,0 +1,79 @@
+ env('CACHE_DRIVER', 'file'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cache Stores
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define all of the cache "stores" for your application as
+ | well as their drivers. You may even define multiple stores for the
+ | same cache driver to group types of items stored in your caches.
+ |
+ */
+
+ 'stores' => [
+
+ 'apc' => [
+ 'driver' => 'apc',
+ ],
+
+ 'array' => [
+ 'driver' => 'array',
+ ],
+
+ 'database' => [
+ 'driver' => 'database',
+ 'table' => 'cache',
+ 'connection' => null,
+ ],
+
+ 'file' => [
+ 'driver' => 'file',
+ 'path' => storage_path('framework/cache'),
+ ],
+
+ 'memcached' => [
+ 'driver' => 'memcached',
+ 'servers' => [
+ [
+ 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100,
+ ],
+ ],
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => 'default',
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cache Key Prefix
+ |--------------------------------------------------------------------------
+ |
+ | When utilizing a RAM based store such as APC or Memcached, there might
+ | be other applications utilizing the same cache. So, we'll specify a
+ | value to get prefixed to all our keys so we can avoid collisions.
+ |
+ */
+
+ 'prefix' => 'laravel',
+
+];
diff --git a/server/config/compile.php b/server/config/compile.php
new file mode 100644
index 00000000..04807eac
--- /dev/null
+++ b/server/config/compile.php
@@ -0,0 +1,35 @@
+ [
+ //
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Compiled File Providers
+ |--------------------------------------------------------------------------
+ |
+ | Here you may list service providers which define a "compiles" function
+ | that returns additional files that should be compiled, providing an
+ | easy way to get common files from any packages you are utilizing.
+ |
+ */
+
+ 'providers' => [
+ //
+ ],
+
+];
diff --git a/server/config/database.php b/server/config/database.php
new file mode 100644
index 00000000..62a504fc
--- /dev/null
+++ b/server/config/database.php
@@ -0,0 +1,128 @@
+ PDO::FETCH_CLASS,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Default Database Connection Name
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify which of the database connections below you wish
+ | to use as your default connection for all database work. Of course
+ | you may use many connections at once using the Database library.
+ |
+ */
+
+ 'default' => env('DB_CONNECTION', 'mysql'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Database Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here are each of the database connections setup for your application.
+ | Of course, examples of configuring each database platform that is
+ | supported by Laravel is shown below to make development simple.
+ |
+ |
+ | All database work in Laravel is done through the PHP PDO facilities
+ | so make sure you have the driver for your particular database of
+ | choice installed on your machine before you begin development.
+ |
+ */
+
+ 'connections' => [
+
+ 'sqlite' => [
+ 'driver' => 'sqlite',
+ 'database' => storage_path('database.sqlite'),
+ 'prefix' => '',
+ ],
+
+ 'mysql' => [
+ 'driver' => 'mysql',
+ 'host' => env('DB_HOST', 'localhost'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => 'utf8',
+ 'collation' => 'utf8_unicode_ci',
+ 'prefix' => '',
+ 'strict' => false,
+ // mamp :P
+ //'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
+ ],
+
+ 'pgsql' => [
+ 'driver' => 'pgsql',
+ 'host' => env('DB_HOST', 'localhost'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => 'utf8',
+ 'prefix' => '',
+ 'schema' => 'public',
+ ],
+
+ 'sqlsrv' => [
+ 'driver' => 'sqlsrv',
+ 'host' => env('DB_HOST', 'localhost'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => 'utf8',
+ 'prefix' => '',
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Migration Repository Table
+ |--------------------------------------------------------------------------
+ |
+ | This table keeps track of all the migrations that have already run for
+ | your application. Using this information, we can determine which of
+ | the migrations on disk haven't actually been run in the database.
+ |
+ */
+
+ 'migrations' => 'migrations',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Redis Databases
+ |--------------------------------------------------------------------------
+ |
+ | Redis is an open source, fast, and advanced key-value store that also
+ | provides a richer set of commands than a typical key-value systems
+ | such as APC or Memcached. Laravel makes it easy to dig right in.
+ |
+ */
+
+ 'redis' => [
+
+ 'cluster' => false,
+
+ 'default' => [
+ 'host' => '127.0.0.1',
+ 'port' => 6379,
+ 'database' => 0,
+ ],
+
+ ],
+
+];
diff --git a/server/config/filesystems.php b/server/config/filesystems.php
new file mode 100644
index 00000000..3fffcf0a
--- /dev/null
+++ b/server/config/filesystems.php
@@ -0,0 +1,85 @@
+ 'local',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Default Cloud Filesystem Disk
+ |--------------------------------------------------------------------------
+ |
+ | Many applications store files both locally and in the cloud. For this
+ | reason, you may specify a default "cloud" driver here. This driver
+ | will be bound as the Cloud disk implementation in the container.
+ |
+ */
+
+ 'cloud' => 's3',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Filesystem Disks
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure as many filesystem "disks" as you wish, and you
+ | may even configure multiple disks of the same driver. Defaults have
+ | been setup for each driver as an example of the required options.
+ |
+ */
+
+ 'disks' => [
+
+ 'local' => [
+ 'driver' => 'local',
+ 'root' => storage_path('app'),
+ ],
+
+ 'ftp' => [
+ 'driver' => 'ftp',
+ 'host' => 'ftp.example.com',
+ 'username' => 'your-username',
+ 'password' => 'your-password',
+
+ // Optional FTP Settings...
+ // 'port' => 21,
+ // 'root' => '',
+ // 'passive' => true,
+ // 'ssl' => true,
+ // 'timeout' => 30,
+ ],
+
+ 's3' => [
+ 'driver' => 's3',
+ 'key' => 'your-key',
+ 'secret' => 'your-secret',
+ 'region' => 'your-region',
+ 'bucket' => 'your-bucket',
+ ],
+
+ 'rackspace' => [
+ 'driver' => 'rackspace',
+ 'username' => 'your-username',
+ 'key' => 'your-key',
+ 'container' => 'your-container',
+ 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
+ 'region' => 'IAD',
+ 'url_type' => 'publicURL',
+ ],
+
+ ],
+
+];
diff --git a/server/config/mail.php b/server/config/mail.php
new file mode 100644
index 00000000..a22807e7
--- /dev/null
+++ b/server/config/mail.php
@@ -0,0 +1,124 @@
+ env('MAIL_DRIVER', 'smtp'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | SMTP Host Address
+ |--------------------------------------------------------------------------
+ |
+ | Here you may provide the host address of the SMTP server used by your
+ | applications. A default option is provided that is compatible with
+ | the Mailgun mail service which will provide reliable deliveries.
+ |
+ */
+
+ 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | SMTP Host Port
+ |--------------------------------------------------------------------------
+ |
+ | This is the SMTP port used by your application to deliver e-mails to
+ | users of the application. Like the host we have set this value to
+ | stay compatible with the Mailgun e-mail application by default.
+ |
+ */
+
+ 'port' => env('MAIL_PORT', 587),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Global "From" Address
+ |--------------------------------------------------------------------------
+ |
+ | You may wish for all e-mails sent by your application to be sent from
+ | the same address. Here, you may specify a name and address that is
+ | used globally for all e-mails that are sent by your application.
+ |
+ */
+
+ 'from' => ['address' => null, 'name' => null],
+
+ /*
+ |--------------------------------------------------------------------------
+ | E-Mail Encryption Protocol
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the encryption protocol that should be used when
+ | the application send e-mail messages. A sensible default using the
+ | transport layer security protocol should provide great security.
+ |
+ */
+
+ 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | SMTP Server Username
+ |--------------------------------------------------------------------------
+ |
+ | If your SMTP server requires a username for authentication, you should
+ | set it here. This will get used to authenticate with your server on
+ | connection. You may also set the "password" value below this one.
+ |
+ */
+
+ 'username' => env('MAIL_USERNAME'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | SMTP Server Password
+ |--------------------------------------------------------------------------
+ |
+ | Here you may set the password required by your SMTP server to send out
+ | messages from your application. This will be given to the server on
+ | connection so that the application will be able to send messages.
+ |
+ */
+
+ 'password' => env('MAIL_PASSWORD'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Sendmail System Path
+ |--------------------------------------------------------------------------
+ |
+ | When using the "sendmail" driver to send e-mails, we will need to know
+ | the path to where Sendmail lives on this server. A default path has
+ | been provided here, which will work well on most of your systems.
+ |
+ */
+
+ 'sendmail' => '/usr/sbin/sendmail -bs',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Mail "Pretend"
+ |--------------------------------------------------------------------------
+ |
+ | When this option is enabled, e-mail will not actually be sent over the
+ | web and will instead be written to your application's logs files so
+ | you may inspect the message. This is great for local development.
+ |
+ */
+
+ 'pretend' => false,
+
+];
diff --git a/server/config/queue.php b/server/config/queue.php
new file mode 100644
index 00000000..cf9b09da
--- /dev/null
+++ b/server/config/queue.php
@@ -0,0 +1,93 @@
+ env('QUEUE_DRIVER', 'sync'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Queue Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the connection information for each server that
+ | is used by your application. A default configuration has been added
+ | for each back-end shipped with Laravel. You are free to add more.
+ |
+ */
+
+ 'connections' => [
+
+ 'sync' => [
+ 'driver' => 'sync',
+ ],
+
+ 'database' => [
+ 'driver' => 'database',
+ 'table' => 'jobs',
+ 'queue' => 'default',
+ 'expire' => 60,
+ ],
+
+ 'beanstalkd' => [
+ 'driver' => 'beanstalkd',
+ 'host' => 'localhost',
+ 'queue' => 'default',
+ 'ttr' => 60,
+ ],
+
+ 'sqs' => [
+ 'driver' => 'sqs',
+ 'key' => 'your-public-key',
+ 'secret' => 'your-secret-key',
+ 'queue' => 'your-queue-url',
+ 'region' => 'us-east-1',
+ ],
+
+ 'iron' => [
+ 'driver' => 'iron',
+ 'host' => 'mq-aws-us-east-1.iron.io',
+ 'token' => 'your-token',
+ 'project' => 'your-project-id',
+ 'queue' => 'your-queue-name',
+ 'encrypt' => true,
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => 'default',
+ 'queue' => 'default',
+ 'expire' => 60,
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Failed Queue Jobs
+ |--------------------------------------------------------------------------
+ |
+ | These options configure the behavior of failed queue job logging so you
+ | can control which database and table are used to store the jobs that
+ | have failed. You may change them to any database / table you wish.
+ |
+ */
+
+ 'failed' => [
+ 'database' => 'mysql', 'table' => 'failed_jobs',
+ ],
+
+];
diff --git a/server/config/services.php b/server/config/services.php
new file mode 100644
index 00000000..8cea9dc0
--- /dev/null
+++ b/server/config/services.php
@@ -0,0 +1,38 @@
+ [
+ 'domain' => '',
+ 'secret' => '',
+ ],
+
+ 'mandrill' => [
+ 'secret' => '',
+ ],
+
+ 'ses' => [
+ 'key' => '',
+ 'secret' => '',
+ 'region' => 'us-east-1',
+ ],
+
+ 'stripe' => [
+ 'model' => Flox\User::class,
+ 'key' => '',
+ 'secret' => '',
+ ],
+
+];
diff --git a/server/config/session.php b/server/config/session.php
new file mode 100644
index 00000000..f1b00421
--- /dev/null
+++ b/server/config/session.php
@@ -0,0 +1,153 @@
+ env('SESSION_DRIVER', 'file'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Lifetime
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the number of minutes that you wish the session
+ | to be allowed to remain idle before it expires. If you want them
+ | to immediately expire on the browser closing, set that option.
+ |
+ */
+
+ 'lifetime' => 120,
+
+ 'expire_on_close' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Encryption
+ |--------------------------------------------------------------------------
+ |
+ | This option allows you to easily specify that all of your session data
+ | should be encrypted before it is stored. All encryption will be run
+ | automatically by Laravel and you can use the Session like normal.
+ |
+ */
+
+ 'encrypt' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session File Location
+ |--------------------------------------------------------------------------
+ |
+ | When using the native session driver, we need a location where session
+ | files may be stored. A default has been set for you but a different
+ | location may be specified. This is only needed for file sessions.
+ |
+ */
+
+ 'files' => storage_path('framework/sessions'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Database Connection
+ |--------------------------------------------------------------------------
+ |
+ | When using the "database" or "redis" session drivers, you may specify a
+ | connection that should be used to manage these sessions. This should
+ | correspond to a connection in your database configuration options.
+ |
+ */
+
+ 'connection' => null,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Database Table
+ |--------------------------------------------------------------------------
+ |
+ | When using the "database" session driver, you may specify the table we
+ | should use to manage the sessions. Of course, a sensible default is
+ | provided for you; however, you are free to change this as needed.
+ |
+ */
+
+ 'table' => 'sessions',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Sweeping Lottery
+ |--------------------------------------------------------------------------
+ |
+ | Some session drivers must manually sweep their storage location to get
+ | rid of old sessions from storage. Here are the chances that it will
+ | happen on a given request. By default, the odds are 2 out of 100.
+ |
+ */
+
+ 'lottery' => [2, 100],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Name
+ |--------------------------------------------------------------------------
+ |
+ | Here you may change the name of the cookie used to identify a session
+ | instance by ID. The name specified here will get used every time a
+ | new session cookie is created by the framework for every driver.
+ |
+ */
+
+ 'cookie' => 'laravel_session',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Path
+ |--------------------------------------------------------------------------
+ |
+ | The session cookie path determines the path for which the cookie will
+ | be regarded as available. Typically, this will be the root path of
+ | your application but you are free to change this when necessary.
+ |
+ */
+
+ 'path' => '/',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Domain
+ |--------------------------------------------------------------------------
+ |
+ | Here you may change the domain of the cookie used to identify a session
+ | in your application. This will determine which domains the cookie is
+ | available to in your application. A sensible default has been set.
+ |
+ */
+
+ 'domain' => null,
+
+ /*
+ |--------------------------------------------------------------------------
+ | HTTPS Only Cookies
+ |--------------------------------------------------------------------------
+ |
+ | By setting this option to true, session cookies will only be sent back
+ | to the server if the browser has a HTTPS connection. This will keep
+ | the cookie from being sent to you if it can not be done securely.
+ |
+ */
+
+ 'secure' => false,
+
+];
diff --git a/server/config/sluggable.php b/server/config/sluggable.php
new file mode 100644
index 00000000..d4aaf7ca
--- /dev/null
+++ b/server/config/sluggable.php
@@ -0,0 +1,113 @@
+name;
+ *
+ * Or it can be an array of fields, like ("name", "company"), which builds a slug from:
+ *
+ * $model->name . ' ' . $model->company;
+ *
+ * If you've defined custom getters in your model, you can use those too,
+ * since Eloquent will call them when you request a custom attribute.
+ *
+ * Defaults to null, which uses the toString() method on your model.
+ */
+ 'build_from' => null,
+
+ /**
+ * What field to we store the slug in? Defaults to "slug".
+ * You need to configure this when building the SQL for your database, e.g.:
+ *
+ * Schema::create('users', function($table)
+ * {
+ * $table->string('slug');
+ * });
+ */
+ 'save_to' => 'slug',
+
+ /**
+ * The maximum length of a generated slug. Defaults to "null", which means
+ * no length restrictions are enforced. Set it to a positive integer if you
+ * want to make sure your slugs aren't too long.
+ */
+ 'max_length' => null,
+
+ /**
+ * If left to "null", then use the cocur/slugify package to generate the slug
+ * (with the separator defined below).
+ *
+ * Set this to a closure that accepts two parameters (string and separator)
+ * to define a custom slugger. e.g.:
+ *
+ * 'method' => function( $string, $sep ) {
+ * return preg_replace('/[^a-z]+/i', $sep, $string);
+ * },
+ *
+ * Otherwise, this will be treated as a callable to be used. e.g.:
+ *
+ * 'method' => array('Str','slug'),
+ */
+ 'method' => null,
+
+ /**
+ * Separator to use when generating slugs. Defaults to a hyphen.
+ */
+ 'separator' => '-',
+
+ /**
+ * Enforce uniqueness of slugs? Defaults to true.
+ * If a generated slug already exists, an incremental numeric
+ * value will be appended to the end until a unique slug is found. e.g.:
+ *
+ * my-slug
+ * my-slug-1
+ * my-slug-2
+ */
+ 'unique' => true,
+
+ /**
+ * Should we include the trashed items when generating a unique slug?
+ * This only applies if the softDelete property is set for the Eloquent model.
+ * If set to "false", then a new slug could duplicate one that exists on a trashed model.
+ * If set to "true", then uniqueness is enforced across trashed and existing models.
+ */
+ 'include_trashed' => false,
+
+ /**
+ * Whether to update the slug value when a model is being
+ * re-saved (i.e. already exists). Defaults to false, which
+ * means slugs are not updated.
+ */
+ 'on_update' => false,
+
+ /**
+ * An array of slug names that can never be used for this model,
+ * e.g. to prevent collisions with existing routes or controller methods, etc..
+ * Defaults to null (i.e. no reserved names).
+ * Can be a static array, e.g.:
+ *
+ * 'reserved' => array('add', 'delete'),
+ *
+ * or a closure that returns an array of reserved names.
+ * If using a closure, it will accept one parameter: the model itself, and should
+ * return an array of reserved names, or null. e.g.
+ *
+ * 'reserved' => function( Model $model) {
+ * return $model->some_method_that_returns_an_array();
+ * }
+ *
+ * In the case of a slug that gets generated with one of these reserved names,
+ * we will do:
+ *
+ * $slug .= $seperator + "1"
+ *
+ * and continue from there.
+ */
+ 'reserved' => null,
+
+];
diff --git a/server/config/view.php b/server/config/view.php
new file mode 100644
index 00000000..14450eae
--- /dev/null
+++ b/server/config/view.php
@@ -0,0 +1,33 @@
+ [
+ realpath(base_path('../client/views')),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Compiled View Path
+ |--------------------------------------------------------------------------
+ |
+ | This option determines where all the compiled Blade templates will be
+ | stored for your application. Typically, this is within the storage
+ | directory. However, as usual, you are free to change this value.
+ |
+ */
+
+ 'compiled' => realpath(storage_path('framework/views')),
+
+];
diff --git a/server/database/.gitignore b/server/database/.gitignore
new file mode 100644
index 00000000..9b1dffd9
--- /dev/null
+++ b/server/database/.gitignore
@@ -0,0 +1 @@
+*.sqlite
diff --git a/server/database/factories/ModelFactory.php b/server/database/factories/ModelFactory.php
new file mode 100644
index 00000000..8992c49f
--- /dev/null
+++ b/server/database/factories/ModelFactory.php
@@ -0,0 +1,21 @@
+define(Flox\User::class, function ($faker) {
+ return [
+ 'name' => $faker->name,
+ 'email' => $faker->email,
+ 'password' => str_random(10),
+ 'remember_token' => str_random(10),
+ ];
+});
diff --git a/server/database/migrations/.gitkeep b/server/database/migrations/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/server/database/migrations/2014_10_12_000000_create_users_table.php b/server/database/migrations/2014_10_12_000000_create_users_table.php
new file mode 100644
index 00000000..65d3d083
--- /dev/null
+++ b/server/database/migrations/2014_10_12_000000_create_users_table.php
@@ -0,0 +1,34 @@
+increments('id');
+ $table->string('name');
+ $table->string('email')->unique();
+ $table->string('password', 60);
+ $table->rememberToken();
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::drop('users');
+ }
+}
diff --git a/server/database/migrations/2015_07_09_061820_create_categories_table.php b/server/database/migrations/2015_07_09_061820_create_categories_table.php
new file mode 100644
index 00000000..80fd3fa2
--- /dev/null
+++ b/server/database/migrations/2015_07_09_061820_create_categories_table.php
@@ -0,0 +1,31 @@
+increments('id');
+ $table->string('name');
+ $table->string('slug');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::drop('categories');
+ }
+}
diff --git a/server/database/migrations/2015_07_09_071718_create_items_table.php b/server/database/migrations/2015_07_09_071718_create_items_table.php
new file mode 100644
index 00000000..ce8590fa
--- /dev/null
+++ b/server/database/migrations/2015_07_09_071718_create_items_table.php
@@ -0,0 +1,39 @@
+increments('id');
+ $table->integer('tmdb_id');
+ $table->string('title');
+ $table->string('slug');
+ $table->string('poster');
+ $table->integer('category_id')->unsigned();
+ $table->foreign('category_id')->references('id')->on('categories');
+ $table->integer('rating');
+ $table->integer('released');
+ $table->integer('seen');
+ $table->integer('created_at');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::drop('items');
+ }
+}
diff --git a/server/database/seeds/.gitkeep b/server/database/seeds/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/server/database/seeds/CategoryTableSeeder.php b/server/database/seeds/CategoryTableSeeder.php
new file mode 100644
index 00000000..fe1a7506
--- /dev/null
+++ b/server/database/seeds/CategoryTableSeeder.php
@@ -0,0 +1,29 @@
+insert([
+ 'name' => 'Movies',
+ 'slug' => 'movies'
+ ]);
+
+ DB::table('categories')->insert([
+ 'name' => 'Series',
+ 'slug' => 'series'
+ ]);
+
+ DB::table('categories')->insert([
+ 'name' => 'Animes',
+ 'slug' => 'animes'
+ ]);
+ }
+}
diff --git a/server/database/seeds/DatabaseSeeder.php b/server/database/seeds/DatabaseSeeder.php
new file mode 100644
index 00000000..7c52f188
--- /dev/null
+++ b/server/database/seeds/DatabaseSeeder.php
@@ -0,0 +1,22 @@
+call(CategoryTableSeeder::class);
+ $this->call(ItemTableSeeder::class);
+
+ Model::reguard();
+ }
+ }
diff --git a/server/database/seeds/ItemTableSeeder.php b/server/database/seeds/ItemTableSeeder.php
new file mode 100644
index 00000000..3527a4a3
--- /dev/null
+++ b/server/database/seeds/ItemTableSeeder.php
@@ -0,0 +1,209 @@
+insert([
+ 'tmdb_id' => 99861,
+ 'title' => 'Avengers: Age of Ultron',
+ 'slug' => Str::slug('Avengers: Age of Ultron'),
+ 'poster' => '/t90Y3G8UGQp0f0DrP60wRu9gfrH.jpg',
+ 'category_id' => 1,
+ 'rating' => 2,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 135397,
+ 'title' => 'Jurassic World',
+ 'slug' => Str::slug('Jurassic World'),
+ 'poster' => '/uXZYawqUsChGSj54wcuBtEdUJbh.jpg',
+ 'category_id' => 1,
+ 'rating' => 4,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 68726,
+ 'title' => 'Pacific Rim',
+ 'slug' => Str::slug('Pacific Rim'),
+ 'poster' => '/sCJEwEShZvruTpQ2a4yiX3Q9EyZ.jpg',
+ 'category_id' => 1,
+ 'rating' => 3,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 242224,
+ 'title' => 'The Babadook',
+ 'slug' => Str::slug('The Babadook'),
+ 'poster' => '/b3YzM03YxkOaJw2PglfKlcwr8bM.jpg',
+ 'category_id' => 1,
+ 'rating' => 4,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 26447,
+ 'title' => 'Dragon Ball Z',
+ 'slug' => Str::slug('Dragon Ball Z'),
+ 'poster' => '/4YJSp7sAcxD3nea9n9mjwU2Y3DV.jpg',
+ 'category_id' => 3,
+ 'rating' => 5,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 184346,
+
+ 'title' => 'Deliver Us from Evil',
+ 'slug' => Str::slug('Deliver Us from Evil'),
+ 'poster' => '/yEIMu6tgUPNmbLfH7fugKOe12id.jpg',
+ 'category_id' => 1,
+ 'rating' => 4,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 21208,
+
+ 'title' => 'Orphan',
+ 'slug' => Str::slug('Orphan'),
+ 'poster' => '/dVP8tE9bV2oIv1l0aWtTUJndZvc.jpg',
+ 'category_id' => 1,
+ 'rating' => 5,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 4607,
+ 'title' => 'Lost',
+ 'slug' => Str::slug('Lost'),
+ 'poster' => '/jyGspygDXJMydTOJj7iWNx9Elyd.jpg',
+ 'category_id' => 2,
+ 'rating' => 4,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 2288,
+ 'title' => 'Prison Break',
+ 'slug' => Str::slug('Prison Break'),
+ 'poster' => '/38KlJOm67KyZqT9ZcBSsmET04HG.jpg',
+ 'category_id' => 2,
+ 'rating' => 4,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 44217,
+ 'title' => 'Vikings',
+ 'slug' => Str::slug('Vikings'),
+ 'poster' => '/mBDlsOhNOV1MkNii81aT14EYQ4S.jpg',
+ 'category_id' => 2,
+ 'rating' => 5,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 1399,
+ 'title' => 'Game of Thrones',
+ 'slug' => Str::slug('Game of Thrones'),
+ 'poster' => '/jIhL6mlT7AblhbHJgEoiBIOUVl1.jpg',
+ 'category_id' => 2,
+ 'rating' => 5,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 1413,
+ 'title' => 'American Horror Story',
+ 'slug' => Str::slug('American Horror Story'),
+ 'poster' => '/uRl2hCJw2SXOMJhmcJF6UlBmBij.jpg',
+ 'category_id' => 2,
+ 'rating' => 4,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 61459,
+ 'title' => 'Parasyte -the maxim-',
+ 'slug' => Str::slug('Parasyte -the maxim-'),
+ 'poster' => '/pUdUxvuqabs6JDru00wmMIjibbS.jpg',
+ 'category_id' => 3,
+ 'rating' => 5,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 13916,
+ 'title' => 'Death Note',
+ 'slug' => Str::slug('Death Note'),
+ 'poster' => '/nhIkKuOpOXOE6ud0naCHTjRoOwq.jpg',
+ 'category_id' => 3,
+ 'rating' => 5,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 16830,
+ 'title' => 'Hellsing',
+ 'slug' => Str::slug('Hellsing'),
+ 'poster' => '/fK5eCcDxukp75lmDWvQkhJvYtOj.jpg',
+ 'category_id' => 3,
+ 'rating' => 4,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+
+ DB::table('items')->insert([
+ 'tmdb_id' => 46298,
+ 'title' => 'Hunter x Hunter',
+ 'slug' => Str::slug('Hunter x Hunter'),
+ 'poster' => '/l5CLmiz0yPwusw3D10XaQDuSFTm.jpg',
+ 'category_id' => 3,
+ 'rating' => 5,
+ 'released' => '1429912800',
+ 'seen' => '1429912800',
+ 'created_at' => '1429912800',
+ ]);
+ }
+ }
diff --git a/server/server.php b/server/server.php
new file mode 100644
index 00000000..f65c7c44
--- /dev/null
+++ b/server/server.php
@@ -0,0 +1,21 @@
+
+ */
+
+$uri = urldecode(
+ parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
+);
+
+// This file allows us to emulate Apache's "mod_rewrite" functionality from the
+// built-in PHP web server. This provides a convenient way to test a Laravel
+// application without having installed a "real" web server software here.
+if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
+ return false;
+}
+
+require_once __DIR__.'/public/index.php';
diff --git a/server/storage/app/.gitignore b/server/storage/app/.gitignore
new file mode 100644
index 00000000..c96a04f0
--- /dev/null
+++ b/server/storage/app/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/server/storage/framework/.gitignore b/server/storage/framework/.gitignore
new file mode 100644
index 00000000..953edb7a
--- /dev/null
+++ b/server/storage/framework/.gitignore
@@ -0,0 +1,7 @@
+config.php
+routes.php
+compiled.php
+services.json
+events.scanned.php
+routes.scanned.php
+down
diff --git a/server/storage/framework/cache/.gitignore b/server/storage/framework/cache/.gitignore
new file mode 100644
index 00000000..c96a04f0
--- /dev/null
+++ b/server/storage/framework/cache/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/server/storage/framework/sessions/.gitignore b/server/storage/framework/sessions/.gitignore
new file mode 100644
index 00000000..d6b7ef32
--- /dev/null
+++ b/server/storage/framework/sessions/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/server/storage/framework/views/.gitignore b/server/storage/framework/views/.gitignore
new file mode 100644
index 00000000..d6b7ef32
--- /dev/null
+++ b/server/storage/framework/views/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/server/storage/logs/.gitignore b/server/storage/logs/.gitignore
new file mode 100644
index 00000000..d6b7ef32
--- /dev/null
+++ b/server/storage/logs/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/server/tests/ExampleTest.php b/server/tests/ExampleTest.php
new file mode 100644
index 00000000..7e81d37a
--- /dev/null
+++ b/server/tests/ExampleTest.php
@@ -0,0 +1,19 @@
+visit('/')
+ ->see('Laravel 5');
+ }
+}
diff --git a/server/tests/TestCase.php b/server/tests/TestCase.php
new file mode 100644
index 00000000..8578b17e
--- /dev/null
+++ b/server/tests/TestCase.php
@@ -0,0 +1,25 @@
+make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
+
+ return $app;
+ }
+}