├── .env.example ├── .gitattributes ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SETUP.md ├── app ├── Console │ ├── Commands │ │ └── Inspire.php │ └── Kernel.php ├── Events │ └── Event.php ├── Exceptions │ └── Handler.php ├── Facades │ ├── EmailConfig.php │ └── Mollie.php ├── Helpers │ └── EmailConfig.php ├── Http │ ├── Controllers │ │ ├── AdminAuthController.php │ │ ├── AdminController.php │ │ ├── AdminGoalController.php │ │ ├── AdminPageController.php │ │ ├── AdminPostController.php │ │ ├── AdminPreviousProjectsController.php │ │ ├── AdminTierController.php │ │ ├── Auth │ │ │ ├── AuthController.php │ │ │ └── PasswordController.php │ │ ├── Controller.php │ │ ├── DonationController.php │ │ ├── HomeController.php │ │ ├── PostController.php │ │ ├── SetupController.php │ │ └── UploadController.php │ ├── Kernel.php │ ├── Middleware │ │ ├── Authenticate.php │ │ ├── CheckIfEnvironmentIsReady.php │ │ ├── CheckSetupInaccessible.php │ │ ├── EncryptCookies.php │ │ ├── PassProject.php │ │ ├── RedirectIfAuthenticated.php │ │ └── VerifyCsrfToken.php │ ├── Requests │ │ └── Request.php │ ├── Traits │ │ └── CanGetVideoInformation.php │ └── routes.php ├── Jobs │ └── Job.php ├── Listeners │ └── .gitkeep ├── Models │ ├── ArchivedProject.php │ ├── Donation.php │ ├── DonationItem.php │ ├── DonationKind.php │ ├── DonationType.php │ ├── Page.php │ ├── Post.php │ ├── Project.php │ ├── Setting.php │ ├── SetupPrerequisite.php │ └── Tier.php ├── Payment │ └── Mollie.php ├── Policies │ └── .gitkeep └── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── EventServiceProvider.php │ ├── PaymentServiceProvider.php │ └── RouteServiceProvider.php ├── artisan ├── bootstrap ├── app.php ├── autoload.php └── cache │ └── .gitignore ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── compile.php ├── database.php ├── debugbar.php ├── filesystems.php ├── image.php ├── mail.php ├── markdown.php ├── queue.php ├── services.php ├── session.php └── view.php ├── database ├── .gitignore ├── factories │ └── ModelFactory.php ├── migrations │ ├── .gitkeep │ ├── 2016_01_12_132315_create_settings_table.php │ ├── 2016_01_12_132417_create_project_table.php │ ├── 2016_01_12_132434_create_post_table.php │ ├── 2016_01_14_122533_create_donation_table.php │ ├── 2016_01_19_134515_create_tier_table.php │ ├── 2016_01_20_102824_create_archivedproject_table.php │ ├── 2016_01_22_131030_create_donation_type_table.php │ ├── 2016_01_22_131044_create_donation_item_table.php │ ├── 2016_03_16_104858_create_pages_table.php │ ├── 2016_03_30_125119_modify_archivedproject_table.php │ ├── 2016_03_30_132655_add_deleted_at_to_donations.php │ ├── 2016_04_07_112634_migrate_organisation_fields.php │ └── 2016_05_03_132655_add_summary_to_posts.php └── seeds │ ├── .gitkeep │ ├── DatabaseSeeder.php │ ├── DefaultPagesSeeder.php │ └── SettingsTestSeeder.php ├── gulpfile.js ├── package.json ├── phpunit.xml ├── public ├── .htaccess ├── assets │ ├── bg │ │ └── bg_people.jpg │ ├── icons │ │ ├── icon_calendar.png │ │ ├── icon_calendar@2x.png │ │ ├── icon_checkmark.png │ │ ├── icon_checkmark@2x.png │ │ ├── icon_checkmark_checked.png │ │ ├── icon_checkmark_checked@2x.png │ │ ├── icon_checkmark_unchecked.png │ │ ├── icon_checkmark_unchecked@2x.png │ │ ├── icon_coaching_active.png │ │ ├── icon_coaching_active@2x.png │ │ ├── icon_coaching_inactive.png │ │ ├── icon_coaching_inactive@2x.png │ │ ├── icon_currency_active.png │ │ ├── icon_currency_active@2x.png │ │ ├── icon_currency_inactive.png │ │ ├── icon_currency_inactive@2x.png │ │ ├── icon_flag.png │ │ ├── icon_flag@2x.png │ │ ├── icon_manpower_active.png │ │ ├── icon_manpower_active@2x.png │ │ ├── icon_manpower_inactive.png │ │ ├── icon_manpower_inactive@2x.png │ │ ├── icon_material_active.png │ │ ├── icon_material_active@2x.png │ │ ├── icon_material_inactive.png │ │ ├── icon_material_inactive@2x.png │ │ ├── icon_person.png │ │ ├── icon_person@2x.png │ │ ├── icon_progress_coaching.png │ │ ├── icon_progress_coaching@2x.png │ │ ├── icon_progress_currency.png │ │ ├── icon_progress_currency@2x.png │ │ ├── icon_progress_manpower.png │ │ ├── icon_progress_manpower@2x.png │ │ ├── icon_progress_material.png │ │ ├── icon_progress_material@2x.png │ │ ├── icon_story_active.png │ │ ├── icon_story_active@2x.png │ │ ├── icon_story_inactive.png │ │ ├── icon_story_inactive@2x.png │ │ ├── icon_updates_active.png │ │ ├── icon_updates_active@2x.png │ │ ├── icon_updates_inactive.png │ │ ├── icon_updates_inactive@2x.png │ │ └── share_icons.png │ └── logo │ │ └── logo_w4p.png ├── favicon.ico ├── images │ └── .gitkeep ├── index.php ├── organisation │ └── .gitkeep ├── platform │ └── .gitkeep ├── project │ └── .gitkeep ├── robots.txt └── web.config ├── resources ├── assets │ ├── js │ │ ├── admin │ │ │ ├── config │ │ │ │ └── inline-attachconfig.js │ │ │ └── lib │ │ │ │ ├── a-markdown.js │ │ │ │ ├── aa-to-markdown.js │ │ │ │ ├── bootstrap-markdown.js │ │ │ │ ├── jquery.datetimepicker.js │ │ │ │ └── jquery.inline-attachment.min.js │ │ ├── core │ │ │ └── lib │ │ │ │ ├── 01_jquery-2.2.0.min.js │ │ │ │ └── 02_bootstrap.min.js │ │ └── pledge │ │ │ └── pledge.js │ └── sass │ │ ├── _bootstrap.scss │ │ ├── _colors.scss │ │ ├── _config.scss │ │ ├── _mediaqueries.scss │ │ ├── _setup.scss │ │ ├── _stickyfooter.scss │ │ ├── _typo.scss │ │ ├── app.scss │ │ ├── bootstrap │ │ ├── _alerts.scss │ │ ├── _badges.scss │ │ ├── _breadcrumbs.scss │ │ ├── _button-groups.scss │ │ ├── _buttons.scss │ │ ├── _carousel.scss │ │ ├── _close.scss │ │ ├── _code.scss │ │ ├── _component-animations.scss │ │ ├── _dropdowns.scss │ │ ├── _forms.scss │ │ ├── _glyphicons.scss │ │ ├── _grid.scss │ │ ├── _input-groups.scss │ │ ├── _jumbotron.scss │ │ ├── _labels.scss │ │ ├── _list-group.scss │ │ ├── _media.scss │ │ ├── _mixins.scss │ │ ├── _modals.scss │ │ ├── _navbar.scss │ │ ├── _navs.scss │ │ ├── _normalize.scss │ │ ├── _pager.scss │ │ ├── _pagination.scss │ │ ├── _panels.scss │ │ ├── _popovers.scss │ │ ├── _print.scss │ │ ├── _progress-bars.scss │ │ ├── _responsive-embed.scss │ │ ├── _responsive-utilities.scss │ │ ├── _scaffolding.scss │ │ ├── _tables.scss │ │ ├── _theme.scss │ │ ├── _thumbnails.scss │ │ ├── _tooltip.scss │ │ ├── _type.scss │ │ ├── _utilities.scss │ │ ├── _variables.scss │ │ ├── _wells.scss │ │ └── mixins │ │ │ ├── _alerts.scss │ │ │ ├── _background-variant.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _buttons.scss │ │ │ ├── _center-block.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _forms.scss │ │ │ ├── _gradients.scss │ │ │ ├── _grid-framework.scss │ │ │ ├── _grid.scss │ │ │ ├── _hide-text.scss │ │ │ ├── _image.scss │ │ │ ├── _labels.scss │ │ │ ├── _list-group.scss │ │ │ ├── _nav-divider.scss │ │ │ ├── _nav-vertical-align.scss │ │ │ ├── _opacity.scss │ │ │ ├── _pagination.scss │ │ │ ├── _panels.scss │ │ │ ├── _progress-bar.scss │ │ │ ├── _reset-filter.scss │ │ │ ├── _reset-text.scss │ │ │ ├── _resize.scss │ │ │ ├── _responsive-visibility.scss │ │ │ ├── _size.scss │ │ │ ├── _tab-focus.scss │ │ │ ├── _table-row.scss │ │ │ ├── _text-emphasis.scss │ │ │ ├── _text-overflow.scss │ │ │ └── _vendor-prefixes.scss │ │ ├── components │ │ ├── _btn4.scss │ │ ├── _checkbox.scss │ │ ├── _form.scss │ │ ├── _gray.scss │ │ ├── _icons.scss │ │ ├── _radial-progress.scss │ │ ├── _sharebtn.scss │ │ ├── _tabs.scss │ │ ├── _texteditor.scss │ │ ├── _topnav.scss │ │ └── lib │ │ │ └── _jquery.datetimepicker.scss │ │ ├── pages │ │ ├── _donation.scss │ │ ├── _home.scss │ │ ├── _post.scss │ │ └── _previous.scss │ │ └── partials │ │ └── _footer.scss ├── lang │ ├── en │ │ ├── auth.php │ │ ├── backoffice.php │ │ ├── donation.php │ │ ├── footer.php │ │ ├── generic.php │ │ ├── home.php │ │ ├── mails.php │ │ ├── pages.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ ├── setup.php │ │ └── validation.php │ └── nl │ │ ├── backoffice.php │ │ ├── donation.php │ │ ├── footer.php │ │ ├── generic.php │ │ ├── home.php │ │ ├── mails.php │ │ └── setup.php └── views │ ├── backoffice │ ├── assets.blade.php │ ├── dashboard.blade.php │ ├── donations.blade.php │ ├── email.blade.php │ ├── goals │ │ ├── currency.blade.php │ │ ├── index.blade.php │ │ ├── kind.blade.php │ │ ├── type_edit.blade.php │ │ └── weights.blade.php │ ├── login.blade.php │ ├── organisation.blade.php │ ├── pages │ │ └── edit.blade.php │ ├── platform.blade.php │ ├── posts │ │ ├── edit.blade.php │ │ └── index.blade.php │ ├── previous │ │ ├── import.blade.php │ │ └── index.blade.php │ ├── project.blade.php │ ├── pw_reset.blade.php │ ├── socialmedia.blade.php │ └── tiers │ │ ├── edit.blade.php │ │ └── index.blade.php │ ├── design.blade.php │ ├── errors │ └── 503.blade.php │ ├── front │ ├── donation │ │ ├── confirmed.blade.php │ │ ├── info.blade.php │ │ ├── payment_status.blade.php │ │ ├── start.blade.php │ │ ├── thanks.blade.php │ │ └── user.blade.php │ ├── home.blade.php │ ├── pages │ │ ├── detail.blade.php │ │ └── previous.blade.php │ └── posts │ │ ├── detail.blade.php │ │ └── index.blade.php │ ├── layouts │ ├── backoffice.blade.php │ ├── core.blade.php │ ├── mails │ │ └── default.blade.php │ ├── setup.blade.php │ └── setup_simple.blade.php │ ├── mails │ ├── donation_confirm.blade.php │ ├── donation_money_success.blade.php │ ├── donation_success.blade.php │ ├── notification │ │ └── donation_confirmed.blade.php │ └── test.blade.php │ ├── partials │ ├── footer.blade.php │ ├── ga.blade.php │ ├── meta │ │ ├── default.blade.php │ │ ├── page.blade.php │ │ └── post.blade.php │ └── previous │ │ └── v2016_03.blade.php │ ├── setup │ ├── prerequisite_failures.blade.php │ ├── progress.blade.php │ ├── step1.blade.php │ ├── step2.blade.php │ ├── step3.blade.php │ ├── step4.blade.php │ ├── step5.blade.php │ ├── step6.blade.php │ └── welcome.blade.php │ └── vendor │ └── .gitkeep ├── server.php ├── storage ├── app │ └── .gitignore ├── debugbar │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── Setup │ ├── Controllers │ │ ├── .gitkeep │ │ ├── SetupStepsAdministrationTest.php │ │ ├── SetupStepsEmailTest.php │ │ ├── SetupStepsPlatformTest.php │ │ └── SetupStepsProjectTest.php │ └── Middleware │ │ ├── .gitkeep │ │ └── EnvironmentReadyTest.php ├── TestCase.php └── W4P │ ├── Controllers │ └── .gitkeep │ ├── Database │ └── DonationTest.php │ ├── Mails │ ├── .gitkeep │ └── MailTest.php │ └── Middleware │ ├── .gitkeep │ └── SetupInaccessibleTest.php └── vagrant └── setup.sh /.env.example: -------------------------------------------------------------------------------- 1 | APP_ENV=local 2 | APP_DEBUG=false 3 | APP_KEY=SomeRandomString 4 | APP_LOCALE=en 5 | 6 | DB_HOST=localhost 7 | DB_DATABASE=homestead 8 | DB_USERNAME=homestead 9 | DB_PASSWORD=secret 10 | 11 | CACHE_DRIVER=file 12 | SESSION_DRIVER=file 13 | QUEUE_DRIVER=sync 14 | 15 | REDIS_HOST=localhost 16 | REDIS_PASSWORD=null 17 | REDIS_PORT=6379 18 | 19 | # Please note that these mail settings will override your DB config! 20 | # MAIL_DRIVER=smtp 21 | # MAIL_HOST=127.0.0.1 22 | # MAIL_PORT=1025 23 | # MAIL_USERNAME=null 24 | # MAIL_PASSWORD=null 25 | # MAIL_ENCRYPTION=null 26 | # MAIL_FROM=test@w4p.org 27 | # MAIL_NAME=W4P 28 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.less linguist-vendored 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | /node_modules 3 | /public/css 4 | /public/js 5 | /public/build 6 | /public/images/*.png 7 | /public/images/*.gif 8 | /public/images/*.jpeg 9 | /public/images/*.jpg 10 | /public/images/*.jpg 11 | /public/images/*.tiff 12 | /public/platform 13 | /public/organisation 14 | /public/project 15 | Homestead.yaml 16 | Homestead.json 17 | .env 18 | /vagrant/Vagrantfile 19 | /vagrant/.vagrant 20 | /vagrant/puphpet 21 | /vagrant/html 22 | .idea 23 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute 2 | 3 | Thanks for taking the time to take a look at contributing to W4P. 4 | 5 | ## Bug reports 6 | 7 | You can report bugs on the [GitHub issues](https://github.com/openknowledgebe/W4P/issues) page. 8 | 9 | ## Feature additions 10 | 11 | You can add a feature to W4P yourself, but it might be useful to discuss the topic first before starting development (if you intend for your changes to be applied to this repository). You are free to fork and forget, but meaningful changes are always welcomed via pull request. 12 | 13 | Remember, any additions or bug fixes **must have all tests passing**, with **new tests for new functionality**. 14 | 15 | ## Code style 16 | 17 | PSR-2. 18 | 19 | ## Unit tests 20 | 21 | Of course, W4P contains unit tests. There are two test suites included in the application: 22 | 23 | * setup: Creates the database and does migrations. Also tests the setup wizard. 24 | * application: Tests the W4P application (pledges, payments, etc). Assumes you ran 'setup' test suite at least once. (Does not do migrations etc.) 25 | 26 | By running `phpunit`, you will run both suites in the correct order (first 'setup', then 'application') and run all tests. 27 | 28 | **For any given pull request, all unit tests should pass.** 29 | 30 | ## Licensing 31 | 32 | By opening a pull request, you agree that your code is licensed under the same license as the project. (This ensures that all our code remais open-source.) -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2016 openknowledgebe 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | W4P logo 2 | 3 | [WORK IN PROGRESS] 4 | W4P is an easy-to-setup crowdsourcing platform. 5 | 6 | ## How to use 7 | To use W4P, simply download the latest release or clone/fork for your editing pleasure. Then, follow the instructions in [SETUP](./SETUP.md). 8 | 9 | ## System requirements 10 | 11 | * You need a webserver running PHP 5.6 or higher. (PHP 7 is supported.) 12 | * You need a mail server so the application can send emails to backers. 13 | * Optional: If you are looking to incorporate payments, you need a Mollie API key. More information can be found during the setup process. 14 | 15 | ## Want to contribute? 16 | We're always looking to improve the core of W4P. You can contribute to the repository at [GitHub](https://github.com/openknowledgebe/W4P) by forking the main repository and opening a pull request with any code changes. For more information, see [CONTRIBUTING](./CONTRIBUTING.md). -------------------------------------------------------------------------------- /app/Console/Commands/Inspire.php: -------------------------------------------------------------------------------- 1 | comment(PHP_EOL.Inspiring::quote().PHP_EOL); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire') 28 | ->hourly(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Events/Event.php: -------------------------------------------------------------------------------- 1 | $settings['email.from'], 'name' => $settings['email.name']]; 35 | Config::set('mail.from', $array); 36 | } 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /app/Http/Controllers/AdminAuthController.php: -------------------------------------------------------------------------------- 1 | withErrors(["This password is incorrect."]); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/Http/Controllers/AdminPageController.php: -------------------------------------------------------------------------------- 1 | first(); 32 | return View::make('backoffice.pages.edit') 33 | ->with('page', $page); 34 | } 35 | 36 | /** 37 | * Update an existing page 38 | * @param $slug 39 | * @return mixed 40 | */ 41 | public function update($slug) 42 | { 43 | $success = true; 44 | $errors = []; 45 | 46 | // Validate 47 | $validator = Validator::make( 48 | Input::all(), 49 | [ 50 | 'content' => 'required|min:4', 51 | ] 52 | ); 53 | 54 | // Check if the validator fails 55 | if (!$validator->fails()) { 56 | // Save the tier 57 | Page::where('slug', $slug)->first()->update([ 58 | "content" => Input::get('content') 59 | ]); 60 | Session::flash('info', trans('backoffice.flash.page_update_success')); 61 | } else { 62 | // Validation has failed. Set success to false. Set validator messages 63 | $success = false; 64 | $errors = $validator->messages(); 65 | } 66 | 67 | if ($success) { 68 | return Redirect::route('admin::editPage', $slug); 69 | } else { 70 | return Redirect::back()->withErrors($errors)->withInput(Input::all()); 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/AuthController.php: -------------------------------------------------------------------------------- 1 | middleware('guest', ['except' => 'logout']); 41 | } 42 | 43 | /** 44 | * Get a validator for an incoming registration request. 45 | * 46 | * @param array $data 47 | * @return \Illuminate\Contracts\Validation\Validator 48 | */ 49 | protected function validator(array $data) 50 | { 51 | return Validator::make($data, [ 52 | 'name' => 'required|max:255', 53 | 'email' => 'required|email|max:255|unique:users', 54 | 'password' => 'required|confirmed|min:6', 55 | ]); 56 | } 57 | 58 | /** 59 | * Create a new user instance after a valid registration. 60 | * 61 | * @param array $data 62 | * @return User 63 | */ 64 | protected function create(array $data) 65 | { 66 | return User::create([ 67 | 'name' => $data['name'], 68 | 'email' => $data['email'], 69 | 'password' => bcrypt($data['password']), 70 | ]); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/PasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | sortByDesc('created_at'); 22 | return View::make('front.posts.index')->with('posts', $posts); 23 | } 24 | 25 | /** 26 | * Get a specific post 27 | * @param $id 28 | * @return mixed 29 | */ 30 | public function detail($id) 31 | { 32 | $post = Post::find($id); 33 | return View::make('front.posts.detail')->with('post', $post); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/Http/Controllers/UploadController.php: -------------------------------------------------------------------------------- 1 | json($response); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/Http/Kernel.php: -------------------------------------------------------------------------------- 1 | [ 27 | \W4P\Http\Middleware\EncryptCookies::class, 28 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 29 | \Illuminate\Session\Middleware\StartSession::class, 30 | \Illuminate\View\Middleware\ShareErrorsFromSession::class, 31 | \W4P\Http\Middleware\PassProject::class, 32 | \W4P\Http\Middleware\VerifyCsrfToken::class, 33 | ], 34 | 35 | 'api' => [ 36 | 'throttle:60,1', 37 | ], 38 | ]; 39 | 40 | /** 41 | * The application's route middleware. 42 | * 43 | * These middleware may be assigned to groups or used individually. 44 | * 45 | * @var array 46 | */ 47 | protected $routeMiddleware = [ 48 | 'auth' => \W4P\Http\Middleware\Authenticate::class, 49 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 50 | 'guest' => \W4P\Http\Middleware\RedirectIfAuthenticated::class, 51 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 52 | 'env.ready' => \W4P\Http\Middleware\CheckIfEnvironmentIsReady::class, 53 | 'setup.restricted' => \W4P\Http\Middleware\CheckSetupInaccessible::class, 54 | ]; 55 | } 56 | -------------------------------------------------------------------------------- /app/Http/Middleware/Authenticate.php: -------------------------------------------------------------------------------- 1 | session()->get('token'); 23 | // Make sure the token in session matches the token in db 24 | if ($token == null || $token != Setting::get('token')) { 25 | // If the token is null (empty) or incorrect, redirect to login 26 | if ($request->ajax()) { 27 | return response('Unauthorized.', 401); 28 | } else { 29 | return redirect()->route('admin::login'); 30 | } 31 | } 32 | return $next($request); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/Http/Middleware/CheckSetupInaccessible.php: -------------------------------------------------------------------------------- 1 | key] = $setting->value; 26 | } 27 | 28 | // Check if the settings are valid 29 | if (array_key_exists('pwd', $settings) && 30 | array_key_exists('platform.name', $settings) && 31 | array_key_exists('email.valid', $settings) && 32 | array_key_exists('organisation.valid', $settings) && 33 | array_key_exists('setup.complete', $settings) && 34 | Project::valid($request->project)) { 35 | // If the settings are valid, check if the URL isn't setup 36 | if (str_contains($request->route()->getName(), 'setup::')) { 37 | return redirect()->route('home'); 38 | } 39 | } 40 | return $next($request); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | project = Project::first(); 26 | 27 | // Archived count 28 | View::share('archived_count', DB::table('archivedproject')->count()); 29 | 30 | // Get the project 31 | $project = $request->project; 32 | 33 | // Only execute this if project is valid or exists 34 | if ($project) { 35 | View::share('W4P_project', $request->project); 36 | View::share('video_id', $project->getVideoId()); 37 | View::share('video_provider', $project->getVideoProvider()); 38 | } 39 | 40 | return $next($request); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfAuthenticated.php: -------------------------------------------------------------------------------- 1 | check()) { 21 | return redirect('/'); 22 | } 23 | 24 | return $next($request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | belongsTo( 19 | 'W4P\Models\Donation', 20 | 'id', 21 | 'donation_id' 22 | ); 23 | } 24 | 25 | public function donationType() 26 | { 27 | return $this->hasOne( 28 | 'W4P\Models\DonationType', 29 | 'id', 30 | 'donation_type_id' 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Models/DonationType.php: -------------------------------------------------------------------------------- 1 | hasMany( 22 | 'W4P\Models\DonationItem', 23 | 'donation_type_id', 24 | 'id' 25 | ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Models/Page.php: -------------------------------------------------------------------------------- 1 | content); 18 | $lines = explode("\n", $markdown); 19 | // Character length < 300; continue 20 | $content = ""; 21 | $totalChars = 0; 22 | $lineCount = 0; 23 | foreach ($lines as $line) { 24 | $totalChars += strlen($line); 25 | $lineCount++; 26 | // If the total characters exceed 200 or 3 lines (whichever is first) stop outputting text 27 | if ($totalChars < 500 && $lineCount < 4) { 28 | $content .= "\n" . $line; 29 | } 30 | } 31 | return $content; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Models/Project.php: -------------------------------------------------------------------------------- 1 | first(); 25 | } 26 | 27 | /** 28 | * Checks if the project is valid. In order for the project to be valid, 29 | * it must have a title that is at least 1 character long, and a brief 30 | * description that is at least 1 character long. 31 | * 32 | * @param $project Project: The project that needs to be checked. 33 | * @return bool: Returns true if the project is valid. 34 | */ 35 | public static function valid($project) 36 | { 37 | if ($project != null) { 38 | if (strlen($project->title) > 0 && strlen($project->brief) > 0) { 39 | return true; 40 | } 41 | } 42 | return false; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/Models/SetupPrerequisite.php: -------------------------------------------------------------------------------- 1 | title = $title; 15 | $prerequisite->description = $description; 16 | $prerequisite->fails = $failed; 17 | return $prerequisite; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Models/Tier.php: -------------------------------------------------------------------------------- 1 | select( 25 | DB::raw('tier_id, count(*) as count') 26 | ) 27 | // Only donors with a completed payment status and not deleted donation count 28 | ->where(function ($query) { 29 | $query 30 | ->where('payment_status', '=', 'paid') 31 | ->where('deleted_at', '=', null); 32 | }) 33 | ->groupBy('tier_id') 34 | ->get(); 35 | 36 | foreach ($tiers as $tier) { 37 | if ($tier->tier_id != null) { 38 | $kvpArray[$tier->tier_id] = (int)$tier->count; 39 | } 40 | } 41 | $allTiers = Tier::all(); 42 | foreach ($allTiers as $tier) { 43 | if (!isset($kvpArray[$tier->id])) { 44 | $kvpArray[$tier->id] = 0; 45 | } 46 | } 47 | return $kvpArray; 48 | } 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /app/Policies/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/app/Policies/.gitkeep -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'W4P\Policies\ModelPolicy', 17 | ]; 18 | 19 | /** 20 | * Register any application authentication / authorization services. 21 | * 22 | * @param \Illuminate\Contracts\Auth\Access\Gate $gate 23 | * @return void 24 | */ 25 | public function boot(GateContract $gate) 26 | { 27 | $this->registerPolicies($gate); 28 | 29 | // 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Providers/EventServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'W4P\Listeners\EventListener', 18 | ], 19 | ]; 20 | 21 | /** 22 | * Register any other events for your application. 23 | * 24 | * @param \Illuminate\Contracts\Events\Dispatcher $events 25 | * @return void 26 | */ 27 | public function boot(DispatcherContract $events) 28 | { 29 | parent::boot($events); 30 | 31 | // 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Providers/PaymentServiceProvider.php: -------------------------------------------------------------------------------- 1 | group(['namespace' => $this->namespace], function ($router) { 41 | require app_path('Http/routes.php'); 42 | }); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /artisan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | make(Illuminate\Contracts\Console\Kernel::class); 32 | 33 | $status = $kernel->handle( 34 | $input = new Symfony\Component\Console\Input\ArgvInput, 35 | new Symfony\Component\Console\Output\ConsoleOutput 36 | ); 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | Shutdown The Application 41 | |-------------------------------------------------------------------------- 42 | | 43 | | Once Artisan has finished running. We will fire off the shutdown events 44 | | so that any final work may be done by the application before we shut 45 | | down the process. This is the last thing to happen to the request. 46 | | 47 | */ 48 | 49 | $kernel->terminate($input, $status); 50 | 51 | exit($status); 52 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | singleton( 30 | Illuminate\Contracts\Http\Kernel::class, 31 | W4P\Http\Kernel::class 32 | ); 33 | 34 | $app->singleton( 35 | Illuminate\Contracts\Console\Kernel::class, 36 | W4P\Console\Kernel::class 37 | ); 38 | 39 | $app->singleton( 40 | Illuminate\Contracts\Debug\ExceptionHandler::class, 41 | W4P\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 | -------------------------------------------------------------------------------- /bootstrap/autoload.php: -------------------------------------------------------------------------------- 1 | =5.5.9", 9 | "laravel/framework": "5.2.*", 10 | "intervention/image": "^2.3", 11 | "graham-campbell/markdown": "^5.3", 12 | "barryvdh/laravel-debugbar": "^2.1", 13 | "mollie/mollie-api-php": "1.3.x", 14 | "mollie/oauth2-mollie-php": "^1.0", 15 | "doctrine/dbal": "~2.4", 16 | "guzzlehttp/guzzle": "^6.2" 17 | }, 18 | "require-dev": { 19 | "fzaninotto/faker": "~1.4", 20 | "mockery/mockery": "0.9.*", 21 | "phpunit/phpunit": "~4.0", 22 | "symfony/css-selector": "2.8.*|3.0.*", 23 | "symfony/dom-crawler": "2.8.*|3.0.*" 24 | }, 25 | "autoload": { 26 | "classmap": [ 27 | "database" 28 | ], 29 | "psr-4": { 30 | "W4P\\": "app/" 31 | } 32 | }, 33 | "autoload-dev": { 34 | "classmap": [ 35 | "tests/TestCase.php" 36 | ] 37 | }, 38 | "scripts": { 39 | "post-root-package-install": [ 40 | "php -r \"copy('.env.example', '.env');\"" 41 | ], 42 | "post-create-project-cmd": [ 43 | "php artisan key:generate" 44 | ], 45 | "post-install-cmd": [ 46 | "php artisan clear-compiled", 47 | "php artisan optimize" 48 | ], 49 | "pre-update-cmd": [ 50 | "php artisan clear-compiled" 51 | ], 52 | "post-update-cmd": [ 53 | "php artisan optimize" 54 | ] 55 | }, 56 | "config": { 57 | "preferred-install": "dist" 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /config/broadcasting.php: -------------------------------------------------------------------------------- 1 | env('BROADCAST_DRIVER', 'pusher'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Broadcast Connections 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may define all of the broadcast connections that will be used 24 | | to broadcast events to other systems or over websockets. Samples of 25 | | each available type of connection are provided inside this array. 26 | | 27 | */ 28 | 29 | 'connections' => [ 30 | 31 | 'pusher' => [ 32 | 'driver' => 'pusher', 33 | 'key' => env('PUSHER_KEY'), 34 | 'secret' => env('PUSHER_SECRET'), 35 | 'app_id' => env('PUSHER_APP_ID'), 36 | 'options' => [ 37 | // 38 | ], 39 | ], 40 | 41 | 'redis' => [ 42 | 'driver' => 'redis', 43 | 'connection' => 'default', 44 | ], 45 | 46 | 'log' => [ 47 | 'driver' => 'log', 48 | ], 49 | 50 | ], 51 | 52 | ]; 53 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_DRIVER', 'file'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Cache Stores 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may define all of the cache "stores" for your application as 24 | | well as their drivers. You may even define multiple stores for the 25 | | same cache driver to group types of items stored in your caches. 26 | | 27 | */ 28 | 29 | 'stores' => [ 30 | 31 | 'apc' => [ 32 | 'driver' => 'apc', 33 | ], 34 | 35 | 'array' => [ 36 | 'driver' => 'array', 37 | ], 38 | 39 | 'database' => [ 40 | 'driver' => 'database', 41 | 'table' => 'cache', 42 | 'connection' => null, 43 | ], 44 | 45 | 'file' => [ 46 | 'driver' => 'file', 47 | 'path' => storage_path('framework/cache'), 48 | ], 49 | 50 | 'memcached' => [ 51 | 'driver' => 'memcached', 52 | 'servers' => [ 53 | [ 54 | 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100, 55 | ], 56 | ], 57 | ], 58 | 59 | 'redis' => [ 60 | 'driver' => 'redis', 61 | 'connection' => 'default', 62 | ], 63 | 64 | ], 65 | 66 | /* 67 | |-------------------------------------------------------------------------- 68 | | Cache Key Prefix 69 | |-------------------------------------------------------------------------- 70 | | 71 | | When utilizing a RAM based store such as APC or Memcached, there might 72 | | be other applications utilizing the same cache. So, we'll specify a 73 | | value to get prefixed to all our keys so we can avoid collisions. 74 | | 75 | */ 76 | 77 | 'prefix' => 'laravel', 78 | 79 | ]; 80 | -------------------------------------------------------------------------------- /config/compile.php: -------------------------------------------------------------------------------- 1 | [ 17 | // 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled File Providers 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may list service providers which define a "compiles" function 26 | | that returns additional files that should be compiled, providing an 27 | | easy way to get common files from any packages you are utilizing. 28 | | 29 | */ 30 | 31 | 'providers' => [ 32 | // 33 | ], 34 | 35 | ]; 36 | -------------------------------------------------------------------------------- /config/image.php: -------------------------------------------------------------------------------- 1 | 'gd' 19 | 20 | ); 21 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | ], 21 | 22 | 'mandrill' => [ 23 | 'secret' => env('MANDRILL_SECRET'), 24 | ], 25 | 26 | 'ses' => [ 27 | 'key' => env('SES_KEY'), 28 | 'secret' => env('SES_SECRET'), 29 | 'region' => 'us-east-1', 30 | ], 31 | 32 | 'stripe' => [ 33 | 'model' => W4P\User::class, 34 | 'key' => env('STRIPE_KEY'), 35 | 'secret' => env('STRIPE_SECRET'), 36 | ], 37 | 38 | ]; 39 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | realpath(base_path('resources/views')), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => realpath(storage_path('framework/views')), 32 | 33 | ]; 34 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | -------------------------------------------------------------------------------- /database/factories/ModelFactory.php: -------------------------------------------------------------------------------- 1 | increments('id'); 19 | $table->string('key')->unique(); 20 | $table->text('value'); 21 | $table->timestamps(); 22 | } 23 | ); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::drop('settings'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2016_01_12_132417_create_project_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 19 | $table->string('title'); // Title of the project 20 | $table->string('brief'); // Description in less than 255 characters 21 | $table->text('description')->nullable(); // Longer description, initially nullable 22 | $table->string('video_url')->nullable(); // Video URL 23 | $table->decimal('currency')->default(0); // Currency 24 | $table->dateTime('starts_at'); 25 | $table->dateTime('ends_at'); 26 | $table->timestamps(); 27 | } 28 | ); 29 | } 30 | 31 | /** 32 | * Reverse the migrations. 33 | * 34 | * @return void 35 | */ 36 | public function down() 37 | { 38 | Schema::drop('project'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /database/migrations/2016_01_12_132434_create_post_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 19 | $table->string('title'); // Title of the update or post 20 | $table->longText('content'); // Content of the update (in md) 21 | $table->timestamps(); 22 | } 23 | ); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::drop('post'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2016_01_14_122533_create_donation_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('first_name'); 18 | $table->string('last_name'); 19 | $table->string('email'); 20 | $table->decimal('currency'); 21 | $table->string('payment_id')->nullable(); 22 | $table->string('payment_status')->nullable(); 23 | $table->string('secret_url')->unique(); 24 | $table->string('confirm_url')->unique(); 25 | $table->datetime('confirmed')->nullable(); 26 | $table->unsignedInteger('tier_id')->nullable(); 27 | $table->text('message')->nullable(); 28 | $table->timestamps(); 29 | }); 30 | } 31 | 32 | /** 33 | * Reverse the migrations. 34 | * 35 | * @return void 36 | */ 37 | public function down() 38 | { 39 | Schema::drop('donation'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /database/migrations/2016_01_19_134515_create_tier_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->decimal('pledge')->unique(); 18 | $table->text('description'); 19 | $table->timestamps(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::drop('tier'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/migrations/2016_01_20_102824_create_archivedproject_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('title'); // Title of the project 18 | $table->string('brief'); // Description in less than 255 characters 19 | $table->text('description')->nullable(); // Longer description, initially nullable 20 | $table->string('videoProvider'); // Longer description 21 | $table->string('videoUrl')->nullable(); // Video URL 22 | $table->dateTime('starts_at'); 23 | $table->dateTime('ends_at'); 24 | $table->boolean('success'); 25 | $table->longText('backers'); // backers json 26 | $table->longText('goals'); // goals json 27 | $table->longText('meta'); // meta json 28 | $table->timestamps(); 29 | }); 30 | } 31 | 32 | /** 33 | * Reverse the migrations. 34 | * 35 | * @return void 36 | */ 37 | public function down() 38 | { 39 | Schema::drop('archivedproject'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /database/migrations/2016_01_22_131030_create_donation_type_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('name'); 18 | $table->string('description'); 19 | $table->string('unit_description'); 20 | $table->unsignedInteger('required_amount'); 21 | $table->enum('kind', ['manpower', 'material', 'coaching', 'currency']); 22 | $table->timestamps(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::drop('donation_type'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2016_01_22_131044_create_donation_item_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->unsignedInteger('donation_id'); 18 | $table->unsignedInteger('donation_type_id'); 19 | $table->datetime('confirmed_at')->nullable()->default(null); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::drop('donation_item'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/migrations/2016_03_16_104858_create_pages_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 19 | $table->string('title'); 20 | $table->string('slug'); 21 | $table->longText('content'); 22 | $table->boolean('default'); 23 | $table->timestamps(); 24 | } 25 | ); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | * 31 | * @return void 32 | */ 33 | public function down() 34 | { 35 | Schema::drop('pages'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /database/migrations/2016_03_30_125119_modify_archivedproject_table.php: -------------------------------------------------------------------------------- 1 | dropColumn(['videoProvider', 'videoUrl', 'backers', 'goals']); 17 | }); 18 | Schema::table('archivedproject', function ($table) { 19 | $table->string('video_url')->nullable(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | // 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/migrations/2016_03_30_132655_add_deleted_at_to_donations.php: -------------------------------------------------------------------------------- 1 | timestamp('deleted_at')->nullable()->default(null); 17 | }); 18 | } 19 | 20 | /** 21 | * Reverse the migrations. 22 | * 23 | * @return void 24 | */ 25 | public function down() 26 | { 27 | Schema::table('donation', function ($table) { 28 | $table->dropColumn('deleted_at'); 29 | }); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/migrations/2016_04_07_112634_migrate_organisation_fields.php: -------------------------------------------------------------------------------- 1 | first(); 17 | if ($vat) { 18 | $vat->key = "platform.organisation.vat"; 19 | $vat->save(); 20 | } 21 | $address = Setting::where('key', 'organisation.address')->first(); 22 | if ($address) { 23 | $address->key = "platform.organisation.address"; 24 | $address->save(); 25 | } 26 | $email = Setting::where('key', 'organisation.email')->first(); 27 | if ($email) { 28 | $email->key = "platform.organisation.email"; 29 | $email->save(); 30 | } 31 | } 32 | 33 | /** 34 | * Reverse the migrations. 35 | * 36 | * @return void 37 | */ 38 | public function down() 39 | { 40 | $vat = Setting::where('key', 'platform.organisation.vat')->first(); 41 | if ($vat) { 42 | $vat->key = "organisation.vat"; 43 | $vat->save(); 44 | } 45 | $address = Setting::where('key', 'platform.organisation.address')->first(); 46 | if ($address) { 47 | $address->key = "organisation.address"; 48 | $address->save(); 49 | } 50 | $email = Setting::where('key', 'platform.organisation.email')->first(); 51 | if ($email) { 52 | $email->key = "organisation.email"; 53 | $email->save(); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /database/migrations/2016_05_03_132655_add_summary_to_posts.php: -------------------------------------------------------------------------------- 1 | string('summary')->nullable()->default(null); 17 | }); 18 | } 19 | 20 | /** 21 | * Reverse the migrations. 22 | * 23 | * @return void 24 | */ 25 | public function down() 26 | { 27 | Schema::table('post', function ($table) { 28 | $table->dropColumn('summary'); 29 | }); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/seeds/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/database/seeds/.gitkeep -------------------------------------------------------------------------------- /database/seeds/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call(DefaultPagesSeeder::class); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /database/seeds/DefaultPagesSeeder.php: -------------------------------------------------------------------------------- 1 | 'how_does_it_work', 22 | "slug" => "how_it_works", 23 | "content" => "", 24 | "default" => true 25 | ] 26 | ); 27 | Page::create( 28 | [ 29 | "title" => 'press_materials', 30 | "slug" => "press", 31 | "content" => "", 32 | "default" => true 33 | ] 34 | ); 35 | Page::create( 36 | [ 37 | "title" => 'privacy_policy', 38 | "slug" => "privacy_policy", 39 | "content" => "", 40 | "default" => true 41 | ] 42 | ); 43 | Page::create( 44 | [ 45 | "title" => 'terms_of_use', 46 | "slug" => "terms_of_use", 47 | "content" => "", 48 | "default" => true 49 | ] 50 | ); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /database/seeds/SettingsTestSeeder.php: -------------------------------------------------------------------------------- 1 | "Test project", 27 | 'brief' => "Test project description", 28 | 'description' => "Long description", 29 | 'video_url' => "", 30 | 'starts_at' => Carbon::now(), 31 | 'ends_at' => Carbon::now()->addMonth() 32 | ]); 33 | 34 | Setting::set('organisation.name', 'Organisation Name'); 35 | Setting::set('organisation.description', 'This is a short description'); 36 | Setting::set('organisation.website', 'http://website.com'); 37 | Setting::set('organisation.valid', 'true'); 38 | 39 | Setting::set('email.host', '127.0.0.1'); 40 | Setting::set('email.port', '1025'); 41 | Setting::set('email.username', ''); 42 | Setting::set('email.password', ''); 43 | Setting::set('email.encryption', ''); 44 | Setting::set('email.from', 'test@mail.okfnbe'); 45 | Setting::set('email.name', 'Test mail'); 46 | Setting::set('email.valid', 'true'); 47 | 48 | Setting::set('setup.complete', 'done'); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var elixir = require('laravel-elixir'); 2 | 3 | /* 4 | |-------------------------------------------------------------------------- 5 | | Elixir Asset Management 6 | |-------------------------------------------------------------------------- 7 | | 8 | | Elixir provides a clean, fluent API for defining some basic Gulp tasks 9 | | for your Laravel application. By default, we are compiling the Sass 10 | | file for our application, as well as publishing vendor resources. 11 | | 12 | */ 13 | 14 | elixir(function(mix) { 15 | mix.sass('app.scss'); 16 | mix.scriptsIn("resources/assets/js/core", "public/js/core.js"); 17 | mix.scriptsIn("resources/assets/js/admin", "public/js/admin.js"); 18 | // use the --production flag with gulp to minify 19 | }); 20 | 21 | elixir(function(mix) { 22 | mix.copy('resources/assets/js/pledge/pledge.js', 'public/js/pledge.js'); 23 | mix.version([ 24 | "js/core.js", 25 | "js/pledge.js", 26 | "js/admin.js", 27 | "css/app.css" 28 | ]); 29 | }); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "devDependencies": { 4 | "gulp": "^3.8.8" 5 | }, 6 | "dependencies": { 7 | "laravel-elixir": "^4.0.0", 8 | "bootstrap-sass": "^3.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | 15 | 16 | ./tests/Setup/ 17 | 18 | 19 | ./tests/W4P/ 20 | 21 | 22 | 23 | 24 | app/ 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /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 | RewriteRule ^(.*)/$ /$1 [L,R=301] 11 | 12 | # Handle Front Controller... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_FILENAME} !-f 15 | RewriteRule ^ index.php [L] 16 | 17 | -------------------------------------------------------------------------------- /public/assets/bg/bg_people.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/bg/bg_people.jpg -------------------------------------------------------------------------------- /public/assets/icons/icon_calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_calendar.png -------------------------------------------------------------------------------- /public/assets/icons/icon_calendar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_calendar@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_checkmark.png -------------------------------------------------------------------------------- /public/assets/icons/icon_checkmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_checkmark@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_checkmark_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_checkmark_checked.png -------------------------------------------------------------------------------- /public/assets/icons/icon_checkmark_checked@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_checkmark_checked@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_checkmark_unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_checkmark_unchecked.png -------------------------------------------------------------------------------- /public/assets/icons/icon_checkmark_unchecked@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_checkmark_unchecked@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_coaching_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_coaching_active.png -------------------------------------------------------------------------------- /public/assets/icons/icon_coaching_active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_coaching_active@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_coaching_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_coaching_inactive.png -------------------------------------------------------------------------------- /public/assets/icons/icon_coaching_inactive@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_coaching_inactive@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_currency_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_currency_active.png -------------------------------------------------------------------------------- /public/assets/icons/icon_currency_active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_currency_active@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_currency_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_currency_inactive.png -------------------------------------------------------------------------------- /public/assets/icons/icon_currency_inactive@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_currency_inactive@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_flag.png -------------------------------------------------------------------------------- /public/assets/icons/icon_flag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_flag@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_manpower_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_manpower_active.png -------------------------------------------------------------------------------- /public/assets/icons/icon_manpower_active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_manpower_active@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_manpower_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_manpower_inactive.png -------------------------------------------------------------------------------- /public/assets/icons/icon_manpower_inactive@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_manpower_inactive@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_material_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_material_active.png -------------------------------------------------------------------------------- /public/assets/icons/icon_material_active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_material_active@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_material_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_material_inactive.png -------------------------------------------------------------------------------- /public/assets/icons/icon_material_inactive@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_material_inactive@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_person.png -------------------------------------------------------------------------------- /public/assets/icons/icon_person@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_person@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_progress_coaching.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_progress_coaching.png -------------------------------------------------------------------------------- /public/assets/icons/icon_progress_coaching@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_progress_coaching@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_progress_currency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_progress_currency.png -------------------------------------------------------------------------------- /public/assets/icons/icon_progress_currency@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_progress_currency@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_progress_manpower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_progress_manpower.png -------------------------------------------------------------------------------- /public/assets/icons/icon_progress_manpower@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_progress_manpower@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_progress_material.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_progress_material.png -------------------------------------------------------------------------------- /public/assets/icons/icon_progress_material@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_progress_material@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_story_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_story_active.png -------------------------------------------------------------------------------- /public/assets/icons/icon_story_active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_story_active@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_story_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_story_inactive.png -------------------------------------------------------------------------------- /public/assets/icons/icon_story_inactive@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_story_inactive@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_updates_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_updates_active.png -------------------------------------------------------------------------------- /public/assets/icons/icon_updates_active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_updates_active@2x.png -------------------------------------------------------------------------------- /public/assets/icons/icon_updates_inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_updates_inactive.png -------------------------------------------------------------------------------- /public/assets/icons/icon_updates_inactive@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/icon_updates_inactive@2x.png -------------------------------------------------------------------------------- /public/assets/icons/share_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/icons/share_icons.png -------------------------------------------------------------------------------- /public/assets/logo/logo_w4p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/assets/logo/logo_w4p.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/favicon.ico -------------------------------------------------------------------------------- /public/images/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/images/.gitkeep -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | 8 | */ 9 | 10 | /* 11 | |-------------------------------------------------------------------------- 12 | | Register The Auto Loader 13 | |-------------------------------------------------------------------------- 14 | | 15 | | Composer provides a convenient, automatically generated class loader for 16 | | our application. We just need to utilize it! We'll simply require it 17 | | into the script here so that we don't have to worry about manual 18 | | loading any of our classes later on. It feels nice to relax. 19 | | 20 | */ 21 | 22 | require __DIR__.'/../bootstrap/autoload.php'; 23 | 24 | /* 25 | |-------------------------------------------------------------------------- 26 | | Turn On The Lights 27 | |-------------------------------------------------------------------------- 28 | | 29 | | We need to illuminate PHP development, so let us turn on the lights. 30 | | This bootstraps the framework and gets it ready for use, then it 31 | | will load up this application so that we can run it and send 32 | | the responses back to the browser and delight our users. 33 | | 34 | */ 35 | 36 | $app = require_once __DIR__.'/../bootstrap/app.php'; 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | Run The Application 41 | |-------------------------------------------------------------------------- 42 | | 43 | | Once we have the application, we can handle the incoming request 44 | | through the kernel, and send the associated response back to 45 | | the client's browser allowing them to enjoy the creative 46 | | and wonderful application we have prepared for them. 47 | | 48 | */ 49 | 50 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); 51 | 52 | $response = $kernel->handle( 53 | $request = Illuminate\Http\Request::capture() 54 | ); 55 | 56 | $response->send(); 57 | 58 | $kernel->terminate($request, $response); 59 | -------------------------------------------------------------------------------- /public/organisation/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/organisation/.gitkeep -------------------------------------------------------------------------------- /public/platform/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/platform/.gitkeep -------------------------------------------------------------------------------- /public/project/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/public/project/.gitkeep -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /resources/assets/js/admin/config/inline-attachconfig.js: -------------------------------------------------------------------------------- 1 | var options = { 2 | /** 3 | * Name of the POST field where the file will be sent. 4 | * Defaults to 'file'. 5 | */ 6 | uploadFieldName: 'file', 7 | 8 | /** 9 | * Name of the field from the response where the file can be downloaded. 10 | * Defaults to 'filename' 11 | */ 12 | downloadFieldName: 'file', 13 | 14 | // List of allowed MIME types 15 | allowedTypes: [ 16 | 'image/jpeg', 17 | 'image/png', 18 | 'image/jpg', 19 | 'image/gif' 20 | ], 21 | 22 | onFileUploadResponse: function(XMLHttpRequest) { 23 | var status = $.parseJSON(XMLHttpRequest.response); 24 | if (typeof status.error !== 'undefined') { 25 | alert(status.error); 26 | } 27 | } 28 | }; -------------------------------------------------------------------------------- /resources/assets/sass/_bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.6 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | // Core variables and mixins 8 | @import "bootstrap/variables"; 9 | @import "bootstrap/mixins"; 10 | 11 | // Reset and dependencies 12 | @import "bootstrap/normalize"; 13 | @import "bootstrap/print"; 14 | @import "bootstrap/glyphicons"; 15 | 16 | // Core CSS 17 | @import "bootstrap/scaffolding"; 18 | @import "bootstrap/type"; 19 | @import "bootstrap/code"; 20 | @import "bootstrap/grid"; 21 | @import "bootstrap/tables"; 22 | @import "bootstrap/forms"; 23 | @import "bootstrap/buttons"; 24 | 25 | // Components 26 | @import "bootstrap/component-animations"; 27 | @import "bootstrap/dropdowns"; 28 | @import "bootstrap/button-groups"; 29 | @import "bootstrap/input-groups"; 30 | @import "bootstrap/navs"; 31 | @import "bootstrap/navbar"; 32 | @import "bootstrap/breadcrumbs"; 33 | @import "bootstrap/pagination"; 34 | @import "bootstrap/pager"; 35 | @import "bootstrap/labels"; 36 | @import "bootstrap/badges"; 37 | @import "bootstrap/jumbotron"; 38 | @import "bootstrap/thumbnails"; 39 | @import "bootstrap/alerts"; 40 | @import "bootstrap/progress-bars"; 41 | @import "bootstrap/media"; 42 | @import "bootstrap/list-group"; 43 | @import "bootstrap/panels"; 44 | @import "bootstrap/responsive-embed"; 45 | @import "bootstrap/wells"; 46 | @import "bootstrap/close"; 47 | 48 | // Components w/ JavaScript 49 | @import "bootstrap/modals"; 50 | @import "bootstrap/tooltip"; 51 | @import "bootstrap/popovers"; 52 | @import "bootstrap/carousel"; 53 | 54 | // Utility classes 55 | @import "bootstrap/utilities"; 56 | @import "bootstrap/responsive-utilities"; 57 | 58 | .alert-danger { 59 | background-color: $color-orange; 60 | border-color: $color-orange; 61 | color: #fff; 62 | 63 | p{ 64 | color: #fff; 65 | } 66 | } 67 | 68 | .alert-info { 69 | background-color: $color-primary; 70 | border-color: $color-primary; 71 | color: #fff; 72 | 73 | p{ 74 | color: #fff; 75 | } 76 | } -------------------------------------------------------------------------------- /resources/assets/sass/_colors.scss: -------------------------------------------------------------------------------- 1 | // Colors 2 | 3 | $color-primary: #42CFD2; 4 | $color-primary-light: #98D9DA; 5 | $color-primary-contrast: #222A44; 6 | $color-secondary: #444; 7 | $color-gray: #F7F7F7; 8 | $color-orange: #FC591F; 9 | $color-grey-text: #8E8E8E; -------------------------------------------------------------------------------- /resources/assets/sass/_config.scss: -------------------------------------------------------------------------------- 1 | /** 2 | CONFIGURATION VARIABLES 3 | */ 4 | 5 | // Font names 6 | $sans-serif: "Open Sans", "Helvetica Neue", "Arial", sans-serif; 7 | $serif: "Georgia", "Times", "Times New Roman", serif; 8 | 9 | // Preferred fixed height of the footer. 10 | $footer-height: 360px; 11 | 12 | // Additional spacing between the footer and body. Applied as padding to the body tag. 13 | $footer-additional-padding: 25px; 14 | 15 | // Banner height 16 | $banner-height: 300px; -------------------------------------------------------------------------------- /resources/assets/sass/_stickyfooter.scss: -------------------------------------------------------------------------------- 1 | html { 2 | position: relative; 3 | min-height: 100%; 4 | } 5 | 6 | body { 7 | /* Margin bottom by footer height */ 8 | margin-bottom: $footer-height; 9 | 10 | &.setup{ 11 | margin-bottom: 0px; 12 | } 13 | } 14 | 15 | .footer { 16 | position: absolute; 17 | bottom: 0; 18 | width: 100%; 19 | /* Set the fixed height of the footer here */ 20 | height: $footer-height; 21 | background-color: $color-gray; 22 | 23 | .container{ 24 | // padding: 15px; 25 | } 26 | } -------------------------------------------------------------------------------- /resources/assets/sass/_typo.scss: -------------------------------------------------------------------------------- 1 | // Typography 2 | *{ 3 | outline: none; 4 | } 5 | 6 | .no-margin{ 7 | margin: 0; 8 | } 9 | 10 | a{ 11 | color: $color-primary; 12 | 13 | &:hover, &:focus{ 14 | color: $color-primary; 15 | } 16 | } 17 | 18 | p, li{ 19 | color: $color-grey-text; 20 | line-height: 1.8em; 21 | 22 | &:last-child{ 23 | margin-bottom: 0; 24 | } 25 | } 26 | 27 | .campaign-over { 28 | color: #FFF; 29 | } 30 | 31 | h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { 32 | color: #3E3E3E; 33 | 34 | &:first-child{ 35 | margin-top: 0; 36 | } 37 | } -------------------------------------------------------------------------------- /resources/assets/sass/app.scss: -------------------------------------------------------------------------------- 1 | // Core 2 | @import "config"; 3 | @import "colors"; 4 | @import "setup"; 5 | 6 | // Libraries 7 | @import "bootstrap"; 8 | @import "typo"; 9 | 10 | // Page-specific CSS 11 | @import "pages/home"; 12 | @import "pages/post"; 13 | @import "pages/previous"; 14 | @import "pages/donation"; 15 | 16 | // Components 17 | @import "components/form"; 18 | @import "components/topnav"; 19 | @import "components/btn4"; 20 | @import "components/sharebtn"; 21 | @import "components/icons"; 22 | @import "components/radial-progress"; 23 | @import "components/checkbox"; 24 | @import "components/gray"; 25 | @import "components/tabs"; 26 | @import "components/texteditor"; 27 | 28 | // Partials 29 | @import "partials/footer"; 30 | 31 | // 3rd party libs 32 | @import "components/lib/jquery.datetimepicker"; 33 | 34 | // Sticky footer 35 | @import "stickyfooter"; 36 | 37 | //media queries 38 | @import "mediaqueries"; -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_alerts.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Alerts 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base styles 7 | // ------------------------- 8 | 9 | .alert { 10 | padding: $alert-padding; 11 | margin-bottom: $line-height-computed; 12 | border: 1px solid transparent; 13 | border-radius: $alert-border-radius; 14 | 15 | // Headings for larger alerts 16 | h4 { 17 | margin-top: 0; 18 | // Specified for the h4 to prevent conflicts of changing $headings-color 19 | color: inherit; 20 | } 21 | 22 | // Provide class for links that match alerts 23 | .alert-link { 24 | font-weight: $alert-link-font-weight; 25 | } 26 | 27 | // Improve alignment and spacing of inner content 28 | > p, 29 | > ul { 30 | margin-bottom: 0; 31 | } 32 | 33 | > p + p { 34 | margin-top: 5px; 35 | } 36 | } 37 | 38 | // Dismissible alerts 39 | // 40 | // Expand the right padding and account for the close button's positioning. 41 | 42 | .alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. 43 | .alert-dismissible { 44 | padding-right: ($alert-padding + 20); 45 | 46 | // Adjust close link position 47 | .close { 48 | position: relative; 49 | top: -2px; 50 | right: -21px; 51 | color: inherit; 52 | } 53 | } 54 | 55 | // Alternate styles 56 | // 57 | // Generate contextual modifier classes for colorizing the alert. 58 | 59 | .alert-success { 60 | @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); 61 | } 62 | 63 | .alert-info { 64 | @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); 65 | } 66 | 67 | .alert-warning { 68 | @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); 69 | } 70 | 71 | .alert-danger { 72 | @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); 73 | } 74 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_badges.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Badges 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .badge { 8 | display: inline-block; 9 | min-width: 10px; 10 | padding: 3px 7px; 11 | font-size: $font-size-small; 12 | font-weight: $badge-font-weight; 13 | color: $badge-color; 14 | line-height: $badge-line-height; 15 | vertical-align: middle; 16 | white-space: nowrap; 17 | text-align: center; 18 | background-color: $badge-bg; 19 | border-radius: $badge-border-radius; 20 | 21 | // Empty badges collapse automatically (not available in IE8) 22 | &:empty { 23 | display: none; 24 | } 25 | 26 | // Quick fix for badges in buttons 27 | .btn & { 28 | position: relative; 29 | top: -1px; 30 | } 31 | 32 | .btn-xs &, 33 | .btn-group-xs > .btn & { 34 | top: 0; 35 | padding: 1px 5px; 36 | } 37 | 38 | // [converter] extracted a& to a.badge 39 | 40 | // Account for badges in navs 41 | .list-group-item.active > &, 42 | .nav-pills > .active > a > & { 43 | color: $badge-active-color; 44 | background-color: $badge-active-bg; 45 | } 46 | 47 | .list-group-item > & { 48 | float: right; 49 | } 50 | 51 | .list-group-item > & + & { 52 | margin-right: 5px; 53 | } 54 | 55 | .nav-pills > li > a > & { 56 | margin-left: 3px; 57 | } 58 | } 59 | 60 | // Hover state, but only for links 61 | a.badge { 62 | &:hover, 63 | &:focus { 64 | color: $badge-link-hover-color; 65 | text-decoration: none; 66 | cursor: pointer; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_breadcrumbs.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal; 8 | margin-bottom: $line-height-computed; 9 | list-style: none; 10 | background-color: $breadcrumb-bg; 11 | border-radius: $border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | // [converter] Workaround for https://github.com/sass/libsass/issues/1115 18 | $nbsp: "\00a0"; 19 | content: "#{$breadcrumb-separator}#{$nbsp}"; // Unicode space added since inline-block means non-collapsing white-space 20 | padding: 0 5px; 21 | color: $breadcrumb-color; 22 | } 23 | } 24 | 25 | > .active { 26 | color: $breadcrumb-active-color; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_close.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: ($font-size-base * 1.5); 9 | font-weight: $close-font-weight; 10 | line-height: 1; 11 | color: $close-color; 12 | text-shadow: $close-text-shadow; 13 | @include opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: $close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | @include opacity(.5); 21 | } 22 | 23 | // [converter] extracted button& to button.close 24 | } 25 | 26 | // Additional properties for button version 27 | // iOS requires the button element instead of an anchor tag. 28 | // If you want the anchor version, it requires `href="#"`. 29 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 30 | button.close { 31 | padding: 0; 32 | cursor: pointer; 33 | background: transparent; 34 | border: 0; 35 | -webkit-appearance: none; 36 | } 37 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_code.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Code (inline and block) 3 | // -------------------------------------------------- 4 | 5 | 6 | // Inline and block code styles 7 | code, 8 | kbd, 9 | pre, 10 | samp { 11 | font-family: $font-family-monospace; 12 | } 13 | 14 | // Inline code 15 | code { 16 | padding: 2px 4px; 17 | font-size: 90%; 18 | color: $code-color; 19 | background-color: $code-bg; 20 | border-radius: $border-radius-base; 21 | } 22 | 23 | // User input typically entered via keyboard 24 | kbd { 25 | padding: 2px 4px; 26 | font-size: 90%; 27 | color: $kbd-color; 28 | background-color: $kbd-bg; 29 | border-radius: $border-radius-small; 30 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); 31 | 32 | kbd { 33 | padding: 0; 34 | font-size: 100%; 35 | font-weight: bold; 36 | box-shadow: none; 37 | } 38 | } 39 | 40 | // Blocks of code 41 | pre { 42 | display: block; 43 | padding: (($line-height-computed - 1) / 2); 44 | margin: 0 0 ($line-height-computed / 2); 45 | font-size: ($font-size-base - 1); // 14px to 13px 46 | line-height: $line-height-base; 47 | word-break: break-all; 48 | word-wrap: break-word; 49 | color: $pre-color; 50 | background-color: $pre-bg; 51 | border: 1px solid $pre-border-color; 52 | border-radius: $border-radius-base; 53 | 54 | // Account for some code outputs that place code tags in pre tags 55 | code { 56 | padding: 0; 57 | font-size: inherit; 58 | color: inherit; 59 | white-space: pre-wrap; 60 | background-color: transparent; 61 | border-radius: 0; 62 | } 63 | } 64 | 65 | // Enable scrollable blocks of code 66 | .pre-scrollable { 67 | max-height: $pre-scrollable-max-height; 68 | overflow-y: scroll; 69 | } 70 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_component-animations.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | @include transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | 21 | &.in { display: block; } 22 | // [converter] extracted tr&.in to tr.collapse.in 23 | // [converter] extracted tbody&.in to tbody.collapse.in 24 | } 25 | 26 | tr.collapse.in { display: table-row; } 27 | 28 | tbody.collapse.in { display: table-row-group; } 29 | 30 | .collapsing { 31 | position: relative; 32 | height: 0; 33 | overflow: hidden; 34 | @include transition-property(height, visibility); 35 | @include transition-duration(.35s); 36 | @include transition-timing-function(ease); 37 | } 38 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_grid.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Grid system 3 | // -------------------------------------------------- 4 | 5 | 6 | // Container widths 7 | // 8 | // Set the container width, and override it for fixed navbars in media queries. 9 | 10 | .container { 11 | @include container-fixed; 12 | 13 | @media (min-width: $screen-sm-min) { 14 | width: $container-sm; 15 | } 16 | @media (min-width: $screen-md-min) { 17 | width: $container-md; 18 | } 19 | @media (min-width: $screen-lg-min) { 20 | width: $container-lg; 21 | } 22 | } 23 | 24 | 25 | // Fluid container 26 | // 27 | // Utilizes the mixin meant for fixed width containers, but without any defined 28 | // width for fluid, full width layouts. 29 | 30 | .container-fluid { 31 | @include container-fixed; 32 | } 33 | 34 | 35 | // Row 36 | // 37 | // Rows contain and clear the floats of your columns. 38 | 39 | .row { 40 | @include make-row; 41 | } 42 | 43 | 44 | // Columns 45 | // 46 | // Common styles for small and large grid columns 47 | 48 | @include make-grid-columns; 49 | 50 | 51 | // Extra small grid 52 | // 53 | // Columns, offsets, pushes, and pulls for extra small devices like 54 | // smartphones. 55 | 56 | @include make-grid(xs); 57 | 58 | 59 | // Small grid 60 | // 61 | // Columns, offsets, pushes, and pulls for the small device range, from phones 62 | // to tablets. 63 | 64 | @media (min-width: $screen-sm-min) { 65 | @include make-grid(sm); 66 | } 67 | 68 | 69 | // Medium grid 70 | // 71 | // Columns, offsets, pushes, and pulls for the desktop device range. 72 | 73 | @media (min-width: $screen-md-min) { 74 | @include make-grid(md); 75 | } 76 | 77 | 78 | // Large grid 79 | // 80 | // Columns, offsets, pushes, and pulls for the large desktop device range. 81 | 82 | @media (min-width: $screen-lg-min) { 83 | @include make-grid(lg); 84 | } 85 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_jumbotron.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Jumbotron 3 | // -------------------------------------------------- 4 | 5 | 6 | .jumbotron { 7 | padding-top: $jumbotron-padding; 8 | padding-bottom: $jumbotron-padding; 9 | margin-bottom: $jumbotron-padding; 10 | color: $jumbotron-color; 11 | background-color: $jumbotron-bg; 12 | 13 | h1, 14 | .h1 { 15 | color: $jumbotron-heading-color; 16 | } 17 | 18 | p { 19 | margin-bottom: ($jumbotron-padding / 2); 20 | font-size: $jumbotron-font-size; 21 | font-weight: 200; 22 | } 23 | 24 | > hr { 25 | border-top-color: darken($jumbotron-bg, 10%); 26 | } 27 | 28 | .container &, 29 | .container-fluid & { 30 | border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container 31 | padding-left: ($grid-gutter-width / 2); 32 | padding-right: ($grid-gutter-width / 2); 33 | } 34 | 35 | .container { 36 | max-width: 100%; 37 | } 38 | 39 | @media screen and (min-width: $screen-sm-min) { 40 | padding-top: ($jumbotron-padding * 1.6); 41 | padding-bottom: ($jumbotron-padding * 1.6); 42 | 43 | .container &, 44 | .container-fluid & { 45 | padding-left: ($jumbotron-padding * 2); 46 | padding-right: ($jumbotron-padding * 2); 47 | } 48 | 49 | h1, 50 | .h1 { 51 | font-size: $jumbotron-heading-font-size; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_labels.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // -------------------------------------------------- 4 | 5 | .label { 6 | display: inline; 7 | padding: .2em .6em .3em; 8 | font-size: 75%; 9 | font-weight: bold; 10 | line-height: 1; 11 | color: $label-color; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | border-radius: .25em; 16 | 17 | // [converter] extracted a& to a.label 18 | 19 | // Empty labels collapse automatically (not available in IE8) 20 | &:empty { 21 | display: none; 22 | } 23 | 24 | // Quick fix for labels in buttons 25 | .btn & { 26 | position: relative; 27 | top: -1px; 28 | } 29 | } 30 | 31 | // Add hover effects, but only for links 32 | a.label { 33 | &:hover, 34 | &:focus { 35 | color: $label-link-hover-color; 36 | text-decoration: none; 37 | cursor: pointer; 38 | } 39 | } 40 | 41 | // Colors 42 | // Contextual variations (linked labels get darker on :hover) 43 | 44 | .label-default { 45 | @include label-variant($label-default-bg); 46 | } 47 | 48 | .label-primary { 49 | @include label-variant($label-primary-bg); 50 | } 51 | 52 | .label-success { 53 | @include label-variant($label-success-bg); 54 | } 55 | 56 | .label-info { 57 | @include label-variant($label-info-bg); 58 | } 59 | 60 | .label-warning { 61 | @include label-variant($label-warning-bg); 62 | } 63 | 64 | .label-danger { 65 | @include label-variant($label-danger-bg); 66 | } 67 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_media.scss: -------------------------------------------------------------------------------- 1 | .media { 2 | // Proper spacing between instances of .media 3 | margin-top: 15px; 4 | 5 | &:first-child { 6 | margin-top: 0; 7 | } 8 | } 9 | 10 | .media, 11 | .media-body { 12 | zoom: 1; 13 | overflow: hidden; 14 | } 15 | 16 | .media-body { 17 | width: 10000px; 18 | } 19 | 20 | .media-object { 21 | display: block; 22 | 23 | // Fix collapse in webkit from max-width: 100% and display: table-cell. 24 | &.img-thumbnail { 25 | max-width: none; 26 | } 27 | } 28 | 29 | .media-right, 30 | .media > .pull-right { 31 | padding-left: 10px; 32 | } 33 | 34 | .media-left, 35 | .media > .pull-left { 36 | padding-right: 10px; 37 | } 38 | 39 | .media-left, 40 | .media-right, 41 | .media-body { 42 | display: table-cell; 43 | vertical-align: top; 44 | } 45 | 46 | .media-middle { 47 | vertical-align: middle; 48 | } 49 | 50 | .media-bottom { 51 | vertical-align: bottom; 52 | } 53 | 54 | // Reset margins on headings for tighter default spacing 55 | .media-heading { 56 | margin-top: 0; 57 | margin-bottom: 5px; 58 | } 59 | 60 | // Media list variation 61 | // 62 | // Undo default ul/ol styles 63 | .media-list { 64 | padding-left: 0; 65 | list-style: none; 66 | } 67 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------------------------------- 3 | 4 | // Utilities 5 | @import "mixins/hide-text"; 6 | @import "mixins/opacity"; 7 | @import "mixins/image"; 8 | @import "mixins/labels"; 9 | @import "mixins/reset-filter"; 10 | @import "mixins/resize"; 11 | @import "mixins/responsive-visibility"; 12 | @import "mixins/size"; 13 | @import "mixins/tab-focus"; 14 | @import "mixins/reset-text"; 15 | @import "mixins/text-emphasis"; 16 | @import "mixins/text-overflow"; 17 | @import "mixins/vendor-prefixes"; 18 | 19 | // Components 20 | @import "mixins/alerts"; 21 | @import "mixins/buttons"; 22 | @import "mixins/panels"; 23 | @import "mixins/pagination"; 24 | @import "mixins/list-group"; 25 | @import "mixins/nav-divider"; 26 | @import "mixins/forms"; 27 | @import "mixins/progress-bar"; 28 | @import "mixins/table-row"; 29 | 30 | // Skins 31 | @import "mixins/background-variant"; 32 | @import "mixins/border-radius"; 33 | @import "mixins/gradients"; 34 | 35 | // Layout 36 | @import "mixins/clearfix"; 37 | @import "mixins/center-block"; 38 | @import "mixins/nav-vertical-align"; 39 | @import "mixins/grid-framework"; 40 | @import "mixins/grid"; 41 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_pager.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | padding-left: 0; 8 | margin: $line-height-computed 0; 9 | list-style: none; 10 | text-align: center; 11 | @include clearfix; 12 | li { 13 | display: inline; 14 | > a, 15 | > span { 16 | display: inline-block; 17 | padding: 5px 14px; 18 | background-color: $pager-bg; 19 | border: 1px solid $pager-border; 20 | border-radius: $pager-border-radius; 21 | } 22 | 23 | > a:hover, 24 | > a:focus { 25 | text-decoration: none; 26 | background-color: $pager-hover-bg; 27 | } 28 | } 29 | 30 | .next { 31 | > a, 32 | > span { 33 | float: right; 34 | } 35 | } 36 | 37 | .previous { 38 | > a, 39 | > span { 40 | float: left; 41 | } 42 | } 43 | 44 | .disabled { 45 | > a, 46 | > a:hover, 47 | > a:focus, 48 | > span { 49 | color: $pager-disabled-color; 50 | background-color: $pager-bg; 51 | cursor: $cursor-disabled; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_progress-bars.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Progress bars 3 | // -------------------------------------------------- 4 | 5 | 6 | // Bar animations 7 | // ------------------------- 8 | 9 | // WebKit 10 | @-webkit-keyframes progress-bar-stripes { 11 | from { background-position: 40px 0; } 12 | to { background-position: 0 0; } 13 | } 14 | 15 | // Spec and IE10+ 16 | @keyframes progress-bar-stripes { 17 | from { background-position: 40px 0; } 18 | to { background-position: 0 0; } 19 | } 20 | 21 | 22 | // Bar itself 23 | // ------------------------- 24 | 25 | // Outer container 26 | .progress { 27 | overflow: hidden; 28 | height: $line-height-computed; 29 | margin-bottom: $line-height-computed; 30 | background-color: $progress-bg; 31 | border-radius: $progress-border-radius; 32 | @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); 33 | } 34 | 35 | // Bar of progress 36 | .progress-bar { 37 | float: left; 38 | width: 0%; 39 | height: 100%; 40 | font-size: $font-size-small; 41 | line-height: $line-height-computed; 42 | color: $progress-bar-color; 43 | text-align: center; 44 | background-color: $progress-bar-bg; 45 | @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); 46 | @include transition(width .6s ease); 47 | } 48 | 49 | // Striped bars 50 | // 51 | // `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the 52 | // `.progress-bar-striped` class, which you just add to an existing 53 | // `.progress-bar`. 54 | .progress-striped .progress-bar, 55 | .progress-bar-striped { 56 | @include gradient-striped; 57 | background-size: 40px 40px; 58 | } 59 | 60 | // Call animation for the active one 61 | // 62 | // `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the 63 | // `.progress-bar.active` approach. 64 | .progress.active .progress-bar, 65 | .progress-bar.active { 66 | @include animation(progress-bar-stripes 2s linear infinite); 67 | } 68 | 69 | 70 | // Variations 71 | // ------------------------- 72 | 73 | .progress-bar-success { 74 | @include progress-bar-variant($progress-bar-success-bg); 75 | } 76 | 77 | .progress-bar-info { 78 | @include progress-bar-variant($progress-bar-info-bg); 79 | } 80 | 81 | .progress-bar-warning { 82 | @include progress-bar-variant($progress-bar-warning-bg); 83 | } 84 | 85 | .progress-bar-danger { 86 | @include progress-bar-variant($progress-bar-danger-bg); 87 | } 88 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_responsive-embed.scss: -------------------------------------------------------------------------------- 1 | // Embeds responsive 2 | // 3 | // Credit: Nicolas Gallagher and SUIT CSS. 4 | 5 | .embed-responsive { 6 | position: relative; 7 | display: block; 8 | height: 0; 9 | padding: 0; 10 | overflow: hidden; 11 | 12 | .embed-responsive-item, 13 | iframe, 14 | embed, 15 | object, 16 | video { 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | bottom: 0; 21 | height: 100%; 22 | width: 100%; 23 | border: 0; 24 | } 25 | } 26 | 27 | // Modifier class for 16:9 aspect ratio 28 | .embed-responsive-16by9 { 29 | padding-bottom: 56.25%; 30 | } 31 | 32 | // Modifier class for 4:3 aspect ratio 33 | .embed-responsive-4by3 { 34 | padding-bottom: 75%; 35 | } 36 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_thumbnails.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Mixin and adjust the regular image class 7 | .thumbnail { 8 | display: block; 9 | padding: $thumbnail-padding; 10 | margin-bottom: $line-height-computed; 11 | line-height: $line-height-base; 12 | background-color: $thumbnail-bg; 13 | border: 1px solid $thumbnail-border; 14 | border-radius: $thumbnail-border-radius; 15 | @include transition(border .2s ease-in-out); 16 | 17 | > img, 18 | a > img { 19 | @include img-responsive; 20 | margin-left: auto; 21 | margin-right: auto; 22 | } 23 | 24 | // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active 25 | 26 | // Image captions 27 | .caption { 28 | padding: $thumbnail-caption-padding; 29 | color: $thumbnail-caption-color; 30 | } 31 | } 32 | 33 | // Add a hover state for linked versions only 34 | a.thumbnail:hover, 35 | a.thumbnail:focus, 36 | a.thumbnail.active { 37 | border-color: $link-color; 38 | } 39 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_utilities.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Floats 7 | // ------------------------- 8 | 9 | .clearfix { 10 | @include clearfix; 11 | } 12 | .center-block { 13 | @include center-block; 14 | } 15 | .pull-right { 16 | float: right !important; 17 | } 18 | .pull-left { 19 | float: left !important; 20 | } 21 | 22 | 23 | // Toggling content 24 | // ------------------------- 25 | 26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 27 | .hide { 28 | display: none !important; 29 | } 30 | .show { 31 | display: block !important; 32 | } 33 | .invisible { 34 | visibility: hidden; 35 | } 36 | .text-hide { 37 | @include text-hide; 38 | } 39 | 40 | 41 | // Hide from screenreaders and browsers 42 | // 43 | // Credit: HTML5 Boilerplate 44 | 45 | .hidden { 46 | display: none !important; 47 | } 48 | 49 | 50 | // For Affix plugin 51 | // ------------------------- 52 | 53 | .affix { 54 | position: fixed; 55 | } 56 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/_wells.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: $well-bg; 12 | border: 1px solid $well-border; 13 | border-radius: $border-radius-base; 14 | @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: $border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: $border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_alerts.scss: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | @mixin alert-variant($background, $border, $text-color) { 4 | background-color: $background; 5 | border-color: $border; 6 | color: $text-color; 7 | 8 | hr { 9 | border-top-color: darken($border, 5%); 10 | } 11 | .alert-link { 12 | color: darken($text-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_background-variant.scss: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | // [converter] $parent hack 4 | @mixin bg-variant($parent, $color) { 5 | #{$parent} { 6 | background-color: $color; 7 | } 8 | a#{$parent}:hover, 9 | a#{$parent}:focus { 10 | background-color: darken($color, 10%); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_border-radius.scss: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | @mixin border-top-radius($radius) { 4 | border-top-right-radius: $radius; 5 | border-top-left-radius: $radius; 6 | } 7 | @mixin border-right-radius($radius) { 8 | border-bottom-right-radius: $radius; 9 | border-top-right-radius: $radius; 10 | } 11 | @mixin border-bottom-radius($radius) { 12 | border-bottom-right-radius: $radius; 13 | border-bottom-left-radius: $radius; 14 | } 15 | @mixin border-left-radius($radius) { 16 | border-bottom-left-radius: $radius; 17 | border-top-left-radius: $radius; 18 | } 19 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_buttons.scss: -------------------------------------------------------------------------------- 1 | // Button variants 2 | // 3 | // Easily pump out default styles, as well as :hover, :focus, :active, 4 | // and disabled options for all buttons 5 | 6 | @mixin button-variant($color, $background, $border) { 7 | color: $color; 8 | background-color: $background; 9 | border-color: $border; 10 | 11 | &:focus, 12 | &.focus { 13 | color: $color; 14 | background-color: darken($background, 10%); 15 | border-color: darken($border, 25%); 16 | } 17 | &:hover { 18 | color: $color; 19 | background-color: darken($background, 10%); 20 | border-color: darken($border, 12%); 21 | } 22 | &:active, 23 | &.active, 24 | .open > &.dropdown-toggle { 25 | color: $color; 26 | background-color: darken($background, 10%); 27 | border-color: darken($border, 12%); 28 | 29 | &:hover, 30 | &:focus, 31 | &.focus { 32 | color: $color; 33 | background-color: darken($background, 17%); 34 | border-color: darken($border, 25%); 35 | } 36 | } 37 | &:active, 38 | &.active, 39 | .open > &.dropdown-toggle { 40 | background-image: none; 41 | } 42 | &.disabled, 43 | &[disabled], 44 | fieldset[disabled] & { 45 | &:hover, 46 | &:focus, 47 | &.focus { 48 | background-color: $background; 49 | border-color: $border; 50 | } 51 | } 52 | 53 | .badge { 54 | color: $background; 55 | background-color: $color; 56 | } 57 | } 58 | 59 | // Button sizes 60 | @mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) { 61 | padding: $padding-vertical $padding-horizontal; 62 | font-size: $font-size; 63 | line-height: $line-height; 64 | border-radius: $border-radius; 65 | } 66 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_center-block.scss: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | @mixin center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // 3 | // For modern browsers 4 | // 1. The space content is one way to avoid an Opera bug when the 5 | // contenteditable attribute is included anywhere else in the document. 6 | // Otherwise it causes space to appear at the top and bottom of elements 7 | // that are clearfixed. 8 | // 2. The use of `table` rather than `block` is only necessary if using 9 | // `:before` to contain the top-margins of child elements. 10 | // 11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/ 12 | 13 | @mixin clearfix() { 14 | &:before, 15 | &:after { 16 | content: " "; // 1 17 | display: table; // 2 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_hide-text.scss: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | // 3 | // Heads up! v3 launched with only `.hide-text()`, but per our pattern for 4 | // mixins being reused as classes with the same name, this doesn't hold up. As 5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. 6 | // 7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 8 | 9 | // Deprecated as of v3.0.1 (has been removed in v4) 10 | @mixin hide-text() { 11 | font: 0/0 a; 12 | color: transparent; 13 | text-shadow: none; 14 | background-color: transparent; 15 | border: 0; 16 | } 17 | 18 | // New mixin to use as of v3.0.1 19 | @mixin text-hide() { 20 | @include hide-text; 21 | } 22 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | @mixin img-responsive($display: block) { 10 | display: $display; 11 | max-width: 100%; // Part 1: Set a maximum relative to the parent 12 | height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching 13 | } 14 | 15 | 16 | // Retina image 17 | // 18 | // Short retina mixin for setting background-image and -size. Note that the 19 | // spelling of `min--moz-device-pixel-ratio` is intentional. 20 | @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { 21 | background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-1x}"), "#{$file-1x}")); 22 | 23 | @media 24 | only screen and (-webkit-min-device-pixel-ratio: 2), 25 | only screen and ( min--moz-device-pixel-ratio: 2), 26 | only screen and ( -o-min-device-pixel-ratio: 2/1), 27 | only screen and ( min-device-pixel-ratio: 2), 28 | only screen and ( min-resolution: 192dpi), 29 | only screen and ( min-resolution: 2dppx) { 30 | background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-2x}"), "#{$file-2x}")); 31 | background-size: $width-1x $height-1x; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_labels.scss: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | @mixin label-variant($color) { 4 | background-color: $color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken($color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | @mixin list-group-item-variant($state, $background, $color) { 4 | .list-group-item-#{$state} { 5 | color: $color; 6 | background-color: $background; 7 | 8 | // [converter] extracted a&, button& to a.list-group-item-#{$state}, button.list-group-item-#{$state} 9 | } 10 | 11 | a.list-group-item-#{$state}, 12 | button.list-group-item-#{$state} { 13 | color: $color; 14 | 15 | .list-group-item-heading { 16 | color: inherit; 17 | } 18 | 19 | &:hover, 20 | &:focus { 21 | color: $color; 22 | background-color: darken($background, 5%); 23 | } 24 | &.active, 25 | &.active:hover, 26 | &.active:focus { 27 | color: #fff; 28 | background-color: $color; 29 | border-color: $color; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_nav-divider.scss: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | @mixin nav-divider($color: #e5e5e5) { 6 | height: 1px; 7 | margin: (($line-height-computed / 2) - 1) 0; 8 | overflow: hidden; 9 | background-color: $color; 10 | } 11 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_nav-vertical-align.scss: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | @mixin navbar-vertical-align($element-height) { 7 | margin-top: (($navbar-height - $element-height) / 2); 8 | margin-bottom: (($navbar-height - $element-height) / 2); 9 | } 10 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_opacity.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 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | @mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) { 4 | > li { 5 | > a, 6 | > span { 7 | padding: $padding-vertical $padding-horizontal; 8 | font-size: $font-size; 9 | line-height: $line-height; 10 | } 11 | &:first-child { 12 | > a, 13 | > span { 14 | @include border-left-radius($border-radius); 15 | } 16 | } 17 | &:last-child { 18 | > a, 19 | > span { 20 | @include border-right-radius($border-radius); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_panels.scss: -------------------------------------------------------------------------------- 1 | // Panels 2 | 3 | @mixin panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border) { 4 | border-color: $border; 5 | 6 | & > .panel-heading { 7 | color: $heading-text-color; 8 | background-color: $heading-bg-color; 9 | border-color: $heading-border; 10 | 11 | + .panel-collapse > .panel-body { 12 | border-top-color: $border; 13 | } 14 | .badge { 15 | color: $heading-bg-color; 16 | background-color: $heading-text-color; 17 | } 18 | } 19 | & > .panel-footer { 20 | + .panel-collapse > .panel-body { 21 | border-bottom-color: $border; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_progress-bar.scss: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | @mixin progress-bar-variant($color) { 4 | background-color: $color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | @include gradient-striped; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_reset-filter.scss: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | @mixin reset-filter() { 7 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 8 | } 9 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text() { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size. 4 | font-style: normal; 5 | font-weight: normal; 6 | letter-spacing: normal; 7 | line-break: auto; 8 | line-height: $line-height-base; 9 | text-align: left; // Fallback for where `start` is not supported 10 | text-align: start; 11 | text-decoration: none; 12 | text-shadow: none; 13 | text-transform: none; 14 | white-space: normal; 15 | word-break: normal; 16 | word-spacing: normal; 17 | word-wrap: normal; 18 | } 19 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | resize: $direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_responsive-visibility.scss: -------------------------------------------------------------------------------- 1 | // Responsive utilities 2 | 3 | // 4 | // More easily include all the states for responsive-utilities.less. 5 | // [converter] $parent hack 6 | @mixin responsive-visibility($parent) { 7 | #{$parent} { 8 | display: block !important; 9 | } 10 | table#{$parent} { display: table !important; } 11 | tr#{$parent} { display: table-row !important; } 12 | th#{$parent}, 13 | td#{$parent} { display: table-cell !important; } 14 | } 15 | 16 | // [converter] $parent hack 17 | @mixin responsive-invisibility($parent) { 18 | #{$parent} { 19 | display: none !important; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_size.scss: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | @mixin size($width, $height) { 4 | width: $width; 5 | height: $height; 6 | } 7 | 8 | @mixin square($size) { 9 | @include size($size, $size); 10 | } 11 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_tab-focus.scss: -------------------------------------------------------------------------------- 1 | // WebKit-style focus 2 | 3 | @mixin tab-focus() { 4 | // Default 5 | outline: thin dotted; 6 | // WebKit 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_table-row.scss: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | @mixin table-row-variant($state, $background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table > thead > tr, 7 | .table > tbody > tr, 8 | .table > tfoot > tr { 9 | > td.#{$state}, 10 | > th.#{$state}, 11 | &.#{$state} > td, 12 | &.#{$state} > th { 13 | background-color: $background; 14 | } 15 | } 16 | 17 | // Hover states for `.table-hover` 18 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 19 | .table-hover > tbody > tr { 20 | > td.#{$state}:hover, 21 | > th.#{$state}:hover, 22 | &.#{$state}:hover > td, 23 | &:hover > .#{$state}, 24 | &.#{$state}:hover > th { 25 | background-color: darken($background, 5%); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_text-emphasis.scss: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | // [converter] $parent hack 4 | @mixin text-emphasis-variant($parent, $color) { 5 | #{$parent} { 6 | color: $color; 7 | } 8 | a#{$parent}:hover, 9 | a#{$parent}:focus { 10 | color: darken($color, 10%); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /resources/assets/sass/bootstrap/mixins/_text-overflow.scss: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /resources/assets/sass/components/_btn4.scss: -------------------------------------------------------------------------------- 1 | .btn4 { 2 | display: inline-block; 3 | text-decoration: none !important; 4 | font-size: 0.95em; 5 | padding: 12px 20px 10px 20px; 6 | border-radius: 100px; 7 | border: 2px solid $color-orange; 8 | color: $color-orange; 9 | margin: 10px 0; 10 | text-transform: uppercase; 11 | background-color: transparent; 12 | outline: none !important; 13 | 14 | &:hover, &:active { 15 | text-decoration: none !important; 16 | border: 2px solid darken($color-orange, 10); 17 | color: darken($color-orange, 10); 18 | } 19 | 20 | .disabled { 21 | border: 2px solid #AAA; 22 | color: #AAA; 23 | } 24 | 25 | &.white { 26 | border: 2px solid #FFF; 27 | color: #FFF; 28 | 29 | &:hover, &:focus { 30 | background-color: white; 31 | text-decoration: none; 32 | color: $color-primary; 33 | } 34 | } 35 | 36 | &.main { 37 | border: 2px solid $color-primary; 38 | color: $color-primary; 39 | 40 | &:hover, &:active { 41 | text-decoration: none !important; 42 | border: 2px solid darken($color-primary, 10); 43 | color: darken($color-primary, 10); 44 | } 45 | } 46 | 47 | &.center { 48 | display: inline-block; 49 | text-align: center; 50 | } 51 | } -------------------------------------------------------------------------------- /resources/assets/sass/components/_checkbox.scss: -------------------------------------------------------------------------------- 1 | .checkbox { 2 | width: 37px; 3 | height: 37px; 4 | background-image: url('../../assets/icons/icon_checkmark_unchecked@2x.png'); 5 | background-size: contain; 6 | background-repeat: no-repeat; 7 | display: inline-block; 8 | 9 | &.checked { 10 | background-image: url('../../assets/icons/icon_checkmark_checked@2x.png'); 11 | } 12 | 13 | &.disabled { 14 | background-image: url('../../assets/icons/icon_checkmark@2x.png'); 15 | } 16 | } -------------------------------------------------------------------------------- /resources/assets/sass/components/_form.scss: -------------------------------------------------------------------------------- 1 | textarea.markdown 2 | { 3 | font-family: monospace; 4 | } 5 | 6 | .form-control{ 7 | outline: none !important; 8 | box-shadow: none !important; 9 | 10 | &:focus, &:active{ 11 | border-color: $color-primary !important; 12 | } 13 | } 14 | 15 | input.form-control{ 16 | // padding: 22px 14px; 17 | border-radius: 11px; 18 | } 19 | 20 | input[type=file]{ 21 | padding: 0px; 22 | background: none; 23 | border: 0px none; 24 | } 25 | 26 | .form-group{ 27 | label{ 28 | font-size: 14px; 29 | font-weight: normal; 30 | } 31 | } 32 | 33 | #donation__start-form .row { 34 | margin-bottom:40px; 35 | } -------------------------------------------------------------------------------- /resources/assets/sass/components/_gray.scss: -------------------------------------------------------------------------------- 1 | html.gray { 2 | 3 | /// If 'gray' class is applied to the html element, some elements will need to have their white backgrounds replaced 4 | 5 | background-color: $color-gray; 6 | .content { 7 | background-color: $color-gray; 8 | } 9 | body{ 10 | padding-bottom: 0 !important; 11 | } 12 | .progress-radial .overlay { 13 | background-color: $color-gray; 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /resources/assets/sass/components/_sharebtn.scss: -------------------------------------------------------------------------------- 1 | .share-btn{ 2 | text-decoration: none !important; 3 | width: 40px; 4 | height: 40px; 5 | background-image: url('../../assets/icons/share_icons.png'); 6 | background-size: 120px 80px; 7 | display: inline-block; 8 | 9 | &.share-fb { 10 | background-position: 0px 0px; 11 | 12 | &:hover{ 13 | background-position: 0px 40px; 14 | } 15 | } 16 | 17 | &.share-gp { 18 | background-position: 80px 0px; 19 | 20 | &:hover{ 21 | background-position: 80px 40px; 22 | } 23 | } 24 | 25 | &.share-tw { 26 | background-position: 40px 0px; 27 | 28 | &:hover{ 29 | background-position: 40px 40px; 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /resources/assets/sass/components/_tabs.scss: -------------------------------------------------------------------------------- 1 | $tabs-height: 70px; 2 | 3 | .nav-tabs{ 4 | border: 0px none; 5 | height: $tabs-height; 6 | 7 | li{ 8 | a{ 9 | display: inline-block; 10 | height: $tabs-height; 11 | line-height: $tabs-height; 12 | padding: 0 18px; 13 | margin: 0; 14 | border: 0; 15 | border-radius: 0; 16 | position: relative; 17 | 18 | &:after{ 19 | position: absolute; 20 | content: ''; 21 | width: 1px; 22 | background: #E7E7E7; 23 | right: 0px; 24 | height: $tabs-height - 38px; 25 | top: 19px; 26 | } 27 | 28 | i{ 29 | margin-right: 5px; 30 | } 31 | 32 | &:hover, &:focus{ 33 | border: 0px; 34 | background: $color-gray; 35 | } 36 | } 37 | 38 | &:last-child{ 39 | a{ 40 | &:after{ 41 | display: none; 42 | } 43 | } 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /resources/assets/sass/components/_topnav.scss: -------------------------------------------------------------------------------- 1 | .dropdown-menu{ 2 | 3 | .separator 4 | { 5 | font-size: 0.85em; 6 | padding: 5px; 7 | margin-left: 10px; 8 | font-weight: bold; 9 | color: #555; 10 | text-transform: uppercase; 11 | cursor: default; 12 | } 13 | 14 | .disabled 15 | { 16 | cursor: default; 17 | color: #CCC; 18 | 19 | &:hover{ 20 | background-color: #FFF; 21 | color: #CCC; 22 | } 23 | } 24 | } 25 | 26 | .navbar-default{ 27 | .navbar-brand{ 28 | padding: 0; 29 | } 30 | 31 | .navlogo { 32 | max-height: $navlogo-height; 33 | position: relative; 34 | margin-right: 100px; 35 | margin-top: ($navbar-height - $navlogo-height)/2; 36 | } 37 | 38 | .navbar-nav{ 39 | li{ 40 | a{ 41 | box-sizing: border-box; 42 | padding: 0 30px; 43 | height: $navbar-height; 44 | line-height: $navbar-height; 45 | 46 | &:hover, &:focus{ 47 | // border-bottom: 0px none; 48 | background-color: lighten($color-orange, 43%); 49 | } 50 | } 51 | 52 | &.active{ 53 | a{ 54 | // border-bottom: 0px none; 55 | 56 | &:hover, &:focus{ 57 | // border-bottom: 0px none; 58 | } 59 | } 60 | } 61 | } 62 | } 63 | } -------------------------------------------------------------------------------- /resources/assets/sass/pages/_donation.scss: -------------------------------------------------------------------------------- 1 | #donation__start, #donation__details{ 2 | margin-bottom: 0; 3 | 4 | #donation__start-title, #donation__details-title{ 5 | padding:50px 7% 50px 7%; 6 | } 7 | 8 | #donation__start-options, #donation__details-options{ 9 | padding:7%; 10 | background-color: $color-gray; 11 | } 12 | } 13 | 14 | .grey-bg{ 15 | background-color: $color-gray; 16 | } 17 | 18 | .white-bg{ 19 | background-color: #fff; 20 | } -------------------------------------------------------------------------------- /resources/assets/sass/pages/_post.scss: -------------------------------------------------------------------------------- 1 | .post, .post-brief { 2 | padding-top: 40px; 3 | padding-bottom: 40px; 4 | 5 | .row{ 6 | padding-top: 40px; 7 | padding-bottom: 40px; 8 | 9 | &:first-child{ 10 | padding-top: 0; 11 | } 12 | 13 | &:last-child{ 14 | padding-bottom: 0; 15 | } 16 | } 17 | 18 | img { 19 | max-width: 100%; 20 | } 21 | } -------------------------------------------------------------------------------- /resources/assets/sass/pages/_previous.scss: -------------------------------------------------------------------------------- 1 | .previous { 2 | padding-top: 100px; 3 | } 4 | 5 | .project-overview { 6 | h2 { 7 | margin: 0; 8 | margin-bottom: 15px; 9 | padding: 0; 10 | font-size: 48px; 11 | } 12 | 13 | .project-about { 14 | margin-top: 45px; 15 | margin-bottom: 25px; 16 | color: #ACACAC; 17 | 18 | .item { 19 | color: #7B7B7B; 20 | } 21 | 22 | span { 23 | margin-right: 25px; 24 | } 25 | } 26 | 27 | .radials { 28 | margin-top: 45px; 29 | margin-left: 15px; 30 | margin-bottom: 45px; 31 | } 32 | 33 | .stats { 34 | .stat { 35 | display: inline-block; 36 | margin-right: 50px; 37 | } 38 | } 39 | 40 | hr { 41 | width: 100%; 42 | } 43 | 44 | .previous-project { 45 | margin-bottom: 40px; 46 | } 47 | } -------------------------------------------------------------------------------- /resources/assets/sass/partials/_footer.scss: -------------------------------------------------------------------------------- 1 | footer { 2 | 3 | padding-top: 50px; 4 | padding-bottom: 50px; 5 | font-weight: 300; 6 | 7 | ul { 8 | list-style: none; 9 | margin: 0; 10 | padding: 0; 11 | 12 | li a, li { 13 | color: #8A8A8A; 14 | font-weight: 300; 15 | } 16 | 17 | li { 18 | margin-bottom: 5px; 19 | } 20 | 21 | li.subtitle{ 22 | color: #000; 23 | font-size: 0.9em; 24 | text-transform: uppercase; 25 | margin-bottom: 15px; 26 | font-weight: 400; 27 | } 28 | 29 | margin-bottom: 30px; 30 | } 31 | 32 | .gray { 33 | color: #8A8A8A; 34 | } 35 | 36 | .newsletter__textbox-icon { 37 | padding:3px 5px; 38 | background-color:$color-primary; 39 | } 40 | } 41 | 42 | -------------------------------------------------------------------------------- /resources/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/en/footer.php: -------------------------------------------------------------------------------- 1 | "Homepage", 5 | "about" => "About", 6 | "projects" => "Projects", 7 | "previous_projects" => "Previous projects", 8 | "howdoesitwork" => "How does it work?", 9 | "press" => "Press materials", 10 | "termsofuse" => "Terms of use", 11 | "privacypolicy" => "Privacy policy", 12 | "administration" => "Administration", 13 | "poweredby" => "Powered by" 14 | ]; -------------------------------------------------------------------------------- /resources/lang/en/generic.php: -------------------------------------------------------------------------------- 1 | "Project", 11 | "homepage" => "Homepage", 12 | "pages" => "Pages", 13 | "how_does_it_work" => "How does it work?", 14 | "press_materials" => "Press materials", 15 | "terms_of_use" => "Terms of use", 16 | "privacy_policy" => "Privacy policy", 17 | "donate" => "Donate", 18 | "payment_status" => "Payment status", 19 | "donation_thanks" => "Thank you for your donation", 20 | "donation_detail" => "Your donation", 21 | "posted_on" => "Posted on", 22 | "read_more" => "Read more", 23 | "no_updates" => "The project's makers have not posted any updates yet!", 24 | "no_tiers" => "This project does not have any reward tiers.", 25 | "no_story" => "The project's makers have not posted a story yet!", 26 | "previous" => "Previous projects", 27 | "reached" => "reached", 28 | "donors" => "donors", 29 | "raised" => "total raised", 30 | "vat" => "VAT number", 31 | "address" => "Address", 32 | "contact" => "Contact", 33 | "or_more" => "or more" 34 | ]; -------------------------------------------------------------------------------- /resources/lang/en/home.php: -------------------------------------------------------------------------------- 1 | "Project by", 5 | "ends_at" => "Ends on", 6 | "ended_at" => "Ended on", 7 | "donations" => "donations", 8 | "funded" => "funded", 9 | "support" => "Support this project", 10 | "timeleft" => "There is :left the project ends.", 11 | "aboutproject" => "About this project", 12 | "tier" => [ 13 | "pledge" => ":currency:pledgeAmount" 14 | ], 15 | "rewards" => "Rewards", 16 | "of" => "of", 17 | "daysleft" => "days left", 18 | "hoursleft" => "hours left", 19 | "minutesleft" => "minutes left", 20 | "over" => "This campaign has ended.", 21 | "story" => "Our story", 22 | "updates" => "Updates", 23 | "howdoesitwork" => "How does it work?", 24 | "previousprojects" => "Previous projects", 25 | "complete" => "complete", 26 | "share" => "Share", 27 | "donors" => "donors", 28 | "more_required" => "more required", 29 | "what_we_need" => "What we need", 30 | "reached" => "reached", 31 | "completed" => "completed" 32 | ]; -------------------------------------------------------------------------------- /resources/lang/en/pages.php: -------------------------------------------------------------------------------- 1 | [ 5 | "content" => "

