├── public
├── favicon.ico
├── robots.txt
├── img
│ ├── icon.png
│ ├── logo.png
│ ├── mask.png
│ ├── blog-1.jpg
│ ├── blog-2.jpg
│ ├── blog-3.jpg
│ ├── blog-4.jpg
│ ├── blog-5.jpg
│ ├── favicon.ico
│ ├── flags
│ │ ├── AD.png
│ │ ├── AE.png
│ │ ├── AG.png
│ │ ├── AM.png
│ │ ├── AR.png
│ │ ├── AT.png
│ │ ├── AU.png
│ │ ├── BE.png
│ │ ├── BF.png
│ │ ├── BG.png
│ │ ├── BO.png
│ │ ├── BR.png
│ │ ├── CA.png
│ │ ├── CD.png
│ │ ├── CG.png
│ │ ├── CH.png
│ │ ├── CL.png
│ │ ├── CM.png
│ │ ├── CN.png
│ │ ├── CO.png
│ │ ├── CZ.png
│ │ ├── DE.png
│ │ ├── DJ.png
│ │ ├── DK.png
│ │ ├── DZ.png
│ │ ├── EE.png
│ │ ├── EG.png
│ │ ├── ES.png
│ │ ├── FI.png
│ │ ├── FR.png
│ │ ├── GA.png
│ │ ├── GB.png
│ │ ├── GM.png
│ │ ├── GT.png
│ │ ├── HN.png
│ │ ├── HT.png
│ │ ├── HU.png
│ │ ├── ID.png
│ │ ├── IE.png
│ │ ├── IL.png
│ │ ├── IN.png
│ │ ├── IQ.png
│ │ ├── IR.png
│ │ ├── IT.png
│ │ ├── JM.png
│ │ ├── JO.png
│ │ ├── JP.png
│ │ ├── KG.png
│ │ ├── KN.png
│ │ ├── KP.png
│ │ ├── KR.png
│ │ ├── KW.png
│ │ ├── KZ.png
│ │ ├── LA.png
│ │ ├── LB.png
│ │ ├── LC.png
│ │ ├── LS.png
│ │ ├── LU.png
│ │ ├── LV.png
│ │ ├── MG.png
│ │ ├── MK.png
│ │ ├── ML.png
│ │ ├── MM.png
│ │ ├── MT.png
│ │ ├── MX.png
│ │ ├── NA.png
│ │ ├── NE.png
│ │ ├── NG.png
│ │ ├── NI.png
│ │ ├── NL.png
│ │ ├── NO.png
│ │ ├── OM.png
│ │ ├── PA.png
│ │ ├── PE.png
│ │ ├── PG.png
│ │ ├── PK.png
│ │ ├── PL.png
│ │ ├── PT.png
│ │ ├── PY.png
│ │ ├── QA.png
│ │ ├── RO.png
│ │ ├── RU.png
│ │ ├── RW.png
│ │ ├── SA.png
│ │ ├── SE.png
│ │ ├── SG.png
│ │ ├── SL.png
│ │ ├── SN.png
│ │ ├── SO.png
│ │ ├── SV.png
│ │ ├── TD.png
│ │ ├── TJ.png
│ │ ├── TL.png
│ │ ├── TR.png
│ │ ├── TZ.png
│ │ ├── UA.png
│ │ ├── US.png
│ │ ├── VE.png
│ │ ├── VN.png
│ │ └── YE.png
│ ├── new_logo.png
│ ├── carousel_1.jpg
│ ├── carousel_2.jpg
│ ├── carousel_3.jpg
│ ├── logo-white.png
│ ├── default-avatar.png
│ ├── faces
│ │ ├── face-0.jpg
│ │ ├── face-1.jpg
│ │ ├── face-2.jpg
│ │ ├── face-3.jpg
│ │ ├── face-4.jpg
│ │ ├── face-5.jpg
│ │ ├── face-6.jpg
│ │ ├── face-7.jpg
│ │ └── tim_vector.jpe
│ ├── screen
│ │ ├── front.png
│ │ ├── login.png
│ │ ├── dashboard.png
│ │ ├── user-edit.png
│ │ └── users-list.png
│ ├── full-screen-image-1.jpg
│ ├── full-screen-image-2.jpg
│ ├── full-screen-image-3.jpg
│ ├── full-screen-image-4.jpg
│ ├── full-screen-image-5.jpg
│ ├── full-screen-image-6.jpg
│ ├── full-screen-image-7.jpg
│ ├── full-screen-image-8.jpg
│ ├── full-screen-image-9.jpg
│ ├── full-screen-image-10.jpg
│ ├── full-screen-image-11.jpg
│ ├── full-screen-image-12.jpg
│ ├── full-screen-image-13.jpg
│ └── loading-bubbles.svg
├── mix-manifest.json
├── .htaccess
└── index.php
├── database
├── .gitignore
├── seeds
│ └── DatabaseSeeder.php
├── factories
│ └── ModelFactory.php
└── migrations
│ ├── 2017_09_26_000000_create_contacts_table.php
│ ├── 2014_10_12_100000_create_password_resets_table.php
│ └── 2014_10_12_000000_create_users_table.php
├── _config.yml
├── resources
├── assets
│ ├── sass
│ │ ├── dashboard.scss
│ │ └── theme
│ │ │ ├── lbd
│ │ │ ├── plugins
│ │ │ │ └── bootstrap.scss
│ │ │ ├── mixins
│ │ │ │ ├── _tabs.scss
│ │ │ │ ├── _cards.scss
│ │ │ │ ├── _navbars.scss
│ │ │ │ ├── _icons.scss
│ │ │ │ ├── _inputs.scss
│ │ │ │ ├── _transparency.scss
│ │ │ │ ├── _table-row.scss
│ │ │ │ ├── _labels.scss
│ │ │ │ ├── _social-buttons.scss
│ │ │ │ ├── _morphing-buttons.scss
│ │ │ │ ├── _buttons.scss
│ │ │ │ └── _chartist.scss
│ │ │ ├── _carousel.scss
│ │ │ ├── _helpers.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _progress-bars.scss
│ │ │ ├── _forms.scss
│ │ │ ├── _collapse.scss
│ │ │ ├── _labels.scss
│ │ │ ├── _social-buttons.scss
│ │ │ ├── _media.scss
│ │ │ ├── _modal.scss
│ │ │ ├── _alerts.scss
│ │ │ ├── _misc.scss
│ │ │ ├── _typography.scss
│ │ │ ├── _tables.scss
│ │ │ ├── _tags.scss
│ │ │ ├── _buttons.scss
│ │ │ └── _footers.scss
│ │ │ └── theme.scss
│ └── js
│ │ ├── components
│ │ └── Example.vue
│ │ ├── app.js
│ │ ├── dashboard.js
│ │ └── bootstrap.js
├── views
│ ├── back
│ │ ├── dashboard.blade.php
│ │ ├── layout.blade.php
│ │ ├── layout
│ │ │ ├── header.blade.php
│ │ │ └── sidebar.blade.php
│ │ ├── contacts
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── index.blade.php
│ │ ├── theme.blade.php
│ │ ├── users
│ │ │ ├── create.blade.php
│ │ │ ├── edit.blade.php
│ │ │ └── index.blade.php
│ │ └── profile.blade.php
│ ├── guest
│ │ ├── home.blade.php
│ │ └── layout.blade.php
│ └── auth
│ │ ├── passwords
│ │ ├── email.blade.php
│ │ └── reset.blade.php
│ │ ├── register.blade.php
│ │ ├── login.blade.php
│ │ └── layout.blade.php
└── lang
│ └── en
│ ├── back.php
│ ├── messages.php
│ ├── dictionary.php
│ ├── auth.php
│ ├── pagination.php
│ └── passwords.php
├── bootstrap
├── cache
│ └── .gitignore
└── app.php
├── storage
├── logs
│ └── .gitignore
├── app
│ ├── public
│ │ └── .gitignore
│ └── .gitignore
└── framework
│ ├── cache
│ └── .gitignore
│ ├── testing
│ └── .gitignore
│ ├── views
│ └── .gitignore
│ ├── sessions
│ └── .gitignore
│ └── .gitignore
├── .gitattributes
├── .gitignore
├── app
├── Http
│ ├── Middleware
│ │ ├── EncryptCookies.php
│ │ ├── VerifyCsrfToken.php
│ │ ├── TrimStrings.php
│ │ ├── RedirectIfAuthenticated.php
│ │ ├── TrustProxies.php
│ │ └── BackgroundCookie.php
│ ├── Controllers
│ │ ├── Guest
│ │ │ └── HomeController.php
│ │ ├── Back
│ │ │ ├── DashboardController.php
│ │ │ ├── ProfileController.php
│ │ │ ├── ContactsController.php
│ │ │ └── UsersController.php
│ │ ├── Controller.php
│ │ └── Auth
│ │ │ ├── ForgotPasswordController.php
│ │ │ ├── LoginController.php
│ │ │ ├── ResetPasswordController.php
│ │ │ └── RegisterController.php
│ ├── Routes
│ │ ├── Guest.php
│ │ ├── Back.php
│ │ └── Auth.php
│ ├── Requests
│ │ └── Back
│ │ │ ├── ContactRequest.php
│ │ │ └── UserRequest.php
│ └── Kernel.php
├── Models
│ ├── Contact.php
│ └── User.php
├── Providers
│ ├── BroadcastServiceProvider.php
│ ├── AppServiceProvider.php
│ ├── AuthServiceProvider.php
│ ├── EventServiceProvider.php
│ └── RouteServiceProvider.php
├── Console
│ └── Kernel.php
└── Exceptions
│ └── Handler.php
├── tests
├── Feature
│ ├── Guest
│ │ └── HomeTest.php
│ ├── Auth
│ │ ├── Passwords
│ │ │ ├── EmailTest.php
│ │ │ └── ResetTest.php
│ │ ├── LoginTest.php
│ │ └── RegisterTest.php
│ └── Back
│ │ ├── DashboardTest.php
│ │ ├── Users
│ │ ├── ListUserTest.php
│ │ ├── DeleteUserTest.php
│ │ ├── CreateUserTest.php
│ │ └── EditUserTest.php
│ │ ├── Contacts
│ │ ├── ListContactTest.php
│ │ ├── DeleteContactTest.php
│ │ ├── CreateContactTest.php
│ │ └── EditContactTest.php
│ │ └── ProfileTest.php
├── Unit
│ └── ExampleTest.php
├── CreatesApplication.php
├── TestCase.php
└── helpers.php
├── routes
└── channels.php
├── server.php
├── .env.example
├── LICENSE
├── config
├── view.php
├── services.php
├── broadcasting.php
├── auth.php
├── filesystems.php
├── queue.php
├── cache.php
└── database.php
├── webpack.mix.js
├── phpunit.xml
├── composer.json
├── readme.md
├── package.json
└── artisan
/public/favicon.ico:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-minimal
--------------------------------------------------------------------------------
/resources/assets/sass/dashboard.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/public/img/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/icon.png
--------------------------------------------------------------------------------
/public/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/logo.png
--------------------------------------------------------------------------------
/public/img/mask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/mask.png
--------------------------------------------------------------------------------
/public/img/blog-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/blog-1.jpg
--------------------------------------------------------------------------------
/public/img/blog-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/blog-2.jpg
--------------------------------------------------------------------------------
/public/img/blog-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/blog-3.jpg
--------------------------------------------------------------------------------
/public/img/blog-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/blog-4.jpg
--------------------------------------------------------------------------------
/public/img/blog-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/blog-5.jpg
--------------------------------------------------------------------------------
/public/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/favicon.ico
--------------------------------------------------------------------------------
/public/img/flags/AD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/AD.png
--------------------------------------------------------------------------------
/public/img/flags/AE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/AE.png
--------------------------------------------------------------------------------
/public/img/flags/AG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/AG.png
--------------------------------------------------------------------------------
/public/img/flags/AM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/AM.png
--------------------------------------------------------------------------------
/public/img/flags/AR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/AR.png
--------------------------------------------------------------------------------
/public/img/flags/AT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/AT.png
--------------------------------------------------------------------------------
/public/img/flags/AU.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/AU.png
--------------------------------------------------------------------------------
/public/img/flags/BE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/BE.png
--------------------------------------------------------------------------------
/public/img/flags/BF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/BF.png
--------------------------------------------------------------------------------
/public/img/flags/BG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/BG.png
--------------------------------------------------------------------------------
/public/img/flags/BO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/BO.png
--------------------------------------------------------------------------------
/public/img/flags/BR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/BR.png
--------------------------------------------------------------------------------
/public/img/flags/CA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/CA.png
--------------------------------------------------------------------------------
/public/img/flags/CD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/CD.png
--------------------------------------------------------------------------------
/public/img/flags/CG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/CG.png
--------------------------------------------------------------------------------
/public/img/flags/CH.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/CH.png
--------------------------------------------------------------------------------
/public/img/flags/CL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/CL.png
--------------------------------------------------------------------------------
/public/img/flags/CM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/CM.png
--------------------------------------------------------------------------------
/public/img/flags/CN.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/CN.png
--------------------------------------------------------------------------------
/public/img/flags/CO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/CO.png
--------------------------------------------------------------------------------
/public/img/flags/CZ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/CZ.png
--------------------------------------------------------------------------------
/public/img/flags/DE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/DE.png
--------------------------------------------------------------------------------
/public/img/flags/DJ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/DJ.png
--------------------------------------------------------------------------------
/public/img/flags/DK.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/DK.png
--------------------------------------------------------------------------------
/public/img/flags/DZ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/DZ.png
--------------------------------------------------------------------------------
/public/img/flags/EE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/EE.png
--------------------------------------------------------------------------------
/public/img/flags/EG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/EG.png
--------------------------------------------------------------------------------
/public/img/flags/ES.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/ES.png
--------------------------------------------------------------------------------
/public/img/flags/FI.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/FI.png
--------------------------------------------------------------------------------
/public/img/flags/FR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/FR.png
--------------------------------------------------------------------------------
/public/img/flags/GA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/GA.png
--------------------------------------------------------------------------------
/public/img/flags/GB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/GB.png
--------------------------------------------------------------------------------
/public/img/flags/GM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/GM.png
--------------------------------------------------------------------------------
/public/img/flags/GT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/GT.png
--------------------------------------------------------------------------------
/public/img/flags/HN.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/HN.png
--------------------------------------------------------------------------------
/public/img/flags/HT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/HT.png
--------------------------------------------------------------------------------
/public/img/flags/HU.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/HU.png
--------------------------------------------------------------------------------
/public/img/flags/ID.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/ID.png
--------------------------------------------------------------------------------
/public/img/flags/IE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/IE.png
--------------------------------------------------------------------------------
/public/img/flags/IL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/IL.png
--------------------------------------------------------------------------------
/public/img/flags/IN.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/IN.png
--------------------------------------------------------------------------------
/public/img/flags/IQ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/IQ.png
--------------------------------------------------------------------------------
/public/img/flags/IR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/IR.png
--------------------------------------------------------------------------------
/public/img/flags/IT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/IT.png
--------------------------------------------------------------------------------
/public/img/flags/JM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/JM.png
--------------------------------------------------------------------------------
/public/img/flags/JO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/JO.png
--------------------------------------------------------------------------------
/public/img/flags/JP.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/JP.png
--------------------------------------------------------------------------------
/public/img/flags/KG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/KG.png
--------------------------------------------------------------------------------
/public/img/flags/KN.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/KN.png
--------------------------------------------------------------------------------
/public/img/flags/KP.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/KP.png
--------------------------------------------------------------------------------
/public/img/flags/KR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/KR.png
--------------------------------------------------------------------------------
/public/img/flags/KW.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/KW.png
--------------------------------------------------------------------------------
/public/img/flags/KZ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/KZ.png
--------------------------------------------------------------------------------
/public/img/flags/LA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/LA.png
--------------------------------------------------------------------------------
/public/img/flags/LB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/LB.png
--------------------------------------------------------------------------------
/public/img/flags/LC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/LC.png
--------------------------------------------------------------------------------
/public/img/flags/LS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/LS.png
--------------------------------------------------------------------------------
/public/img/flags/LU.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/LU.png
--------------------------------------------------------------------------------
/public/img/flags/LV.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/LV.png
--------------------------------------------------------------------------------
/public/img/flags/MG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/MG.png
--------------------------------------------------------------------------------
/public/img/flags/MK.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/MK.png
--------------------------------------------------------------------------------
/public/img/flags/ML.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/ML.png
--------------------------------------------------------------------------------
/public/img/flags/MM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/MM.png
--------------------------------------------------------------------------------
/public/img/flags/MT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/MT.png
--------------------------------------------------------------------------------
/public/img/flags/MX.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/MX.png
--------------------------------------------------------------------------------
/public/img/flags/NA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/NA.png
--------------------------------------------------------------------------------
/public/img/flags/NE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/NE.png
--------------------------------------------------------------------------------
/public/img/flags/NG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/NG.png
--------------------------------------------------------------------------------
/public/img/flags/NI.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/NI.png
--------------------------------------------------------------------------------
/public/img/flags/NL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/NL.png
--------------------------------------------------------------------------------
/public/img/flags/NO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/NO.png
--------------------------------------------------------------------------------
/public/img/flags/OM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/OM.png
--------------------------------------------------------------------------------
/public/img/flags/PA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/PA.png
--------------------------------------------------------------------------------
/public/img/flags/PE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/PE.png
--------------------------------------------------------------------------------
/public/img/flags/PG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/PG.png
--------------------------------------------------------------------------------
/public/img/flags/PK.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/PK.png
--------------------------------------------------------------------------------
/public/img/flags/PL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/PL.png
--------------------------------------------------------------------------------
/public/img/flags/PT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/PT.png
--------------------------------------------------------------------------------
/public/img/flags/PY.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/PY.png
--------------------------------------------------------------------------------
/public/img/flags/QA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/QA.png
--------------------------------------------------------------------------------
/public/img/flags/RO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/RO.png
--------------------------------------------------------------------------------
/public/img/flags/RU.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/RU.png
--------------------------------------------------------------------------------
/public/img/flags/RW.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/RW.png
--------------------------------------------------------------------------------
/public/img/flags/SA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/SA.png
--------------------------------------------------------------------------------
/public/img/flags/SE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/SE.png
--------------------------------------------------------------------------------
/public/img/flags/SG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/SG.png
--------------------------------------------------------------------------------
/public/img/flags/SL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/SL.png
--------------------------------------------------------------------------------
/public/img/flags/SN.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/SN.png
--------------------------------------------------------------------------------
/public/img/flags/SO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/SO.png
--------------------------------------------------------------------------------
/public/img/flags/SV.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/SV.png
--------------------------------------------------------------------------------
/public/img/flags/TD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/TD.png
--------------------------------------------------------------------------------
/public/img/flags/TJ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/TJ.png
--------------------------------------------------------------------------------
/public/img/flags/TL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/TL.png
--------------------------------------------------------------------------------
/public/img/flags/TR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/TR.png
--------------------------------------------------------------------------------
/public/img/flags/TZ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/TZ.png
--------------------------------------------------------------------------------
/public/img/flags/UA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/UA.png
--------------------------------------------------------------------------------
/public/img/flags/US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/US.png
--------------------------------------------------------------------------------
/public/img/flags/VE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/VE.png
--------------------------------------------------------------------------------
/public/img/flags/VN.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/VN.png
--------------------------------------------------------------------------------
/public/img/flags/YE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/flags/YE.png
--------------------------------------------------------------------------------
/public/img/new_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/new_logo.png
--------------------------------------------------------------------------------
/public/img/carousel_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/carousel_1.jpg
--------------------------------------------------------------------------------
/public/img/carousel_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/carousel_2.jpg
--------------------------------------------------------------------------------
/public/img/carousel_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/carousel_3.jpg
--------------------------------------------------------------------------------
/public/img/logo-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/logo-white.png
--------------------------------------------------------------------------------
/public/img/default-avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/default-avatar.png
--------------------------------------------------------------------------------
/public/img/faces/face-0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/faces/face-0.jpg
--------------------------------------------------------------------------------
/public/img/faces/face-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/faces/face-1.jpg
--------------------------------------------------------------------------------
/public/img/faces/face-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/faces/face-2.jpg
--------------------------------------------------------------------------------
/public/img/faces/face-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/faces/face-3.jpg
--------------------------------------------------------------------------------
/public/img/faces/face-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/faces/face-4.jpg
--------------------------------------------------------------------------------
/public/img/faces/face-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/faces/face-5.jpg
--------------------------------------------------------------------------------
/public/img/faces/face-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/faces/face-6.jpg
--------------------------------------------------------------------------------
/public/img/faces/face-7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/faces/face-7.jpg
--------------------------------------------------------------------------------
/public/img/screen/front.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/screen/front.png
--------------------------------------------------------------------------------
/public/img/screen/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/screen/login.png
--------------------------------------------------------------------------------
/public/img/faces/tim_vector.jpe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/faces/tim_vector.jpe
--------------------------------------------------------------------------------
/public/img/screen/dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/screen/dashboard.png
--------------------------------------------------------------------------------
/public/img/screen/user-edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/screen/user-edit.png
--------------------------------------------------------------------------------
/public/img/full-screen-image-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-1.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-2.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-3.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-4.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-5.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-6.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-7.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-8.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-9.jpg
--------------------------------------------------------------------------------
/public/img/screen/users-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/screen/users-list.png
--------------------------------------------------------------------------------
/public/img/full-screen-image-10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-10.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-11.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-12.jpg
--------------------------------------------------------------------------------
/public/img/full-screen-image-13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rdehnhardt/skeleton/HEAD/public/img/full-screen-image-13.jpg
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/plugins/bootstrap.scss:
--------------------------------------------------------------------------------
1 | @import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap";
2 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_tabs.scss:
--------------------------------------------------------------------------------
1 | @mixin pill-style($color){
2 | border: 1px solid $color;
3 | color: $color;
4 | }
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 | *.css linguist-vendored
3 | *.scss linguist-vendored
4 | *.js linguist-vendored
5 | CHANGELOG.md export-ignore
6 |
--------------------------------------------------------------------------------
/resources/views/back/dashboard.blade.php:
--------------------------------------------------------------------------------
1 | @extends('back.layout')
2 |
3 | @section('title', trans('back.dashboard'))
4 |
5 | @section('content')
6 | @endsection
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /public/hot
3 | /public/storage
4 | /storage/*.key
5 | /vendor
6 | /.idea
7 | /.vagrant
8 | Homestead.json
9 | Homestead.yaml
10 | npm-debug.log
11 | yarn-error.log
12 | .env
13 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_cards.scss:
--------------------------------------------------------------------------------
1 | @mixin filter($color){
2 | @if $color == #FFFFFF{
3 | background-color: rgba($color,.91);
4 | } @else {
5 | background-color: rgba($color,.69);
6 | }
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_navbars.scss:
--------------------------------------------------------------------------------
1 | @mixin navbar-color($color){
2 | background-color: $color;
3 | }
4 |
5 | @mixin center-item(){
6 | left: 0;
7 | right: 0;
8 | margin-right: auto;
9 | margin-left: auto;
10 | position: absolute;
11 | }
--------------------------------------------------------------------------------
/public/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/js/dashboard.js": "/js/dashboard.js?id=2ef71f994beede8ba042",
3 | "/css/theme.css": "/css/theme.css?id=037c0066ee28ced558e0",
4 | "/css/dashboard.css": "/css/dashboard.css?id=d41d8cd98f00b204e980",
5 | "/js/theme.js": "/js/theme.js?id=ddd341ac20c091138ac0"
6 | }
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_icons.scss:
--------------------------------------------------------------------------------
1 | @mixin icon-background ($icon-url){
2 | background-image : url($icon-url);
3 |
4 | }
5 |
6 | @mixin icon-shape ($size, $padding, $border-radius) {
7 | height: $size;
8 | width: $size;
9 | padding: $padding;
10 | border-radius: $border-radius;
11 | display: inline-table;
12 |
13 | }
--------------------------------------------------------------------------------
/resources/lang/en/back.php:
--------------------------------------------------------------------------------
1 | 'Operation has been successful',
5 | 'dashboard' => 'Dashboard',
6 | 'profile' => 'Profile',
7 | 'users' => [
8 | 'create' => 'Create new user'
9 | ],
10 | 'contacts' => [
11 | 'create' => 'Create new contact'
12 | ]
13 | ];
--------------------------------------------------------------------------------
/database/seeds/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call(UsersTableSeeder::class);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/resources/lang/en/messages.php:
--------------------------------------------------------------------------------
1 | 'Operation has been successful.',
5 | 'exception' => 'Unexpected error, please contact the administrator.',
6 | 'no-records' => 'No records found.',
7 | 'add-new' => 'Add new',
8 | 'confirm-title' => 'Are you sure?',
9 | 'confirm' => 'This operation is irreversible, do you want to proceed?',
10 | ];
--------------------------------------------------------------------------------
/app/Http/Middleware/EncryptCookies.php:
--------------------------------------------------------------------------------
1 | get('/');
13 |
14 | $response->assertSee('/img/logo.png');
15 | $response->assertSee('Login');
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/tests/Unit/ExampleTest.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/Models/Contact.php:
--------------------------------------------------------------------------------
1 | 'Email Address',
5 | 'password' => 'Password',
6 | 'login' => 'Login',
7 | 'logout' => 'Logout',
8 | 'users' => 'Users',
9 | 'contacts' => 'Contacts',
10 | 'register' => 'Register',
11 | 'name' => 'Name',
12 | 'picture' => 'Picture',
13 | 'update' => 'Update',
14 | 'create' => 'Create',
15 | 'back' => 'Back',
16 | ];
17 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Back/DashboardController.php:
--------------------------------------------------------------------------------
1 | group(['as' => 'guest.'], function () use ($router) {
15 | $router->get('/', 'HomeController@index')->name('home');
16 | });
17 | }
18 | }
--------------------------------------------------------------------------------
/resources/views/guest/home.blade.php:
--------------------------------------------------------------------------------
1 | @extends('guest.layout')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |

8 |
9 |
10 |
13 |
14 |
15 | @endsection
16 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_mixins.scss:
--------------------------------------------------------------------------------
1 | //Utilities
2 | @import "mixins/transparency";
3 | @import "mixins/vendor-prefixes";
4 |
5 | //Components
6 | @import "mixins/buttons";
7 | @import "mixins/inputs";
8 | @import "mixins/labels";
9 | @import "mixins/tabs";
10 | @import "mixins/navbars";
11 | @import "mixins/icons";
12 | @import "mixins/social-buttons";
13 | @import "mixins/morphing-buttons";
14 | @import "mixins/cards";
15 | @import "mixins/table-row";
16 | @import "mixins/chartist";
17 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/ForgotPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_transparency.scss:
--------------------------------------------------------------------------------
1 | // Opacity
2 |
3 | @mixin opacity($opacity) {
4 | opacity: $opacity;
5 | // IE8 filter
6 | $opacity-ie: ($opacity * 100);
7 | filter: #{alpha(opacity=$opacity-ie)};
8 | }
9 |
10 | @mixin black-filter($opacity){
11 | top: 0;
12 | left: 0;
13 | height: 100%;
14 | width: 100%;
15 | position: absolute;
16 | background-color: rgba(17,17,17,$opacity);
17 | display: block;
18 | content: "";
19 | z-index: 1;
20 | }
--------------------------------------------------------------------------------
/tests/CreatesApplication.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
19 |
20 | return $app;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/Providers/BroadcastServiceProvider.php:
--------------------------------------------------------------------------------
1 | actingAs($user);
21 |
22 | return $this;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/database/factories/ModelFactory.php:
--------------------------------------------------------------------------------
1 | define(App\Models\User::class, function (Faker $faker) {
6 | static $password;
7 |
8 | return [
9 | 'name' => $faker->name,
10 | 'email' => $faker->unique()->safeEmail,
11 | 'password' => $password ?: $password = bcrypt('secret'),
12 | ];
13 | });
14 |
15 | $factory->define(App\Models\Contact::class, function (Faker $faker) {
16 | return [
17 | 'name' => $faker->name,
18 | ];
19 | });
20 |
--------------------------------------------------------------------------------
/resources/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'Restricted Access',
5 | 'forgot' => 'Forgot your password?',
6 | 'remember' => 'Remember my password',
7 | 'password-confirmation' => 'Password Confirmation',
8 | 'reset-password' => 'Reset Password',
9 | 'send-link' => 'Send Password Reset Link',
10 | 'change-password' => 'Change Password',
11 | 'failed' => 'These credentials do not match our records.',
12 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
13 | ];
14 |
--------------------------------------------------------------------------------
/tests/helpers.php:
--------------------------------------------------------------------------------
1 | create($attributes);
7 | }
8 | }
9 |
10 | if (!function_exists('make')) {
11 | function make($class, array $attributes = [])
12 | {
13 | return factory($class)->make($attributes);
14 | }
15 | }
16 |
17 | if (!function_exists('raw')) {
18 | function raw($class, array $attributes = [])
19 | {
20 | return factory($class)->raw($attributes);
21 | }
22 | }
--------------------------------------------------------------------------------
/tests/Feature/Auth/Passwords/EmailTest.php:
--------------------------------------------------------------------------------
1 | post(route('password.email'), ['email' => $user->email]);
19 |
20 | $this->assertTrue(true);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
16 | });
17 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_table-row.scss:
--------------------------------------------------------------------------------
1 | @mixin table-row-variant($state, $background) {
2 | .table > thead > tr,
3 | .table > tbody > tr,
4 | .table > tfoot > tr {
5 | > td.#{$state},
6 | > th.#{$state},
7 | &.#{$state} > td,
8 | &.#{$state} > th {
9 | background-color: $background;
10 | }
11 | }
12 |
13 | .table-hover > tbody > tr {
14 | > td.#{$state}:hover,
15 | > th.#{$state}:hover,
16 | &.#{$state}:hover > td,
17 | &:hover > .#{$state},
18 | &.#{$state}:hover > th {
19 | background-color: lighten($background, 3%);
20 | }
21 | }
22 | }
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_progress-bars.scss:
--------------------------------------------------------------------------------
1 | .progress {
2 | background-color: #E5E5E5;
3 | border-radius: 3px;
4 | box-shadow: none;
5 | height: 4px;
6 | }
7 | .progress-thin{
8 | height: 2px;
9 | }
10 |
11 | .progress-bar,
12 | .progress-bar-primary{
13 | background-color: $primary-color;
14 | }
15 | .progress-bar-info{
16 | background-color: $info-color;
17 | }
18 | .progress-bar-success{
19 | background-color: $success-color;
20 | }
21 | .progress-bar-warning{
22 | background-color: $warning-color;
23 | }
24 | .progress-bar-danger{
25 | background-color: $danger-color;
26 | }
27 |
--------------------------------------------------------------------------------
/app/Providers/AppServiceProvider.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/LoginController.php:
--------------------------------------------------------------------------------
1 | middleware('guest')->except('logout');
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/ResetPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Models/User.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | $uri = urldecode(
11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
12 | );
13 |
14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the
15 | // built-in PHP web server. This provides a convenient way to test a Laravel
16 | // application without having installed a "real" web server software here.
17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
18 | return false;
19 | }
20 |
21 | require_once __DIR__.'/public/index.php';
22 |
--------------------------------------------------------------------------------
/app/Http/Middleware/RedirectIfAuthenticated.php:
--------------------------------------------------------------------------------
1 | check()) {
21 | return redirect('/back');
22 | }
23 |
24 | return $next($request);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Http/Requests/Back/ContactRequest.php:
--------------------------------------------------------------------------------
1 | 'required',
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
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 | RewriteCond %{REQUEST_URI} (.+)/$
11 | RewriteRule ^ %1 [L,R=301]
12 |
13 | # Handle Front Controller...
14 | RewriteCond %{REQUEST_FILENAME} !-d
15 | RewriteCond %{REQUEST_FILENAME} !-f
16 | RewriteRule ^ index.php [L]
17 |
18 | # Handle Authorization Header
19 | RewriteCond %{HTTP:Authorization} .
20 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
21 |
22 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_labels.scss:
--------------------------------------------------------------------------------
1 | @mixin label-style(){
2 | padding: $padding-label-vertical $padding-label-horizontal;
3 | border: 1px solid $default-color;
4 | border-radius: $border-radius-small;
5 | color: $default-color;
6 | font-weight: $font-weight-semi;
7 | font-size: $font-size-small;
8 | text-transform: uppercase;
9 | display: inline-block;
10 | vertical-align: middle;
11 | }
12 |
13 | @mixin label-color($color){
14 | border-color: $color;
15 | color: $color;
16 | }
17 | @mixin label-color-fill($color){
18 | border-color: $color;
19 | color: $white-color;
20 | background-color: $color;
21 | }
--------------------------------------------------------------------------------
/resources/assets/js/components/Example.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
Example Component
7 |
8 |
9 | I'm an example component!
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
24 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/Passwords/ResetTest.php:
--------------------------------------------------------------------------------
1 | post(route('password.request'), [
19 | 'email' => $user->email,
20 | 'password' => 'new-password',
21 | 'password_confirmation' => 'new-password',
22 | ]);
23 |
24 | $this->assertTrue(true);
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 | window.Vue = require('vue');
11 |
12 | /**
13 | * Next, we will create a fresh Vue application instance and attach it to
14 | * the page. Then, you may begin adding components to this application
15 | * or customize the JavaScript scaffolding to fit your unique needs.
16 | */
17 |
18 | Vue.component('example', require('./components/Example.vue'));
19 |
20 | const app = new Vue({
21 | el: '#app'
22 | });
23 |
--------------------------------------------------------------------------------
/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('inspire')->hourly();
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/Providers/AuthServiceProvider.php:
--------------------------------------------------------------------------------
1 | 'App\Policies\ModelPolicy',
17 | ];
18 |
19 | /**
20 | * Register any authentication / authorization services.
21 | *
22 | * @return void
23 | */
24 | public function boot()
25 | {
26 | $this->registerPolicies();
27 |
28 | //
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/resources/views/back/layout.blade.php:
--------------------------------------------------------------------------------
1 | @extends('back.theme')
2 |
3 | @section('body')
4 |
5 | @include('back.layout.sidebar')
6 |
7 |
8 | @include('back.layout.header')
9 |
10 |
11 |
12 | @include('flash::message')
13 |
14 | @yield('content')
15 |
16 |
17 |
18 |
19 | @endsection
20 |
21 | @push('styles')
22 |
23 | @endpush
24 |
25 | @push('scripts')
26 |
27 | @endpush
--------------------------------------------------------------------------------
/tests/Feature/Back/DashboardTest.php:
--------------------------------------------------------------------------------
1 | get(route('back.dashboard'))
17 | ->assertRedirect('/login');
18 | }
19 |
20 | /** @test */
21 | public function authorized_user_may_visit_dashboard()
22 | {
23 | $this->signIn();
24 |
25 | $this
26 | ->get(route('back.dashboard'))
27 | ->assertSee(trans('back.dashboard'));
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/Providers/EventServiceProvider.php:
--------------------------------------------------------------------------------
1 | [
17 | 'App\Listeners\EventListener',
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 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | APP_NAME=Laravel
2 | APP_ENV=local
3 | APP_KEY=base64:aLvg/Qr8RqjBh/1lekZjqr9hq5m6K+rPYb8qlE6ugr0=
4 | APP_DEBUG=true
5 | APP_LOG_LEVEL=debug
6 | APP_URL=http://localhost:8080
7 |
8 | DB_CONNECTION=pgsql
9 | DB_HOST=127.0.0.1
10 | DB_PORT=5432
11 | DB_DATABASE=skeleton
12 | DB_USERNAME=skeleton
13 | DB_PASSWORD=secret
14 |
15 | BEANSTALKD_HOST=beanstalkd
16 | BEANSTALKD_PORT=11300
17 |
18 | BROADCAST_DRIVER=log
19 | CACHE_DRIVER=file
20 | SESSION_DRIVER=file
21 | QUEUE_DRIVER=sync
22 |
23 | REDIS_HOST=redis
24 | REDIS_PASSWORD=null
25 | REDIS_PORT=6379
26 |
27 | MAIL_DRIVER=smtp
28 | MAIL_HOST=smtp.mailtrap.io
29 | MAIL_PORT=2525
30 | MAIL_USERNAME=null
31 | MAIL_PASSWORD=null
32 | MAIL_ENCRYPTION=null
33 |
34 | PUSHER_APP_ID=
35 | PUSHER_APP_KEY=
36 | PUSHER_APP_SECRET=
37 |
--------------------------------------------------------------------------------
/database/migrations/2017_09_26_000000_create_contacts_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('name');
19 | $table->timestamps();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('contacts');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustProxies.php:
--------------------------------------------------------------------------------
1 | 'FORWARDED',
24 | Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
25 | Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
26 | Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
27 | Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
28 | ];
29 | }
30 |
--------------------------------------------------------------------------------
/app/Http/Requests/Back/UserRequest.php:
--------------------------------------------------------------------------------
1 | 'required',
28 | 'email' => 'required|email|unique:users,email,' . auth()->user()->id,
29 | 'picture' => 'image|mimes:jpeg,jpg,png|dimensions:ratio=1/1',
30 | 'password' => 'confirmed',
31 | ];
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_forms.scss:
--------------------------------------------------------------------------------
1 | form{
2 |
3 | label{
4 | &.radio,
5 | &.checkbox{
6 | font-size: $font-size-base;
7 | text-transform: none;
8 | cursor: pointer;
9 | }
10 | }
11 | }
12 |
13 | .form-horizontal{
14 | .checkbox,
15 | .radio{
16 | padding-top: 0;
17 |
18 | &:first-child,
19 | &.checkbox-inline,
20 | &.radio-inline{
21 | margin-top: 10px;
22 | }
23 | }
24 | }
25 |
26 | star{
27 | color: $danger-color;
28 | padding-left: 3px;
29 | }
30 |
31 | @media (min-width: $screen-md-min){
32 | .form-horizontal{
33 | .control-label{
34 | padding-top: 12px !important;
35 | }
36 | code{
37 | margin-top: 8px;
38 | display: inline-block;
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_resets_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token');
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 |
--------------------------------------------------------------------------------
/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 |
22 | ];
23 |
--------------------------------------------------------------------------------
/tests/Feature/Back/Users/ListUserTest.php:
--------------------------------------------------------------------------------
1 | get(route('back.users.index'))
18 | ->assertRedirect('/login');
19 | }
20 |
21 | /** @test */
22 | public function authorized_user_may_visit_dashboard()
23 | {
24 | $this->signIn($user = create(User::class));
25 |
26 | $this
27 | ->get(route('back.users.index'))
28 | ->assertSee(trans('dictionary.users'))
29 | ->assertSee($user->email)
30 | ->assertSee($user->name);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_social-buttons.scss:
--------------------------------------------------------------------------------
1 | @mixin social-buttons-color ($color){
2 |
3 | border-color: $color;
4 | color: $color;
5 |
6 | &:hover,
7 | &:focus,
8 | &:active,
9 | &.active,
10 | .open > &.dropdown-toggle {
11 | background-color: $transparent-bg;
12 | color: $color;
13 | border-color: $color;
14 | opacity: 1;
15 | }
16 |
17 | &:disabled,
18 | &[disabled],
19 | &.disabled {
20 | background-color: $transparent-bg;
21 | border-color: $color;
22 | }
23 |
24 | &.btn-fill {
25 | color: $white-color;
26 | background-color: $color;
27 | opacity: 0.9;
28 |
29 | &:hover,
30 | &:focus,
31 | &:active,
32 | &.active,
33 | .open > &.dropdown-toggle{
34 | background-color: $color;
35 | color: $white-color;
36 | opacity: 1;
37 | }
38 |
39 | }
40 |
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/LoginTest.php:
--------------------------------------------------------------------------------
1 | post(route('login'), ['email' => $user->email, 'password' => 'secret'])
20 | ->assertRedirect('/back');
21 | }
22 |
23 | /** @test */
24 | public function a_user_login_with_invalid_credentials()
25 | {
26 | $user = create(User::class);
27 |
28 | $this
29 | ->post(route('login'), ['email' => $user->email, 'password' => 'anotherpassword'])
30 | ->assertSessionHasErrors(['email']);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/tests/Feature/Back/Contacts/ListContactTest.php:
--------------------------------------------------------------------------------
1 | get(route('back.contacts.index'))
18 | ->assertRedirect('/login');
19 | }
20 |
21 | /** @test */
22 | public function authorized_users_may_visit_contact()
23 | {
24 | $contact = create(Contact::class);
25 | $this->signIn();
26 |
27 | $this
28 | ->get(route('back.contacts.index'))
29 | ->assertSee(trans('dictionary.contacts'))
30 | ->assertSeeText($contact->name);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/tests/Feature/Back/ProfileTest.php:
--------------------------------------------------------------------------------
1 | get(route('back.profile'))
20 | ->assertRedirect('/login');
21 | }
22 |
23 | /** @test */
24 | public function authorized_user_may_visit_profile()
25 | {
26 | $this->signIn($user = create(User::class));
27 |
28 | $this
29 | ->get(route('back.profile'))
30 | ->assertSee(trans('back.profile'))
31 | ->assertSee($user->email);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/tests/Feature/Back/Users/DeleteUserTest.php:
--------------------------------------------------------------------------------
1 | signIn();
17 |
18 | $user = create(User::class);
19 |
20 | $this
21 | ->delete(route('back.users.destroy', $user->id))
22 | ->assertRedirect(route('back.users.index'));
23 | }
24 |
25 | /** @test */
26 | public function unauthorized_user_cannot_update_user()
27 | {
28 | $user = create(User::class);
29 |
30 | $this
31 | ->delete(route('back.users.destroy', $user->id))
32 | ->assertRedirect(route('login'));
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/resources/assets/js/dashboard.js:
--------------------------------------------------------------------------------
1 | require('./bootstrap');
2 | require('sweetalert2/dist/sweetalert2');
3 |
4 | var formConfirm = document.querySelectorAll('form[data-confirm]')
5 |
6 | for (var i = 0; i < formConfirm.length; i++) {
7 | formConfirm[i].addEventListener('submit', function (e) {
8 | var form = $(this);
9 | e.preventDefault();
10 |
11 | swal({
12 | title: form.data('title'),
13 | text: form.data('confirm'),
14 | type: form.data('type'),
15 | showCancelButton: true,
16 | confirmButtonColor: '#DD6B55',
17 | confirmButtonText: 'Yes, I am sure!',
18 | cancelButtonText: "No, cancel it!",
19 | closeOnConfirm: false,
20 | closeOnCancel: true
21 | }, function (isConfirm) {
22 | if (isConfirm) {
23 | form.submit();
24 | }
25 | });
26 | });
27 | }
--------------------------------------------------------------------------------
/app/Http/Routes/Back.php:
--------------------------------------------------------------------------------
1 | group(['prefix' => 'back', 'middleware' => 'auth', 'as' => 'back.'], function () use ($router) {
15 | # Dashboard
16 | $router->get('/', 'DashboardController@index')->name('dashboard');
17 |
18 | # Profile
19 | $router->post('profile', 'ProfileController@update')->name('profile.store');
20 | $router->get('profile', 'ProfileController@index')->name('profile');
21 |
22 | # Users
23 | $router->resource('users', 'UsersController');
24 |
25 | # Contacts
26 | $router->resource('contacts', 'ContactsController');
27 | });
28 | }
29 | }
--------------------------------------------------------------------------------
/tests/Feature/Back/Contacts/DeleteContactTest.php:
--------------------------------------------------------------------------------
1 | signIn();
17 |
18 | $contact = create(Contact::class);
19 |
20 | $this
21 | ->delete(route('back.contacts.destroy', $contact->id))
22 | ->assertRedirect(route('back.contacts.index'));
23 | }
24 |
25 | /** @test */
26 | public function unauthorized_user_cannot_delete_contact()
27 | {
28 | $contact = create(Contact::class);
29 |
30 | $this
31 | ->delete(route('back.contacts.destroy', $contact->id))
32 | ->assertRedirect(route('login'));
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/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->string('picture')->nullable();
22 | $table->rememberToken();
23 | $table->timestamps();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('users');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/public/img/loading-bubbles.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_morphing-buttons.scss:
--------------------------------------------------------------------------------
1 | $prefixes: ('', '-moz-', '-webkit-', '-ms-') !default;
2 |
3 | @mixin circle-animation(){
4 | @for $i from 0 to length($prefixes) {
5 | @include circle-animation-details(nth($prefixes, $i + 1));
6 | }
7 | }
8 |
9 | @mixin circle-animation-details($name){
10 | #{$name}animation-name: spin;
11 | #{$name}animation-duration: 1250ms;
12 | #{$name}animation-iteration-count: infinite;
13 | #{$name}animation-timing-function: linear;
14 |
15 | }
16 | @keyframes spin {
17 | from { transform:rotate(0deg); }
18 | to { transform:rotate(360deg); }
19 | }
20 |
21 | @-webkit-keyframes spin {
22 | from { -webkit-transform: rotate(0deg); }
23 | to { -webkit-transform: rotate(360deg); }
24 | }
25 |
26 | @-moz-keyframes spin {
27 | from { -moz-transform: rotate(0deg); }
28 | to { -moz-transform: rotate(360deg); }
29 | }
30 |
31 | @-ms-keyframes spin {
32 | from { -ms-transform: rotate(0deg); }
33 | to { -ms-transform: rotate(360deg); }
34 | }
--------------------------------------------------------------------------------
/resources/views/auth/passwords/email.blade.php:
--------------------------------------------------------------------------------
1 | @extends('auth.layout')
2 |
3 | @section('title', trans('auth.reset-password'))
4 |
5 | @section('content')
6 | {!! Form::open(['method' => 'post', 'route' => ['password.email']]) !!}
7 |
8 |
9 |
10 |
11 | {!! Form::openGroup('email', trans('dictionary.email')) !!}
12 | {!! Form::email('email', null) !!}
13 | {!! Form::closeGroup() !!}
14 |
15 |
16 |
19 |
20 |
23 |
24 | {!! Form::close() !!}
25 | @endsection
26 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Renato Dehnhardt
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | resource_path('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 |
--------------------------------------------------------------------------------
/resources/views/back/layout/header.blade.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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\Models\User::class,
34 | 'key' => env('STRIPE_KEY'),
35 | 'secret' => env('STRIPE_SECRET'),
36 | ],
37 |
38 | ];
39 |
--------------------------------------------------------------------------------
/app/Http/Middleware/BackgroundCookie.php:
--------------------------------------------------------------------------------
1 | getImageIndex($request);
21 | View::share('background', $random);
22 |
23 | $response = $next($request);
24 | $response->withCookie($this->getCookie($random));
25 |
26 | return $response;
27 | }
28 |
29 | /**
30 | * @param \Illuminate\Http\Request $request
31 | * @return int
32 | */
33 | private function getImageIndex($request)
34 | {
35 | return $request->hasCookie('image')
36 | ? $request->cookie('image')
37 | : random_int(1, 9);
38 | }
39 |
40 | /**
41 | * @param $random
42 | * @return \Cookie
43 | */
44 | private function getCookie($random)
45 | {
46 | return cookie('image', $random, 3600);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | "{$this->namespace}", 'middleware' => 'web'], function (Registrar $router) {
28 | foreach (glob(app_path('Http//Routes') . '/*.php') as $file) {
29 | $namespace = basename($file, '.php');
30 |
31 | $router->group(['namespace' => $namespace], function (Registrar $router) use ($namespace) {
32 | $this->app->make("App\\Http\\Routes\\$namespace")->map($router);
33 | });
34 | }
35 | });
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_collapse.scss:
--------------------------------------------------------------------------------
1 | .panel {
2 | border: 0;
3 | border-bottom: 1px solid $medium-gray;
4 | box-shadow: none;
5 | }
6 | .panel-default > .panel-heading {
7 | background-color: $white-color;
8 | border-color: $white-color;
9 | }
10 | .panel-group .panel{
11 | border-radius: 0;
12 | }
13 | .panel-title{
14 | font-size: $font-size-h5;
15 | }
16 | .panel-title a:hover, .panel-title a:focus{
17 | text-decoration: none;
18 | }
19 | .collapse-hover{
20 | display: block;
21 | height: 0px;
22 | visibility: visible;
23 | overflow: hidden;
24 | }
25 | .panel-title a:hover, .panel-title a:focus{
26 | color: $default-states-color;
27 | }
28 | .panel-default > .panel-heading + .panel-collapse > .panel-body {
29 | box-shadow: inset 0 7px 10px -7px rgba(0,0,0,0.14);
30 | }
31 | .panel-heading{
32 | padding: 0;
33 |
34 | .caret{
35 | float: right;
36 | margin-top: 12px;
37 | margin-right: $padding-default-horizontal;
38 | }
39 |
40 | a{
41 | padding: $padding-default-vertical 0;
42 | display: block;
43 | width: 100%;
44 |
45 | .content-full-width &{
46 | padding: $padding-default-vertical $padding-default-horizontal;
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_labels.scss:
--------------------------------------------------------------------------------
1 | /* Labels */
2 | .label{
3 | padding: 0.2em 0.6em 0.2em;
4 | border: 1px solid #999999;
5 | border-radius: 3px;
6 | color: #999999;
7 | background-color: #FFFFFF;
8 | font-weight: 500;
9 | font-size: 11px;
10 | text-transform: uppercase;
11 | display: inline-block;
12 | margin-bottom: 3px;
13 | }
14 | .label-primary{
15 | border-color: #3472F7;
16 | color: #3472F7;
17 | }
18 | .label-info{
19 | border-color: #2CA8FF;
20 | color: #2CA8FF;
21 | }
22 | .label-success{
23 | border-color: #05AE0E;
24 | color: #05AE0E;
25 | }
26 | .label-warning{
27 | border-color: #FF9500;
28 | color: #FF9500;
29 | }
30 | .label-danger{
31 | border-color: #FF3B30;
32 | color: #FF3B30;
33 | }
34 | .label.label-fill{
35 | color: #FFFFFF;
36 | }
37 | .label-primary.label-fill{
38 | background-color: #3472F7;
39 | }
40 | .label-info.label-fill{
41 | background-color: #2CA8FF;
42 | }
43 | .label-success.label-fill{
44 | background-color: #05AE0E;
45 | }
46 | .label-warning.label-fill{
47 | background-color: #FF9500;
48 | }
49 | .label-danger.label-fill{
50 | background-color: #FF3B30;
51 | }
52 | .label-default.label-fill{
53 | background-color: #999999;
54 | }
55 |
--------------------------------------------------------------------------------
/webpack.mix.js:
--------------------------------------------------------------------------------
1 | let mix = require('laravel-mix');
2 |
3 | theme = [
4 | 'resources/assets/js/theme/jquery.min.js',
5 | 'resources/assets/js/theme/jquery-ui.min.js',
6 | 'resources/assets/js/theme/bootstrap.min.js',
7 | 'resources/assets/js/theme/jquery.validate.min.js',
8 | 'resources/assets/js/theme/moment.min.js',
9 | 'resources/assets/js/theme/bootstrap-datetimepicker.js',
10 | 'resources/assets/js/theme/bootstrap-selectpicker.js',
11 | 'resources/assets/js/theme/bootstrap-checkbox-radio-switch-tags.js',
12 | 'resources/assets/js/theme/chartist.min.js',
13 | 'resources/assets/js/theme/bootstrap-notify.js',
14 | 'resources/assets/js/theme/sweetalert2.js',
15 | 'resources/assets/js/theme/jquery-jvectormap.js',
16 | 'resources/assets/js/theme/jquery.bootstrap.wizard.min.js',
17 | 'resources/assets/js/theme/bootstrap-table.js',
18 | 'resources/assets/js/theme/fullcalendar.min.js',
19 | 'resources/assets/js/theme/light-bootstrap-dashboard.js',
20 | ];
21 |
22 | mix
23 | .sass('resources/assets/sass/theme/theme.scss', 'public/css')
24 | .scripts(theme, 'public/js/theme.js')
25 |
26 | .sass('resources/assets/sass/dashboard.scss', 'public/css')
27 | .js('resources/assets/js/dashboard.js', 'public/js')
28 |
29 | .version();
30 |
31 |
--------------------------------------------------------------------------------
/app/Http/Routes/Auth.php:
--------------------------------------------------------------------------------
1 | get('login', 'LoginController@showLoginForm')->name('login');
16 | $router->post('login', 'LoginController@login');
17 | $router->get('logout', 'LoginController@logout')->name('logout');
18 |
19 | // Registration Routes...
20 | if (config('auth.register')) {
21 | $router->get('register', 'RegisterController@showRegistrationForm')->name('register');
22 | $router->post('register', 'RegisterController@register');
23 | }
24 |
25 | // Password Reset Routes...
26 | $router->get('password/reset', 'ForgotPasswordController@showLinkRequestForm')->name('password.request');
27 | $router->post('password/email', 'ForgotPasswordController@sendResetLinkEmail')->name('password.email');
28 | $router->get('password/reset/{token}', 'ResetPasswordController@showResetForm')->name('password.reset');
29 | $router->post('password/reset', 'ResetPasswordController@reset');
30 | }
31 | }
--------------------------------------------------------------------------------
/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 |
35 |
--------------------------------------------------------------------------------
/app/Exceptions/Handler.php:
--------------------------------------------------------------------------------
1 | @lang('dictionary.back')
7 | @endpush
8 |
9 | @section('content')
10 |
11 |
12 |
13 |
16 |
17 |
18 | {!! Form::open(['method' => 'post', 'route' => ['back.contacts.store']]) !!}
19 |
20 |
21 | {!! Form::openGroup('name', trans('dictionary.name')) !!}
22 | {!! Form::text('name') !!}
23 | {!! Form::closeGroup() !!}
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | {!! Form::close() !!}
32 |
33 |
34 |
35 |
36 | @endsection
--------------------------------------------------------------------------------
/tests/Feature/Back/Contacts/CreateContactTest.php:
--------------------------------------------------------------------------------
1 | get(route('back.contacts.create'))
18 | ->assertRedirect('/login');
19 | }
20 |
21 | /** @test */
22 | public function authorized_user_may_visit_create_contact()
23 | {
24 | $this->signIn();
25 |
26 | $this
27 | ->get(route('back.contacts.create'))
28 | ->assertSee(trans('back.contacts.create'));
29 | }
30 |
31 | /** @test */
32 | public function authorized_user_can_create_contact()
33 | {
34 | $this->signIn();
35 |
36 | $data = raw(Contact::class);
37 |
38 | $this
39 | ->post(route('back.contacts.store'), $data)
40 | ->assertRedirect(route('back.contacts.index'));
41 | }
42 |
43 | /** @test */
44 | public function unauthorized_user_cannot_create_contact()
45 | {
46 | $data = raw(Contact::class);
47 |
48 | $this
49 | ->post(route('back.contacts.store'), $data)
50 | ->assertRedirect(route('login'));
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/tests/Feature/Back/Users/CreateUserTest.php:
--------------------------------------------------------------------------------
1 | get(route('back.users.create'))
18 | ->assertRedirect('/login');
19 | }
20 |
21 | /** @test */
22 | public function authorized_user_may_visit_create()
23 | {
24 | $this->signIn();
25 |
26 | $this
27 | ->get(route('back.users.create'))
28 | ->assertSee(trans('back.users.create'));
29 | }
30 |
31 | /** @test */
32 | public function authorized_user_can_create_user()
33 | {
34 | $this->signIn();
35 |
36 | $data = raw(User::class, ['password' => 'password', 'password_confirmation' => 'password']);
37 |
38 | $this
39 | ->post(route('back.users.store'), $data)
40 | ->assertRedirect(route('back.users.index'));
41 | }
42 |
43 | /** @test */
44 | public function unauthorized_user_cannot_create_user()
45 | {
46 | $data = raw(User::class);
47 |
48 | $this
49 | ->post(route('back.users.store'), $data)
50 | ->assertRedirect(route('login'));
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/tests/Feature/Back/Users/EditUserTest.php:
--------------------------------------------------------------------------------
1 | get(route('back.users.edit', 1))
18 | ->assertRedirect('/login');
19 | }
20 |
21 | /** @test */
22 | public function authorized_user_may_visit_create()
23 | {
24 | $this->signIn();
25 |
26 | $this
27 | ->get(route('back.users.edit', 1))
28 | ->assertSee(trans('dictionary.update'));
29 | }
30 |
31 | /** @test */
32 | public function authorized_user_can_edit_user()
33 | {
34 | $this->signIn();
35 |
36 | $data = raw(User::class, ['password' => 'password', 'password_confirmation' => 'password']);
37 |
38 | $this
39 | ->put(route('back.users.update', 1), $data)
40 | ->assertRedirect(route('back.users.index'));
41 | }
42 |
43 | /** @test */
44 | public function unauthorized_user_cannot_update_user()
45 | {
46 | $data = raw(User::class);
47 |
48 | $this
49 | ->put(route('back.users.update', 1), $data)
50 | ->assertRedirect(route('login'));
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/resources/views/back/contacts/edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('back.layout')
2 |
3 | @section('title', trans('dictionary.contacts'))
4 |
5 | @push('page-actions')
6 | @lang('dictionary.back')
7 | @endpush
8 |
9 | @section('content')
10 |
11 |
12 |
13 |
16 |
17 |
18 | {!! Form::open(['method' => 'put', 'route' => ['back.contacts.update', $contact->id], 'files' => true]) !!}
19 |
20 |
21 | {!! Form::openGroup('name', trans('dictionary.name')) !!}
22 | {!! Form::text('name', $contact->name) !!}
23 | {!! Form::closeGroup() !!}
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | {!! Form::close() !!}
32 |
33 |
34 |
35 |
36 | @endsection
--------------------------------------------------------------------------------
/tests/Feature/Back/Contacts/EditContactTest.php:
--------------------------------------------------------------------------------
1 | get(route('back.contacts.edit', 1))
18 | ->assertRedirect('/login');
19 | }
20 |
21 | /** @test */
22 | public function authorized_user_may_visit_create_contact()
23 | {
24 | $contact = create(Contact::class);
25 | $this->signIn();
26 |
27 | $this
28 | ->get(route('back.contacts.edit', $contact->id))
29 | ->assertSee(trans('dictionary.update'));
30 | }
31 |
32 | /** @test */
33 | public function authorized_user_can_edit_contact()
34 | {
35 | $contact = create(Contact::class);
36 | $this->signIn();
37 |
38 | $this
39 | ->put(route('back.contacts.update', $contact->id), $contact->toArray())
40 | ->assertRedirect(route('back.contacts.index'));
41 | }
42 |
43 | /** @test */
44 | public function unauthorized_user_cannot_update_contact()
45 | {
46 | $data = raw(Contact::class);
47 |
48 | $this
49 | ->put(route('back.contacts.update', 1), $data)
50 | ->assertRedirect(route('login'));
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/resources/views/auth/register.blade.php:
--------------------------------------------------------------------------------
1 | @extends('auth.layout')
2 |
3 | @section('title', trans('dictionary.register'))
4 |
5 | @section('content')
6 | {!! Form::open(['method' => 'post', 'route' => ['register']]) !!}
7 |
8 |
9 |
10 |
11 | {!! Form::openGroup('name', trans('dictionary.name')) !!}
12 | {!! Form::text('name') !!}
13 | {!! Form::closeGroup() !!}
14 |
15 | {!! Form::openGroup('email', trans('dictionary.email')) !!}
16 | {!! Form::email('email') !!}
17 | {!! Form::closeGroup() !!}
18 |
19 | {!! Form::openGroup('password', trans('dictionary.password')) !!}
20 | {!! Form::password('password') !!}
21 | {!! Form::closeGroup() !!}
22 |
23 | {!! Form::openGroup('password_confirmation', trans('auth.password-confirmation')) !!}
24 | {!! Form::password('password_confirmation') !!}
25 | {!! Form::closeGroup() !!}
26 |
27 |
28 |
31 |
32 |
35 |
36 | {!! Form::close() !!}
37 | @endsection
--------------------------------------------------------------------------------
/resources/views/auth/passwords/reset.blade.php:
--------------------------------------------------------------------------------
1 | @extends('auth.layout')
2 |
3 | @section('title', trans('auth.reset-password'))
4 |
5 | @section('content')
6 | {!! Form::open(['method' => 'post', 'route' => ['password.request']]) !!}
7 |
8 |
9 |
10 |
11 |
12 |
13 | {!! Form::openGroup('email', trans('dictionary.email')) !!}
14 | {!! Form::email('email', null) !!}
15 | {!! Form::closeGroup() !!}
16 |
17 | {!! Form::openGroup('password', trans('dictionary.password')) !!}
18 | {!! Form::password('password') !!}
19 | {!! Form::closeGroup() !!}
20 |
21 | {!! Form::openGroup('password_confirmation', trans('auth.password-confirmation')) !!}
22 | {!! Form::password('password_confirmation') !!}
23 | {!! Form::closeGroup() !!}
24 |
25 |
26 |
29 |
30 |
33 |
34 | {!! Form::close() !!}
35 | @endsection
36 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_social-buttons.scss:
--------------------------------------------------------------------------------
1 | .btn-social {
2 | //@include btn-styles($default-color, $default-states-color);
3 | opacity: 0.85;
4 | padding: 8px 9px;
5 |
6 | .fa {
7 | font-size: 18px;
8 | width: 20px;
9 | vertical-align: middle;
10 | display: inline-block;
11 | }
12 |
13 | &.btn-round {
14 | padding: 8px;
15 | }
16 |
17 | &.btn-simple {
18 | padding: 8px 5px;
19 | font-size: 16px;
20 |
21 | .fa{
22 | font-size: 20px;
23 | position: relative;
24 | top: -2px;
25 | width: 24px;
26 | }
27 | }
28 |
29 | }
30 |
31 | .btn-facebook {
32 | @include social-buttons-color($social-facebook);
33 | }
34 |
35 | .btn-twitter {
36 | @include social-buttons-color($social-twitter);
37 | }
38 |
39 | .btn-pinterest {
40 | @include social-buttons-color($social-pinterest);
41 | }
42 |
43 | .btn-google {
44 | @include social-buttons-color($social-google);
45 | }
46 |
47 | .btn-linkedin {
48 | @include social-buttons-color($social-linkedin);
49 | }
50 |
51 | .btn-dribbble {
52 | @include social-buttons-color($social-dribbble);
53 | }
54 |
55 | .btn-github {
56 | @include social-buttons-color($social-github);
57 | }
58 |
59 | .btn-youtube {
60 | @include social-buttons-color($social-youtube);
61 | }
62 |
63 | .btn-stumbleupon {
64 | @include social-buttons-color($social-stumbleupon);
65 | }
66 |
67 | .btn-reddit {
68 | @include social-buttons-color($social-reddit);
69 | }
70 |
71 | .btn-tumblr {
72 | @include social-buttons-color($social-tumblr);
73 | }
74 |
75 | .btn-behance{
76 | @include social-buttons-color($social-behance);
77 | }
78 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laravel/laravel",
3 | "description": "The Laravel Framework.",
4 | "keywords": [
5 | "framework",
6 | "laravel"
7 | ],
8 | "license": "MIT",
9 | "type": "project",
10 | "require": {
11 | "php": ">=7.0.0",
12 | "fideloper/proxy": "~4.2",
13 | "laracasts/flash": "~3.0",
14 | "laravel/framework": "~6.0",
15 | "laravel/tinker": "~1.0",
16 | "rdehnhardt/html": "~6.0"
17 | },
18 | "require-dev": {
19 | "filp/whoops": "~2.0",
20 | "fzaninotto/faker": "~1.4",
21 | "mockery/mockery": "0.9.*",
22 | "phpunit/phpunit": "~6.0"
23 | },
24 | "autoload": {
25 | "classmap": [
26 | "database/seeds",
27 | "database/factories"
28 | ],
29 | "psr-4": {
30 | "App\\": "app/"
31 | }
32 | },
33 | "autoload-dev": {
34 | "psr-4": {
35 | "Tests\\": "tests/"
36 | },
37 | "files": [
38 | "tests/helpers.php"
39 | ]
40 | },
41 | "extra": {
42 | "laravel": {
43 | "dont-discover": [
44 | ]
45 | }
46 | },
47 | "scripts": {
48 | "post-root-package-install": [
49 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
50 | ],
51 | "post-create-project-cmd": [
52 | "@php artisan key:generate",
53 | "@php artisan storage:link"
54 | ],
55 | "post-autoload-dump": [
56 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
57 | "@php artisan package:discover"
58 | ]
59 | },
60 | "config": {
61 | "preferred-install": "dist",
62 | "sort-packages": true,
63 | "optimize-autoloader": true
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/RegisterController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
27 | }
28 |
29 | /**
30 | * Get a validator for an incoming registration request.
31 | *
32 | * @param array $data
33 | * @return \Illuminate\Contracts\Validation\Validator
34 | */
35 | protected function validator(array $data)
36 | {
37 | return Validator::make($data, [
38 | 'name' => 'required|string|max:255',
39 | 'email' => 'required|string|email|max:255|unique:users',
40 | 'password' => 'required|string|min:6|confirmed',
41 | ]);
42 | }
43 |
44 | /**
45 | * Create a new user instance after a valid registration.
46 | *
47 | * @param array $data
48 | * @return \App\Models\User
49 | */
50 | protected function create(array $data)
51 | {
52 | return User::create([
53 | 'name' => $data['name'],
54 | 'email' => $data['email'],
55 | 'password' => bcrypt($data['password']),
56 | ]);
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_media.scss:
--------------------------------------------------------------------------------
1 | .media{
2 | border-bottom: 1px solid $medium-gray;
3 | padding-bottom: 30px;
4 | margin-top: 30px;
5 |
6 | .avatar{
7 | margin: 0 auto;
8 | width: 64px;
9 | height: 64px;
10 | overflow: hidden;
11 | border-radius: 50%;
12 | margin-right: 15px;
13 | border: 3px solid transparent;
14 |
15 | img{
16 | width: 100%;
17 | }
18 | }
19 | .media-heading{
20 | margin-bottom: 10px;
21 | margin-top: 5px;
22 | display: inline-block;
23 | }
24 | .btn-simple{
25 | padding: 0px 5px;
26 | }
27 | .media{
28 | margin-top: 30px;
29 | }
30 | .media:last-child{
31 | border: 0;
32 | }
33 | }
34 |
35 | .media-post{
36 | color: #555;
37 | border: 0;
38 | .media-heading{
39 | display: block;
40 | text-align: center;
41 | }
42 | .author{
43 | width: 15%;
44 | }
45 | .media-body{
46 | width: 85%;
47 | float: left;
48 | display: inline-block;
49 | }
50 | textarea{
51 | margin: $margin-bottom;
52 | font-size: $font-paragraph;
53 | }
54 | .avatar{
55 | border-color: white;
56 | }
57 | }
58 |
59 |
60 | .media-area{
61 | .media:last-child{
62 | border: 0;
63 | }
64 | .pagination-area{
65 | padding: 10px 0;
66 | text-align: center;
67 | }
68 | }
69 | .media-area-small{
70 | p{
71 | font-size: 14px;
72 | }
73 | .btn-simple{
74 | font-size: 14px;
75 | }
76 | .avatar{
77 | width: 58px;
78 | height: 58px;
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/resources/views/back/theme.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | @yield('title') - {{ config('app.name') }}
6 |
7 |
8 |
9 |
10 |
11 |
12 | @if (!Auth::guest())
13 |
14 | @endif
15 |
16 |
17 |
18 |
19 | @stack('styles')
20 |
21 |
22 | @if (Auth::guest())
23 |
28 | @else
29 |
35 | @endif
36 |
37 |
38 |
39 | @yield('body')
40 |
41 |
42 |
43 | @stack('scripts')
44 | @yield('page-scripts')
45 |
46 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_buttons.scss:
--------------------------------------------------------------------------------
1 | // Mixin for generating new styles
2 | @mixin btn-styles($btn-color, $btn-states-color) {
3 | border-color: $btn-color;
4 | color: $btn-color;
5 |
6 | &:hover,
7 | &:focus,
8 | &:active,
9 | &.active,
10 | &:active:focus,
11 | &:active:hover,
12 | &.active:focus,
13 | &.active:hover,
14 | .open > &.dropdown-toggle {
15 | background-color: $transparent-bg;
16 | color: $btn-states-color;
17 | border-color: $btn-states-color;
18 | }
19 |
20 | &.disabled,
21 | &:disabled,
22 | &[disabled],
23 | fieldset[disabled] & {
24 | &,
25 | &:hover,
26 | &:focus,
27 | &.focus,
28 | &:active,
29 | &.active {
30 | background-color: $transparent-bg;
31 | border-color: $btn-color;
32 | }
33 | }
34 |
35 |
36 | &.btn-fill {
37 | color: $white-color;
38 | background-color: $btn-color;
39 | @include opacity(1);
40 |
41 | &:hover,
42 | &:focus,
43 | &:active,
44 | &.active,
45 | .open > &.dropdown-toggle{
46 | background-color: $btn-states-color;
47 | color: $white-color;
48 | }
49 |
50 | .caret{
51 | border-top-color: $white-color;
52 | }
53 | }
54 |
55 | .caret{
56 | border-top-color: $btn-color;
57 | }
58 | }
59 |
60 |
61 | @mixin btn-size($padding-vertical, $padding-horizontal, $font-size, $border){
62 | font-size: $font-size;
63 | border-radius: $border;
64 | padding: $padding-vertical $padding-horizontal;
65 |
66 | &.btn-round{
67 | padding: $padding-vertical + 1 $padding-horizontal;
68 | }
69 |
70 | &.btn-simple{
71 | padding: $padding-vertical + 2 $padding-horizontal;
72 | }
73 |
74 | }
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ## Disable register
6 |
7 | This application has disabled registration page.
8 |
9 | ## Route system
10 |
11 | The routing folder for this application has been changed to the application Http folder.
12 |
13 | Directory: `app/Http/Routes`
14 |
15 | ## How to install
16 |
17 | First make storage folder writable.
18 |
19 | ```
20 | cp .env.example .env
21 | ```
22 |
23 | ```
24 | composer install
25 | ```
26 |
27 | ```
28 | php artisan key:generate
29 | ```
30 |
31 | ```
32 | php artisan migrate --seed
33 | ```
34 |
35 | ```
36 | php artisan storage:link
37 | ```
38 |
39 | # Front-end development
40 |
41 | ```
42 | npm install
43 | ```
44 |
45 | ```
46 | npm run watch
47 | ```
48 |
49 | ## Make production
50 |
51 | ```
52 | npm run production
53 | ```
54 |
55 | # Screenshots
56 |
57 | #### Front
58 |
59 |
60 |
61 |
62 | #### Login
63 |
64 |
65 |
66 |
67 | #### Dashboard
68 |
69 |
70 |
71 |
72 | #### User List
73 |
74 |
75 |
76 |
77 | #### User Edit
78 |
79 |
80 |
--------------------------------------------------------------------------------
/resources/views/auth/login.blade.php:
--------------------------------------------------------------------------------
1 | @extends('auth.layout')
2 |
3 | @section('title', trans('dictionary.login'))
4 |
5 | @section('content')
6 | {!! Form::open(['method' => 'post', 'route' => ['login']]) !!}
7 |
8 |
9 |
10 |
11 | {!! Form::openGroup('email', trans('dictionary.email')) !!}
12 | {!! Form::email('email', null) !!}
13 | {!! Form::closeGroup() !!}
14 |
15 | {!! Form::openGroup('password', trans('dictionary.password')) !!}
16 | {!! Form::password('password') !!}
17 | {!! Form::closeGroup() !!}
18 |
19 |
20 |
24 |
25 |
26 |
27 |
30 |
31 |
38 |
39 | {!! Form::close() !!}
40 | @endsection
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "dev": "npm run development",
5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
6 | "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
7 | "watch-poll": "npm run watch -- --watch-poll",
8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
9 | "prod": "npm run production",
10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
11 | },
12 | "devDependencies": {
13 | "animate.css": "^3.5.2",
14 | "axios": "^0.16.2",
15 | "bootstrap-notify": "^3.1.3",
16 | "bootstrap-sass": "^3.3.7",
17 | "bootstrap-select": "^1.12.4",
18 | "bootstrap-switch": "^3.3.4",
19 | "bootstrap-table": "^1.11.2",
20 | "chartist": "^0.11.0",
21 | "cross-env": "^5.0.1",
22 | "eonasdan-bootstrap-datetimepicker": "^4.17.47",
23 | "fullcalendar": "^3.5.0",
24 | "jquery": "^3.1.1",
25 | "jquery-ui": "^1.12.1",
26 | "jquery-validation": "^1.17.0",
27 | "jvectormap": "^2.0.4",
28 | "laravel-mix": "^1.0",
29 | "lodash": "^4.17.4",
30 | "moment": "^2.18.1",
31 | "perfect-scrollbar": "^0.8.0",
32 | "sweetalert2": "^6.6.10",
33 | "twitter-bootstrap-wizard": "^1.2.0",
34 | "vue": "^2.1.10"
35 | }
36 | }
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 |
--------------------------------------------------------------------------------
/resources/assets/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | window._ = require('lodash');
2 |
3 | /**
4 | * We'll load jQuery and the Bootstrap jQuery plugin which provides support
5 | * for JavaScript based Bootstrap features such as modals and tabs. This
6 | * code may be modified to fit the specific needs of your application.
7 | */
8 | try {
9 | window.$ = window.jQuery = require('jquery');
10 |
11 | require('bootstrap-sass');
12 | } catch (e) {
13 | }
14 |
15 | /**
16 | * We'll load the axios HTTP library which allows us to easily issue requests
17 | * to our Laravel back-end. This library automatically handles sending the
18 | * CSRF token as a header based on the value of the "XSRF" token cookie.
19 | */
20 |
21 | window.axios = require('axios');
22 |
23 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
24 |
25 | /**
26 | * Next we will register the CSRF Token as a common header with Axios so that
27 | * all outgoing HTTP requests automatically have it attached. This is just
28 | * a simple convenience so we don't have to attach every token manually.
29 | */
30 |
31 | let token = document.head.querySelector('meta[name="csrf-token"]');
32 |
33 | if (token) {
34 | window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
35 | } else {
36 | console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
37 | }
38 |
39 | /**
40 | * Echo exposes an expressive API for subscribing to channels and listening
41 | * for events that are broadcast by Laravel. Echo and event broadcasting
42 | * allows your team to easily build robust real-time web applications.
43 | */
44 |
45 | // import Echo from 'laravel-echo'
46 |
47 | // window.Pusher = require('pusher-js');
48 |
49 | // window.Echo = new Echo({
50 | // broadcaster: 'pusher',
51 | // key: 'your-pusher-key'
52 | // });
53 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_modal.scss:
--------------------------------------------------------------------------------
1 | .modal-header {
2 | border: 0 none;
3 | }
4 | .modal-content {
5 | border: 0 none;
6 | border-radius: 10px;
7 | box-shadow: 0 0 15px rgba(0, 0, 0, 0.15), 0 0 1px 1px rgba(0, 0, 0, 0.1);
8 | }
9 | .modal-dialog {
10 | padding-top: 60px;
11 | }
12 | .modal-footer {
13 | border-top: 0 none;
14 | padding: 10px 10px;
15 | }
16 | .modal-footer .modal-footer .btn-default.btn-simple{
17 | font-weight: 400;
18 | }
19 |
20 | .modal.fade .modal-dialog {
21 | transform: none;
22 | -webkit-transform: none;
23 | -moz-transform: none;
24 | }
25 | .modal.in .modal-dialog {
26 | transform: none;
27 | -webkit-transform: none;
28 | -moz-transform: none;
29 | }
30 | .modal-small{
31 | .modal-dialog{
32 | max-width: 350px;
33 | }
34 | }
35 | .modal-small{
36 | .divider{
37 | margin: 0 auto;
38 | display: block;
39 | width: 14px;
40 | position: relative;
41 | margin-top: 40px;
42 | margin-bottom: 30px;
43 | font-size: $font-paragraph;
44 | }
45 | .divider:after{
46 | position: absolute;
47 | content: "";
48 | right: -140px;
49 | top: 12px;
50 | height: 1px;
51 | width: 115px;
52 | background-color: $light-gray;
53 | }
54 | .divider:before{
55 | position: absolute;
56 | content: "";
57 | left: -140px;
58 | top: 12px;
59 | height: 1px;
60 | width: 115px;
61 | background-color: $light-gray;
62 | }
63 | .modal-footer{
64 | text-align: center;
65 | }
66 | }
67 | .social-area{
68 | text-align: center;
69 |
70 | .btn-social{
71 | margin: 0 10px;
72 | }
73 | }
74 | .modal-backdrop.in {
75 | opacity: 0.25;
76 | }
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/artisan:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | make(Illuminate\Contracts\Console\Kernel::class);
34 |
35 | $status = $kernel->handle(
36 | $input = new Symfony\Component\Console\Input\ArgvInput,
37 | new Symfony\Component\Console\Output\ConsoleOutput
38 | );
39 |
40 | /*
41 | |--------------------------------------------------------------------------
42 | | Shutdown The Application
43 | |--------------------------------------------------------------------------
44 | |
45 | | Once Artisan has finished running, we will fire off the shutdown events
46 | | so that any final work may be done by the application before we shut
47 | | down the process. This is the last thing to happen to the request.
48 | |
49 | */
50 |
51 | $kernel->terminate($input, $status);
52 |
53 | exit($status);
54 |
--------------------------------------------------------------------------------
/resources/views/guest/layout.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ config('app.name') }}
9 |
10 |
11 |
12 |
13 |
14 |
72 |
73 |
74 | @yield('content')
75 |
76 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_alerts.scss:
--------------------------------------------------------------------------------
1 | .alert{
2 | border: 0;
3 | border-radius: 0;
4 | color: #FFFFFF;
5 | padding: 10px 15px;
6 | font-size: 14px;
7 |
8 | .container &{
9 | border-radius: 4px;
10 |
11 | }
12 | .navbar &{
13 | border-radius: 0;
14 | left: 0;
15 | position: absolute;
16 | right: 0;
17 | top: 85px;
18 | width: 100%;
19 | z-index: 3;
20 | }
21 | .navbar:not(.navbar-transparent) &{
22 | top: 70px;
23 | }
24 |
25 | span[data-notify="icon"]{
26 | font-size: 30px;
27 | display: block;
28 | left: 15px;
29 | position: absolute;
30 | top: 50%;
31 | margin-top: -15px;
32 | }
33 |
34 | button.close{
35 | position: absolute;
36 | right: 10px;
37 | top: 50%;
38 | margin-top: -13px;
39 | z-index: 1033;
40 | background-color: #FFFFFF;
41 | display: block;
42 | border-radius: 50%;
43 | opacity: .4;
44 | line-height: 11px;
45 | width: 25px;
46 | height: 25px;
47 | outline: 0 !important;
48 | text-align: center;
49 | padding: 3px;
50 | font-weight: 300;
51 |
52 | &:hover{
53 | opacity: .55;
54 | }
55 | }
56 |
57 | .close ~ span{
58 | display: block;
59 | max-width: 89%;
60 | }
61 |
62 | &[data-notify="container"]{
63 | padding: 10px 10px 10px 20px;
64 | border-radius: $border-radius-base;
65 | }
66 |
67 | &.alert-with-icon{
68 | padding-left: 65px;
69 | }
70 | }
71 | .alert-info{
72 | background-color: $azure-navbar;
73 | }
74 | .alert-success {
75 | background-color: $green-navbar;
76 | }
77 | .alert-warning {
78 | background-color: $orange-navbar;
79 | }
80 | .alert-danger {
81 | background-color: $red-navbar;
82 | }
83 |
--------------------------------------------------------------------------------
/resources/views/back/layout/sidebar.blade.php:
--------------------------------------------------------------------------------
1 |
51 |
--------------------------------------------------------------------------------
/resources/views/auth/layout.blade.php:
--------------------------------------------------------------------------------
1 | @extends('back.theme')
2 |
3 | @section('body')
4 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | @if(session('status'))
21 |
{{ session('status') }}
22 | @endif
23 |
24 | @yield('content')
25 |
26 |
27 |
28 |
29 |
30 |
37 |
38 |
39 | @endsection
40 |
41 | @section('page-scripts')
42 |
52 | @endsection
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | define('LARAVEL_START', microtime(true));
11 |
12 | /*
13 | |--------------------------------------------------------------------------
14 | | Register The Auto Loader
15 | |--------------------------------------------------------------------------
16 | |
17 | | Composer provides a convenient, automatically generated class loader for
18 | | our application. We just need to utilize it! We'll simply require it
19 | | into the script here so that we don't have to worry about manual
20 | | loading any of our classes later on. It feels great to relax.
21 | |
22 | */
23 |
24 | require __DIR__.'/../vendor/autoload.php';
25 |
26 | /*
27 | |--------------------------------------------------------------------------
28 | | Turn On The Lights
29 | |--------------------------------------------------------------------------
30 | |
31 | | We need to illuminate PHP development, so let us turn on the lights.
32 | | This bootstraps the framework and gets it ready for use, then it
33 | | will load up this application so that we can run it and send
34 | | the responses back to the browser and delight our users.
35 | |
36 | */
37 |
38 | $app = require_once __DIR__.'/../bootstrap/app.php';
39 |
40 | /*
41 | |--------------------------------------------------------------------------
42 | | Run The Application
43 | |--------------------------------------------------------------------------
44 | |
45 | | Once we have the application, we can handle the incoming request
46 | | through the kernel, and send the associated response back to
47 | | the client's browser allowing them to enjoy the creative
48 | | and wonderful application we have prepared for them.
49 | |
50 | */
51 |
52 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
53 |
54 | $response = $kernel->handle(
55 | $request = Illuminate\Http\Request::capture()
56 | );
57 |
58 | $response->send();
59 |
60 | $kernel->terminate($request, $response);
61 |
--------------------------------------------------------------------------------
/config/auth.php:
--------------------------------------------------------------------------------
1 | true,
11 |
12 | /*
13 | |--------------------------------------------------------------------------
14 | | Authentication Defaults
15 | |--------------------------------------------------------------------------
16 | */
17 |
18 | 'defaults' => [
19 | 'guard' => 'web',
20 | 'passwords' => 'users',
21 | ],
22 |
23 | /*
24 | |--------------------------------------------------------------------------
25 | | Authentication Guards
26 | |--------------------------------------------------------------------------
27 | */
28 |
29 | 'guards' => [
30 | 'web' => [
31 | 'driver' => 'session',
32 | 'provider' => 'users',
33 | ],
34 |
35 | 'api' => [
36 | 'driver' => 'token',
37 | 'provider' => 'users',
38 | ],
39 | ],
40 |
41 | /*
42 | |--------------------------------------------------------------------------
43 | | User Providers
44 | |--------------------------------------------------------------------------
45 | */
46 |
47 | 'providers' => [
48 | 'users' => [
49 | 'driver' => 'eloquent',
50 | 'model' => App\Models\User::class,
51 | ],
52 |
53 | // 'users' => [
54 | // 'driver' => 'database',
55 | // 'table' => 'users',
56 | // ],
57 | ],
58 |
59 | /*
60 | |--------------------------------------------------------------------------
61 | | Resetting Passwords
62 | |--------------------------------------------------------------------------
63 | */
64 |
65 | 'passwords' => [
66 | 'users' => [
67 | 'provider' => 'users',
68 | 'table' => 'password_resets',
69 | 'expire' => 60,
70 | ],
71 | ],
72 | ];
73 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_misc.scss:
--------------------------------------------------------------------------------
1 | /* General overwrite */
2 | body,
3 | .wrapper{
4 | min-height: 100vh;
5 | position: relative;
6 | }
7 |
8 | a{
9 | color: $info-color;
10 |
11 | &:hover, &:focus{
12 | color: $info-states-color;
13 | text-decoration: none;
14 | }
15 | }
16 |
17 | a:focus, a:active,
18 | button::-moz-focus-inner,
19 | input::-moz-focus-inner,
20 | input[type="reset"]::-moz-focus-inner,
21 | input[type="button"]::-moz-focus-inner,
22 | input[type="submit"]::-moz-focus-inner,
23 | select::-moz-focus-inner,
24 | input[type="file"] > input[type="button"]::-moz-focus-inner{
25 | outline:0;
26 | }
27 | .ui-slider-handle:focus,
28 | .navbar-toggle,
29 | input:focus {
30 | outline : 0 !important;
31 | }
32 |
33 | /* Animations */
34 |
35 | .animation-transition-general{
36 | @include transition($general-transition-time, $transition-linear);
37 | }
38 |
39 | .animation-transition-fast{
40 | @include transition($fast-transition-time, $transition-linear);
41 | }
42 |
43 | .animation-transition-ultra-fast{
44 | @include transition($ultra-fast-transition-time, $transition-ease-in);
45 | }
46 |
47 | .form-control,
48 | .input-group-addon,
49 | .tagsinput,
50 | .navbar .alert,
51 | .panel-collapse.collapse-hover {
52 | @include transition($general-transition-time, $transition-linear);
53 | }
54 |
55 | .sidebar .nav a,
56 | .table > tbody > tr .td-actions .btn,
57 | .caret{
58 | @include transition($fast-transition-time, $transition-ease-in);
59 | }
60 |
61 | .btn{
62 | @include transition($ultra-fast-transition-time, $transition-ease-in);
63 | }
64 | .fa{
65 | width: 18px;
66 | text-align: center;
67 | }
68 | .margin-top{
69 | margin-top: 50px;
70 | }
71 |
72 | a[data-toggle="collapse"][aria-expanded="true"] .caret,
73 | .btn[data-toggle="collapse"][aria-expanded="true"] .caret,
74 | a.dropdown-toggle[aria-expanded="true"] .caret{
75 | @include rotate-180();
76 | }
77 |
78 | legend{
79 | font-size: $font-size-h4;
80 | font-weight: $font-weight-light;
81 | }
82 |
83 | .full-screen-map{
84 | position:relative;
85 | width:100%;
86 | height: calc(100% - 60px);
87 | }
88 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Back/ProfileController.php:
--------------------------------------------------------------------------------
1 | has('name')) {
38 | auth()->user()->name = $request->get('name');
39 | }
40 |
41 | if ($request->has('email')) {
42 | auth()->user()->email = $request->get('email');
43 | }
44 |
45 | if ($request->get('password')) {
46 | auth()->user()->password = bcrypt($request->get('password'));
47 | }
48 |
49 | if ($request->hasFile('picture')) {
50 | if ($filename = $this->upload($request->file('picture'))) {
51 | auth()->user()->picture = $filename;
52 | }
53 | }
54 |
55 | auth()->user()->save();
56 |
57 | flash(trans('messages.success'), 'success');
58 | } catch (\Exception $e) {
59 | flash(trans('messages.exception'), 'danger');
60 | }
61 |
62 | return redirect(route('back.profile'));
63 | }
64 |
65 | /**
66 | * @param UploadedFile $file
67 | * @return string|false
68 | * @throws \Symfony\Component\HttpFoundation\File\Exception\FileException
69 | */
70 | private function upload(UploadedFile $file)
71 | {
72 | $filename = md5(auth()->user()->id) . '.' . $file->getClientOriginalExtension();
73 | $file->move(storage_path($this->folder), $filename);
74 |
75 | return $filename;
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/app/Http/Kernel.php:
--------------------------------------------------------------------------------
1 | [
31 | \App\Http\Middleware\EncryptCookies::class,
32 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
33 | \Illuminate\Session\Middleware\StartSession::class,
34 | \Illuminate\Session\Middleware\AuthenticateSession::class,
35 | \Illuminate\View\Middleware\ShareErrorsFromSession::class,
36 | \App\Http\Middleware\VerifyCsrfToken::class,
37 | \Illuminate\Routing\Middleware\SubstituteBindings::class,
38 | \App\Http\Middleware\BackgroundCookie::class,
39 | ],
40 |
41 | 'api' => [
42 | 'throttle:60,1',
43 | 'bindings',
44 | ],
45 | ];
46 |
47 | /**
48 | * The application's route middleware.
49 | *
50 | * These middleware may be assigned to groups or used individually.
51 | *
52 | * @var array
53 | */
54 | protected $routeMiddleware = [
55 | 'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
56 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
57 | 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
58 | 'can' => \Illuminate\Auth\Middleware\Authorize::class,
59 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
60 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
61 | ];
62 | }
63 |
--------------------------------------------------------------------------------
/config/filesystems.php:
--------------------------------------------------------------------------------
1 | env('FILESYSTEM_DRIVER', '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' => env('FILESYSTEM_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 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_typography.scss:
--------------------------------------------------------------------------------
1 | /* Font Smoothing */
2 | body,
3 | h1, .h1,
4 | h2, .h2,
5 | h3, .h3,
6 | h4, .h4,
7 | h5, .h5,
8 | h6, .h6,
9 | p,
10 | .navbar,
11 | .brand,
12 | .btn-simple,
13 | .alert,
14 | a,
15 | .td-name,
16 | td,
17 | button.close{
18 | -moz-osx-font-smoothing: grayscale;
19 | -webkit-font-smoothing: antialiased;
20 | font-family: "Roboto","Helvetica Neue",Arial,sans-serif;
21 | font-weight: $font-weight-normal;
22 | }
23 |
24 | h1, .h1, h2, .h2, h3, .h3, h4, .h4{
25 | font-weight: $font-weight-light;
26 | margin: $margin-large-vertical 0 $margin-base-vertical;
27 | }
28 |
29 | h1, .h1 {
30 | font-size: $font-size-h1;
31 | }
32 | h2, .h2{
33 | font-size: $font-size-h2;
34 | }
35 | h3, .h3{
36 | font-size: $font-size-h3;
37 | margin: 20px 0 10px;
38 | }
39 | h4, .h4{
40 | font-size: $font-size-h4;
41 | line-height: 30px;
42 | }
43 | h5, .h5 {
44 | font-size: $font-size-h5;
45 | margin-bottom: 15px;
46 | }
47 | h6, .h6{
48 | font-size: $font-size-h6;
49 | font-weight: $font-weight-bold;
50 | text-transform: uppercase;
51 | }
52 | p{
53 | font-size: $font-paragraph;
54 | line-height: $line-height-general;
55 | }
56 |
57 | h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small {
58 | color: $dark-gray;
59 | font-weight: $font-weight-light;
60 | line-height: $line-height-general;
61 | }
62 |
63 | h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small {
64 | font-size: 60%;
65 | }
66 |
67 | h1 .subtitle{
68 | display: block;
69 | margin: 0 0 $margin-large-vertical;
70 | }
71 |
72 | .text-muted{
73 | color: #9A9A9A;
74 | }
75 | .text-primary, .text-primary:hover{
76 | color: #1D62F0 !important;
77 | }
78 | .text-info, .text-info:hover{
79 | color: $info-color !important;
80 | }
81 | .text-success, .text-success:hover{
82 | color: $success-color !important;
83 | }
84 | .text-warning, .text-warning:hover{
85 | color: $warning-color !important;
86 | }
87 | .text-danger, .text-danger:hover{
88 | color: $danger-color !important;
89 | }
90 |
91 | .text-space{
92 | padding: 70px 0;
93 | }
94 |
--------------------------------------------------------------------------------
/resources/views/back/users/create.blade.php:
--------------------------------------------------------------------------------
1 | @extends('back.layout')
2 |
3 | @section('title', trans('dictionary.users'))
4 |
5 | @push('page-actions')
6 | @lang('dictionary.back')
7 | @endpush
8 |
9 | @section('content')
10 |
11 |
12 |
13 |
16 |
17 |
18 | {!! Form::open(['method' => 'post', 'route' => ['back.users.store']]) !!}
19 |
20 |
21 | {!! Form::openGroup('name', trans('dictionary.name')) !!}
22 | {!! Form::text('name') !!}
23 | {!! Form::closeGroup() !!}
24 |
25 |
26 |
27 | {!! Form::openGroup('email', trans('dictionary.email')) !!}
28 | {!! Form::text('email') !!}
29 | {!! Form::closeGroup() !!}
30 |
31 |
32 |
33 |
34 |
35 | {!! Form::openGroup('password', trans('dictionary.password')) !!}
36 | {!! Form::password('password') !!}
37 | {!! Form::closeGroup() !!}
38 |
39 |
40 |
41 | {!! Form::openGroup('password_confirmation', trans('auth.password-confirmation')) !!}
42 | {!! Form::password('password_confirmation') !!}
43 | {!! Form::closeGroup() !!}
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | {!! Form::close() !!}
52 |
53 |
54 |
55 |
56 | @endsection
--------------------------------------------------------------------------------
/resources/views/back/users/edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('back.layout')
2 |
3 | @section('title', trans('dictionary.users'))
4 |
5 | @push('page-actions')
6 | @lang('dictionary.back')
7 | @endpush
8 |
9 | @section('content')
10 |
11 |
12 |
13 |
16 |
17 |
18 | {!! Form::open(['method' => 'put', 'route' => ['back.users.update', $user->id], 'files' => true]) !!}
19 |
20 |
21 | {!! Form::openGroup('name', trans('dictionary.name')) !!}
22 | {!! Form::text('name', $user->name) !!}
23 | {!! Form::closeGroup() !!}
24 |
25 |
26 |
27 | {!! Form::openGroup('email', trans('dictionary.email')) !!}
28 | {!! Form::text('email', $user->email) !!}
29 | {!! Form::closeGroup() !!}
30 |
31 |
32 |
33 |
34 |
35 | {!! Form::openGroup('password', trans('dictionary.password')) !!}
36 | {!! Form::password('password') !!}
37 | {!! Form::closeGroup() !!}
38 |
39 |
40 |
41 | {!! Form::openGroup('password_confirmation', trans('auth.password-confirmation')) !!}
42 | {!! Form::password('password_confirmation') !!}
43 | {!! Form::closeGroup() !!}
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | {!! Form::close() !!}
52 |
53 |
54 |
55 |
56 | @endsection
--------------------------------------------------------------------------------
/resources/views/back/contacts/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('back.layout')
2 |
3 | @section('title', trans('dictionary.contacts'))
4 |
5 | @push('page-actions')
6 | @lang('messages.add-new')
7 | @endpush
8 |
9 | @section('content')
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | | # |
18 | @lang('dictionary.name') |
19 | |
20 |
21 |
22 |
23 | @forelse($contacts as $contact)
24 |
25 | | {{ $contact->id }} |
26 | {{ $contact->name }} |
27 |
28 | {!! Form::open(['method' => 'get', 'route' => ['back.contacts.edit', $contact->id]]) !!}
29 |
32 | {!! Form::close() !!}
33 |
34 | {!! Form::open(['method' => 'delete', 'route' => ['back.contacts.destroy', $contact->id], 'data-confirm' => trans('messages.confirm'), 'data-title' => trans('messages.confirm-title'), 'data-type' => 'warning']) !!}
35 |
38 | {!! Form::close() !!}
39 | |
40 |
41 | @empty
42 |
43 | | @lang('messages.no-records') |
44 |
45 | @endforelse
46 |
47 |
48 |
49 | {{ $contacts->links() }}
50 |
51 |
52 |
53 |
54 | @endsection
--------------------------------------------------------------------------------
/resources/views/back/users/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('back.layout')
2 |
3 | @section('title', trans('dictionary.users'))
4 |
5 | @push('page-actions')
6 | @lang('messages.add-new')
7 | @endpush
8 |
9 | @section('content')
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | | # |
18 | @lang('dictionary.name') |
19 | @lang('dictionary.email') |
20 | |
21 |
22 |
23 |
24 | @forelse($users as $user)
25 |
26 | | {{ $user->id }} |
27 | {{ $user->name }} |
28 | {{ $user->email }} |
29 |
30 | {!! Form::open(['method' => 'get', 'route' => ['back.users.edit', $user->id]]) !!}
31 |
34 | {!! Form::close() !!}
35 |
36 | {!! Form::open(['method' => 'delete', 'route' => ['back.users.destroy', $user->id], 'data-confirm' => trans('messages.confirm'), 'data-title' => trans('messages.confirm-title'), 'data-type' => 'warning']) !!}
37 |
40 | {!! Form::close() !!}
41 | |
42 |
43 | @empty
44 |
45 | | @lang('messages.no-records') |
46 |
47 | @endforelse
48 |
49 |
50 |
51 | {{ $users->links() }}
52 |
53 |
54 |
55 |
56 | @endsection
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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/assets/sass/theme/lbd/_tables.scss:
--------------------------------------------------------------------------------
1 | .table {
2 | .radio, .checkbox {
3 | position: relative;
4 | height: 20px;
5 | display: block;
6 | width: 20px;
7 | padding: 0px 0px;
8 | margin: 0px 5px;
9 | text-align: center;
10 |
11 | .icons {
12 | left: 5px;
13 | }
14 | }
15 |
16 | > thead > tr > th,
17 | > tbody > tr > th,
18 | > tfoot > tr > th,
19 | > thead > tr > td,
20 | > tbody > tr > td,
21 | > tfoot > tr > td {
22 | padding: 12px 8px;
23 | vertical-align: middle;
24 | border-color: $light-gray;
25 | }
26 |
27 | > thead > tr > th {
28 | border-bottom-width: 1px;
29 | font-size: $font-size-small;
30 | text-transform: uppercase;
31 | color: $dark-gray;
32 | font-weight: $font-weight-normal;
33 | padding-bottom: 5px;
34 | }
35 |
36 | .td-actions .btn {
37 | @include opacity(0.36);
38 |
39 | &.btn-xs {
40 | padding-left: 3px;
41 | padding-right: 3px;
42 | }
43 | }
44 |
45 | .td-actions {
46 | min-width: 90px;
47 |
48 | form {
49 | float: left;
50 | margin: 0 5px;
51 | }
52 | }
53 |
54 | > tbody > tr {
55 | position: relative;
56 |
57 | &:hover {
58 | .td-actions .btn {
59 | @include opacity(1);
60 | }
61 | }
62 | }
63 | }
64 |
65 | .table-bigboy {
66 | > thead > tr > th {
67 | font-size: $font-size-h6;
68 | text-transform: uppercase;
69 | color: $dark-gray;
70 | font-weight: $font-weight-normal;
71 | }
72 | > tbody > tr > td {
73 | font-size: $font-size-base;
74 |
75 | b {
76 | display: block;
77 | margin-bottom: 5px;
78 | }
79 | }
80 | .td-name,
81 | {
82 | font-weight: $font-weight-light;
83 | font-size: $font-size-h5;
84 | }
85 | .td-name {
86 | min-width: 240px;
87 | }
88 | .td-number {
89 | text-align: right;
90 | min-width: 110px;
91 |
92 | small {
93 | margin-right: 3px;
94 | }
95 | }
96 |
97 | .td-actions {
98 | width: 60px;
99 | min-width: auto;
100 |
101 | .btn {
102 | float: right;
103 | }
104 | }
105 | .img-container {
106 | width: 180px;
107 | height: 120px;
108 | overflow: hidden;
109 | display: block;
110 |
111 | border-radius: $border-radius-large;
112 |
113 | img {
114 | width: 100%;
115 | }
116 | }
117 | }
118 |
119 | @include table-row-variant('success', $light-green);
120 | @include table-row-variant('info', $light-azure);
121 | @include table-row-variant('warning', $light-orange);
122 | @include table-row-variant('danger', $light-red);
123 |
124 |
125 |
126 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Back/ContactsController.php:
--------------------------------------------------------------------------------
1 | name = $request->get('name');
45 | $contact->save();
46 |
47 | flash(trans('messages.success'), 'success');
48 | } catch (\Exception $e) {
49 | flash(trans('messages.exception'), 'danger');
50 | }
51 |
52 | return redirect(route('back.contacts.index'));
53 | }
54 |
55 | /**
56 | * Show the contacts edit page.
57 | *
58 | * @param Contact $contact
59 | * @return \Illuminate\Http\Response
60 | */
61 | public function edit(Contact $contact)
62 | {
63 | return view('back.contacts.edit', compact('contact'));
64 | }
65 |
66 | /**
67 | * Show the contacts edit page.
68 | *
69 | * @param Contact $contact
70 | * @param ContactRequest $request
71 | * @return \Illuminate\Http\Response
72 | */
73 | public function update(Contact $contact, ContactRequest $request)
74 | {
75 | try {
76 | $contact->name = $request->get('name');
77 | $contact->save();
78 |
79 | flash(trans('messages.success'), 'success');
80 | } catch (\Exception $e) {
81 | flash(trans('messages.exception'), 'danger');
82 | }
83 |
84 | return redirect(route('back.contacts.index'));
85 | }
86 |
87 | /**
88 | * Show the contacts edit page.
89 | *
90 | * @param Contact $contact
91 | * @return \Illuminate\Http\Response
92 | */
93 | public function destroy(Contact $contact)
94 | {
95 | try {
96 | $contact->delete();
97 |
98 | flash(trans('messages.success'), 'success');
99 | } catch (\Exception $e) {
100 | flash(trans('messages.exception'), 'danger');
101 | }
102 |
103 | return redirect(route('back.contacts.index'));
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/RegisterTest.php:
--------------------------------------------------------------------------------
1 | 'secret', 'password_confirmation' => 'secret']);
18 |
19 | $this
20 | ->post(route('register'), $user)
21 | ->assertRedirect('/back');
22 |
23 | $this
24 | ->post(route('login'), $user)
25 | ->assertRedirect('/back');
26 |
27 | $this->assertDatabaseHas('users', ['email' => $user['email']]);
28 | } else {
29 | $this->assertTrue(true);
30 | }
31 | }
32 |
33 | /** @test */
34 | public function an_user_can_not_register_without_email()
35 | {
36 | if (config('auth.register')) {
37 | $user = raw(User::class, ['email' => null, 'password' => 'secret', 'password_confirmation' => 'secret']);
38 |
39 | $this
40 | ->post(route('register'), $user)
41 | ->assertSessionHasErrors(['email']);
42 |
43 | $this->assertDatabaseMissing('users', ['name' => $user['name']]);
44 | } else {
45 | $this->assertTrue(true);
46 | }
47 | }
48 |
49 | /** @test */
50 | public function an_user_can_not_register_without_password()
51 | {
52 | if (config('auth.register')) {
53 | $user = raw(User::class, ['password_confirmation' => 'secret']);
54 |
55 | $this
56 | ->post(route('register'), $user)
57 | ->assertSessionHasErrors(['password']);
58 |
59 | $this->assertDatabaseMissing('users', ['email' => $user['email']]);
60 | } else {
61 | $this->assertTrue(true);
62 | }
63 | }
64 |
65 | /** @test */
66 | public function an_user_can_not_register_without_password_confirmation()
67 | {
68 | if (config('auth.register')) {
69 | $user = raw(User::class, ['password' => 'secret']);
70 |
71 | $this
72 | ->post(route('register'), $user)
73 | ->assertSessionHasErrors(['password']);
74 |
75 | $this->assertDatabaseMissing('users', ['email' => $user['email']]);
76 | } else {
77 | $this->assertTrue(true);
78 | }
79 | }
80 |
81 | /** @test */
82 | public function an_user_can_not_register_with_different_passwords()
83 | {
84 | if (config('auth.register')) {
85 | $user = raw(User::class, ['password' => 'terces', 'password_confirmation' => 'secret']);
86 |
87 | $this
88 | ->post(route('register'), $user)
89 | ->assertSessionHasErrors(['password']);
90 |
91 | $this->assertDatabaseMissing('users', ['email' => $user['email']]);
92 | } else {
93 | $this->assertTrue(true);
94 | }
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Back/UsersController.php:
--------------------------------------------------------------------------------
1 | name = $request->get('name');
45 | $user->email = $request->get('email');
46 | $user->password = bcrypt($request->get('password'));
47 | $user->save();
48 |
49 | flash(trans('messages.success'), 'success');
50 | } catch (\Exception $e) {
51 | flash(trans('messages.exception'), 'danger');
52 | }
53 |
54 | return redirect(route('back.users.index'));
55 | }
56 |
57 | /**
58 | * Show the users edit page.
59 | *
60 | * @param User $user
61 | * @return \Illuminate\Http\Response
62 | */
63 | public function edit(User $user)
64 | {
65 | return view('back.users.edit', compact('user'));
66 | }
67 |
68 | /**
69 | * Show the users edit page.
70 | *
71 | * @param User $user
72 | * @param UserRequest $request
73 | * @return \Illuminate\Http\Response
74 | */
75 | public function update(User $user, UserRequest $request)
76 | {
77 | try {
78 | $user->name = $request->get('name');
79 | $user->email = $request->get('email');
80 |
81 | if ($request->has('password')) {
82 | $user->password = bcrypt($request->get('password'));
83 | }
84 |
85 | $user->save();
86 |
87 | flash(trans('messages.success'), 'success');
88 | } catch (\Exception $e) {
89 | flash(trans('messages.exception'), 'danger');
90 | }
91 |
92 | return redirect(route('back.users.index'));
93 | }
94 |
95 | /**
96 | * Show the users edit page.
97 | *
98 | * @param User $user
99 | * @return \Illuminate\Http\Response
100 | */
101 | public function destroy(User $user)
102 | {
103 | try {
104 | $user->delete();
105 |
106 | flash(trans('messages.success'), 'success');
107 | } catch (\Exception $e) {
108 | flash(trans('messages.exception'), 'danger');
109 | }
110 |
111 | return redirect(route('back.users.index'));
112 | }
113 | }
114 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/mixins/_chartist.scss:
--------------------------------------------------------------------------------
1 | // Scales for responsive SVG containers
2 | $ct-scales: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default;
3 | $ct-scales-names: (ct-square, ct-minor-second, ct-major-second, ct-minor-third, ct-major-third, ct-perfect-fifth, ct-minor-sixth, ct-golden-section, ct-major-sixth, ct-minor-seventh, ct-major-seventh, ct-octave, ct-major-tenth, ct-major-eleventh, ct-major-twelfth, ct-double-octave) !default;
4 |
5 | // Class names to be used when generating CSS
6 | $ct-class-chart: ct-chart !default;
7 | $ct-class-chart-line: ct-chart-line !default;
8 | $ct-class-chart-bar: ct-chart-bar !default;
9 | $ct-class-horizontal-bars: ct-horizontal-bars !default;
10 | $ct-class-chart-pie: ct-chart-pie !default;
11 | $ct-class-chart-donut: ct-chart-donut !default;
12 | $ct-class-label: ct-label !default;
13 | $ct-class-series: ct-series !default;
14 | $ct-class-line: ct-line !default;
15 | $ct-class-point: ct-point !default;
16 | $ct-class-area: ct-area !default;
17 | $ct-class-bar: ct-bar !default;
18 | $ct-class-slice-pie: ct-slice-pie !default;
19 | $ct-class-slice-donut: ct-slice-donut !default;
20 | $ct-class-grid: ct-grid !default;
21 | $ct-class-vertical: ct-vertical !default;
22 | $ct-class-horizontal: ct-horizontal !default;
23 | $ct-class-start: ct-start !default;
24 | $ct-class-end: ct-end !default;
25 |
26 | // Container ratio
27 | $ct-container-ratio: (1/1.618) !default;
28 |
29 | // Text styles for labels
30 | $ct-text-color: rgba(0, 0, 0, 0.4) !default;
31 | $ct-text-size: 1.3rem !default;
32 | $ct-text-align: flex-start !default;
33 | $ct-text-justify: flex-start !default;
34 | $ct-text-line-height: 1;
35 |
36 | // Grid styles
37 | $ct-grid-color: rgba(0, 0, 0, 0.2) !default;
38 | $ct-grid-dasharray: 2px !default;
39 | $ct-grid-width: 1px !default;
40 |
41 | // Line chart properties
42 | $ct-line-width: 3px !default;
43 | $ct-line-dasharray: false !default;
44 | $ct-point-size: 8px !default;
45 | // Line chart point, can be either round or square
46 | $ct-point-shape: round !default;
47 | // Area fill transparency between 0 and 1
48 | $ct-area-opacity: 0.8 !default;
49 |
50 | // Bar chart bar width
51 | $ct-bar-width: 10px !default;
52 |
53 | // Donut width (If donut width is to big it can cause issues where the shape gets distorted)
54 | $ct-donut-width: 60px !default;
55 |
56 | // If set to true it will include the default classes and generate CSS output. If you're planning to use the mixins you
57 | // should set this property to false
58 | $ct-include-classes: true !default;
59 |
60 | // If this is set to true the CSS will contain colored series. You can extend or change the color with the
61 | // properties below
62 | $ct-include-colored-series: $ct-include-classes !default;
63 |
64 | // If set to true this will include all responsive container variations using the scales defined at the top of the script
65 | $ct-include-alternative-responsive-containers: $ct-include-classes !default;
66 |
67 | // Series names and colors. This can be extended or customized as desired. Just add more series and colors.
68 | $ct-series-names: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) !default;
69 | $ct-series-colors: (
70 | $color-azure,
71 | $color-red,
72 | $color-orange,
73 | $color-purple,
74 | $color-green,
75 | $color-blue,
76 | $color-black,
77 | $social-google,
78 | $social-tumblr,
79 | $social-youtube,
80 | $social-twitter,
81 | $social-pinterest,
82 | $social-behance,
83 | #6188e2,
84 | #a748ca
85 | ) !default;
86 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_tags.scss:
--------------------------------------------------------------------------------
1 |
2 | .tagsinput {
3 | height: $height-base;
4 | overflow-y: auto;
5 | text-align: left;
6 | .tag {
7 | @extend .animation-transition-ultra-fast;
8 |
9 | cursor: pointer;
10 | overflow: hidden;
11 | position: relative;
12 | margin: 5px 3px 5px 0;
13 | @include label-style();
14 | }
15 |
16 | .tag:hover{
17 | padding-left: 10px;
18 | padding-right: 14px;
19 | }
20 |
21 | .tagsinput-add {
22 | color: $black-color;
23 | cursor: pointer;
24 | display: inline-block;
25 | font-size: 14px;
26 | padding: 5px 6px;
27 | margin: 5px 0 0;
28 | vertical-align: top;
29 | @include opacity(0.8);
30 |
31 | &:hover,
32 | &:focus{
33 | @include opacity(1);
34 | }
35 | }
36 | .tagsinput-add:before {
37 | content: "\f067";
38 | font-family: "FontAwesome";
39 | }
40 |
41 | .tagsinput-remove-link {
42 | @extend .animation-transition-ultra-fast;
43 |
44 | color: $default-color;
45 | cursor: pointer;
46 | font-size: 12px;
47 | padding: 2px 0;
48 | position: absolute;
49 | right: 0;
50 | opacity: 0;
51 | text-align: right;
52 | text-decoration: none;
53 | top: 0;
54 | width: 100%;
55 | z-index: 2;
56 | }
57 | .tag:hover .tagsinput-remove-link {
58 | opacity: 1;
59 | padding-right: 6px;
60 | }
61 | .tagsinput-remove-link:before {
62 | content: "\f00d";
63 | font-family: "FontAwesome";
64 | }
65 | .tagsinput-add-container {
66 | display: inline-block;
67 | vertical-align: middle;
68 | }
69 | input{
70 | background: transparent;
71 | border: none;
72 | color: $black-color;
73 | margin: 0;
74 | outline: medium none !important;
75 | padding: 0 0 0 5px;
76 | vertical-align: top;
77 | width: 30px;
78 | height: 40px;
79 | }
80 |
81 | &.tag-blue .tag,
82 | &.tag-blue .tagsinput-remove-link{
83 | @include label-color($primary-color);
84 | }
85 | &.tag-azure .tag,
86 | &.tag-azure .tagsinput-remove-link{
87 | @include label-color($info-color);
88 | }
89 | &.tag-green .tag,
90 | &.tag-green .tagsinput-remove-link{
91 | @include label-color($success-color);
92 | }
93 | &.tag-orange .tag,
94 | &.tag-orange .tagsinput-remove-link{
95 | @include label-color($warning-color);
96 | }
97 | &.tag-red .tag,
98 | &.tag-red .tagsinput-remove-link{
99 | @include label-color($danger-color);
100 | }
101 |
102 | &.tag-fill{
103 | &.tag-blue .tag{
104 | @include label-color-fill($primary-color);
105 | }
106 | &.tag-azure .tag{
107 | @include label-color-fill($info-color);
108 | }
109 | &.tag-green .tag{
110 | @include label-color-fill($success-color);
111 | }
112 | &.tag-orange .tag{
113 | @include label-color-fill($warning-color);
114 | }
115 | &.tag-red .tag{
116 | @include label-color-fill($danger-color);
117 | }
118 | }
119 | &.tag-fill .tagsinput-remove-link{
120 | color: $white-color;
121 | }
122 |
123 | }
124 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_buttons.scss:
--------------------------------------------------------------------------------
1 | .btn {
2 | border-width: $border-thin;
3 | background-color: $transparent-bg;
4 | font-weight: $font-weight-normal;
5 |
6 | @include opacity(.8);
7 | padding: $padding-base-vertical $padding-base-horizontal;
8 |
9 | @include btn-styles($default-color, $default-states-color);
10 |
11 | &:hover,
12 | &:focus {
13 | @include opacity(1);
14 | outline: 0 !important;
15 | }
16 | &:active,
17 | &.active,
18 | .open > &.dropdown-toggle {
19 | @include box-shadow(none);
20 | outline: 0 !important;
21 | }
22 |
23 | &.btn-icon {
24 | padding: $padding-base-vertical;
25 | }
26 |
27 | .btn-label {
28 | .fa {
29 | width: 13px;
30 | }
31 | }
32 |
33 | .fa {
34 | width: 20px;
35 | }
36 | }
37 |
38 | // Apply the mixin to the buttons
39 | //.btn-default { @include btn-styles($default-color, $default-states-color); }
40 | .btn-primary {
41 | @include btn-styles($primary-color, $primary-states-color);
42 | }
43 |
44 | .btn-success {
45 | @include btn-styles($success-color, $success-states-color);
46 | }
47 |
48 | .btn-info {
49 | @include btn-styles($info-color, $info-states-color);
50 | }
51 |
52 | .btn-warning {
53 | @include btn-styles($warning-color, $warning-states-color);
54 | }
55 |
56 | .btn-danger {
57 | @include btn-styles($danger-color, $danger-states-color);
58 | }
59 |
60 | .btn-neutral {
61 | @include btn-styles($white-color, $white-color);
62 |
63 | &:active,
64 | &.active,
65 | .open > &.dropdown-toggle {
66 | background-color: $white-color;
67 | color: $default-color;
68 | }
69 |
70 | &.btn-fill,
71 | &.btn-fill:hover,
72 | &.btn-fill:focus {
73 | color: $default-color;
74 | }
75 |
76 | &.btn-fill:hover,
77 | &.btn-fill:focus {
78 | @include opacity(.86);
79 | }
80 |
81 | &.btn-simple:active,
82 | &.btn-simple.active {
83 | background-color: transparent;
84 | }
85 | }
86 |
87 | .btn {
88 | &:disabled,
89 | &[disabled],
90 | &.disabled {
91 | @include opacity(.5);
92 | }
93 | }
94 |
95 | .btn-round {
96 | border-width: $border-thin;
97 | border-radius: $btn-round-radius !important;
98 | padding: $padding-round-vertical $padding-round-horizontal;
99 |
100 | &.btn-icon {
101 | padding: $padding-round-vertical;
102 | }
103 | }
104 |
105 | .btn-simple {
106 | border: $none;
107 | font-size: $font-size-medium;
108 | padding: $padding-base-vertical $padding-base-horizontal;
109 |
110 | &.btn-icon {
111 | padding: $padding-base-vertical;
112 | }
113 | }
114 |
115 | .btn-lg {
116 | @include btn-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large);
117 | font-weight: $font-weight-normal;
118 | }
119 |
120 | .btn-sm {
121 | @include btn-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small);
122 | }
123 |
124 | .btn-xs {
125 | @include btn-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $border-radius-small);
126 | }
127 |
128 | .btn-wd {
129 | min-width: 140px;
130 | }
131 |
132 | .btn-group.select {
133 | width: 100%;
134 | }
135 |
136 | .btn-group.select .btn {
137 | text-align: left;
138 | }
139 |
140 | .btn-group.select .caret {
141 | position: absolute;
142 | top: 50%;
143 | margin-top: -1px;
144 | right: 8px;
145 | }
146 |
--------------------------------------------------------------------------------
/resources/assets/sass/theme/lbd/_footers.scss:
--------------------------------------------------------------------------------
1 | .footer{
2 | background-color: $white-color;
3 | line-height: $line-height;
4 |
5 | nav > ul{
6 | list-style: none;
7 | margin: 0;
8 | padding: 0;
9 | font-weight: normal;
10 |
11 | a:not(.btn){
12 | color: $dark-gray;
13 | display: block;
14 | margin-bottom: 3px;
15 | &:hover,
16 | &:focus{
17 | color: $default-states-color;
18 | }
19 | }
20 | }
21 | .social-area{
22 | padding: 15px 0;
23 | h5{
24 | padding-bottom: 15px;
25 | }
26 | }
27 | .social-area > a:not(.btn){
28 | color: $dark-gray;
29 | display: inline-block;
30 | vertical-align: top;
31 | padding: $padding-social-a;
32 | font-size: $font-size-large-navbar;
33 | font-weight: normal;
34 | line-height: $line-height;
35 | text-align: center;
36 | &:hover,
37 | &:focus{
38 | color: $default-states-color;
39 | }
40 | }
41 | .copyright{
42 | color: $default-states-color;
43 | padding: 10px 15px;
44 | margin: 10px 3px;
45 | line-height: 31px;
46 | font-size: $font-size-base;
47 | }
48 | hr{
49 | border-color: $medium-gray;
50 | }
51 | .title{
52 | color: $default-states-color;
53 | }
54 | }
55 |
56 | .footer-default{
57 | background-color: $smoke-bg;
58 | }
59 |
60 | .footer:not(.footer-big){
61 | nav > ul{
62 | font-size: 16px;
63 | li{
64 | margin-left: 20px;
65 | float: left;
66 | }
67 | a{
68 | padding: 10px 0px;
69 | margin: 15px 10px 15px 0px;
70 | }
71 | }
72 | }
73 |
74 | .footer-black,
75 | .footer-transparent{
76 | background-color: $black-bg;
77 | color: $medium-gray;
78 |
79 | nav > ul{
80 | a{
81 | color: $white-color;
82 | &:hover,
83 | &:focus{
84 | color: $dark-gray;
85 | }
86 | }
87 | }
88 | .social-area > a:not(.btn){
89 | color: $white-color;
90 | &:hover,
91 | &:focus{
92 | color: $dark-gray;
93 | }
94 | }
95 | .btn-social{
96 | color: $white-color;
97 | }
98 | hr{
99 | border-color: $black-hr;
100 | }
101 | .title{
102 | color: $medium-gray;
103 | }
104 | }
105 |
106 | .footer-transparent{
107 | background-attachment: fixed;
108 | background-size: cover;
109 | position: relative;
110 | background-color: transparent;
111 |
112 | .container{
113 | z-index: 2;
114 | position: relative;
115 | }
116 |
117 |
118 | }
119 |
120 | .footer-big{
121 | padding-top: 30px;
122 |
123 | hr{
124 | margin-bottom: 0;
125 | margin-top: 50px;
126 | }
127 | .copyright{
128 | margin: 10px 0px 20px;
129 | }
130 | .social-area > *{
131 | margin: 0 15px;
132 | }
133 |
134 | nav > ul{
135 | list-style: none;
136 | margin: 0;
137 | padding: 0;
138 | font-weight: normal;
139 | li{
140 | float: none;
141 | }
142 | .btn{
143 | margin-bottom: 5px;
144 | }
145 | .btn-social.btn-simple{
146 | padding: 0 0 4px 0;
147 | }
148 | }
149 | .form-group{
150 | margin-top: 15px;
151 | }
152 | .numbers h4{
153 | margin: $margin-bottom;
154 | }
155 | }
156 |
--------------------------------------------------------------------------------
/resources/views/back/profile.blade.php:
--------------------------------------------------------------------------------
1 | @extends('back.layout')
2 |
3 | @section('title', trans('back.profile'))
4 |
5 | @section('content')
6 |
7 |
8 |
9 |
10 | {!! Form::open(['method' => 'post', 'route' => ['back.profile'], 'files' => true]) !!}
11 |
12 |
13 | {!! Form::openGroup('name', trans('dictionary.name')) !!}
14 | {!! Form::text('name', auth()->user()->name) !!}
15 | {!! Form::closeGroup() !!}
16 |
17 |
18 |
19 | {!! Form::openGroup('email', trans('dictionary.email')) !!}
20 | {!! Form::email('email', auth()->user()->email) !!}
21 | {!! Form::closeGroup() !!}
22 |
23 |
24 |
25 |
26 |
27 | {!! Form::openGroup('picture', trans('dictionary.picture')) !!}
28 | {!! Form::file('picture') !!}
29 | {!! Form::closeGroup() !!}
30 |
31 |
32 |
33 |
@lang('auth.change-password')
34 |
35 |
36 |
37 |
38 | {!! Form::openGroup('password', trans('dictionary.password')) !!}
39 | {!! Form::password('password') !!}
40 | {!! Form::closeGroup() !!}
41 |
42 |
43 |
44 | {!! Form::openGroup('password_confirmation', trans('auth.password-confirmation')) !!}
45 | {!! Form::password('password_confirmation') !!}
46 | {!! Form::closeGroup() !!}
47 |
48 |
49 |
50 |
51 |
52 | {!! Form::close() !!}
53 |
54 |
55 |
56 |
57 |
58 |
59 |

