From 57cca8a6a4349a64f220c7885564c994179e09fb Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Mon, 12 Mar 2018 15:37:05 +0200 Subject: [PATCH] Support accepting terms --- app/Constants.php | 1 + app/Http/Controllers/UserController.php | 14 +++++++ app/Models/User.php | 17 ++++++++ ...8_03_08_150414_add_slack_notifications.php | 8 ++++ resources/lang/en/texts.php | 2 + resources/views/header.blade.php | 4 ++ .../views/partials/accept_terms.blade.php | 41 +++++++++++++++++++ routes/web.php | 1 + 8 files changed, 88 insertions(+) create mode 100644 resources/views/partials/accept_terms.blade.php diff --git a/app/Constants.php b/app/Constants.php index 5992008d83f1..e17d74aa8ab6 100644 --- a/app/Constants.php +++ b/app/Constants.php @@ -340,6 +340,7 @@ if (! defined('APP_NAME')) { define('NINJA_DOCS_URL', env('NINJA_DOCS_URL', 'http://docs.invoiceninja.com/en/latest')); define('NINJA_DATE', '2000-01-01'); define('NINJA_VERSION', '4.2.2' . env('NINJA_VERSION_SUFFIX')); + define('NINJA_TERMS_VERSION', ''); define('SOCIAL_LINK_FACEBOOK', env('SOCIAL_LINK_FACEBOOK', 'https://www.facebook.com/invoiceninja')); define('SOCIAL_LINK_TWITTER', env('SOCIAL_LINK_TWITTER', 'https://twitter.com/invoiceninja')); diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index e359f986153e..d1fbe6f4196c 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -392,4 +392,18 @@ class UserController extends BaseController return RESULT_SUCCESS; } + + public function acceptTerms() + { + $ip = Request::getClientIp(); + $referer = Request::server('HTTP_REFERER'); + $message = ''; + + if (request()->accepted_terms) { + auth()->user()->acceptedLatestTerms($ip); + $message = trans('texts.accepted_terms'); + } + + return redirect($referer)->withMessage($message); + } } diff --git a/app/Models/User.php b/app/Models/User.php index 34514cbe5dc2..0e085154dfcf 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -452,6 +452,23 @@ class User extends Authenticatable { return $this->slack_webhook_url; } + + public function hasAcceptedLatestTerms() + { + if (! NINJA_TERMS_VERSION) { + return true; + } + + return $this->accepted_terms_version == NINJA_TERMS_VERSION; + } + + public function acceptedLatestTerms($ip) + { + $this->accepted_terms_version = NINJA_TERMS_VERSION; + $this->accepted_terms_timestamp = date('Y-m-d H:i:s'); + $this->accepted_terms_ip = $ip; + $this->save(); + } } User::created(function ($user) diff --git a/database/migrations/2018_03_08_150414_add_slack_notifications.php b/database/migrations/2018_03_08_150414_add_slack_notifications.php index 81d81de7eec7..88f4843ffa79 100644 --- a/database/migrations/2018_03_08_150414_add_slack_notifications.php +++ b/database/migrations/2018_03_08_150414_add_slack_notifications.php @@ -15,6 +15,10 @@ class AddSlackNotifications extends Migration { Schema::table('users', function ($table) { $table->string('slack_webhook_url')->nullable(); + + $table->string('accepted_terms_version')->nullable(); + $table->timestamp('accepted_terms_timestamp')->nullable(); + $table->string('accepted_terms_ip')->nullable(); }); } @@ -27,6 +31,10 @@ class AddSlackNotifications extends Migration { Schema::table('users', function ($table) { $table->dropColumn('slack_webhook_url'); + + $table->dropColumn('accepted_terms_version'); + $table->dropColumn('accepted_terms_timestamp'); + $table->dropColumn('accepted_terms_ip'); }); } } diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 101daedda5b3..ca5c1908feb7 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -2770,6 +2770,8 @@ $LANG = array( 'received_new_payment' => 'You\'ve received a new payment!', 'slack_webhook_help' => 'Receive payment notifications using :link.', 'slack_incoming_webhooks' => 'Slack incoming webhooks', + 'accept' => 'Accept', + 'accepted_terms' => 'Successfully accepted the latest terms of service', ); diff --git a/resources/views/header.blade.php b/resources/views/header.blade.php index a971b39f3258..cbfbc2556adb 100644 --- a/resources/views/header.blade.php +++ b/resources/views/header.blade.php @@ -501,6 +501,10 @@ @include('partials.sign_up') @include('partials.keyboard_shortcuts') +@if (auth()->check() && ! auth()->user()->hasAcceptedLatestTerms()) + @include('partials.accept_terms') +@endif +

 

diff --git a/resources/views/partials/accept_terms.blade.php b/resources/views/partials/accept_terms.blade.php new file mode 100644 index 000000000000..e972802b631e --- /dev/null +++ b/resources/views/partials/accept_terms.blade.php @@ -0,0 +1,41 @@ +{!! Former::open('/accept_terms')->id('acceptTermsForm')->rules([ + 'accepted_terms' => 'required', + ]) !!} + + + +{!! Former::close() !!} + + diff --git a/routes/web.php b/routes/web.php index fda905944b1e..34eb3be847fd 100644 --- a/routes/web.php +++ b/routes/web.php @@ -129,6 +129,7 @@ Route::group(['middleware' => ['lookup:user', 'auth:user']], function () { Route::post('save_sidebar_state', 'UserController@saveSidebarState'); Route::post('contact_us', 'HomeController@contactUs'); Route::post('handle_command', 'BotController@handleCommand'); + Route::post('accept_terms', 'UserController@acceptTerms'); Route::post('signup/validate', 'AccountController@checkEmail'); Route::post('signup/submit', 'AccountController@submitSignup');