Content here

Content here

" 6 | ] 7 | ]; -------------------------------------------------------------------------------- /resources/lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /resources/lang/nl/backoffice.php: -------------------------------------------------------------------------------- 1 | "Mensen", 5 | "material" => "Materiaal", 6 | "coaching" => "Coaching", 7 | "currency" => "Geld", 8 | ]; 9 | -------------------------------------------------------------------------------- /resources/lang/nl/footer.php: -------------------------------------------------------------------------------- 1 | "Over", 5 | "projects" => "Projecten", 6 | "previous_projects" => "Vorige projecten", 7 | "homepage" => "Homepagina", 8 | "howdoesitwork" => "Hoe werkt het?", 9 | "press" => "Voor de pers", 10 | "termsofuse" => "Gebruikersovereenkomst", 11 | "privacypolicy" => "Privacybeleid", 12 | "administration" => "Administratie", 13 | "poweredby" => "Mogelijk gemaakt door" 14 | ]; -------------------------------------------------------------------------------- /resources/lang/nl/generic.php: -------------------------------------------------------------------------------- 1 | "Project", 11 | "homepage" => "Homepage", 12 | "pages" => "Pagina's", 13 | "how_does_it_work" => "Hoe werkt het?", 14 | "press_materials" => "Voor de pers", 15 | "terms_of_use" => "Gebruikersovereenkomst", 16 | "privacy_policy" => "Privacybeleid", 17 | "donate" => "Doneer", 18 | "payment_status" => "Betaalstatus", 19 | "donation_thanks" => "Bedankt voor uw donatie", 20 | "donation_detail" => "Uw donatie", 21 | "posted_on" => "Gepost op", 22 | "read_more" => "Lees meer", 23 | "no_updates" => "De makers van dit project hebben nog geen updates gepost!", 24 | "no_tiers" => "Dit project heeft nog geen rewards.", 25 | "no_story" => "De makers van dit project hebben nog geen verhaal gepost.", 26 | "previous" => "Vorige projecten", 27 | "reached" => "bereikt", 28 | "donors" => "donoren", 29 | "raised" => "totaal ingezameld", 30 | "vat" => "BTW-nummer", 31 | "address" => "Adres", 32 | "contact" => "Contact", 33 | "or_more" => "of meer" 34 | ]; -------------------------------------------------------------------------------- /resources/lang/nl/home.php: -------------------------------------------------------------------------------- 1 | "Project door", 5 | "ends_at" => "Eindigt op", 6 | "ended_at" => "Eindigde op", 7 | "donations" => "donaties", 8 | "funded" => "funded", 9 | "support" => "Steun dit project", 10 | "timeleft" => "Er zijn :left voor het fundraisen stopt.", 11 | "aboutproject" => "Over dit project", 12 | "tier" => [ 13 | "pledge" => ":currency:pledgeAmount" 14 | ], 15 | "rewards" => "Rewards", 16 | "of" => "van", 17 | "daysleft" => "dagen over", 18 | "hoursleft" => "uren over", 19 | "minutesleft" => "minuten over", 20 | "over" => "Deze campagne is voorbij.", 21 | "story" => "Ons verhaal", 22 | "updates" => "Updates", 23 | "howdoesitwork" => "Hoe werkt het?", 24 | "previousprojects" => "Vorige projecten", 25 | "complete" => "klaar", 26 | "share" => "Delen", 27 | "donors" => "donoren", 28 | "more_required" => "meer nodig", 29 | "what_we_need" => "Wat we nodig hebben", 30 | "reached" => "bereikt", 31 | "completed" => "compleet" 32 | ]; -------------------------------------------------------------------------------- /resources/lang/nl/mails.php: -------------------------------------------------------------------------------- 1 | [ 9 | "subject" => "Bevestig uw donatie", 10 | "teaser" => "Uw donatie werd geregistreerd, maar is nog niet bevestigd.", 11 | "content" => [ 12 | "header" => "Gelieve uw donatie te bevestigen", 13 | "intro" => "

