diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 5c0daa715cd8..a93f6cceb908 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -1,7 +1,6 @@ - 0 && !$prevUserId)) { return Redirect::to('/login'); } - + if ($guestKey && !$prevUserId) { $user = User::where('password', '=', $guestKey)->first(); @@ -101,8 +97,9 @@ class AccountController extends BaseController Auth::login($user, true); event(new UserLoggedIn()); - + $redirectTo = Input::get('redirect_to') ?: 'invoices/create'; + return Redirect::to($redirectTo)->with('sign_up', Input::get('sign_up')); } @@ -129,13 +126,14 @@ class AccountController extends BaseController public function getSearchData() { $data = $this->accountRepo->getSearchData(); + return Response::json($data); } public function showSection($section = false) { if (!$section) { - return Redirect::to('/settings/' . ACCOUNT_COMPANY_DETAILS, 301); + return Redirect::to('/settings/'.ACCOUNT_COMPANY_DETAILS, 301); } if ($section == ACCOUNT_COMPANY_DETAILS) { @@ -152,7 +150,7 @@ class AccountController extends BaseController return View::make('accounts.import_export', ['title' => trans('texts.import_export')]); } elseif ($section == ACCOUNT_INVOICE_DESIGN || $section == ACCOUNT_CUSTOMIZE_DESIGN) { return self::showInvoiceDesign($section); - } elseif ($section == ACCOUNT_CLIENT_VIEW_STYLING) { + } elseif ($section == ACCOUNT_CLIENT_PORTAL) { return self::showClientViewStyling(); } elseif ($section === ACCOUNT_TEMPLATES_AND_REMINDERS) { return self::showTemplates(); @@ -166,8 +164,9 @@ class AccountController extends BaseController $data = [ 'account' => Account::with('users')->findOrFail(Auth::user()->account_id), 'title' => trans("texts.{$section}"), - 'section' => $section + 'section' => $section, ]; + return View::make("accounts.{$section}", $data); } } @@ -192,7 +191,7 @@ class AccountController extends BaseController $account = Auth::user()->account; $recurringHours = []; - for ($i=0; $i<24; $i++) { + for ($i = 0; $i<24; $i++) { if ($account->military_time) { $format = 'H:i'; } else { @@ -205,8 +204,9 @@ class AccountController extends BaseController 'account' => Account::with('users')->findOrFail(Auth::user()->account_id), 'title' => trans("texts.invoice_settings"), 'section' => ACCOUNT_INVOICE_SETTINGS, - 'recurringHours' => $recurringHours + 'recurringHours' => $recurringHours, ]; + return View::make("accounts.invoice_settings", $data); } @@ -215,7 +215,7 @@ class AccountController extends BaseController // check that logo is less than the max file size $account = Auth::user()->account; if ($account->isLogoTooLarge()) { - Session::flash('warning', trans('texts.logo_too_large', ['size' => $account->getLogoSize() . 'KB'])); + Session::flash('warning', trans('texts.logo_too_large', ['size' => $account->getLogoSize().'KB'])); } $data = [ @@ -233,9 +233,9 @@ class AccountController extends BaseController { $oauthLoginUrls = []; foreach (AuthService::$providers as $provider) { - $oauthLoginUrls[] = ['label' => $provider, 'url' => '/auth/' . strtolower($provider)]; + $oauthLoginUrls[] = ['label' => $provider, 'url' => '/auth/'.strtolower($provider)]; } - + $data = [ 'account' => Account::with('users')->findOrFail(Auth::user()->account_id), 'title' => trans('texts.user_details'), @@ -268,9 +268,9 @@ class AccountController extends BaseController $account = Auth::user()->account; $account->load('account_gateways'); $count = count($account->account_gateways); - + if ($accountGateway = $account->getGatewayConfig(GATEWAY_STRIPE)) { - if ( ! $accountGateway->getPublishableStripeKey()) { + if (! $accountGateway->getPublishableStripeKey()) { Session::flash('warning', trans('texts.missing_publishable_key')); } } @@ -366,6 +366,7 @@ class AccountController extends BaseController if ($section == ACCOUNT_CUSTOMIZE_DESIGN) { $data['customDesign'] = ($account->custom_design && !$design) ? $account->custom_design : $design; } + return View::make("accounts.{$section}", $data); } @@ -373,8 +374,8 @@ class AccountController extends BaseController { $account = Auth::user()->account->load('country'); $css = $account->client_view_css ? $account->client_view_css : ''; - - if(Utils::isNinja() && $css){ + + if (Utils::isNinja() && $css) { // Unescape the CSS for display purposes $css = str_replace( array('\3C ', '\3E ', '\26 '), @@ -382,14 +383,14 @@ class AccountController extends BaseController $css ); } - + $data = [ 'client_view_css' => $css, - 'title' => trans("texts.client_view_styling"), - 'section' => ACCOUNT_CLIENT_VIEW_STYLING + 'title' => trans("texts.client_portal"), + 'section' => ACCOUNT_CLIENT_PORTAL, ]; - - return View::make("accounts.client_view_styling", $data); + + return View::make("accounts.client_portal", $data); } private function showTemplates() @@ -410,6 +411,7 @@ class AccountController extends BaseController } $data['emailFooter'] = $account->getEmailFooter(); $data['title'] = trans('texts.email_templates'); + return View::make('accounts.templates_and_reminders', $data); } @@ -433,8 +435,8 @@ class AccountController extends BaseController return AccountController::saveInvoiceDesign(); } elseif ($section === ACCOUNT_CUSTOMIZE_DESIGN) { return AccountController::saveCustomizeDesign(); - } elseif ($section === ACCOUNT_CLIENT_VIEW_STYLING) { - return AccountController::saveClientViewStyling(); + } elseif ($section === ACCOUNT_CLIENT_PORTAL) { + return AccountController::saveClientPortal(); } elseif ($section === ACCOUNT_TEMPLATES_AND_REMINDERS) { return AccountController::saveEmailTemplates(); } elseif ($section === ACCOUNT_PRODUCTS) { @@ -444,25 +446,26 @@ class AccountController extends BaseController } } - private function saveCustomizeDesign() { + private function saveCustomizeDesign() + { if (Auth::user()->account->isPro()) { $account = Auth::user()->account; $account->custom_design = Input::get('custom_design'); $account->invoice_design_id = CUSTOM_DESIGN; $account->save(); - + Session::flash('message', trans('texts.updated_settings')); } - return Redirect::to('settings/' . ACCOUNT_CUSTOMIZE_DESIGN); + return Redirect::to('settings/'.ACCOUNT_CUSTOMIZE_DESIGN); } - private function saveClientViewStyling() { + private function saveClientPortal() + { // Only allowed for pro Invoice Ninja users or white labeled self-hosted users if ((Utils::isNinja() && Auth::user()->account->isPro()) || Auth::user()->account->isWhiteLabel()) { - $input_css = Input::get('client_view_css'); - if(Utils::isNinja()){ + if (Utils::isNinja()) { // Allow referencing the body element $input_css = preg_replace('/(?purify(''); @@ -488,20 +491,19 @@ class AccountController extends BaseController $output_css = $purifier->context->get('StyleBlocks'); // Get the first style block - $sanitized_css = $output_css[0]; - } - else{ + $sanitized_css = count($output_css) ? $output_css[0] : ''; + } else { $sanitized_css = $input_css; } - + $account = Auth::user()->account; $account->client_view_css = $sanitized_css; $account->save(); - + Session::flash('message', trans('texts.updated_settings')); } - return Redirect::to('settings/' . ACCOUNT_CLIENT_VIEW_STYLING); + return Redirect::to('settings/'.ACCOUNT_CLIENT_PORTAL); } private function saveEmailTemplates() @@ -534,8 +536,8 @@ class AccountController extends BaseController Session::flash('message', trans('texts.updated_settings')); } - - return Redirect::to('settings/' . ACCOUNT_TEMPLATES_AND_REMINDERS); + + return Redirect::to('settings/'.ACCOUNT_TEMPLATES_AND_REMINDERS); } private function saveTaxRates() @@ -549,7 +551,8 @@ class AccountController extends BaseController $account->save(); Session::flash('message', trans('texts.updated_settings')); - return Redirect::to('settings/' . ACCOUNT_TAX_RATES); + + return Redirect::to('settings/'.ACCOUNT_TAX_RATES); } private function saveProducts() @@ -561,7 +564,8 @@ class AccountController extends BaseController $account->save(); Session::flash('message', trans('texts.updated_settings')); - return Redirect::to('settings/' . ACCOUNT_PRODUCTS); + + return Redirect::to('settings/'.ACCOUNT_PRODUCTS); } private function saveEmailSettings() @@ -571,8 +575,8 @@ class AccountController extends BaseController $user = Auth::user(); $iframeURL = preg_replace('/[^a-zA-Z0-9_\-\:\/\.]/', '', substr(strtolower(Input::get('iframe_url')), 0, MAX_IFRAME_URL_LENGTH)); $iframeURL = rtrim($iframeURL, "/"); - - $subdomain = preg_replace('/[^a-zA-Z0-9_\-\.]/', '', substr(strtolower(Input::get('subdomain')), 0, MAX_SUBDOMAIN_LENGTH)); + + $subdomain = preg_replace('/[^a-zA-Z0-9_\-\.]/', '', substr(strtolower(Input::get('subdomain')), 0, MAX_SUBDOMAIN_LENGTH)); if ($iframeURL || !$subdomain || in_array($subdomain, ['www', 'app', 'mail', 'admin', 'blog', 'user', 'contact', 'payment', 'payments', 'billing', 'invoice', 'business', 'owner'])) { $subdomain = null; } @@ -583,7 +587,7 @@ class AccountController extends BaseController $validator = Validator::make(Input::all(), $rules); if ($validator->fails()) { - return Redirect::to('settings/' . ACCOUNT_EMAIL_SETTINGS) + return Redirect::to('settings/'.ACCOUNT_EMAIL_SETTINGS) ->withErrors($validator) ->withInput(); } else { @@ -596,28 +600,27 @@ class AccountController extends BaseController if (Utils::isNinja()) { $account->enable_email_markup = Input::get('enable_email_markup') ? true : false; } - + $account->save(); Session::flash('message', trans('texts.updated_settings')); } } - return Redirect::to('settings/' . ACCOUNT_EMAIL_SETTINGS); + return Redirect::to('settings/'.ACCOUNT_EMAIL_SETTINGS); } private function saveInvoiceSettings() { if (Auth::user()->account->isPro()) { - $rules = [ 'invoice_number_pattern' => 'has_counter', 'quote_number_pattern' => 'has_counter', ]; - + $validator = Validator::make(Input::all(), $rules); if ($validator->fails()) { - return Redirect::to('settings/' . ACCOUNT_INVOICE_SETTINGS) + return Redirect::to('settings/'.ACCOUNT_INVOICE_SETTINGS) ->withErrors($validator) ->withInput(); } else { @@ -657,7 +660,7 @@ class AccountController extends BaseController $account->invoice_number_pattern = trim(Input::get('invoice_number_pattern')); $account->invoice_number_prefix = null; } - + if (Input::get('quote_number_type') == 'prefix') { $account->quote_number_prefix = trim(Input::get('quote_number_prefix')); $account->quote_number_pattern = null; @@ -665,10 +668,11 @@ class AccountController extends BaseController $account->quote_number_pattern = trim(Input::get('quote_number_pattern')); $account->quote_number_prefix = null; } - + if (!$account->share_counter && $account->invoice_number_prefix == $account->quote_number_prefix) { Session::flash('error', trans('texts.invalid_counter')); - return Redirect::to('settings/' . ACCOUNT_INVOICE_SETTINGS)->withInput(); + + return Redirect::to('settings/'.ACCOUNT_INVOICE_SETTINGS)->withInput(); } else { $account->save(); Session::flash('message', trans('texts.updated_settings')); @@ -676,7 +680,7 @@ class AccountController extends BaseController } } - return Redirect::to('settings/' . ACCOUNT_INVOICE_SETTINGS); + return Redirect::to('settings/'.ACCOUNT_INVOICE_SETTINGS); } private function saveInvoiceDesign() @@ -704,7 +708,7 @@ class AccountController extends BaseController Session::flash('message', trans('texts.updated_settings')); } - return Redirect::to('settings/' . ACCOUNT_INVOICE_DESIGN); + return Redirect::to('settings/'.ACCOUNT_INVOICE_DESIGN); } private function saveNotifications() @@ -718,20 +722,20 @@ class AccountController extends BaseController Session::flash('message', trans('texts.updated_settings')); - return Redirect::to('settings/' . ACCOUNT_NOTIFICATIONS); + return Redirect::to('settings/'.ACCOUNT_NOTIFICATIONS); } private function saveDetails() { $rules = array( 'name' => 'required', - 'logo' => 'sometimes|max:' . MAX_LOGO_FILE_SIZE . '|mimes:jpeg,gif,png', + 'logo' => 'sometimes|max:'.MAX_LOGO_FILE_SIZE.'|mimes:jpeg,gif,png', ); $validator = Validator::make(Input::all(), $rules); if ($validator->fails()) { - return Redirect::to('settings/' . ACCOUNT_COMPANY_DETAILS) + return Redirect::to('settings/'.ACCOUNT_COMPANY_DETAILS) ->withErrors($validator) ->withInput(); } else { @@ -752,7 +756,7 @@ class AccountController extends BaseController $account->industry_id = Input::get('industry_id') ? Input::get('industry_id') : null; $account->email_footer = Input::get('email_footer'); $account->save(); - + /* Logo image file */ if ($file = Input::file('logo')) { $path = Input::file('logo')->getRealPath(); @@ -762,11 +766,11 @@ class AccountController extends BaseController $mimeType = $file->getMimeType(); if ($mimeType == 'image/jpeg') { - $path = 'logo/' . $account->account_key . '.jpg'; - $file->move('logo/', $account->account_key . '.jpg'); - } else if ($mimeType == 'image/png') { - $path = 'logo/' . $account->account_key . '.png'; - $file->move('logo/', $account->account_key . '.png'); + $path = 'logo/'.$account->account_key.'.jpg'; + $file->move('logo/', $account->account_key.'.jpg'); + } elseif ($mimeType == 'image/png') { + $path = 'logo/'.$account->account_key.'.png'; + $file->move('logo/', $account->account_key.'.png'); } else { if (extension_loaded('fileinfo')) { $image = Image::make($path); @@ -792,7 +796,8 @@ class AccountController extends BaseController event(new UserSettingsChanged()); Session::flash('message', trans('texts.updated_settings')); - return Redirect::to('settings/' . ACCOUNT_COMPANY_DETAILS); + + return Redirect::to('settings/'.ACCOUNT_COMPANY_DETAILS); } } @@ -803,7 +808,7 @@ class AccountController extends BaseController $validator = Validator::make(Input::all(), $rules); if ($validator->fails()) { - return Redirect::to('settings/' . ACCOUNT_USER_DETAILS) + return Redirect::to('settings/'.ACCOUNT_USER_DETAILS) ->withErrors($validator) ->withInput(); } else { @@ -826,7 +831,8 @@ class AccountController extends BaseController event(new UserSettingsChanged()); Session::flash('message', trans('texts.updated_settings')); - return Redirect::to('settings/' . ACCOUNT_USER_DETAILS); + + return Redirect::to('settings/'.ACCOUNT_USER_DETAILS); } } @@ -844,7 +850,8 @@ class AccountController extends BaseController event(new UserSettingsChanged()); Session::flash('message', trans('texts.updated_settings')); - return Redirect::to('settings/' . ACCOUNT_LOCALIZATION); + + return Redirect::to('settings/'.ACCOUNT_LOCALIZATION); } public function removeLogo() @@ -854,7 +861,7 @@ class AccountController extends BaseController Session::flash('message', trans('texts.removed_logo')); - return Redirect::to('settings/' . ACCOUNT_COMPANY_DETAILS); + return Redirect::to('settings/'.ACCOUNT_COMPANY_DETAILS); } public function checkEmail() @@ -895,7 +902,7 @@ class AccountController extends BaseController if (Input::get('go_pro') == 'true') { Session::set(REQUESTED_PRO_PLAN, true); } - + return "{$user->first_name} {$user->last_name}"; } @@ -903,7 +910,7 @@ class AccountController extends BaseController { $affiliate = Affiliate::where('affiliate_key', '=', SELF_HOST_AFFILIATE_KEY)->first(); $email = trim(Input::get('email')); - + if (!$email || $email == TEST_USERNAME) { return RESULT_FAILURE; } @@ -953,7 +960,7 @@ class AccountController extends BaseController $user = Auth::user(); $this->userMailer->sendConfirmation($user); - return Redirect::to('/settings/' . ACCOUNT_USER_DETAILS)->with('message', trans('texts.confirmation_resent')); + return Redirect::to('/settings/'.ACCOUNT_USER_DETAILS)->with('message', trans('texts.confirmation_resent')); } public function redirectLegacy($section, $subSection = false) diff --git a/app/Http/routes.php b/app/Http/routes.php index a310c1135c3c..46c12238d388 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -278,7 +278,7 @@ if (!defined('CONTACT_EMAIL')) { define('ACCOUNT_ADVANCED_SETTINGS', 'advanced_settings'); define('ACCOUNT_INVOICE_SETTINGS', 'invoice_settings'); define('ACCOUNT_INVOICE_DESIGN', 'invoice_design'); - define('ACCOUNT_CLIENT_VIEW_STYLING', 'client_view_styling'); + define('ACCOUNT_CLIENT_PORTAL', 'client_portal'); define('ACCOUNT_EMAIL_SETTINGS', 'email_settings'); define('ACCOUNT_CHARTS_AND_REPORTS', 'charts_and_reports'); define('ACCOUNT_USER_MANAGEMENT', 'user_management'); diff --git a/app/Models/Account.php b/app/Models/Account.php index e71762687b34..ae8276a48dd8 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -35,7 +35,7 @@ class Account extends Eloquent public static $advancedSettings = [ ACCOUNT_INVOICE_SETTINGS, ACCOUNT_INVOICE_DESIGN, - ACCOUNT_CLIENT_VIEW_STYLING, + ACCOUNT_CLIENT_PORTAL, ACCOUNT_EMAIL_SETTINGS, ACCOUNT_TEMPLATES_AND_REMINDERS, ACCOUNT_CHARTS_AND_REPORTS, diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index b3814b673d16..b79bf9490d7e 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -476,8 +476,6 @@ return array( 'id_number' => 'ID Number', 'white_label_link' => 'White label', 'white_label_text' => 'Purchase a white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', - 'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', - 'white_label_purchase_link' => 'Purchase a white label license', 'white_label_header' => 'White Label', 'bought_white_label' => 'Successfully enabled white label license', 'white_labeled' => 'White labeled', @@ -996,5 +994,8 @@ return array( 'schedule' => 'Schedule', 'email_designs' => 'Email Designs', 'assigned_when_sent' => 'Assigned when sent', + + 'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.', + 'white_label_purchase_link' => 'Purchase a white label license', ); diff --git a/resources/views/accounts/client_view_styling.blade.php b/resources/views/accounts/client_portal.blade.php similarity index 95% rename from resources/views/accounts/client_view_styling.blade.php rename to resources/views/accounts/client_portal.blade.php index f4c3150a1701..5d18f51638a2 100644 --- a/resources/views/accounts/client_view_styling.blade.php +++ b/resources/views/accounts/client_portal.blade.php @@ -22,7 +22,7 @@ @endif - @include('accounts.nav', ['selected' => ACCOUNT_CLIENT_VIEW_STYLING]) + @include('accounts.nav', ['selected' => ACCOUNT_CLIENT_PORTAL])