60 |
61 |
72 |
73 |
74 |
75 | @endsection
76 |
--------------------------------------------------------------------------------
/config/database.php:
--------------------------------------------------------------------------------
1 | env('DB_CONNECTION', 'mysql'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Database Connections
21 | |--------------------------------------------------------------------------
22 | |
23 | | Here are each of the database connections setup for your application.
24 | | Of course, examples of configuring each database platform that is
25 | | supported by Laravel is shown below to make development simple.
26 | |
27 | |
28 | | All database work in Laravel is done through the PHP PDO facilities
29 | | so make sure you have the driver for your particular database of
30 | | choice installed on your machine before you begin development.
31 | |
32 | */
33 |
34 | 'connections' => [
35 |
36 | 'sqlite' => [
37 | 'driver' => 'sqlite',
38 | 'database' => env('DB_DATABASE', database_path('database.sqlite')),
39 | 'prefix' => '',
40 | ],
41 |
42 | 'mysql' => [
43 | 'driver' => 'mysql',
44 | 'host' => env('DB_HOST', '127.0.0.1'),
45 | 'port' => env('DB_PORT', '3306'),
46 | 'database' => env('DB_DATABASE', 'forge'),
47 | 'username' => env('DB_USERNAME', 'forge'),
48 | 'password' => env('DB_PASSWORD', ''),
49 | 'unix_socket' => env('DB_SOCKET', ''),
50 | 'charset' => 'utf8mb4',
51 | 'collation' => 'utf8mb4_unicode_ci',
52 | 'prefix' => '',
53 | 'strict' => true,
54 | 'engine' => null,
55 | ],
56 |
57 | 'pgsql' => [
58 | 'driver' => 'pgsql',
59 | 'host' => env('DB_HOST', '127.0.0.1'),
60 | 'port' => env('DB_PORT', '5432'),
61 | 'database' => env('DB_DATABASE', 'forge'),
62 | 'username' => env('DB_USERNAME', 'forge'),
63 | 'password' => env('DB_PASSWORD', ''),
64 | 'charset' => 'utf8',
65 | 'prefix' => '',
66 | 'schema' => 'public',
67 | 'sslmode' => 'prefer',
68 | ],
69 |
70 | 'sqlsrv' => [
71 | 'driver' => 'sqlsrv',
72 | 'host' => env('DB_HOST', 'localhost'),
73 | 'port' => env('DB_PORT', '1433'),
74 | 'database' => env('DB_DATABASE', 'forge'),
75 | 'username' => env('DB_USERNAME', 'forge'),
76 | 'password' => env('DB_PASSWORD', ''),
77 | 'charset' => 'utf8',
78 | 'prefix' => '',
79 | ],
80 |
81 | ],
82 |
83 | /*
84 | |--------------------------------------------------------------------------
85 | | Migration Repository Table
86 | |--------------------------------------------------------------------------
87 | |
88 | | This table keeps track of all the migrations that have already run for
89 | | your application. Using this information, we can determine which of
90 | | the migrations on disk haven't actually been run in the database.
91 | |
92 | */
93 |
94 | 'migrations' => 'migrations',
95 |
96 | /*
97 | |--------------------------------------------------------------------------
98 | | Redis Databases
99 | |--------------------------------------------------------------------------
100 | |
101 | | Redis is an open source, fast, and advanced key-value store that also
102 | | provides a richer set of commands than a typical key-value systems
103 | | such as APC or Memcached. Laravel makes it easy to dig right in.
104 | |
105 | */
106 |
107 | 'redis' => [
108 |
109 | 'client' => 'predis',
110 |
111 | 'default' => [
112 | 'host' => env('REDIS_HOST', '127.0.0.1'),
113 | 'password' => env('REDIS_PASSWORD', null),
114 | 'port' => env('REDIS_PORT', 6379),
115 | 'database' => 0,
116 | ],
117 |
118 | ],
119 |
120 | ];
121 |
--------------------------------------------------------------------------------