Hello, :name.

We hebben succesvol uw donatieregistratie voor :project ontvangen.

Als een onderdeel van het systeem verwachten wij dat donors hun donaties bevestigen voordat deze erbij geteld worden.

U heeft het volgende beloofd:

", 14 | "confirm" => "Om uw donatie te bevestigen, kan u op de link hieronder klikken:", 15 | "confirm_action" => "Bevestig deze donatie" 16 | ], 17 | ], 18 | 19 | "donation_success" => [ 20 | "subject" => "Donatie bevestigd", 21 | "teaser" => "Uw donatie is bevestigd.", 22 | "content" => [ 23 | "header" => "Bedankt!", 24 | "intro" => "

Hello, :name.

We hebben successvol uw donatiebevestiging voor :project ontvangen.

", 25 | "confirm" => "Om uw beloofde items te raadplegen (samen met uw rewards) klikt u op de link hieronder:", 26 | "confirm_action" => "Bekijk mijn donatie" 27 | ], 28 | ], 29 | 30 | "donation_money_success" => [ 31 | "subject" => "Betaald voor donatie!", 32 | "teaser" => "Uw betaling is afgerond.", 33 | "content" => [ 34 | "header" => "Hartelijk bedankt voor uw donatie!", 35 | "intro" => "

Hello, :name.

