├── public ├── favicon.ico ├── robots.txt ├── img │ ├── profile.png │ ├── profile1.png │ └── portfolio │ │ ├── cake.png │ │ ├── game.png │ │ ├── safe.png │ │ ├── cabin.png │ │ ├── circus.png │ │ └── submarine.png ├── vendor │ ├── font-awesome │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── less │ │ │ ├── screen-reader.less │ │ │ ├── fixed-width.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── core.less │ │ │ ├── stacked.less │ │ │ ├── font-awesome.less │ │ │ ├── bordered-pulled.less │ │ │ ├── rotated-flipped.less │ │ │ ├── path.less │ │ │ ├── animated.less │ │ │ └── mixins.less │ │ └── scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _core.scss │ │ │ ├── font-awesome.scss │ │ │ ├── _stacked.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _path.scss │ │ │ ├── _animated.scss │ │ │ └── _mixins.scss │ └── bootstrap │ │ └── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 ├── sass │ ├── app.scss │ └── _variables.scss ├── less │ ├── variables.less │ └── mixins.less ├── .htaccess ├── js │ ├── app.js │ ├── components │ │ └── Example.vue │ ├── freelancer.min.js │ ├── bootstrap.js │ └── freelancer.js ├── web.config └── index.php ├── database ├── .gitignore ├── seeds │ ├── TagsSeeder.php │ ├── UsersSeeder.php │ ├── ArticlesSeeder.php │ ├── CommentsSeeder.php │ ├── SectionsSeeder.php │ └── DatabaseSeeder.php ├── migrations │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2017_03_15_151807_create_sections_table.php │ ├── 2017_03_15_151841_create_comments_table.php │ ├── 2017_03_15_151826_create_articles_table.php │ └── 2017_04_02_063506_create_tags_table.php └── factories │ └── ModelFactory.php ├── bootstrap ├── cache │ └── .gitignore ├── autoload.php └── app.php ├── storage ├── logs │ └── .gitignore ├── app │ ├── public │ │ └── .gitignore │ └── .gitignore └── framework │ ├── cache │ └── .gitignore │ ├── testing │ └── .gitignore │ ├── views │ └── .gitignore │ ├── sessions │ └── .gitignore │ └── .gitignore ├── resources ├── views │ ├── vendor │ │ ├── mail │ │ │ ├── markdown │ │ │ │ ├── panel.blade.php │ │ │ │ ├── table.blade.php │ │ │ │ ├── footer.blade.php │ │ │ │ ├── promotion.blade.php │ │ │ │ ├── subcopy.blade.php │ │ │ │ ├── button.blade.php │ │ │ │ ├── header.blade.php │ │ │ │ ├── promotion │ │ │ │ │ └── button.blade.php │ │ │ │ ├── layout.blade.php │ │ │ │ └── message.blade.php │ │ │ └── html │ │ │ │ ├── table.blade.php │ │ │ │ ├── header.blade.php │ │ │ │ ├── subcopy.blade.php │ │ │ │ ├── promotion.blade.php │ │ │ │ ├── footer.blade.php │ │ │ │ ├── panel.blade.php │ │ │ │ ├── promotion │ │ │ │ └── button.blade.php │ │ │ │ ├── message.blade.php │ │ │ │ ├── button.blade.php │ │ │ │ └── layout.blade.php │ │ ├── pagination │ │ │ ├── simple-default.blade.php │ │ │ ├── simple-bootstrap-4.blade.php │ │ │ ├── default.blade.php │ │ │ └── bootstrap-4.blade.php │ │ └── notifications │ │ │ └── email.blade.php │ ├── partials │ │ ├── errors.blade.php │ │ ├── messages.blade.php │ │ ├── header.blade.php │ │ └── menu.blade.php │ ├── emails │ │ ├── reset_password.blade.php │ │ ├── new_comment.blade.php │ │ └── articles │ │ │ └── new.blade.php │ ├── errors │ │ ├── 401.blade.php │ │ └── 404.blade.php │ ├── home.blade.php │ ├── public │ │ └── index.blade.php │ ├── tags │ │ ├── show.blade.php │ │ └── edit.blade.php │ ├── sections │ │ ├── show.blade.php │ │ └── edit.blade.php │ ├── users │ │ ├── show.blade.php │ │ └── edit.blade.php │ └── auth │ │ └── passwords │ │ └── email.blade.php ├── assets │ ├── img │ │ ├── profile.png │ │ └── portfolio │ │ │ ├── cake.png │ │ │ ├── game.png │ │ │ ├── safe.png │ │ │ ├── cabin.png │ │ │ ├── circus.png │ │ │ └── submarine.png │ ├── vendor │ │ ├── font-awesome │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ ├── less │ │ │ │ ├── screen-reader.less │ │ │ │ ├── fixed-width.less │ │ │ │ ├── larger.less │ │ │ │ ├── list.less │ │ │ │ ├── core.less │ │ │ │ ├── stacked.less │ │ │ │ ├── font-awesome.less │ │ │ │ ├── bordered-pulled.less │ │ │ │ ├── rotated-flipped.less │ │ │ │ ├── path.less │ │ │ │ ├── animated.less │ │ │ │ └── mixins.less │ │ │ └── scss │ │ │ │ ├── _fixed-width.scss │ │ │ │ ├── _screen-reader.scss │ │ │ │ ├── _larger.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _core.scss │ │ │ │ ├── font-awesome.scss │ │ │ │ ├── _stacked.scss │ │ │ │ ├── _bordered-pulled.scss │ │ │ │ ├── _rotated-flipped.scss │ │ │ │ ├── _path.scss │ │ │ │ ├── _animated.scss │ │ │ │ └── _mixins.scss │ │ └── bootstrap │ │ │ └── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ ├── sass │ │ ├── app.scss │ │ └── _variables.scss │ ├── less │ │ ├── variables.less │ │ └── mixins.less │ └── js │ │ ├── app.js │ │ ├── components │ │ └── Example.vue │ │ ├── freelancer.min.js │ │ ├── bootstrap.js │ │ └── freelancer.js └── lang │ ├── de │ ├── tags.php │ ├── sections.php │ ├── users.php │ ├── articles.php │ ├── comments.php │ ├── emails.php │ ├── pagination.php │ ├── auth.php │ └── passwords.php │ ├── en │ ├── tags.php │ ├── sections.php │ ├── users.php │ ├── articles.php │ ├── comments.php │ ├── emails.php │ ├── pagination.php │ ├── auth.php │ ├── passwords.php │ └── global.php │ └── ar │ ├── tags.php │ ├── sections.php │ ├── users.php │ ├── articles.php │ ├── comments.php │ ├── emails.php │ ├── pagination.php │ ├── auth.php │ ├── passwords.php │ └── global.php ├── .gitattributes ├── .gitignore ├── .env.travis ├── config ├── pagination.php ├── services.php ├── view.php ├── broadcasting.php ├── filesystems.php ├── queue.php └── cache.php ├── tests ├── TestCase.php ├── Unit │ └── ExampleTest.php ├── CreatesApplication.php └── Feature │ └── ExampleTest.php ├── app ├── Http │ ├── Middleware │ │ ├── EncryptCookies.php │ │ ├── VerifyCsrfToken.php │ │ ├── TrimStrings.php │ │ ├── RedirectIfAuthenticated.php │ │ └── Locale.php │ ├── Controllers │ │ ├── Controller.php │ │ ├── PublicController.php │ │ ├── HomeController.php │ │ ├── Auth │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LoginController.php │ │ │ ├── ResetPasswordController.php │ │ │ └── RegisterController.php │ │ └── CommentsController.php │ ├── Requests │ │ ├── TagsRequest.php │ │ ├── SectionsRequest.php │ │ ├── CommentsRequest.php │ │ ├── UsersRequest.php │ │ └── ArticlesRequest.php │ └── Kernel.php ├── Providers │ ├── BroadcastServiceProvider.php │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── EventServiceProvider.php │ └── RouteServiceProvider.php ├── Models │ ├── Tag.php │ ├── User.php │ ├── Comment.php │ ├── MainModel.php │ ├── Section.php │ └── Article.php ├── Listeners │ └── NotifyUsers.php ├── Events │ └── ArticleCreated.php ├── Mail │ └── SendArticleNotification.php ├── Console │ ├── Kernel.php │ └── Commands │ │ └── ClearDB.php ├── Notifications │ ├── NewCommentNotification.php │ └── NewUserNotification.php └── Exceptions │ └── Handler.php ├── .travis.yml ├── routes ├── channels.php ├── api.php ├── console.php └── web.php ├── server.php ├── webpack.mix.js ├── .env.example ├── LICENSE.md ├── phpunit.xml ├── package.json ├── composer.json ├── artisan └── readme.md /public/favicon.ico: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !public/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/testing/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/panel.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/table.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/footer.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/promotion.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/subcopy.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/button.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }}: {{ $url }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/header.blade.php: -------------------------------------------------------------------------------- 1 | [{{ $slot }}]({{ $url }}) 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/promotion/button.blade.php: -------------------------------------------------------------------------------- 1 | [{{ $slot }}]({{ $url }}) 2 | -------------------------------------------------------------------------------- /public/img/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/img/profile.png -------------------------------------------------------------------------------- /public/img/profile1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/img/profile1.png -------------------------------------------------------------------------------- /public/img/portfolio/cake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/img/portfolio/cake.png -------------------------------------------------------------------------------- /public/img/portfolio/game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/img/portfolio/game.png -------------------------------------------------------------------------------- /public/img/portfolio/safe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/img/portfolio/safe.png -------------------------------------------------------------------------------- /public/img/portfolio/cabin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/img/portfolio/cabin.png -------------------------------------------------------------------------------- /public/img/portfolio/circus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/img/portfolio/circus.png -------------------------------------------------------------------------------- /public/img/portfolio/submarine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/img/portfolio/submarine.png -------------------------------------------------------------------------------- /resources/assets/img/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/img/profile.png -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/table.blade.php: -------------------------------------------------------------------------------- 1 |
2 | {{ Illuminate\Mail\Markdown::parse($slot) }} 3 |
4 | -------------------------------------------------------------------------------- /resources/assets/img/portfolio/cake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/img/portfolio/cake.png -------------------------------------------------------------------------------- /resources/assets/img/portfolio/game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/img/portfolio/game.png -------------------------------------------------------------------------------- /resources/assets/img/portfolio/safe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/img/portfolio/safe.png -------------------------------------------------------------------------------- /resources/assets/img/portfolio/cabin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/img/portfolio/cabin.png -------------------------------------------------------------------------------- /resources/assets/img/portfolio/circus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/img/portfolio/circus.png -------------------------------------------------------------------------------- /resources/assets/img/portfolio/submarine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/img/portfolio/submarine.png -------------------------------------------------------------------------------- /public/vendor/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/vendor/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/storage 3 | /public/hot 4 | /storage/*.key 5 | /vendor 6 | /.idea 7 | Homestead.json 8 | Homestead.yaml 9 | .env 10 | -------------------------------------------------------------------------------- /resources/lang/de/tags.php: -------------------------------------------------------------------------------- 1 | 'Tags', 5 | 'attributes' => [ 6 | 'name' => 'Naam', 7 | ], 8 | ]; 9 | -------------------------------------------------------------------------------- /resources/lang/en/tags.php: -------------------------------------------------------------------------------- 1 | 'Tags', 5 | 'attributes' => [ 6 | 'name' => 'Name', 7 | ], 8 | ]; 9 | -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | schedule-* 4 | compiled.php 5 | services.json 6 | events.scanned.php 7 | routes.scanned.php 8 | down 9 | -------------------------------------------------------------------------------- /resources/lang/ar/tags.php: -------------------------------------------------------------------------------- 1 | 'الأوسمة', 5 | 'attributes' => [ 6 | 'name' => 'الاسم', 7 | ], 8 | ]; 9 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/vendor/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/vendor/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/vendor/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /resources/lang/ar/sections.php: -------------------------------------------------------------------------------- 1 | 'الأقسام', 5 | 'attributes' => [ 6 | 'title' => 'العنوان', 7 | ], 8 | ]; 9 | -------------------------------------------------------------------------------- /resources/lang/de/sections.php: -------------------------------------------------------------------------------- 1 | 'secties', 5 | 'attributes' => [ 6 | 'title' => 'Titel', 7 | ], 8 | ]; 9 | -------------------------------------------------------------------------------- /resources/lang/en/sections.php: -------------------------------------------------------------------------------- 1 | 'Sections', 5 | 'attributes' => [ 6 | 'title' => 'Title', 7 | ], 8 | ]; 9 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/vendor/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/vendor/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/vendor/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/vendor/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /public/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /public/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /public/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /public/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/vendor/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/vendor/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/header.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ $slot }} 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/vendor/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/vendor/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /resources/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /resources/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /resources/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /resources/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/omartawba1/start_laravel/HEAD/resources/assets/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /resources/lang/en/users.php: -------------------------------------------------------------------------------- 1 | 'Users', 5 | 'attributes' => [ 6 | 'name' => 'Name', 7 | 'email' => 'Email', 8 | ], 9 | ]; 10 | -------------------------------------------------------------------------------- /.env.travis: -------------------------------------------------------------------------------- 1 | APP_ENV=testing 2 | APP_KEY= 3 | 4 | CACHE_DRIVER=array 5 | SESSION_DRIVER=array 6 | QUEUE_DRIVER=sync 7 | 8 | SCOUT_DRIVER=null 9 | ALGOLIA_APP_ID= 10 | ALGOLIA_KEY= 11 | ALGOLIA_SECRET= -------------------------------------------------------------------------------- /config/pagination.php: -------------------------------------------------------------------------------- 1 | 10, 12 | ]; 13 | -------------------------------------------------------------------------------- /resources/lang/de/users.php: -------------------------------------------------------------------------------- 1 | 'gebruikers', 5 | 'attributes' => [ 6 | 'name' => 'Naam', 7 | 'email' => 'E-mail', 8 | ], 9 | ]; 10 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /resources/lang/ar/users.php: -------------------------------------------------------------------------------- 1 | 'المستخدمين', 5 | 'attributes' => [ 6 | 'name' => 'الاسم', 7 | 'email' => 'البريد الالكتروني', 8 | ], 9 | ]; 10 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ Illuminate\Mail\Markdown::parse($slot) }} 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /public/sass/app.scss: -------------------------------------------------------------------------------- 1 | 2 | // Fonts 3 | @import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600); 4 | 5 | // Variables 6 | @import "variables"; 7 | 8 | // Bootstrap 9 | @import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap"; 10 | -------------------------------------------------------------------------------- /resources/assets/sass/app.scss: -------------------------------------------------------------------------------- 1 | 2 | // Fonts 3 | @import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600); 4 | 5 | // Variables 6 | @import "variables"; 7 | 8 | // Bootstrap 9 | @import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap"; 10 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/promotion.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 |
4 | {{ Illuminate\Mail\Markdown::parse($slot) }} 5 |
8 | -------------------------------------------------------------------------------- /resources/views/partials/errors.blade.php: -------------------------------------------------------------------------------- 1 | @if(!empty($errors) && count($errors)) 2 |
3 | 8 |
9 | @endif -------------------------------------------------------------------------------- /resources/views/emails/reset_password.blade.php: -------------------------------------------------------------------------------- 1 |

{{ trans('emails.welcome') }}

2 |

{{ trans('emails.click') }} 3 | 4 | {{ trans('emails.here') }} 5 | 6 | {{ trans('emails.reset') }} 7 |

8 | 9 |

{{ trans('emails.br') }}

10 |

{{ config('app.name') }}

11 | -------------------------------------------------------------------------------- /database/seeds/TagsSeeder.php: -------------------------------------------------------------------------------- 1 | create(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /database/seeds/UsersSeeder.php: -------------------------------------------------------------------------------- 1 | create(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /database/seeds/ArticlesSeeder.php: -------------------------------------------------------------------------------- 1 | create(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /database/seeds/CommentsSeeder.php: -------------------------------------------------------------------------------- 1 | create(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /database/seeds/SectionsSeeder.php: -------------------------------------------------------------------------------- 1 | create(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /resources/views/partials/messages.blade.php: -------------------------------------------------------------------------------- 1 | @if (session('msg')) 2 | 8 | @endif 9 | -------------------------------------------------------------------------------- /resources/lang/ar/articles.php: -------------------------------------------------------------------------------- 1 | 'المقالات', 5 | 'all_sections' => 'كل الأقسام', 6 | 'attributes' => [ 7 | 'title' => 'العنوان', 8 | 'text' => 'المحتوى', 9 | 'section_id' => 'القسم', 10 | 'published' => 'منشور', 11 | ], 12 | 'latest' => 'أحدث المقالات', 13 | ]; 14 | -------------------------------------------------------------------------------- /resources/lang/ar/comments.php: -------------------------------------------------------------------------------- 1 | 'التعليقات', 5 | 'comment' => 'تعليق', 6 | 'attributes' => [ 7 | 'text' => 'المحتوى', 8 | 'article_id' => 'المقال', 9 | ], 10 | 'no_comments' => 'عفوا لا يوجد تعليقات', 11 | 'placeholder' => 'ضع تعليقك هنا', 12 | 'publish' => 'نشر التعليق', 13 | ]; 14 | -------------------------------------------------------------------------------- /resources/lang/en/articles.php: -------------------------------------------------------------------------------- 1 | 'Articles', 5 | 'all_sections' => 'All sections', 6 | 'attributes' => [ 7 | 'title' => 'Title', 8 | 'text' => 'Text', 9 | 'section_id' => 'Section', 10 | 'published' => 'Published', 11 | ], 12 | 'latest' => 'Latest Articles', 13 | ]; 14 | -------------------------------------------------------------------------------- /resources/lang/de/articles.php: -------------------------------------------------------------------------------- 1 | 'artikelen', 5 | 'all_sections' => 'alle onderdelen', 6 | 'attributes' => [ 7 | 'title' => 'Titel', 8 | 'text' => 'tekst', 9 | 'section_id' => 'Sectie', 10 | 'published' => 'Gepubliceerd', 11 | ], 12 | 'latest' => 'Laatste artikels', 13 | ]; 14 | -------------------------------------------------------------------------------- /resources/views/emails/new_comment.blade.php: -------------------------------------------------------------------------------- 1 |

{{ trans('emails.welcome') }}

2 |

{{ trans('emails.new_comment') }}

3 |

{{ trans('emails.click') }} 4 | 5 | {{ trans('emails.here') }} 6 | 7 | {{ trans('emails.review') }} 8 |

9 | 10 |

{{ trans('emails.br') }}

11 |

{{ config('app.name') }}

12 | -------------------------------------------------------------------------------- /resources/lang/en/comments.php: -------------------------------------------------------------------------------- 1 | 'Comments', 5 | 'comment' => 'Comment', 6 | 'attributes' => [ 7 | 'text' => 'Text', 8 | 'article_id' => 'Article', 9 | ], 10 | 'no_comments' => 'Sorry! no comments yet', 11 | 'placeholder' => 'Your Comment Here !', 12 | 'publish' => 'Publish your comment', 13 | ]; 14 | -------------------------------------------------------------------------------- /resources/views/emails/articles/new.blade.php: -------------------------------------------------------------------------------- 1 |

{{ trans('emails.welcome') }}

2 |

{{ trans('emails.new_article') }}

3 |

{{ trans('emails.click') }} 4 | 5 | {{ trans('emails.here') }} 6 | 7 | {{ trans('emails.review') }} 8 |

9 | 10 | 11 |

{{ trans('emails.br') }}

12 |

{{ config('app.name') }}

13 | -------------------------------------------------------------------------------- /resources/lang/de/comments.php: -------------------------------------------------------------------------------- 1 | 'Comments', 5 | 'comment' => 'Commentaar', 6 | 'attributes' => [ 7 | 'text' => 'tekst', 8 | 'article_id' => 'Artikel', 9 | ], 10 | 'no_comments' => 'Sorry! Nog geen reacties', 11 | 'placeholder' => 'Uw reactie hier!', 12 | 'publish' => 'Publiceer je reactie', 13 | ]; 14 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/footer.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | 'مرحبآ بك في بوابتنا', 5 | 'new_comment' => 'تعليق جديد في مقالتك', 6 | 'here' => 'هنا', 7 | 'click' => 'تستطيع الضغط هنا', 8 | 'review' => 'لمراجعته', 9 | 'br' => 'مع أطيب تمنياتنا ،', 10 | 'reset' => 'لإعادة تعيين كلمة المرور', 11 | 'new_article' => 'يوجد مقالة جديدة أضيفت', 12 | ]; 13 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 7.1 5 | 6 | before_script: 7 | - cp .env.travis .env 8 | - composer self-update 9 | - composer install --no-interaction 10 | 11 | script: 12 | - php artisan key:generate 13 | - vendor/bin/phpunit 14 | 15 | services: 16 | - redis-server 17 | 18 | cache: 19 | directories: 20 | - vendor 21 | 22 | test: 23 | adapter: sqlite3 24 | database: ":memory:" 25 | timeout: 500 -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | 'Welcome to our portal', 5 | 'new_comment' => 'New comment was added to your article', 6 | 'here' => 'here', 7 | 'click' => 'You can click', 8 | 'review' => 'to review it', 9 | 'br' => 'Best Regards,', 10 | 'reset' => 'for resetting your password', 11 | 'new_article' => 'Kindly informed that new article was added', 12 | ]; 13 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /tests/Unit/ExampleTest.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /public/less/variables.less: -------------------------------------------------------------------------------- 1 | // Variables 2 | 3 | // Gray and Brand Colors for use across theme 4 | 5 | @theme-primary: #2C3E50; 6 | @theme-success: #18BC9C; 7 | 8 | @gray-base: #000; 9 | @gray-darker: lighten(@gray-base, 13.5%); // #222 10 | @gray-dark: lighten(@gray-base, 20%); // #333 11 | @gray: lighten(@gray-base, 33.5%); // #555 12 | @gray-light: lighten(@gray-base, 46.7%); // #777 13 | @gray-lighter: lighten(@gray-base, 93.5%); // #eee -------------------------------------------------------------------------------- /resources/lang/de/emails.php: -------------------------------------------------------------------------------- 1 | 'Welkom op onze portal', 5 | 'new_comment' => 'Nieuwe opmerking werd toegevoegd aan uw artikel', 6 | 'here' => 'hier', 7 | 'click' => 'U kunt klikken', 8 | 'review' => 'te herzien', 9 | 'br' => 'Beste wensen,', 10 | 'reset' => 'voor het herstellen van uw wachtwoord', 11 | 'new_article' => 'Houd er rekening mee dat nieuwe artikel werd toegevoegd', 12 | ]; 13 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /resources/assets/less/variables.less: -------------------------------------------------------------------------------- 1 | // Variables 2 | 3 | // Gray and Brand Colors for use across theme 4 | 5 | @theme-primary: #2C3E50; 6 | @theme-success: #18BC9C; 7 | 8 | @gray-base: #000; 9 | @gray-darker: lighten(@gray-base, 13.5%); // #222 10 | @gray-dark: lighten(@gray-base, 20%); // #333 11 | @gray: lighten(@gray-base, 33.5%); // #555 12 | @gray-light: lighten(@gray-base, 46.7%); // #777 13 | @gray-lighter: lighten(@gray-base, 93.5%); // #eee -------------------------------------------------------------------------------- /tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 19 | 20 | return $app; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/panel.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 |
4 | 5 | 6 | 9 | 10 |
7 | {{ Illuminate\Mail\Markdown::parse($slot) }} 8 |
11 |
14 | -------------------------------------------------------------------------------- /database/seeds/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call(UsersSeeder::class); 15 | $this->call(SectionsSeeder::class); 16 | $this->call(ArticlesSeeder::class); 17 | $this->call(CommentsSeeder::class); 18 | $this->call(TagsSeeder::class); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/promotion/button.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 |
4 | 5 | 6 | 9 | 10 |
7 | {{ $slot }} 8 |
11 |
14 | -------------------------------------------------------------------------------- /resources/views/errors/401.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |
8 |

{{ trans('auth.401') }} 9 | {{ trans('auth.go_home') }} 10 |

11 |
12 |
13 |
14 |
15 | @endsection -------------------------------------------------------------------------------- /resources/views/errors/404.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |
8 |

{{ trans('auth.404') }} 9 | {{ trans('auth.go_home') }} 10 |

11 |
12 |
13 |
14 |
15 | @endsection -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /app/Models/Tag.php: -------------------------------------------------------------------------------- 1 | belongsToMany(Article::class); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 16 | }); 17 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /resources/views/partials/header.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

{!! trans('global.header') !!}

6 |
7 |
8 | {!! trans('global.header_span1') !!} 9 | {!! trans('global.header_span2') !!} 10 |
11 |
12 |
13 |
14 |
15 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | get('/user', function (Request $request) { 17 | return $request->user(); 18 | }); 19 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /tests/Feature/ExampleTest.php: -------------------------------------------------------------------------------- 1 | get('/'); 22 | 23 | $response->assertStatus(200); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /resources/lang/ar/pagination.php: -------------------------------------------------------------------------------- 1 | '« السابق', 15 | 'next' => 'التالي »', 16 | ]; 17 | -------------------------------------------------------------------------------- /resources/lang/de/pagination.php: -------------------------------------------------------------------------------- 1 | '« Zurück', 15 | 'next' => 'Weiter »', 16 | ]; 17 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | 7 | */ 8 | $uri = urldecode( 9 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 10 | ); 11 | 12 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the 13 | // built-in PHP web server. This provides a convenient way to test a Laravel 14 | // application without having installed a "real" web server software here. 15 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 16 | return false; 17 | } 18 | 19 | require_once __DIR__.'/public/index.php'; 20 | -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | const { mix } = require('laravel-mix'); 2 | 3 | /* 4 | |-------------------------------------------------------------------------- 5 | | Mix Asset Management 6 | |-------------------------------------------------------------------------- 7 | | 8 | | Mix provides a clean, fluent API for defining some Webpack build steps 9 | | for your Laravel application. By default, we are compiling the Sass 10 | | file for the application as well as bundling up all the JS files. 11 | | 12 | */ 13 | 14 | mix.js('resources/assets/js/app.js', 'public/js') 15 | .sass('resources/assets/sass/app.scss', 'public/css'); 16 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 18 | })->describe('Display an inspiring quote'); 19 | -------------------------------------------------------------------------------- /bootstrap/autoload.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes If Not A Folder... 9 | RewriteCond %{REQUEST_FILENAME} !-d 10 | RewriteRule ^(.*)/$ /$1 [L,R=301] 11 | 12 | # Handle Front Controller... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_FILENAME} !-f 15 | RewriteRule ^ index.php [L] 16 | 17 | # Handle Authorization Header 18 | RewriteCond %{HTTP:Authorization} . 19 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 20 | 21 | -------------------------------------------------------------------------------- /public/js/app.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * First we will load all of this project's JavaScript dependencies which 4 | * includes Vue and other libraries. It is a great starting point when 5 | * building robust, powerful web applications using Vue and Laravel. 6 | */ 7 | 8 | require('./bootstrap'); 9 | 10 | /** 11 | * Next, we will create a fresh Vue application instance and attach it to 12 | * the page. Then, you may begin adding components to this application 13 | * or customize the JavaScript scaffolding to fit your unique needs. 14 | */ 15 | 16 | Vue.component('example', require('./components/Example.vue')); 17 | 18 | const app = new Vue({ 19 | el: '#app' 20 | }); 21 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfAuthenticated.php: -------------------------------------------------------------------------------- 1 | check()) { 21 | return redirect('/home'); 22 | } 23 | 24 | return $next($request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /resources/assets/js/app.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * First we will load all of this project's JavaScript dependencies which 4 | * includes Vue and other libraries. It is a great starting point when 5 | * building robust, powerful web applications using Vue and Laravel. 6 | */ 7 | 8 | require('./bootstrap'); 9 | 10 | /** 11 | * Next, we will create a fresh Vue application instance and attach it to 12 | * the page. Then, you may begin adding components to this application 13 | * or customize the JavaScript scaffolding to fit your unique needs. 14 | */ 15 | 16 | Vue.component('example', require('./components/Example.vue')); 17 | 18 | const app = new Vue({ 19 | el: '#app' 20 | }); 21 | -------------------------------------------------------------------------------- /public/js/components/Example.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /app/Models/User.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 16 | ]; 17 | 18 | /** 19 | * Register any authentication / authorization services. 20 | * 21 | * @return void 22 | */ 23 | public function boot() 24 | { 25 | $this->registerPolicies(); 26 | 27 | // 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /resources/assets/js/components/Example.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /app/Models/Comment.php: -------------------------------------------------------------------------------- 1 | belongsTo(Article::class); 20 | } 21 | 22 | /** 23 | * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 24 | */ 25 | public function user() 26 | { 27 | return $this->belongsTo(User::class, 'created_by'); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 | name('public.show'); 7 | Route::post('/comments', 'CommentsController@store'); 8 | Route::get('/home/{lang}', 'HomeController@changeLocal'); 9 | 10 | Route::group(['middleware' => 'auth'], function () { 11 | Route::get('/home', 'HomeController@index'); 12 | Route::resource('/sections', 'SectionsController'); 13 | Route::resource('/articles', 'ArticlesController'); 14 | Route::delete('/comments/{id}', 'CommentsController@destroy')->name('comments.destroy'); 15 | Route::resource('/users', 'UsersController'); 16 | Route::resource('/tags', 'TagsController'); 17 | }); 18 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /resources/views/vendor/pagination/simple-default.blade.php: -------------------------------------------------------------------------------- 1 | @if ($paginator->hasPages()) 2 | 17 | @endif 18 | -------------------------------------------------------------------------------- /app/Providers/EventServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'App\Listeners\NotifyUsers', 18 | ], 19 | ]; 20 | 21 | /** 22 | * Register any events for your application. 23 | * 24 | * @return void 25 | */ 26 | public function boot() 27 | { 28 | parent::boot(); 29 | 30 | // 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Middleware/Locale.php: -------------------------------------------------------------------------------- 1 | has('locale')) { 20 | $lang = session()->get('locale'); 21 | app()->setLocale($lang); 22 | Carbon::setLocale($lang); 23 | } else { 24 | session()->put('locale', config('app.locale')); 25 | app()->setLocale(config('app.locale')); 26 | } 27 | 28 | return $next($request); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/markdown/message.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::layout') 2 | {{-- Header --}} 3 | @slot('header') 4 | @component('mail::header', ['url' => config('app.url')]) 5 | {{ config('app.name') }} 6 | @endcomponent 7 | @endslot 8 | 9 | {{-- Body --}} 10 | {{ $slot }} 11 | 12 | {{-- Subcopy --}} 13 | @if (isset($subcopy)) 14 | @slot('subcopy') 15 | @component('mail::subcopy') 16 | {{ $subcopy }} 17 | @endcomponent 18 | @endslot 19 | @endif 20 | 21 | {{-- Footer --}} 22 | @slot('footer') 23 | @component('mail::footer') 24 | © {{ date('Y') }} {{ config('app.name') }}. All rights reserved. 25 | @endcomponent 26 | @endslot 27 | @endcomponent 28 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/message.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::layout') 2 | {{-- Header --}} 3 | @slot('header') 4 | @component('mail::header', ['url' => config('app.url')]) 5 | {{ config('app.name') }} 6 | @endcomponent 7 | @endslot 8 | 9 | {{-- Body --}} 10 | {{ $slot }} 11 | 12 | {{-- Subcopy --}} 13 | @if (isset($subcopy)) 14 | @slot('subcopy') 15 | @component('mail::subcopy') 16 | {{ $subcopy }} 17 | @endcomponent 18 | @endslot 19 | @endif 20 | 21 | {{-- Footer --}} 22 | @slot('footer') 23 | @component('mail::footer') 24 | © {{ date('Y') }} {{ config('app.name') }}. All rights reserved. 25 | @endcomponent 26 | @endslot 27 | @endcomponent 28 | -------------------------------------------------------------------------------- /resources/views/home.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |

{!! trans('global.dashboard') !!}

8 |
9 |
10 |
11 |
12 |
13 | {!! trans('global.dashboard_intro') !!} 14 |
15 |
16 |

{!! trans('global.dashboard_intro1') !!}

17 |
18 |
19 | {!! trans('global.dashboard_about') !!} 20 |
21 |
22 |
23 | @endsection 24 | -------------------------------------------------------------------------------- /app/Models/MainModel.php: -------------------------------------------------------------------------------- 1 | check()) { 19 | return; 20 | } 21 | $user_id = auth()->id(); 22 | 23 | //created_by & updated_by 24 | static::creating(function ($model) use ($user_id) { 25 | $model->created_by = $user_id; 26 | $model->updated_by = $user_id; 27 | }); 28 | 29 | static::updating(function ($model) use ($user_id) { 30 | $model->updated_by = $user_id; 31 | }); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/button.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 18 | 19 |
4 | 5 | 6 | 15 | 16 |
7 | 8 | 9 | 12 | 13 |
10 | {{ $slot }} 11 |
14 |
17 |
20 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /app/Models/Section.php: -------------------------------------------------------------------------------- 1 | hasMany(Article::class); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_100000_create_password_resets_table.php: -------------------------------------------------------------------------------- 1 | string('email')->index(); 18 | $table->string('token')->index(); 19 | $table->timestamp('created_at')->nullable(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::dropIfExists('password_resets'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Controllers/PublicController.php: -------------------------------------------------------------------------------- 1 | published()->paginate(config('pagination.page_size')); 17 | 18 | return view('public.index', compact('articles')); 19 | } 20 | 21 | /** 22 | * Display the specified resource. 23 | * 24 | * @param Article $article 25 | * 26 | * @return \Illuminate\Http\Response 27 | */ 28 | public function show(Article $article) 29 | { 30 | $article->increment('views'); 31 | 32 | return view('public.show', compact('article')); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/Http/Requests/TagsRequest.php: -------------------------------------------------------------------------------- 1 | 'required|string|min:3', 28 | ]; 29 | } 30 | 31 | /** 32 | * Get custom attributes for validator errors. 33 | * 34 | * @return array 35 | */ 36 | public function attributes() 37 | { 38 | return trans('tags.attributes'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /resources/views/vendor/pagination/simple-bootstrap-4.blade.php: -------------------------------------------------------------------------------- 1 | @if ($paginator->hasPages()) 2 | 17 | @endif 18 | -------------------------------------------------------------------------------- /app/Listeners/NotifyUsers.php: -------------------------------------------------------------------------------- 1 | toArray(); 33 | 34 | Mail::to(config('mail.from.address')) 35 | ->bcc($emails) 36 | ->send(new SendArticleNotification($event->article)); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/Http/Requests/SectionsRequest.php: -------------------------------------------------------------------------------- 1 | 'required|string|min:3', 28 | ]; 29 | } 30 | 31 | /** 32 | * Get custom attributes for validator errors. 33 | * 34 | * @return array 35 | */ 36 | public function attributes() 37 | { 38 | return trans('sections.attributes'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /public/less/mixins.less: -------------------------------------------------------------------------------- 1 | .button-variant(@color; @background; @border) { 2 | color: @color; 3 | background-color: @background; 4 | border-color: @border; 5 | 6 | &:hover, 7 | &:focus, 8 | &:active, 9 | &.active, 10 | .open .dropdown-toggle& { 11 | color: @color; 12 | background-color: darken(@background, 10%); 13 | border-color: darken(@border, 12%); 14 | } 15 | &:active, 16 | &.active, 17 | .open .dropdown-toggle& { 18 | background-image: none; 19 | } 20 | &.disabled, 21 | &[disabled], 22 | fieldset[disabled] & { 23 | &, 24 | &:hover, 25 | &:focus, 26 | &:active, 27 | &.active { 28 | background-color: @background; 29 | border-color: @border; 30 | } 31 | } 32 | 33 | .badge { 34 | color: @background; 35 | background-color: @color; 36 | } 37 | } 38 | 39 | .transition-all() { 40 | -webkit-transition: all 0.5s; 41 | -moz-transition: all 0.5s; 42 | transition: all 0.5s; 43 | } -------------------------------------------------------------------------------- /resources/assets/less/mixins.less: -------------------------------------------------------------------------------- 1 | .button-variant(@color; @background; @border) { 2 | color: @color; 3 | background-color: @background; 4 | border-color: @border; 5 | 6 | &:hover, 7 | &:focus, 8 | &:active, 9 | &.active, 10 | .open .dropdown-toggle& { 11 | color: @color; 12 | background-color: darken(@background, 10%); 13 | border-color: darken(@border, 12%); 14 | } 15 | &:active, 16 | &.active, 17 | .open .dropdown-toggle& { 18 | background-image: none; 19 | } 20 | &.disabled, 21 | &[disabled], 22 | fieldset[disabled] & { 23 | &, 24 | &:hover, 25 | &:focus, 26 | &:active, 27 | &.active { 28 | background-color: @background; 29 | border-color: @border; 30 | } 31 | } 32 | 33 | .badge { 34 | color: @background; 35 | background-color: @color; 36 | } 37 | } 38 | 39 | .transition-all() { 40 | -webkit-transition: all 0.5s; 41 | -moz-transition: all 0.5s; 42 | transition: all 0.5s; 43 | } -------------------------------------------------------------------------------- /database/migrations/2014_10_12_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('name'); 19 | $table->string('email')->unique(); 20 | $table->string('password'); 21 | $table->rememberToken(); 22 | $table->timestamps(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::dropIfExists('users'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/Http/Controllers/HomeController.php: -------------------------------------------------------------------------------- 1 | middleware('auth')->except('changeLocal'); 17 | } 18 | 19 | /** 20 | * Show the application dashboard. 21 | * 22 | * @return \Illuminate\Http\Response 23 | */ 24 | public function index() 25 | { 26 | return view('home'); 27 | } 28 | 29 | /** 30 | * Changing the app language. 31 | * 32 | * @param $lang 33 | * 34 | * @return response 35 | */ 36 | public function changeLocal($lang) 37 | { 38 | app()->setLocale($lang); 39 | session()->put('locale', $lang); 40 | 41 | return back(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/Http/Requests/CommentsRequest.php: -------------------------------------------------------------------------------- 1 | 'required|min:5', 28 | 'article_id' => 'required|exists:articles,id', 29 | ]; 30 | } 31 | 32 | /** 33 | * Get custom attributes for validator errors. 34 | * 35 | * @return array 36 | */ 37 | public function attributes() 38 | { 39 | return trans('comments.attributes'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /database/migrations/2017_03_15_151807_create_sections_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('title'); 19 | $table->unsignedInteger('created_by'); 20 | $table->unsignedInteger('updated_by'); 21 | $table->timestamps(); 22 | $table->softDeletes(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::dropIfExists('sections'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/Events/ArticleCreated.php: -------------------------------------------------------------------------------- 1 | article = $article; 30 | } 31 | 32 | /** 33 | * Get the channels the event should broadcast on. 34 | * 35 | * @return Channel|array 36 | */ 37 | public function broadcastOn() 38 | { 39 | return new PrivateChannel('channel-name'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /public/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ForgotPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Requests/UsersRequest.php: -------------------------------------------------------------------------------- 1 | 'required|min:3', 28 | 'email' => 'required|sometimes|email|unique:users,email,'.auth()->id().',id', 29 | 'password' => 'sometimes', 30 | ]; 31 | } 32 | 33 | /** 34 | * Get custom attributes for validator errors. 35 | * 36 | * @return array 37 | */ 38 | public function attributes() 39 | { 40 | return trans('users.attributes'); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright Omar Zaki 2 | 3 | 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: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | 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. 8 | -------------------------------------------------------------------------------- /database/migrations/2017_03_15_151841_create_comments_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->text('text'); 19 | $table->unsignedInteger('article_id'); 20 | $table->unsignedInteger('created_by')->nullable(); 21 | $table->unsignedInteger('updated_by')->nullable(); 22 | $table->timestamps(); 23 | $table->softDeletes(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('comments'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /public/js/freelancer.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Start Bootstrap - Freelancer v3.3.7+1 (http://startbootstrap.com/template-overviews/freelancer) 3 | * Copyright 2013-2016 Start Bootstrap 4 | * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) 5 | */ 6 | !function(o){"use strict";o(".page-scroll a").bind("click",function(t){var l=o(this);o("html, body").stop().animate({scrollTop:o(l.attr("href")).offset().top-50},1250,"easeInOutExpo"),t.preventDefault()}),o("body").scrollspy({target:".navbar-fixed-top",offset:51}),o(".navbar-collapse ul li a").click(function(){o(".navbar-toggle:visible").click()}),o("#mainNav").affix({offset:{top:100}}),o(function(){o("body").on("input propertychange",".floating-label-form-group",function(t){o(this).toggleClass("floating-label-form-group-with-value",!!o(t.target).val())}).on("focus",".floating-label-form-group",function(){o(this).addClass("floating-label-form-group-with-focus")}).on("blur",".floating-label-form-group",function(){o(this).removeClass("floating-label-form-group-with-focus")})})}(jQuery); -------------------------------------------------------------------------------- /public/sass/_variables.scss: -------------------------------------------------------------------------------- 1 | 2 | // Body 3 | $body-bg: #f5f8fa; 4 | 5 | // Borders 6 | $laravel-border-color: darken($body-bg, 10%); 7 | $list-group-border: $laravel-border-color; 8 | $navbar-default-border: $laravel-border-color; 9 | $panel-default-border: $laravel-border-color; 10 | $panel-inner-border: $laravel-border-color; 11 | 12 | // Brands 13 | $brand-primary: #3097D1; 14 | $brand-info: #8eb4cb; 15 | $brand-success: #2ab27b; 16 | $brand-warning: #cbb956; 17 | $brand-danger: #bf5329; 18 | 19 | // Typography 20 | $icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/"; 21 | $font-family-sans-serif: "Raleway", sans-serif; 22 | $font-size-base: 14px; 23 | $line-height-base: 1.6; 24 | $text-color: #636b6f; 25 | 26 | // Navbar 27 | $navbar-default-bg: #fff; 28 | 29 | // Buttons 30 | $btn-default-color: $text-color; 31 | 32 | // Inputs 33 | $input-border: lighten($text-color, 40%); 34 | $input-border-focus: lighten($brand-primary, 25%); 35 | $input-color-placeholder: lighten($text-color, 30%); 36 | 37 | // Panels 38 | $panel-default-heading-bg: #fff; 39 | -------------------------------------------------------------------------------- /resources/assets/js/freelancer.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Start Bootstrap - Freelancer v3.3.7+1 (http://startbootstrap.com/template-overviews/freelancer) 3 | * Copyright 2013-2016 Start Bootstrap 4 | * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) 5 | */ 6 | !function(o){"use strict";o(".page-scroll a").bind("click",function(t){var l=o(this);o("html, body").stop().animate({scrollTop:o(l.attr("href")).offset().top-50},1250,"easeInOutExpo"),t.preventDefault()}),o("body").scrollspy({target:".navbar-fixed-top",offset:51}),o(".navbar-collapse ul li a").click(function(){o(".navbar-toggle:visible").click()}),o("#mainNav").affix({offset:{top:100}}),o(function(){o("body").on("input propertychange",".floating-label-form-group",function(t){o(this).toggleClass("floating-label-form-group-with-value",!!o(t.target).val())}).on("focus",".floating-label-form-group",function(){o(this).addClass("floating-label-form-group-with-focus")}).on("blur",".floating-label-form-group",function(){o(this).removeClass("floating-label-form-group-with-focus")})})}(jQuery); -------------------------------------------------------------------------------- /app/Http/Requests/ArticlesRequest.php: -------------------------------------------------------------------------------- 1 | 'required|min:5', 28 | 'text' => 'required|min:15', 29 | 'section_id' => 'required|exists:sections,id', 30 | 'published' => 'in:0,1', 31 | ]; 32 | } 33 | 34 | /** 35 | * Get custom attributes for validator errors. 36 | * 37 | * @return array 38 | */ 39 | public function attributes() 40 | { 41 | return trans('articles.attributes'); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/Mail/SendArticleNotification.php: -------------------------------------------------------------------------------- 1 | article = $article; 31 | } 32 | 33 | /** 34 | * Build the message. 35 | * 36 | * @return $this 37 | */ 38 | public function build() 39 | { 40 | $article = $this->article; 41 | 42 | return $this->subject('New article added') 43 | ->view('emails.articles.new', compact('article')); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /resources/assets/sass/_variables.scss: -------------------------------------------------------------------------------- 1 | 2 | // Body 3 | $body-bg: #f5f8fa; 4 | 5 | // Borders 6 | $laravel-border-color: darken($body-bg, 10%); 7 | $list-group-border: $laravel-border-color; 8 | $navbar-default-border: $laravel-border-color; 9 | $panel-default-border: $laravel-border-color; 10 | $panel-inner-border: $laravel-border-color; 11 | 12 | // Brands 13 | $brand-primary: #3097D1; 14 | $brand-info: #8eb4cb; 15 | $brand-success: #2ab27b; 16 | $brand-warning: #cbb956; 17 | $brand-danger: #bf5329; 18 | 19 | // Typography 20 | $icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/"; 21 | $font-family-sans-serif: "Raleway", sans-serif; 22 | $font-size-base: 14px; 23 | $line-height-base: 1.6; 24 | $text-color: #636b6f; 25 | 26 | // Navbar 27 | $navbar-default-bg: #fff; 28 | 29 | // Buttons 30 | $btn-default-color: $text-color; 31 | 32 | // Inputs 33 | $input-border: lighten($text-color, 40%); 34 | $input-border-focus: lighten($brand-primary, 25%); 35 | $input-color-placeholder: lighten($text-color, 30%); 36 | 37 | // Panels 38 | $panel-default-heading-bg: #fff; 39 | -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire') 30 | // ->hourly(); 31 | } 32 | 33 | /** 34 | * Register the Closure based commands for the application. 35 | * 36 | * @return void 37 | */ 38 | protected function commands() 39 | { 40 | require base_path('routes/console.php'); 41 | 42 | $this->load(__DIR__.'/Commands'); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /resources/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 18 | 'login' => 'Login', 19 | 'remember' => 'Remember Me', 20 | 'forget_password' => 'Forgot Your Password?', 21 | 'register' => 'Register', 22 | 'name' => 'Name', 23 | '404' => '[404] Not Found', 24 | '401' => '[401] Not Authenticated', 25 | 'go_home' => 'Go Home', 26 | 'logout' => 'Logout', 27 | ]; 28 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/LoginController.php: -------------------------------------------------------------------------------- 1 | middleware('guest', ['except' => 'logout']); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | ], 21 | 22 | 'ses' => [ 23 | 'key' => env('SES_KEY'), 24 | 'secret' => env('SES_SECRET'), 25 | 'region' => 'us-east-1', 26 | ], 27 | 28 | 'sparkpost' => [ 29 | 'secret' => env('SPARKPOST_SECRET'), 30 | ], 31 | 32 | 'stripe' => [ 33 | 'model' => App\User::class, 34 | 'key' => env('STRIPE_KEY'), 35 | 'secret' => env('STRIPE_SECRET'), 36 | ], 37 | 38 | ]; 39 | -------------------------------------------------------------------------------- /resources/lang/de/auth.php: -------------------------------------------------------------------------------- 1 | 'Diese Zugangsdaten wurden nicht in unserer Datenbank gefunden.', 15 | 'throttle' => 'Zu viele Loginversuche. Versuchen Sie es bitte in :seconds Sekunden nochmal.', 16 | 'login' => 'Log in', 17 | 'remember' => 'Onthoud me', 18 | 'forget_password' => 'Je wachtwoord vergeten?', 19 | 'register' => 'Registreren', 20 | 'name' => 'Naam', 21 | '404' => '[404] Niet Gevonden', 22 | '401' => '[401] Niet geverifieerd', 23 | 'go_home' => 'Ga naar huis', 24 | 'logout' => 'Uitloggen', 25 | ]; 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ResetPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | realpath(base_path('resources/views')), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => realpath(storage_path('framework/views')), 32 | 33 | ]; 34 | -------------------------------------------------------------------------------- /database/migrations/2017_03_15_151826_create_articles_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('title'); 19 | $table->text('text'); 20 | $table->unsignedInteger('section_id'); 21 | $table->boolean('published'); 22 | $table->integer('views')->default(0); 23 | $table->unsignedInteger('created_by'); 24 | $table->unsignedInteger('updated_by'); 25 | $table->timestamps(); 26 | $table->softDeletes(); 27 | }); 28 | } 29 | 30 | /** 31 | * Reverse the migrations. 32 | * 33 | * @return void 34 | */ 35 | public function down() 36 | { 37 | Schema::dropIfExists('articles'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /resources/lang/ar/auth.php: -------------------------------------------------------------------------------- 1 | 'بيانات الاعتماد هذه غير متطابقة مع البيانات المسجلة لدينا.', 17 | 'throttle' => 'عدد كبير جدا من محاولات الدخول. يرجى المحاولة مرة أخرى بعد :seconds ثانية.', 18 | 'login' => 'تسجيل الدخول', 19 | 'remember' => 'تذكرني!', 20 | 'forget_password' => 'هل نسيت كلمة المرور؟', 21 | 'register' => 'التسجيل', 22 | 'name' => 'الاسم', 23 | '404' => 'لا يوجد لدينا هذا الرابط [404]', 24 | '401' => '[401] أنت غير مسموح لك بالدخول هنا', 25 | 'go_home' => 'الذهاب للرئيسية', 26 | 'logout' => 'تسجيل الخروج', 27 | ]; 28 | -------------------------------------------------------------------------------- /resources/views/public/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |
8 |

{!! trans('articles.latest') !!}

9 |
10 |
11 |
12 |
13 | @foreach($articles as $single) 14 |
15 | 16 | {{ $single->title }} 17 | 18 |

{{ substr($single->text, 0, 200). '...' }}

19 | {!! trans('global.read_more') !!} 20 |
21 | @endforeach 22 |
23 |
24 | {{ $articles->links() }} 25 |
26 |
27 |
28 | @endsection 29 | -------------------------------------------------------------------------------- /app/Console/Commands/ClearDB.php: -------------------------------------------------------------------------------- 1 | info('You have clean DB right now'); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /database/migrations/2017_04_02_063506_create_tags_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('name'); 19 | $table->unsignedInteger('created_by'); 20 | $table->unsignedInteger('updated_by'); 21 | $table->timestamps(); 22 | $table->softDeletes(); 23 | }); 24 | 25 | Schema::create('article_tag', function (Blueprint $table) { 26 | $table->unsignedInteger('article_id'); 27 | $table->unsignedInteger('tag_id'); 28 | $table->primary(['article_id', 'tag_id']); 29 | }); 30 | } 31 | 32 | /** 33 | * Reverse the migrations. 34 | * 35 | * @return void 36 | */ 37 | public function down() 38 | { 39 | Schema::dropIfExists('article_tag'); 40 | Schema::dropIfExists('tags'); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /resources/lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Passwords must be at least six characters and match the confirmation.', 17 | 'reset' => 'Your password has been reset!', 18 | 'sent' => 'We have e-mailed your password reset link!', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that e-mail address.", 21 | 'reset_text' => 'Reset Password', 22 | 'email' => 'E-Mail Address', 23 | 'send_text' => 'Send Password Reset Link', 24 | 'password_text' => 'Password', 25 | 'password_text_confirmation' => 'Password confirmation', 26 | ]; 27 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | ./tests/Feature 14 | 15 | 16 | 17 | ./tests/Unit 18 | 19 | 20 | 21 | 22 | ./app 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /resources/lang/ar/passwords.php: -------------------------------------------------------------------------------- 1 | 'يجب أن لا يقل طول كلمة المرور عن ستة أحرف، كما يجب أن تتطابق مع حقل التأكيد', 15 | 'reset' => 'تمت إعادة تعيين كلمة المرور', 16 | 'sent' => 'تم إرسال تفاصيل استعادة كلمة المرور الخاصة بك إلى بريدك الإلكتروني', 17 | 'token' => '.رمز استعادة كلمة المرور الذي أدخلته غير صحيح', 18 | 'user' => 'لم يتم العثور على أيّ حسابٍ بهذا العنوان الإلكتروني', 19 | 'reset_text' => 'إعادة تعيين الرقم السري', 20 | 'email' => 'عنوان البريد الالكتروني', 21 | 'send_text' => 'إرسال رسالة تعيين كلمة المرور', 22 | 'password_text' => 'الرقم السري', 23 | 'password_text_confirmation' => 'تأكيد الرقم السري', 24 | ]; 25 | -------------------------------------------------------------------------------- /resources/lang/de/passwords.php: -------------------------------------------------------------------------------- 1 | 'Passwörter müssen mindestens 6 Zeichen lang sein und korrekt bestätigt werden.', 15 | 'reset' => 'Das Passwort wurde zurückgesetzt!', 16 | 'sent' => 'Passworterinnerung wurde gesendet!', 17 | 'token' => 'Der Passwort-Wiederherstellungs-Schlüssel ist ungültig oder abgelaufen.', 18 | 'user' => 'Es konnte leider kein Nutzer mit dieser E-Mail-Adresse gefunden werden.', 19 | 'reset_text' => 'Reset Password', 20 | 'email' => 'E-mailadres', 21 | 'send_text' => 'Stuur Password Reset Link', 22 | 'password_text' => 'Wachtwoord', 23 | 'password_text_confirmation' => 'wachtwoordbevestiging', 24 | ]; 25 | -------------------------------------------------------------------------------- /resources/views/vendor/notifications/email.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | {{-- Greeting --}} 3 | @if (! empty($greeting)) 4 | # {{ $greeting }} 5 | @else 6 | @if ($level == 'error') 7 | # Whoops! 8 | @else 9 | # Hello! 10 | @endif 11 | @endif 12 | 13 | {{-- Intro Lines --}} 14 | @foreach ($introLines as $line) 15 | {{ $line }} 16 | 17 | @endforeach 18 | 19 | {{-- Action Button --}} 20 | @if (isset($actionText)) 21 | 33 | @component('mail::button', ['url' => $actionUrl, 'color' => $color]) 34 | {{ $actionText }} 35 | @endcomponent 36 | @endif 37 | 38 | {{-- Outro Lines --}} 39 | @foreach ($outroLines as $line) 40 | {{ $line }} 41 | 42 | @endforeach 43 | 44 | 45 | @if (! empty($salutation)) 46 | {{ $salutation }} 47 | @else 48 | Regards,
{{ config('app.name') }} 49 | @endif 50 | 51 | 52 | @if (isset($actionText)) 53 | @component('mail::subcopy') 54 | If you’re having trouble clicking the "{{ $actionText }}" button, copy and paste the URL below 55 | into your web browser: [{{ $actionUrl }}]({{ $actionUrl }}) 56 | @endcomponent 57 | @endif 58 | @endcomponent 59 | -------------------------------------------------------------------------------- /resources/views/tags/show.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |

{!! trans('tags.heading') !!}

8 |
9 |
10 |
11 |
12 | {{ Form::model($data, ['route'=> ['tags.update', $data], 'method'=>'patch', 'class'=>'form-horizontal']) }} 13 |
14 |
15 | {{ Form::label('name', trans('tags.attributes.name'), ['for'=>'name']) }} 16 | {{ Form::text('name', null, ['class'=>'form-control', 'placeholder'=>trans('tags.attributes.name'), 'required']) }} 17 |
18 |
19 | {{Form::close()}} 20 |
21 |
22 |
23 | 27 |
28 |
29 |
30 | @endsection 31 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 5 | "watch": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 6 | "watch-poll": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 7 | "hot": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", 8 | "production": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" 9 | }, 10 | "devDependencies": { 11 | "axios": "^0.21.0", 12 | "bootstrap-sass": "^3.3.7", 13 | "cross-env": "^3.2.4", 14 | "jquery": "^3.1.1", 15 | "laravel-mix": "^0.8.1", 16 | "lodash": "^4.17.4", 17 | "vue": "^2.1.10" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Models/Article.php: -------------------------------------------------------------------------------- 1 | belongsTo(Section::class); 20 | } 21 | 22 | /** 23 | * @return \Illuminate\Database\Eloquent\Relations\HasMany 24 | */ 25 | public function comments() 26 | { 27 | return $this->hasMany(Comment::class); 28 | } 29 | 30 | /** 31 | * Only return published articles. 32 | * 33 | * @param $query 34 | * 35 | * @return mixed 36 | */ 37 | public function scopePublished($query) 38 | { 39 | return $query->where('published', 1); 40 | } 41 | 42 | /** 43 | * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 44 | */ 45 | public function user() 46 | { 47 | return $this->belongsTo(User::class, 'created_by'); 48 | } 49 | 50 | /** 51 | * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany 52 | */ 53 | public function tags() 54 | { 55 | return $this->belongsToMany(Tag::class); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /resources/views/sections/show.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |

{!! trans('sections.heading') !!}

8 |
9 |
10 |
11 |
12 | {{ Form::model($data, ['route'=> ['sections.update', $data], 'method'=>'patch', 'class'=>'form-horizontal']) }} 13 |
14 |
15 | {{ Form::label('title', trans('sections.attributes.title'), ['for'=>'title']) }} 16 | {{ Form::text('title', null, ['class'=>'form-control', 'placeholder'=>trans('sections.attributes.title'), 'required']) }} 17 |
18 |
19 | {{Form::close()}} 20 |
21 |
22 |
23 | 27 |
28 |
29 |
30 | @endsection 31 | -------------------------------------------------------------------------------- /resources/views/vendor/pagination/default.blade.php: -------------------------------------------------------------------------------- 1 | @if ($paginator->hasPages()) 2 | 36 | @endif 37 | -------------------------------------------------------------------------------- /app/Http/Controllers/CommentsController.php: -------------------------------------------------------------------------------- 1 | only(array_keys($request->rules())); 21 | $comment = Comment::create($data); 22 | $user = $comment->article()->firstOrFail()->user()->firstOrFail(); 23 | $user->notify(new NewCommentNotification($comment->article()->first())); 24 | 25 | return redirect()->back()->with(['msg' => trans('global.added'), 'type' => 'success']); 26 | } 27 | 28 | /** 29 | * Remove the specified resource from storage. 30 | * 31 | * @param int $id 32 | * 33 | * @return \Illuminate\Http\Response 34 | */ 35 | public function destroy($id) 36 | { 37 | Comment::findOrFail($id)->delete(); 38 | 39 | return redirect()->back()->with(['msg' => trans('global.deleted'), 'type' => 'success']); 40 | } 41 | 42 | /** 43 | * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 44 | */ 45 | public function user() 46 | { 47 | return $this->belongsTo(User::class, 'created_by'); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /public/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | 2 | window._ = require('lodash'); 3 | 4 | /** 5 | * We'll load jQuery and the Bootstrap jQuery plugin which provides support 6 | * for JavaScript based Bootstrap features such as modals and tabs. This 7 | * code may be modified to fit the specific needs of your application. 8 | */ 9 | 10 | window.$ = window.jQuery = require('jquery'); 11 | 12 | require('bootstrap-sass'); 13 | 14 | /** 15 | * Vue is a modern JavaScript library for building interactive web interfaces 16 | * using reactive data binding and reusable components. Vue's API is clean 17 | * and simple, leaving you to focus on building your next great project. 18 | */ 19 | 20 | window.Vue = require('vue'); 21 | 22 | /** 23 | * We'll load the axios HTTP library which allows us to easily issue requests 24 | * to our Laravel back-end. This library automatically handles sending the 25 | * CSRF token as a header based on the value of the "XSRF" token cookie. 26 | */ 27 | 28 | window.axios = require('axios'); 29 | 30 | window.axios.defaults.headers.common = { 31 | 'X-CSRF-TOKEN': window.Laravel.csrfToken, 32 | 'X-Requested-With': 'XMLHttpRequest' 33 | }; 34 | 35 | /** 36 | * Echo exposes an expressive API for subscribing to channels and listening 37 | * for events that are broadcast by Laravel. Echo and event broadcasting 38 | * allows your team to easily build robust real-time web applications. 39 | */ 40 | 41 | // import Echo from "laravel-echo" 42 | 43 | // window.Echo = new Echo({ 44 | // broadcaster: 'pusher', 45 | // key: 'your-pusher-key' 46 | // }); 47 | -------------------------------------------------------------------------------- /resources/views/tags/edit.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |

{!! trans('tags.heading') !!}

8 |
9 |
10 |
11 |
12 | @include('partials.errors') 13 | @if(!empty($data)) 14 | {{ Form::model($data, ['route'=> ['tags.update', $data], 'method'=>'patch', 'class'=>'form-horizontal']) }} 15 | @else 16 | {{ Form::open(['url'=> url('/tags'), 'method'=>'post', 'class'=>'form-horizontal']) }} 17 | @endif 18 |
19 |
20 | {{ Form::label('name', trans('tags.attributes.name'), ['for'=>'name']) }} 21 | {{ Form::text('name', null, ['class'=>'form-control', 'placeholder'=>trans('tags.attributes.name'), 'required']) }} 22 |
23 |
24 |
25 |
26 |
27 |
28 | {{ Form::submit(trans('global.save'), ['class'=>'btn btn-success']) }} 29 |
30 |
31 | {{ Form::close() }} 32 |
33 | 34 |
35 | @endsection 36 | -------------------------------------------------------------------------------- /resources/assets/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | 2 | window._ = require('lodash'); 3 | 4 | /** 5 | * We'll load jQuery and the Bootstrap jQuery plugin which provides support 6 | * for JavaScript based Bootstrap features such as modals and tabs. This 7 | * code may be modified to fit the specific needs of your application. 8 | */ 9 | 10 | window.$ = window.jQuery = require('jquery'); 11 | 12 | require('bootstrap-sass'); 13 | 14 | /** 15 | * Vue is a modern JavaScript library for building interactive web interfaces 16 | * using reactive data binding and reusable components. Vue's API is clean 17 | * and simple, leaving you to focus on building your next great project. 18 | */ 19 | 20 | window.Vue = require('vue'); 21 | 22 | /** 23 | * We'll load the axios HTTP library which allows us to easily issue requests 24 | * to our Laravel back-end. This library automatically handles sending the 25 | * CSRF token as a header based on the value of the "XSRF" token cookie. 26 | */ 27 | 28 | window.axios = require('axios'); 29 | 30 | window.axios.defaults.headers.common = { 31 | 'X-CSRF-TOKEN': window.Laravel.csrfToken, 32 | 'X-Requested-With': 'XMLHttpRequest' 33 | }; 34 | 35 | /** 36 | * Echo exposes an expressive API for subscribing to channels and listening 37 | * for events that are broadcast by Laravel. Echo and event broadcasting 38 | * allows your team to easily build robust real-time web applications. 39 | */ 40 | 41 | // import Echo from "laravel-echo" 42 | 43 | // window.Echo = new Echo({ 44 | // broadcaster: 'pusher', 45 | // key: 'your-pusher-key' 46 | // }); 47 | -------------------------------------------------------------------------------- /resources/views/sections/edit.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |

{!! trans('sections.heading') !!}

8 |
9 |
10 |
11 |
12 | @include('partials.errors') 13 | @if(!empty($data)) 14 | {{ Form::model($data, ['route'=> ['sections.update', $data], 'method'=>'patch', 'class'=>'form-horizontal']) }} 15 | @else 16 | {{ Form::open(['url'=> url('/sections'), 'method'=>'post', 'class'=>'form-horizontal']) }} 17 | @endif 18 |
19 |
20 | {{ Form::label('title', trans('sections.attributes.title'), ['for'=>'title']) }} 21 | {{ Form::text('title', null, ['class'=>'form-control', 'placeholder'=>trans('sections.attributes.title'), 'required']) }} 22 |
23 |
24 |
25 |
26 |
27 |
28 | {{ Form::submit('Save', ['class'=>'btn btn-success']) }} 29 |
30 |
31 | {{ Form::close() }} 32 |
33 | 34 |
35 | @endsection 36 | -------------------------------------------------------------------------------- /public/js/freelancer.js: -------------------------------------------------------------------------------- 1 | // Freelancer Theme JavaScript 2 | 3 | (function($) { 4 | "use strict"; // Start of use strict 5 | 6 | // jQuery for page scrolling feature - requires jQuery Easing plugin 7 | $('.page-scroll a').bind('click', function(event) { 8 | var $anchor = $(this); 9 | $('html, body').stop().animate({ 10 | scrollTop: ($($anchor.attr('href')).offset().top - 50) 11 | }, 1250, 'easeInOutExpo'); 12 | event.preventDefault(); 13 | }); 14 | 15 | // Highlight the top nav as scrolling occurs 16 | $('body').scrollspy({ 17 | target: '.navbar-fixed-top', 18 | offset: 51 19 | }); 20 | 21 | // Closes the Responsive Menu on Menu Item Click 22 | $('.navbar-collapse ul li a').click(function(){ 23 | $('.navbar-toggle:visible').click(); 24 | }); 25 | 26 | // Offset for Main Navigation 27 | $('#mainNav').affix({ 28 | offset: { 29 | top: 100 30 | } 31 | }) 32 | 33 | // Floating label headings for the contact form 34 | $(function() { 35 | $("body").on("input propertychange", ".floating-label-form-group", function(e) { 36 | $(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val()); 37 | }).on("focus", ".floating-label-form-group", function() { 38 | $(this).addClass("floating-label-form-group-with-focus"); 39 | }).on("blur", ".floating-label-form-group", function() { 40 | $(this).removeClass("floating-label-form-group-with-focus"); 41 | }); 42 | }); 43 | 44 | })(jQuery); // End of use strict 45 | -------------------------------------------------------------------------------- /resources/assets/js/freelancer.js: -------------------------------------------------------------------------------- 1 | // Freelancer Theme JavaScript 2 | 3 | (function($) { 4 | "use strict"; // Start of use strict 5 | 6 | // jQuery for page scrolling feature - requires jQuery Easing plugin 7 | $('.page-scroll a').bind('click', function(event) { 8 | var $anchor = $(this); 9 | $('html, body').stop().animate({ 10 | scrollTop: ($($anchor.attr('href')).offset().top - 50) 11 | }, 1250, 'easeInOutExpo'); 12 | event.preventDefault(); 13 | }); 14 | 15 | // Highlight the top nav as scrolling occurs 16 | $('body').scrollspy({ 17 | target: '.navbar-fixed-top', 18 | offset: 51 19 | }); 20 | 21 | // Closes the Responsive Menu on Menu Item Click 22 | $('.navbar-collapse ul li a').click(function(){ 23 | $('.navbar-toggle:visible').click(); 24 | }); 25 | 26 | // Offset for Main Navigation 27 | $('#mainNav').affix({ 28 | offset: { 29 | top: 100 30 | } 31 | }) 32 | 33 | // Floating label headings for the contact form 34 | $(function() { 35 | $("body").on("input propertychange", ".floating-label-form-group", function(e) { 36 | $(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val()); 37 | }).on("focus", ".floating-label-form-group", function() { 38 | $(this).addClass("floating-label-form-group-with-focus"); 39 | }).on("blur", ".floating-label-form-group", function() { 40 | $(this).removeClass("floating-label-form-group-with-focus"); 41 | }); 42 | }); 43 | 44 | })(jQuery); // End of use strict 45 | -------------------------------------------------------------------------------- /resources/views/vendor/pagination/bootstrap-4.blade.php: -------------------------------------------------------------------------------- 1 | @if ($paginator->hasPages()) 2 | 36 | @endif 37 | -------------------------------------------------------------------------------- /app/Notifications/NewCommentNotification.php: -------------------------------------------------------------------------------- 1 | article = $article; 28 | } 29 | 30 | /** 31 | * Get the notification's delivery channels. 32 | * 33 | * @param mixed $notifiable 34 | * 35 | * @return array 36 | */ 37 | public function via($notifiable) 38 | { 39 | return ['mail']; 40 | } 41 | 42 | /** 43 | * Get the mail representation of the notification. 44 | * 45 | * @param mixed $notifiable 46 | * 47 | * @return \Illuminate\Notifications\Messages\MailMessage 48 | */ 49 | public function toMail($notifiable) 50 | { 51 | $article = $this->article; 52 | 53 | return (new MailMessage)->subject('New comment on your article') 54 | ->view('emails.new_comment', compact('article')); 55 | } 56 | 57 | /** 58 | * Get the array representation of the notification. 59 | * 60 | * @param mixed $notifiable 61 | * 62 | * @return array 63 | */ 64 | public function toArray($notifiable) 65 | { 66 | return [ 67 | // 68 | ]; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /app/Notifications/NewUserNotification.php: -------------------------------------------------------------------------------- 1 | token = $token; 28 | } 29 | 30 | /** 31 | * Get the notification's delivery channels. 32 | * 33 | * @param mixed $notifiable 34 | * 35 | * @return array 36 | */ 37 | public function via($notifiable) 38 | { 39 | return ['mail']; 40 | } 41 | 42 | /** 43 | * Get the mail representation of the notification. 44 | * 45 | * @param mixed $notifiable 46 | * 47 | * @return \Illuminate\Notifications\Messages\MailMessage 48 | */ 49 | public function toMail($notifiable) 50 | { 51 | $token = $this->token; 52 | 53 | return (new MailMessage) 54 | ->subject('Reset your password') 55 | ->view('emails.reset_password', compact('token')); 56 | } 57 | 58 | /** 59 | * Get the array representation of the notification. 60 | * 61 | * @param mixed $notifiable 62 | * 63 | * @return array 64 | */ 65 | public function toArray($notifiable) 66 | { 67 | return [ 68 | // 69 | ]; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /config/broadcasting.php: -------------------------------------------------------------------------------- 1 | env('BROADCAST_DRIVER', 'null'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Broadcast Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the broadcast connections that will be used 26 | | to broadcast events to other systems or over websockets. Samples of 27 | | each available type of connection are provided inside this array. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'pusher' => [ 34 | 'driver' => 'pusher', 35 | 'key' => env('PUSHER_APP_KEY'), 36 | 'secret' => env('PUSHER_APP_SECRET'), 37 | 'app_id' => env('PUSHER_APP_ID'), 38 | 'options' => [ 39 | // 40 | ], 41 | ], 42 | 43 | 'redis' => [ 44 | 'driver' => 'redis', 45 | 'connection' => 'default', 46 | ], 47 | 48 | 'log' => [ 49 | 'driver' => 'log', 50 | ], 51 | 52 | 'null' => [ 53 | 'driver' => 'null', 54 | ], 55 | 56 | ], 57 | 58 | ]; 59 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "laravel/laravel", 3 | "description": "The Laravel Framework.", 4 | "keywords": ["framework", "laravel"], 5 | "license": "MIT", 6 | "type": "project", 7 | "require": { 8 | "php": ">=7.1.3", 9 | "fideloper/proxy": "~4.0", 10 | "laravel/framework": "5.6.*", 11 | "laravel/tinker": "~1.0", 12 | "laravelcollective/html": "^5.6" 13 | }, 14 | "require-dev": { 15 | "filp/whoops": "~2.0", 16 | "fzaninotto/faker": "~1.4", 17 | "mockery/mockery": "~1.0", 18 | "nunomaduro/collision": "~2.0", 19 | "phpunit/phpunit": "~7.0", 20 | "symfony/thanks": "^1.0" 21 | }, 22 | "autoload": { 23 | "classmap": [ 24 | "database/seeds", 25 | "database/factories" 26 | ], 27 | "psr-4": { 28 | "App\\": "app/" 29 | } 30 | }, 31 | "autoload-dev": { 32 | "psr-4": { 33 | "Tests\\": "tests/" 34 | } 35 | }, 36 | "extra": { 37 | "laravel": { 38 | "dont-discover": [ 39 | ] 40 | } 41 | }, 42 | "scripts": { 43 | "post-root-package-install": [ 44 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 45 | ], 46 | "post-create-project-cmd": [ 47 | "@php artisan key:generate" 48 | ], 49 | "post-autoload-dump": [ 50 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", 51 | "@php artisan package:discover" 52 | ] 53 | }, 54 | "config": { 55 | "preferred-install": "dist", 56 | "sort-packages": true, 57 | "optimize-autoloader": true 58 | }, 59 | "minimum-stability": "dev", 60 | "prefer-stable": true 61 | } 62 | -------------------------------------------------------------------------------- /resources/views/users/show.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |

{!! trans('users.heading') !!}

8 |
9 |
10 |
11 |
12 | {{ Form::model($data, ['route'=> ['users.update', $data], 'method'=>'patch', 'class'=>'form-horizontal']) }} 13 |
14 |
15 | {{ Form::label('name', trans('users.attributes.name'), ['for'=>'name']) }} 16 | {{ Form::text('name', null, ['class'=>'form-control', 'placeholder'=>trans('users.attributes.name'), 'required']) }} 17 |
18 |
19 |
20 |
21 | {{ Form::label('email', trans('users.attributes.email'), ['for'=>'email']) }} 22 | {{ Form::text('email', null, ['class'=>'form-control', 'placeholder'=>trans('users.attributes.email'), 'required']) }} 23 |
24 |
25 | {{ Form::close() }} 26 |
27 |
28 |
29 | 33 |
34 |
35 |
36 | @endsection 37 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | singleton( 30 | Illuminate\Contracts\Http\Kernel::class, 31 | App\Http\Kernel::class 32 | ); 33 | 34 | $app->singleton( 35 | Illuminate\Contracts\Console\Kernel::class, 36 | App\Console\Kernel::class 37 | ); 38 | 39 | $app->singleton( 40 | Illuminate\Contracts\Debug\ExceptionHandler::class, 41 | App\Exceptions\Handler::class 42 | ); 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Return The Application 47 | |-------------------------------------------------------------------------- 48 | | 49 | | This script returns the application instance. The instance is given to 50 | | the calling script so we can separate the building of the instances 51 | | from the actual running of the application and sending responses. 52 | | 53 | */ 54 | 55 | return $app; 56 | -------------------------------------------------------------------------------- /artisan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | make(Illuminate\Contracts\Console\Kernel::class); 32 | 33 | $status = $kernel->handle( 34 | $input = new Symfony\Component\Console\Input\ArgvInput, 35 | new Symfony\Component\Console\Output\ConsoleOutput 36 | ); 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | Shutdown The Application 41 | |-------------------------------------------------------------------------- 42 | | 43 | | Once Artisan has finished running. We will fire off the shutdown events 44 | | so that any final work may be done by the application before we shut 45 | | down the process. This is the last thing to happen to the request. 46 | | 47 | */ 48 | 49 | $kernel->terminate($input, $status); 50 | 51 | exit($status); 52 | -------------------------------------------------------------------------------- /app/Providers/RouteServiceProvider.php: -------------------------------------------------------------------------------- 1 | mapApiRoutes(); 39 | 40 | $this->mapWebRoutes(); 41 | 42 | // 43 | } 44 | 45 | /** 46 | * Define the "web" routes for the application. 47 | * 48 | * These routes all receive session state, CSRF protection, etc. 49 | * 50 | * @return void 51 | */ 52 | protected function mapWebRoutes() 53 | { 54 | Route::middleware('web') 55 | ->namespace($this->namespace) 56 | ->group(base_path('routes/web.php')); 57 | } 58 | 59 | /** 60 | * Define the "api" routes for the application. 61 | * 62 | * These routes are typically stateless. 63 | * 64 | * @return void 65 | */ 66 | protected function mapApiRoutes() 67 | { 68 | Route::prefix('api') 69 | ->middleware('api') 70 | ->namespace($this->namespace) 71 | ->group(base_path('routes/api.php')); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /database/factories/ModelFactory.php: -------------------------------------------------------------------------------- 1 | define(App\Models\User::class, function (Faker\Generator $faker) { 16 | return [ 17 | 'name' => 'Admin', 18 | 'email' => 'admin@admin.com', 19 | 'password' => bcrypt('123456'), 20 | 'remember_token' => str_random(10), 21 | ]; 22 | }); 23 | 24 | $factory->define(App\Models\Section::class, function (Faker\Generator $faker) { 25 | return [ 26 | 'title' => $faker->sentence(), 27 | 'created_by' => 1, 28 | 'updated_by' => 1, 29 | ]; 30 | }); 31 | 32 | $factory->define(App\Models\Tag::class, function (Faker\Generator $faker) { 33 | return [ 34 | 'name' => $faker->word, 35 | 'created_by' => 1, 36 | 'updated_by' => 1, 37 | ]; 38 | }); 39 | 40 | $factory->define(App\Models\Article::class, function (Faker\Generator $faker) { 41 | return [ 42 | 'title' => $faker->sentence(), 43 | 'text' => $faker->paragraph(30), 44 | 'published' => $faker->boolean(), 45 | 'section_id' => 1, 46 | 'created_by' => 1, 47 | 'updated_by' => 1, 48 | ]; 49 | }); 50 | 51 | $factory->define(App\Models\Comment::class, function (Faker\Generator $faker) { 52 | return [ 53 | 'text' => $faker->paragraph(), 54 | 'article_id' => 1, 55 | ]; 56 | }); 57 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /resources/views/auth/passwords/email.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |

{{ trans('passwords.reset_text') }}

8 |
9 |
10 |
11 |
12 |
13 | @include('partials.errors') 14 | @if (session('status')) 15 |
16 | {{ session('status') }} 17 |
18 | @endif 19 |
20 | {{ csrf_field() }} 21 | 22 |
23 |
24 | 25 | 27 |
28 |
29 | 30 | 31 |
32 |
33 |
34 |
35 | {{ Form::submit(trans('passwords.send_text'), ['class'=>'btn btn-success']) }} 36 |
37 |
38 |
39 |
40 |
41 |
42 | @endsection 43 | -------------------------------------------------------------------------------- /public/vendor/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /resources/assets/vendor/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | 7 | */ 8 | 9 | /* 10 | |-------------------------------------------------------------------------- 11 | | Register The Auto Loader 12 | |-------------------------------------------------------------------------- 13 | | 14 | | Composer provides a convenient, automatically generated class loader for 15 | | our application. We just need to utilize it! We'll simply require it 16 | | into the script here so that we don't have to worry about manual 17 | | loading any of our classes later on. It feels nice to relax. 18 | | 19 | */ 20 | 21 | require __DIR__.'/../bootstrap/autoload.php'; 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Turn On The Lights 26 | |-------------------------------------------------------------------------- 27 | | 28 | | We need to illuminate PHP development, so let us turn on the lights. 29 | | This bootstraps the framework and gets it ready for use, then it 30 | | will load up this application so that we can run it and send 31 | | the responses back to the browser and delight our users. 32 | | 33 | */ 34 | 35 | $app = require_once __DIR__.'/../bootstrap/app.php'; 36 | 37 | /* 38 | |-------------------------------------------------------------------------- 39 | | Run The Application 40 | |-------------------------------------------------------------------------- 41 | | 42 | | Once we have the application, we can handle the incoming request 43 | | through the kernel, and send the associated response back to 44 | | the client's browser allowing them to enjoy the creative 45 | | and wonderful application we have prepared for them. 46 | | 47 | */ 48 | 49 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); 50 | 51 | $response = $kernel->handle( 52 | $request = Illuminate\Http\Request::capture() 53 | ); 54 | 55 | $response->send(); 56 | 57 | $kernel->terminate($request, $response); 58 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/layout.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 25 | 26 | 27 | 28 | 51 | 52 |
29 | 30 | {{ $header or '' }} 31 | 32 | 33 | 34 | 46 | 47 | 48 | {{ $footer or '' }} 49 |
35 | 36 | 37 | 38 | 43 | 44 |
39 | {{ Illuminate\Mail\Markdown::parse($slot) }} 40 | 41 | {{ $subcopy or '' }} 42 |
45 |
50 |
53 | 54 | 55 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/RegisterController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 40 | } 41 | 42 | /** 43 | * Get a validator for an incoming registration request. 44 | * 45 | * @param array $data 46 | * @return \Illuminate\Contracts\Validation\Validator 47 | */ 48 | protected function validator(array $data) 49 | { 50 | return Validator::make($data, [ 51 | 'name' => 'required|max:255', 52 | 'email' => 'required|email|max:255|unique:users', 53 | 'password' => 'required|min:6|confirmed', 54 | ]); 55 | } 56 | 57 | /** 58 | * Create a new user instance after a valid registration. 59 | * 60 | * @param array $data 61 | * @return User 62 | */ 63 | protected function create(array $data) 64 | { 65 | return User::create([ 66 | 'name' => $data['name'], 67 | 'email' => $data['email'], 68 | 'password' => bcrypt($data['password']), 69 | ]); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | expectsJson()) { 60 | return response()->json(['error' => 'Unauthenticated.'], 401); 61 | } 62 | 63 | return redirect()->guest(route('login')); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /resources/views/users/edit.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.public') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |

{{ trans('users.heading') }}

8 |
9 |
10 |
11 |
12 | @include('partials.errors') 13 | @if(!empty($data)) 14 | {{ Form::model($data, ['route'=> ['users.update', $data], 'method'=>'patch', 'class'=>'form-horizontal']) }} 15 | @else 16 | {{ Form::open(['url'=> url('/users'), 'method'=>'post', 'class'=>'form-horizontal']) }} 17 | @endif 18 |
19 |
20 | {{ Form::label('name', trans('users.attributes.name'), ['for'=>'name']) }} 21 | {{ Form::text('name', null, ['class'=>'form-control', 'placeholder'=>trans('users.attributes.name'), 'required']) }} 22 |
23 |
24 |
25 |
26 | {{ Form::label('email', 'Email', ['for'=>'email']) }} 27 | @if(!empty($data)) 28 | {{ Form::email('email', null, ['class'=>'form-control', 'placeholder'=>trans('users.attributes.email'), 'disabled']) }} 29 | @else 30 | {{ Form::email('email', null, ['class'=>'form-control', 'placeholder'=>trans('users.attributes.email'), 'required']) }} 31 | @endif 32 |
33 |
34 |
35 |
36 |
37 |
38 | {{ Form::submit(trans('global.save'), ['class'=>'btn btn-success']) }} 39 |
40 |
41 | {{ Form::close() }} 42 |
43 |
44 | @endsection 45 | -------------------------------------------------------------------------------- /config/filesystems.php: -------------------------------------------------------------------------------- 1 | 'local', 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Default Cloud Filesystem Disk 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Many applications store files both locally and in the cloud. For this 24 | | reason, you may specify a default "cloud" driver here. This driver 25 | | will be bound as the Cloud disk implementation in the container. 26 | | 27 | */ 28 | 29 | 'cloud' => 's3', 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Filesystem Disks 34 | |-------------------------------------------------------------------------- 35 | | 36 | | Here you may configure as many filesystem "disks" as you wish, and you 37 | | may even configure multiple disks of the same driver. Defaults have 38 | | been setup for each driver as an example of the required options. 39 | | 40 | | Supported Drivers: "local", "ftp", "s3", "rackspace" 41 | | 42 | */ 43 | 44 | 'disks' => [ 45 | 46 | 'local' => [ 47 | 'driver' => 'local', 48 | 'root' => storage_path('app'), 49 | ], 50 | 51 | 'public' => [ 52 | 'driver' => 'local', 53 | 'root' => storage_path('app/public'), 54 | 'url' => env('APP_URL').'/storage', 55 | 'visibility' => 'public', 56 | ], 57 | 58 | 's3' => [ 59 | 'driver' => 's3', 60 | 'key' => env('AWS_KEY'), 61 | 'secret' => env('AWS_SECRET'), 62 | 'region' => env('AWS_REGION'), 63 | 'bucket' => env('AWS_BUCKET'), 64 | ], 65 | 66 | ], 67 | 68 | ]; 69 | -------------------------------------------------------------------------------- /app/Http/Kernel.php: -------------------------------------------------------------------------------- 1 | [ 37 | 38 | // \Illuminate\Session\Middleware\StartSession::class, 39 | // \Illuminate\Session\Middleware\AuthenticateSession::class, 40 | \Illuminate\Routing\Middleware\SubstituteBindings::class, 41 | ], 42 | 43 | 'api' => [ 44 | 'throttle:60,1', 45 | 'bindings', 46 | ], 47 | ]; 48 | 49 | /** 50 | * The application's route middleware. 51 | * 52 | * These middleware may be assigned to groups or used individually. 53 | * 54 | * @var array 55 | */ 56 | protected $routeMiddleware = [ 57 | 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 58 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 59 | 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 60 | 'can' => \Illuminate\Auth\Middleware\Authorize::class, 61 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 62 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 63 | ]; 64 | } 65 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## Start Laravel [![Build Status](https://travis-ci.org/omartawba1/start_laravel.svg?branch=master)](https://travis-ci.org/omartawba1/start_laravel) [![StyleCI](https://styleci.io/repos/85490276/shield?branch=master)](https://styleci.io/repos/85490276) 2 | 3 | Start laravel is a simple start app to learn how to develop with laravel, You'll learn these components 4 | 5 | - [Migration, Seeding, Routing, Controllers, Models, Validation, Requests, Views, Events, Notifications, Listeners, Auth, Commands, ...etc] 6 | 7 | Each framework should has it's quick start app, Let this application be your quick start to Laravel, 8 | It'll help you to build your app structure and show you each component of Laravel and how to best practice them. 9 | I hope it'll help you on understanding Laravel & how to work with it. 10 | 11 | ## Modules & Features 12 | 13 | You can find here modules for `users` , `sections` , `articles` , `comments` 14 | also you can some good features like `login` , `registration` , `translation` 15 | 16 | ## Screen capture 17 | 18 | [![Start Laravel](https://image.ibb.co/mTX68v/Screen_Shot_2017_03_20_at_10_41_14_AM.png)](https://youtu.be/xH4Y3zxhO98) 19 | [![Start Laravel](https://image.ibb.co/iVJeTv/Screen_Shot_2017_03_20_at_10_41_32_AM.png)](https://youtu.be/xH4Y3zxhO98) 20 | [![Start Laravel](https://image.ibb.co/iVJeTv/Screen_Shot_2017_03_20_at_10_41_53_AM.png)](https://youtu.be/xH4Y3zxhO98) 21 | [![Start Laravel](https://image.ibb.co/iVJeTv/Screen_Shot_2017_03_20_at_10_42.19_AM.png)](https://youtu.be/xH4Y3zxhO98) 22 | [![Start Laravel](https://image.ibb.co/iVJeTv/Screen_Shot_2017_03_20_at_10_42.40_AM.png)](https://youtu.be/xH4Y3zxhO98) 23 | 24 | ## Installation Steps 25 | 26 | First you will need to clone the project 27 | 28 | Then you go to project directory and run 29 | 30 | `composer install` 31 | 32 | Then create a database named start_laravel then rename `.env.example` to `.env` and change database configuration values to yours. 33 | 34 | Then run 35 | 36 | `php artisan key:generate` 37 | 38 | Then 39 | 40 | `php artisan migrate` 41 | 42 | Then seed users table 43 | 44 | `php artisan db:seed` 45 | 46 | ## Default Login Data 47 | 48 | Email :`admin@admin.com` 49 | Pass :`123456` 50 | 51 | ## Custom commands 52 | 53 | php artisan clear:db 54 | 55 | 56 | ## Contributing 57 | 58 | Thank you for considering contributing to the start app! you can fork this repository and any merge request are welcome anytime. 59 | 60 | ## License 61 | 62 | The Start Laravel app licensed under the [MIT license](http://opensource.org/licenses/MIT). 63 | -------------------------------------------------------------------------------- /resources/views/partials/menu.blade.php: -------------------------------------------------------------------------------- 1 | 47 | -------------------------------------------------------------------------------- /config/queue.php: -------------------------------------------------------------------------------- 1 | env('QUEUE_DRIVER', 'sync'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Queue Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may configure the connection information for each server that 26 | | is used by your application. A default configuration has been added 27 | | for each back-end shipped with Laravel. You are free to add more. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'sync' => [ 34 | 'driver' => 'sync', 35 | ], 36 | 37 | 'database' => [ 38 | 'driver' => 'database', 39 | 'table' => 'jobs', 40 | 'queue' => 'default', 41 | 'retry_after' => 90, 42 | ], 43 | 44 | 'beanstalkd' => [ 45 | 'driver' => 'beanstalkd', 46 | 'host' => 'localhost', 47 | 'queue' => 'default', 48 | 'retry_after' => 90, 49 | ], 50 | 51 | 'sqs' => [ 52 | 'driver' => 'sqs', 53 | 'key' => 'your-public-key', 54 | 'secret' => 'your-secret-key', 55 | 'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id', 56 | 'queue' => 'your-queue-name', 57 | 'region' => 'us-east-1', 58 | ], 59 | 60 | 'redis' => [ 61 | 'driver' => 'redis', 62 | 'connection' => 'default', 63 | 'queue' => 'default', 64 | 'retry_after' => 90, 65 | ], 66 | 67 | ], 68 | 69 | /* 70 | |-------------------------------------------------------------------------- 71 | | Failed Queue Jobs 72 | |-------------------------------------------------------------------------- 73 | | 74 | | These options configure the behavior of failed queue job logging so you 75 | | can control which database and table are used to store the jobs that 76 | | have failed. You may change them to any database / table you wish. 77 | | 78 | */ 79 | 80 | 'failed' => [ 81 | 'database' => env('DB_CONNECTION', 'mysql'), 82 | 'table' => 'failed_jobs', 83 | ], 84 | 85 | ]; 86 | -------------------------------------------------------------------------------- /resources/lang/ar/global.php: -------------------------------------------------------------------------------- 1 | 'إضافة جديد', 5 | 'back' => 'عودة', 6 | 'edit' => 'تحرير', 7 | 'view' => 'عرض', 8 | 'delete' => 'حذف', 9 | 'added' => 'تم الإضافة بنجاح', 10 | 'updated' => 'تم التعديل بنجاح', 11 | 'deleted' => 'تم الحذف بنجاح', 12 | 'no_data' => 'عفوآ لا يوجد بيانات للعرض', 13 | 'cannot_delete' => 'عفوآ هذا العنصر يحتوي على عناصر أخري !', 14 | 'filter' => 'بحث', 15 | 'save' => 'حفظ', 16 | 'anonymous' => 'غير معروف', 17 | 'views' => 'مشاهدات', 18 | 'actions' => 'الأفعال', 19 | 'title' => 'Laravel - ابدأ تعلم لارافيل', 20 | 'skip' => 'الذهاب الى المحتوى الرئيسي', 21 | 'location' => 'المكان', 22 | 'address' => '3481 عنوان حقيقي
عنوان حقيقي عنوان حقيقي', 23 | 'around_web' => 'تابعنا في التواصل الاجتماعي', 24 | 'facebook' => 'فيسبوك', 25 | 'google' => 'جوجل', 26 | 'google_plus' => 'جوجل بلس', 27 | 'twitter' => 'تويتر', 28 | 'linked_in' => 'لينكد ان', 29 | 'dribble' => 'دريبل', 30 | 'about' => 'عن مشروع تعلم لارافيل', 31 | 'about_txt' => 'مشروع تعلم لارافيل بنى على 32 | فري لانس قالب ويب & 33 | تم تطويره بواسطة 34 | عمر توبة.', 35 | 'cpy' => 'حقوق النشر لشركتك ٢٠١٧', 36 | 'header' => 'تعلم لارافيل', 37 | 'header_span1' => 'الآن تستطيع تعلم لارافيل .. بها كل الامكانيات التي ممكن ان تتخيلها في هذا المشروع', 38 | 'header_span2' => 'Migration, Seeding, Models, Controllers, Routing, Events, Listeners, Queues, Validation, Notifications, ...etc', 39 | 'toggle' => 'إخفاء القائمة', 40 | 'menu' => 'القائمة الرئيسية', 41 | 'read_more' => 'اقرأ المزيد ...', 42 | 'on' => 'في', 43 | 'dashboard' => 'لوحة التحكم', 44 | 'dashboard_intro' => '

إذا كنت في حاجة الى بداية سريعة ل لارافيل، هذا سوف تساعدك

45 |

تعلم لارافيل هو نسخة تجريبية للارافيل بنيت على لارافيل 5.4. 46 | هنا ستجد أي شيء لتعلم لارافيل مثل 47 |                              وحدات التحكم، نماذج، أوامر، التوجيه، .. الخ

', 48 | 'dashboard_intro1' => 'الهدف الرئيسي من تطوير هذا المشروع هو أن تكون بداية سريعة ل 49 |                      لارافيل لتسريع عملية التعلم للارافيل للمبتدئين.', 50 | 'dashboard_about' => '

تم تطويره بواسطة عمر توبة باستخدام فري لانس قالب ويب

', 51 | '' => '', 52 | ]; 53 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_DRIVER', 'file'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Cache Stores 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the cache "stores" for your application as 26 | | well as their drivers. You may even define multiple stores for the 27 | | same cache driver to group types of items stored in your caches. 28 | | 29 | */ 30 | 31 | 'stores' => [ 32 | 33 | 'apc' => [ 34 | 'driver' => 'apc', 35 | ], 36 | 37 | 'array' => [ 38 | 'driver' => 'array', 39 | ], 40 | 41 | 'database' => [ 42 | 'driver' => 'database', 43 | 'table' => 'cache', 44 | 'connection' => null, 45 | ], 46 | 47 | 'file' => [ 48 | 'driver' => 'file', 49 | 'path' => storage_path('framework/cache/data'), 50 | ], 51 | 52 | 'memcached' => [ 53 | 'driver' => 'memcached', 54 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 55 | 'sasl' => [ 56 | env('MEMCACHED_USERNAME'), 57 | env('MEMCACHED_PASSWORD'), 58 | ], 59 | 'options' => [ 60 | // Memcached::OPT_CONNECT_TIMEOUT => 2000, 61 | ], 62 | 'servers' => [ 63 | [ 64 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 65 | 'port' => env('MEMCACHED_PORT', 11211), 66 | 'weight' => 100, 67 | ], 68 | ], 69 | ], 70 | 71 | 'redis' => [ 72 | 'driver' => 'redis', 73 | 'connection' => 'default', 74 | ], 75 | 76 | ], 77 | 78 | /* 79 | |-------------------------------------------------------------------------- 80 | | Cache Key Prefix 81 | |-------------------------------------------------------------------------- 82 | | 83 | | When utilizing a RAM based store such as APC or Memcached, there might 84 | | be other applications utilizing the same cache. So, we'll specify a 85 | | value to get prefixed to all our keys so we can avoid collisions. 86 | | 87 | */ 88 | 89 | 'prefix' => 'laravel', 90 | 91 | ]; 92 | -------------------------------------------------------------------------------- /resources/lang/en/global.php: -------------------------------------------------------------------------------- 1 | 'Add New', 5 | 'back' => 'Back', 6 | 'edit' => 'Edit', 7 | 'view' => 'View', 8 | 'delete' => 'Delete', 9 | 'added' => 'Added Successfully', 10 | 'updated' => 'Edited Successfully', 11 | 'deleted' => 'Deleted Successfully', 12 | 'no_data' => 'No data for displaying', 13 | 'cannot_delete' => 'Sorry! this item contains another items inside it!', 14 | 'filter' => 'Filter', 15 | 'save' => 'Save', 16 | 'anonymous' => 'Anonymous', 17 | 'views' => 'Views', 18 | 'actions' => 'Actions', 19 | 'title' => 'Laravel - Start Learning Laravel', 20 | 'skip' => 'Skip to main content', 21 | 'location' => 'Location', 22 | 'address' => '3481 Melrose Place
Beverly Hills, CA 90210', 23 | 'around_web' => 'Around the Web', 24 | 'facebook' => 'Facebook', 25 | 'google' => 'Google', 26 | 'google_plus' => 'Google Plus', 27 | 'twitter' => 'Twitter', 28 | 'linked_in' => 'Linked In', 29 | 'dribble' => 'Dribble', 30 | 'about' => 'About Learning laravel', 31 | 'about_txt' => 'Learning Laravel is built on 32 | Freelance HTML template & 33 | developed by 34 | Omar Tawba.', 35 | 'cpy' => 'Copyright © Your Website 2017', 36 | 'header' => 'Start Laravel', 37 | 'header_span1' => 'Now you can start learning laravel, You\'ll find all of the tools here like', 38 | 'header_span2' => 'Migration, Seeding, Models, Controllers, Routing, Events, Listeners, Queues, Validation, Notifications, ...etc', 39 | 'toggle' => 'Toggle navigation', 40 | 'menu' => 'Menu', 41 | 'read_more' => 'Read more...', 42 | 'on' => 'on', 43 | 'dashboard' => 'Dashboard', 44 | 'dashboard_intro' => "

If you need a quick start to Laravel, this will help you

45 |

Learning laravel is a demo for Laravel was built on Laravel 5.4 . 46 | Here you'll find anything for learning laravel like 47 | Controllers, Models, Commands, Routing, ..etc

", 48 | 'dashboard_intro1' => 'The main target from developing this demo is to be a quick start for 49 | any Laravel beginner to speed the process of learning Laravel.', 50 | 'dashboard_about' => '

This made by Omar 51 | Zaki using Freelance HTML template

', 52 | '' => '', 53 | ]; 54 | --------------------------------------------------------------------------------