We hebben uw donatie-betaling succesvol ontvangen. Dit gaat over €:amount voor :project.

", 36 | "additional_pledge" => "Hierbij heeft u ook het volgende beloofd:", 37 | "additional_pledge_disclaimer" => "Uw betaling werd reeds bevestigd: de maker van dit project neemt mogelijk contact met u op over de bovenstaande items.", 38 | "confirm" => "Om uw beloofde items te raadplegen (samen met uw rewards) klikt u op de link hieronder:", 39 | "confirm_action" => "Bekijk mijn donatie" 40 | ], 41 | ], 42 | ]; 43 | -------------------------------------------------------------------------------- /resources/lang/nl/setup.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'back' => 'Vorige', 8 | 'next' => 'Volgende', 9 | 'finish' => 'Afronden', 10 | 'change' => 'Wijzigen', 11 | 'oops' => 'Oeps!', 12 | ], 13 | 14 | ]; 15 | -------------------------------------------------------------------------------- /resources/views/backoffice/assets.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.backoffice') 2 | 3 | @section('title', trans('backoffice.dashboard')) 4 | 5 | @section('content') 6 |

{{ trans('backoffice.assets') }}

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | @foreach ($images as $image) 16 | 17 | 18 | 19 | 20 | @endforeach 21 | 22 |
ImageActions
Delete
23 | @endsection -------------------------------------------------------------------------------- /resources/views/backoffice/goals/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.backoffice') 2 | 3 | @section('title', trans('backoffice.goals')) 4 | 5 | @section('content') 6 | 7 |
8 |
9 |
10 | 13 |

{{ trans('backoffice.goals') }}

14 |

{{ trans('backoffice.page.goals.about') }}

15 |
16 | 35 |
36 | {{ trans('backoffice.manage_weights') }} 37 |
38 |
39 | 40 | @endsection -------------------------------------------------------------------------------- /resources/views/backoffice/goals/kind.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.backoffice') 2 | 3 | @section('title', trans('backoffice.goals')) 4 | 5 | @section('content') 6 | 7 |
8 |
9 |
10 | 14 |
15 |

{{ trans('backoffice.' . $kind) }}

16 |

{{ trans('backoffice.page.goal_kind.about') }}

17 |
18 | {{ trans('backoffice.create') }} 19 |
20 | @if(Session::has('info')) 21 | 24 | @endif 25 |
26 | @foreach ($donationTypes as $type) 27 |
28 |
29 |

30 | {{ $type->name }} 31 |

32 | Edit 33 |
34 |
35 | {{ trans('backoffice.page.goals.desc') }} 36 |

{{ $type->description }}

37 | {{ trans('backoffice.page.goals.unit_desc') }} 38 |

{{ $type->unit_description }}

39 | {{ trans('backoffice.page.goals.required_amount') }} 40 |

{{ $type->required_amount }}x

41 |
42 |
43 | @endforeach 44 |
45 |
46 |
47 | 48 | @endsection -------------------------------------------------------------------------------- /resources/views/backoffice/goals/weights.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.backoffice') 2 | 3 | @section('title', trans('backoffice.goals')) 4 | 5 | @section('content') 6 | 7 |
8 |
9 |
10 | 14 |

{{ trans('backoffice.goals_weight') }}

15 |

{{ trans('backoffice.page.goals_weight.about') }}

16 |
17 | 18 | @if($errors->any()) 19 | 23 | @endif 24 | 25 |
26 | 27 | {{ csrf_field() }} 28 | 29 | @foreach ($donationKinds as $kind) 30 |
31 | 34 | " 44 | min="0" max="10000" step="1"> 45 |
46 | 47 | @endforeach 48 | 49 | 50 | 51 |
52 | 53 |
54 |
55 | 56 | @endsection -------------------------------------------------------------------------------- /resources/views/backoffice/login.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.core') 2 | 3 | @section('title', 'Log In') 4 | 5 | @section('content') 6 | 7 |
8 |
9 |
10 |
11 |
12 |
13 |

Please sign in using your administrator's credentials.

14 |
15 | @if(Session::has('message')) 16 |
17 | {{ Session::get('message') }} 18 |
19 |
20 | @endif 21 | {!! csrf_field() !!} 22 |
23 | 24 | 25 |
26 | {{-- 27 |
28 | 29 |
30 | --}} 31 |
32 | 33 |
34 | @if($errors->has()) 35 |
36 | 41 | @endif 42 |
43 |
44 |
45 |
46 | @endsection 47 | 48 | -------------------------------------------------------------------------------- /resources/views/backoffice/posts/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.backoffice') 2 | 3 | @section('title', trans('backoffice.posts')) 4 | 5 | @section('content') 6 | 7 |
8 |
9 |

{{ trans('backoffice.posts') }}

10 |

11 | {{ trans('backoffice.page.posts.about') }} 12 |

13 |
14 | @if(count($posts) == 0) 15 | 18 | @endif 19 | @if(Session::has('info')) 20 | 23 | @endif 24 | @if($errors->any()) 25 | 29 | @endif 30 | 31 | {{ trans('backoffice.create_post') }} 32 |
33 | @foreach ($posts as $post) 34 |
35 |
36 | 37 | {{ trans('backoffice.edit') }} 38 | 39 |

{{ $post->title }}

40 |
41 | {!! Markdown::convertToHtml($post->content) !!} 42 |
43 |
44 |
45 | @endforeach 46 |
47 |
48 | 49 | @endsection -------------------------------------------------------------------------------- /resources/views/backoffice/previous/import.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.backoffice') 2 | 3 | @section('title', trans('backoffice.tiers')) 4 | 5 | @section('content') 6 |
7 |
8 | 9 |

{{ trans('backoffice.import.title') }}

10 |

{{ trans('backoffice.import.about') }}

11 |
12 | 13 | @if(Session::has('info')) 14 | 17 | @endif 18 | 19 | @if($errors->any()) 20 | 24 | @endif 25 | 26 |
27 | 28 | 29 | {{ csrf_field() }} 30 |
31 | 34 | " 44 | > 45 | 46 | {{ trans('backoffice.import_form.url.info') }} 47 | 48 |
49 |
50 | 51 | 52 |
53 |
54 |
55 | @endsection -------------------------------------------------------------------------------- /resources/views/backoffice/previous/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.backoffice') 2 | 3 | @section('title', trans('backoffice.posts')) 4 | 5 | @section('content') 6 | 7 |
8 |
9 |

{{ trans('backoffice.previous_projects') }}

10 |

11 | {{ trans('backoffice.page.previous_projects.about') }} 12 |

13 |
14 | @if(count($archived) == 0) 15 | 18 | @endif 19 | @if(Session::has('info')) 20 | 23 | @endif 24 | @if($errors->any()) 25 | 29 | @endif 30 | 31 | {{ trans('backoffice.import_previous_project') }} 32 |
33 | @foreach ($archived as $archived) 34 |
35 |
36 | 37 | {{ trans('backoffice.delete') }} 38 | 39 |

{{ $archived->title }}

40 |
41 | {{ $archived->description }} 42 |
43 |
Completed: @if ($archived->success) YES @else NO @endif
44 |
45 |
46 | @endforeach 47 |
48 |
49 | 50 | @endsection -------------------------------------------------------------------------------- /resources/views/backoffice/tiers/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.backoffice') 2 | 3 | @section('title', trans('backoffice.tiers')) 4 | 5 | @section('content') 6 | 7 |
8 |
9 |

{{ trans('backoffice.tiers') }}

10 |

11 | {{ trans('backoffice.page.tiers.about') }} 12 |

13 |
14 | @if(count($tiers) == 0) 15 | 18 | @endif 19 | @if(Session::has('info')) 20 | 23 | @endif 24 | @if($errors->any()) 25 | 29 | @endif 30 | 31 | {{ trans('backoffice.create_tier') }} 32 |
33 | @foreach ($tiers as $tier) 34 |
35 |
36 | 37 | {{ trans('backoffice.edit') }} 38 | 39 | 40 | 41 | {{ trans('home.tier.pledge', [ 42 | "currency" => "€", 43 | "pledgeAmount" => $tier->pledge 44 | ]) }} 45 | 46 |
47 |
48 | {!! nl2br(htmlspecialchars($tier->description)) !!} 49 |
50 |
51 |
52 | @endforeach 53 |
54 |
55 | 56 | @endsection -------------------------------------------------------------------------------- /resources/views/design.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.core') 2 | 3 | @section('title', trans('generic.homepage')) 4 | 5 | @section('content') 6 |
7 |
8 |
9 | 10 |

Reusable components

11 |

btn4

12 |
13 | 14 | .btn4 15 | 16 |

17 | 18 | Button text 19 | 20 |
21 |
22 |
23 |
24 | 25 | @endsection -------------------------------------------------------------------------------- /resources/views/errors/503.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Be right back. 5 | 6 | 7 | 8 | 39 | 40 | 41 |
42 |
43 |
Be right back.
44 |
45 |
46 | 47 | 48 | -------------------------------------------------------------------------------- /resources/views/front/donation/payment_status.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.core') 2 | 3 | @section('title', trans('generic.payment_status')) 4 | 5 | @section('content') 6 |
7 | 8 |
10 |
11 | 12 |
13 |
14 |
15 | 16 |

{{ trans('donation.payment_status_page.title') }}

17 | {!! trans('donation.payment_status_page.description', ['status' => trans('donation.payment_status.' . $paymentStatus)]) !!} 18 |
19 |
20 |
21 |
22 | @endsection -------------------------------------------------------------------------------- /resources/views/front/donation/thanks.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.core') 2 | 3 | @section('title', trans('generic.donation_thanks')) 4 | 5 | @section('content') 6 |
7 | 8 |
10 |
11 | 12 |
13 |
14 |
15 | 16 |

{{ trans('donation.thanks.title') }}

17 |
18 | {!! trans('donation.thanks.description') !!} 19 |
20 |
21 |
22 |
23 | @endsection -------------------------------------------------------------------------------- /resources/views/front/pages/detail.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.core') 2 | 3 | @if ($page->default) 4 | title = trans('generic.' . $page->title) ?> 5 | @endif 6 | 7 | @section('title', $page->title) 8 | 9 | @section('meta') 10 | @include('partials.meta.page') 11 | @endsection 12 | 13 | @section('content') 14 | 15 |
16 |
17 | 20 |
21 |
22 |
23 |
24 |
25 | {!! Markdown::convertToHtml($page->content) !!} 26 |
27 |
28 |
29 |
30 | 31 | @endsection -------------------------------------------------------------------------------- /resources/views/front/pages/previous.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.core') 2 | 3 | @section('title', trans('generic.previous')) 4 | 5 | @section('meta') 6 | @include('partials.meta.default') 7 | @endsection 8 | 9 | @section('html', 'class="gray"') 10 | 11 | @section('content') 12 | 13 | 35 | @endsection 36 | -------------------------------------------------------------------------------- /resources/views/front/posts/detail.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.core') 2 | 3 | @section('title', $post->title) 4 | 5 | @section('meta') 6 | @include('partials.meta.post') 7 | @endsection 8 | 9 | @section('content') 10 | 11 |
12 |
13 | 16 |
17 |
18 |
19 |
20 | 21 |

{{ trans('generic.posted_on') }} {{ $post->created_at->format("d/m/Y") }}

22 |
23 |
24 | {!! Markdown::convertToHtml($post->content) !!} 25 |
26 |
27 |
28 |
29 | 30 | @endsection -------------------------------------------------------------------------------- /resources/views/front/posts/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.core') 2 | 3 | @section('title', trans('generic.homepage')) 4 | 5 | @section('content') 6 | 7 | @endsection -------------------------------------------------------------------------------- /resources/views/layouts/setup.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | @yield('title') 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 | 16 | @include('setup.progress') 17 |
18 |
19 |
20 |
21 | @yield('content') 22 |
23 |
24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /resources/views/layouts/setup_simple.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | @yield('title') 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 | 16 |
17 |
18 |
19 |
20 | @yield('content') 21 |
22 |
23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /resources/views/mails/donation_confirm.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.mails.default') 2 | 3 | @section('subject') 4 | {{ trans('mails.donation_confirm.subject') }} | {{ $projectTitle }} 5 | @endsection 6 | 7 | @section('teaser') 8 | {{ trans('mails.donation_confirm.teaser') }} 9 | @endsection 10 | 11 | @section('content') 12 |

{{ trans('mails.donation_confirm.content.header') }}

13 |

{!! trans('mails.donation_confirm.content.intro', ['name' => $name, 'project' => $projectTitle]) !!}

14 |
15 | @foreach ($types as $type) 16 | @if (is_array($type)) 17 | {{ trans('backoffice.' . $type['kind']) }}
18 | {{ $type['amount'] }}x {{ $type['name'] }}
19 | @endif 20 | @endforeach 21 | @if (isset($types['currency'])) 22 | {{ trans('backoffice.currency') }}
23 | {{ trans('donation.money_pledge') }} €{{ $types['currency'] }}
24 | @endif 25 |
26 |

{{ trans('mails.donation_confirm.content.confirm') }}

27 | {{ trans('mails.donation_confirm.content.confirm_action') }} 28 | @endsection -------------------------------------------------------------------------------- /resources/views/mails/donation_money_success.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.mails.default') 2 | 3 | @section('subject') 4 | {{ trans('mails.donation_money_success.subject') }} | {{ $projectTitle }} 5 | @endsection 6 | 7 | @section('teaser') 8 | {{ trans('mails.donation_money_success.teaser') }} 9 | @endsection 10 | 11 | @section('content') 12 |

{{ trans('mails.donation_money_success.content.header') }}

13 |

{!! trans('mails.donation_money_success.content.intro', ['name' => $name, 'project' => $projectTitle, 'amount' => $amount]) !!}

14 | @if (count($donationContents) > 0) 15 |

{{ trans('mails.donation_money_success.content.additional_pledge') }}

16 |
17 | @foreach ($donationContents as $kind => $kindContent) 18 | {{ trans('backoffice.' . $kind) }}
19 | @foreach ($kindContent as $item) 20 | {{ $item["count"] }}x {{ $item["name"] }}
21 | @endforeach 22 | @endforeach 23 |
24 |

{{ trans('mails.donation_money_success.content.additional_pledge_disclaimer') }}

25 | @endif 26 |

{{ trans('mails.donation_money_success.content.confirm') }}

27 | {{ trans('mails.donation_money_success.content.confirm_action') }} 28 | @endsection -------------------------------------------------------------------------------- /resources/views/mails/donation_success.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.mails.default') 2 | 3 | @section('subject') 4 | {{ trans('mails.donation_confirm.subject') }} | {{ $projectTitle }} 5 | @endsection 6 | 7 | @section('teaser') 8 | {{ trans('mails.donation_confirm.teaser') }} 9 | @endsection 10 | 11 | @section('content') 12 |

{{ trans('mails.donation_success.content.header') }}

13 |

{!! trans('mails.donation_success.content.intro', ['name' => $name, 'project' => $projectTitle]) !!}

14 |

{{ trans('mails.donation_success.content.confirm') }}

15 | {{ trans('mails.donation_success.content.confirm_action') }} 16 | @endsection -------------------------------------------------------------------------------- /resources/views/mails/notification/donation_confirmed.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.mails.default') 2 | 3 | @section('subject') 4 | {{ trans('mails.notification_donation_confirmed.subject') }} | {{ $projectTitle }} 5 | @endsection 6 | 7 | @section('teaser') 8 | {{ trans('mails.notification_donation_confirmed.teaser') }} 9 | @endsection 10 | 11 | @section('content') 12 |

{{ trans('mails.notification_donation_confirmed.content.header') }}

13 | {!! trans('mails.notification_donation_confirmed.content.intro', ['project' => $projectTitle]) !!} 14 |
15 | @if ($amount > 0) 16 | {{ trans('backoffice.currency') }}
17 | {{ trans('donation.money_pledge') }} €{{ $amount }}
18 | @endif 19 | @if (count($donationContents) > 0) 20 | @foreach ($donationContents as $kind => $kindContent) 21 | {{ trans('backoffice.' . $kind) }}
22 | @foreach ($kindContent as $item) 23 | {{ $item["count"] }}x {{ $item["name"] }}
24 | @endforeach 25 | @endforeach 26 | @endif 27 |
28 | @if ($userMessage != null && $userMessage != "") 29 | {{ trans('mails.notification_donation_confirmed.content.message', ['name' => $name]) }}:
30 | {!! nl2br(htmlspecialchars($userMessage)) !!} 31 | @endif 32 |

{{ trans('mails.notification_donation_confirmed.content.closing', ['name' => $name]) }}: {{ $email }}.

33 | @endsection -------------------------------------------------------------------------------- /resources/views/mails/test.blade.php: -------------------------------------------------------------------------------- 1 |

You have correctly set up the mail server for your W4P installation.

-------------------------------------------------------------------------------- /resources/views/partials/ga.blade.php: -------------------------------------------------------------------------------- 1 | @if (property_exists($settings, 'analytics_id') && 2 | !empty($settings->analytics_id)) 3 | 12 | @endif -------------------------------------------------------------------------------- /resources/views/partials/meta/page.blade.php: -------------------------------------------------------------------------------- 1 | {{-- Facebook OpenGraph --}} 2 | 3 | 4 | 5 | {{-- Dublin Core --}} 6 | 7 | 8 | 9 | {{-- Twitter cards --}} 10 | @if ($settings->social->twitter_handle != null) 11 | 12 | 13 | 14 | @if ($settings->social->seo_image) 15 | 16 | @else 17 | 18 | @endif 19 | @endif -------------------------------------------------------------------------------- /resources/views/partials/meta/post.blade.php: -------------------------------------------------------------------------------- 1 | 2 | {{-- Facebook OpenGraph --}} 3 | 4 | 5 | 6 | @if ($settings->social->seo_image) 7 | 8 | @else 9 | 10 | @endif 11 | 12 | {{-- Dublin Core --}} 13 | 14 | 15 | 16 | {{-- Twitter cards --}} 17 | @if ($settings->social->twitter_handle != null) 18 | 19 | 20 | 21 | 22 | @if ($settings->social->seo_image) 23 | 24 | @else 25 | 26 | @endif 27 | @endif -------------------------------------------------------------------------------- /resources/views/setup/prerequisite_failures.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.setup_simple') 2 | @section('title', trans('setup.steps.admin') . " | " . trans('setup.generic.wizard')) 3 | @section('content') 4 |
5 |
6 |

{{ trans('setup.preq.prerequisite_page_title') }}

7 |

{{ trans('setup.preq.prerequisite_page_description') }}

8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | @foreach ($preqs as $preq) 18 | fails) class="danger" @else class="success" @endif> 19 | 20 | 23 | 24 | @endforeach 25 | 26 |
{{ trans('setup.preq.prerequisite') }}{{ trans('setup.preq.status') }}
{{ $preq->title }} 21 | {!! $preq->description !!} 22 |
27 |
28 |
29 | @endsection -------------------------------------------------------------------------------- /resources/views/setup/progress.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 11 |
12 | -------------------------------------------------------------------------------- /resources/views/setup/step6.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.setup') 2 | 3 | @section('title', trans('setup.steps.finish') . " | " . trans('setup.generic.wizard')) 4 | 5 | @section('content') 6 |
7 |
8 |

{{ trans('setup.detail.finish.title') }}

9 |
10 |

{{ trans('setup.detail.finish.paragraph') }}

11 |
12 | 13 | {{ csrf_field() }} 14 |
15 | 17 | ← {{ trans('setup.generic.back') }} 18 | 19 | 22 |
23 |
24 |
25 | @endsection -------------------------------------------------------------------------------- /resources/views/setup/welcome.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.setup') 2 | 3 | @section('title', trans('setup.steps.welcome') . " | " . trans('setup.generic.wizard')) 4 | 5 | @section('content') 6 |
7 |
8 |

{{ trans('setup.detail.welcome.title') }}

9 |

{{ trans('setup.detail.welcome.paragraph') }}

10 | {{ trans('setup.detail.welcome.button') }} → 11 |
12 |
13 | @endsection -------------------------------------------------------------------------------- /resources/views/vendor/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/resources/views/vendor/.gitkeep -------------------------------------------------------------------------------- /server.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 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /storage/debugbar/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | compiled.php 4 | services.json 5 | events.scanned.php 6 | routes.scanned.php 7 | down 8 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/Setup/Controllers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/tests/Setup/Controllers/.gitkeep -------------------------------------------------------------------------------- /tests/Setup/Controllers/SetupStepsAdministrationTest.php: -------------------------------------------------------------------------------- 1 | visit('/setup') 16 | ->see('Welcome'); 17 | } 18 | 19 | public function testAdministrationStep() 20 | { 21 | $this->visit('/setup/1') 22 | ->see('Password') 23 | ->see('Confirm password'); 24 | 25 | // Check if the pwd setting exists 26 | $this->assertFalse(Setting::exists('pwd')); 27 | } 28 | 29 | public function testPasswordSubmitNotLongEnough() { 30 | $this->visit('/setup/1') 31 | ->see('Password') 32 | ->see('Confirm password'); 33 | 34 | // Start a new session 35 | $this->startSession(); 36 | 37 | // POST a new password (not long enough) 38 | $crawler = $this->call('POST', '/setup/1', [ 39 | "password" => "root", 40 | "passwordConfirm" => "root" 41 | ]); 42 | 43 | // Check we are being redirected back 44 | $this->assertRedirectedToRoute('setup::step', 1); 45 | $this->followRedirects(); 46 | $this->see('must be 6 characters or longer'); 47 | 48 | // Check if the pwd setting exists 49 | $this->assertFalse(Setting::exists('pwd')); 50 | } 51 | 52 | public function testPasswordSubmit() { 53 | // POST a new password 54 | $crawler = $this->call('POST', '/setup/1', [ 55 | "password" => "rootroot", 56 | "passwordConfirm" => "rootroot" 57 | ]); 58 | 59 | // Check if we are redirected to the next step 60 | $this->assertRedirectedToRoute('setup::step', 2); 61 | 62 | // Check if the pwd setting exists 63 | $this->assertTrue(Setting::exists('pwd')); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /tests/Setup/Controllers/SetupStepsEmailTest.php: -------------------------------------------------------------------------------- 1 | visit('/setup/5') 16 | ->see('Email Setup'); 17 | $this->assertFalse(Setting::exists('email.host')); 18 | $this->assertFalse(Setting::exists('email.port')); 19 | $this->assertFalse(Setting::exists('email.username')); 20 | $this->assertFalse(Setting::exists('email.password')); 21 | $this->assertFalse(Setting::exists('email.encryption')); 22 | $this->assertFalse(Setting::exists('email.from')); 23 | $this->assertFalse(Setting::exists('email.name')); 24 | $this->assertFalse(Setting::exists('email.valid')); 25 | } 26 | 27 | // TODO: Unit test form submission 28 | } -------------------------------------------------------------------------------- /tests/Setup/Controllers/SetupStepsPlatformTest.php: -------------------------------------------------------------------------------- 1 | visit('/setup/2') 16 | ->see('Platform Setup'); 17 | $this->assertFalse(Setting::exists('platform.owner')); 18 | $this->assertFalse(Setting::exists('platform.analytics-id')); 19 | $this->assertFalse(Setting::exists('platform.mollie-key')); 20 | } 21 | 22 | // TODO: Unit test form submission 23 | } -------------------------------------------------------------------------------- /tests/Setup/Controllers/SetupStepsProjectTest.php: -------------------------------------------------------------------------------- 1 | visit('/setup/4') 16 | ->see('Project Setup'); 17 | $this->assertFalse(Setting::exists('project.title')); 18 | $this->assertFalse(Setting::exists('project.brief')); 19 | } 20 | 21 | // TODO: Unit test form submission 22 | } -------------------------------------------------------------------------------- /tests/Setup/Middleware/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/tests/Setup/Middleware/.gitkeep -------------------------------------------------------------------------------- /tests/Setup/Middleware/EnvironmentReadyTest.php: -------------------------------------------------------------------------------- 1 | startSession(); 15 | // Environment is not ready, but request homepage 16 | $crawler = $this->call('GET', '/'); 17 | // Assert we're being redirected 18 | // TODO: If all the setup steps are completed, this should redirect elsewhere (pwd is the only tested setting so far) 19 | $this->assertRedirectedToRoute('setup::step', 2); 20 | // Follow the redirects 21 | $this->followRedirects(); 22 | // Assert that the response is OK 23 | $this->assertResponseOk(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/W4P/Controllers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/tests/W4P/Controllers/.gitkeep -------------------------------------------------------------------------------- /tests/W4P/Mails/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/tests/W4P/Mails/.gitkeep -------------------------------------------------------------------------------- /tests/W4P/Mails/MailTest.php: -------------------------------------------------------------------------------- 1 | markTestSkipped("MailCatcher is not running. Test skipped."); 19 | } else { 20 | Mail::queue('mails.test', [], function($message) { 21 | $message->to("test@dev.test", "test") 22 | ->subject('Test message'); 23 | }); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tests/W4P/Middleware/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openknowledgebe/W4P/c8cbf69178a301f7b478bce0cf984243642d46a7/tests/W4P/Middleware/.gitkeep -------------------------------------------------------------------------------- /tests/W4P/Middleware/SetupInaccessibleTest.php: -------------------------------------------------------------------------------- 1 | startSession(); 15 | // Environment is not ready, but request homepage 16 | $crawler = $this->call('GET', '/setup'); 17 | // Assert we're being redirected 18 | $this->assertRedirectedToRoute('home'); 19 | // Follow the redirects 20 | $this->followRedirects(); 21 | // Assert that the response is OK 22 | $this->assertResponseOk(); 23 | } 24 | } 25 | --------------------------------------------------------------------------------