2019-06-17 01:58:33 +02:00
< ? php
/**
2020-09-06 11:38:10 +02:00
* Invoice Ninja ( https :// invoiceninja . com ) .
2019-06-17 01:58:33 +02:00
*
* @ link https :// github . com / invoiceninja / invoiceninja source repository
*
2023-01-28 23:21:40 +01:00
* @ copyright Copyright ( c ) 2023. Invoice Ninja LLC ( https :// invoiceninja . com )
2019-06-17 01:58:33 +02:00
*
2021-06-16 08:58:16 +02:00
* @ license https :// www . elastic . co / licensing / elastic - license
2019-06-17 01:58:33 +02:00
*/
namespace App\Http\Requests\Company ;
2020-03-31 13:52:21 +02:00
use App\DataMapper\CompanySettings ;
2019-06-17 01:58:33 +02:00
use App\Http\Requests\Request ;
2023-12-15 18:15:55 +01:00
use App\Http\ValidationRules\Company\ValidExpenseMailbox ;
2021-05-20 06:13:54 +02:00
use App\Http\ValidationRules\Company\ValidSubdomain ;
2019-10-10 03:01:38 +02:00
use App\Http\ValidationRules\ValidSettingsRule ;
2021-05-20 06:13:54 +02:00
use App\Utils\Ninja ;
2020-03-31 13:52:21 +02:00
use App\Utils\Traits\MakesHash ;
2019-06-17 01:58:33 +02:00
class UpdateCompanyRequest extends Request
{
2020-03-31 13:52:21 +02:00
use MakesHash ;
2020-09-06 11:38:10 +02:00
2022-11-19 00:58:32 +01:00
private array $protected_input = [
'client_portal_privacy_policy' ,
'client_portal_terms' ,
'portal_custom_footer' ,
'portal_custom_css' ,
'portal_custom_head'
];
2019-06-17 01:58:33 +02:00
/**
* Determine if the user is authorized to make this request .
*
* @ return bool
*/
2023-12-15 18:15:55 +01:00
public function authorize () : bool
2019-06-17 01:58:33 +02:00
{
2023-05-31 06:36:35 +02:00
/** @var \App\Models\User $user */
$user = auth () -> user ();
return $user -> can ( 'edit' , $this -> company );
2019-06-17 01:58:33 +02:00
}
public function rules ()
{
2021-04-28 05:12:51 +02:00
$input = $this -> all ();
2022-06-21 11:57:17 +02:00
2019-11-12 12:36:24 +01:00
$rules = [];
$rules [ 'company_logo' ] = 'mimes:jpeg,jpg,png,gif|max:10000' ; // max 10000kb
$rules [ 'settings' ] = new ValidSettingsRule ();
$rules [ 'industry_id' ] = 'integer|nullable' ;
$rules [ 'size_id' ] = 'integer|nullable' ;
$rules [ 'country_id' ] = 'integer|nullable' ;
$rules [ 'work_email' ] = 'email|nullable' ;
2022-12-08 01:39:43 +01:00
$rules [ 'matomo_id' ] = 'nullable|integer' ;
2023-05-15 13:20:47 +02:00
$rules [ 'e_invoice_certificate_passphrase' ] = 'sometimes|nullable' ;
2023-05-15 13:40:57 +02:00
$rules [ 'e_invoice_certificate' ] = 'sometimes|nullable|file|mimes:p12,pfx,pem,cer,crt,der,txt,p7b,spc,bin' ;
2021-09-30 00:14:48 +02:00
// $rules['client_registration_fields'] = 'array';
2019-11-26 11:32:01 +01:00
2021-04-28 05:21:27 +02:00
if ( isset ( $input [ 'portal_mode' ]) && ( $input [ 'portal_mode' ] == 'domain' || $input [ 'portal_mode' ] == 'iframe' )) {
2019-11-27 10:47:59 +01:00
$rules [ 'portal_domain' ] = 'sometimes|url' ;
2019-12-30 22:59:12 +01:00
}
2019-11-12 12:36:24 +01:00
2023-10-26 04:57:44 +02:00
if ( Ninja :: isHosted ()) {
2023-06-07 03:21:26 +02:00
$rules [ 'subdomain' ] = [ 'nullable' , 'regex:/^[a-zA-Z0-9.-]+[a-zA-Z0-9]$/' , new ValidSubdomain ()];
2023-10-26 04:57:44 +02:00
}
2023-06-07 03:21:26 +02:00
2023-12-15 18:15:55 +01:00
$rules [ 'expense_mailbox' ] = new ValidExpenseMailbox ( $this -> company -> key , $this -> company -> account -> isPaid () && $this -> company -> account -> plan == 'enterprise' ); // @turbo124 check if this is right
2019-11-12 12:36:24 +01:00
return $rules ;
2019-06-17 01:58:33 +02:00
}
2020-03-06 12:10:59 +01:00
2022-06-24 03:55:41 +02:00
public function prepareForValidation ()
2020-03-06 12:10:59 +01:00
{
2020-04-21 07:16:45 +02:00
$input = $this -> all ();
2021-05-02 11:14:42 +02:00
2022-11-23 23:33:25 +01:00
if ( array_key_exists ( 'portal_domain' , $input ) && strlen ( $input [ 'portal_domain' ]) > 1 ) {
2021-07-07 05:19:19 +02:00
$input [ 'portal_domain' ] = $this -> addScheme ( $input [ 'portal_domain' ]);
2022-11-23 23:33:25 +01:00
$input [ 'portal_domain' ] = rtrim ( strtolower ( $input [ 'portal_domain' ]), " / " );
2021-12-01 01:09:22 +01:00
}
2021-05-02 11:14:42 +02:00
2020-09-06 11:38:10 +02:00
if ( array_key_exists ( 'settings' , $input )) {
2023-12-15 18:15:55 +01:00
$input [ 'settings' ] = ( array ) $this -> filterSaveableSettings ( $input [ 'settings' ]);
2020-09-06 11:38:10 +02:00
}
2020-04-21 07:16:45 +02:00
2023-12-15 18:15:55 +01:00
if ( array_key_exists ( 'subdomain' , $input ) && $this -> company -> subdomain == $input [ 'subdomain' ]) {
2023-06-07 03:21:26 +02:00
unset ( $input [ 'subdomain' ]);
}
2023-12-15 18:15:55 +01:00
if ( array_key_exists ( 'e_invoice_certificate_passphrase' , $input ) && empty ( $input [ 'e_invoice_certificate_passphrase' ])) {
2023-05-16 09:52:53 +02:00
unset ( $input [ 'e_invoice_certificate_passphrase' ]);
}
2020-04-21 07:16:45 +02:00
$this -> replace ( $input );
2020-03-06 12:10:59 +01:00
}
2020-04-21 07:16:45 +02:00
/**
* For the hosted platform , we restrict the feature settings .
*
2020-09-06 11:38:10 +02:00
* This method will trim the company settings object
* down to the free plan setting properties which
2020-04-21 07:16:45 +02:00
* are saveable
2020-09-06 11:38:10 +02:00
*
2020-04-21 07:16:45 +02:00
* @ param object $settings
2023-03-09 13:29:44 +01:00
* @ return \stdClass $settings
2020-04-21 07:16:45 +02:00
*/
private function filterSaveableSettings ( $settings )
{
$account = $this -> company -> account ;
2023-02-16 02:36:09 +01:00
if ( Ninja :: isHosted ()) {
foreach ( $this -> protected_input as $protected_var ) {
2022-11-19 00:58:32 +01:00
$settings [ $protected_var ] = str_replace ( " script " , " " , $settings [ $protected_var ]);
}
}
2023-02-16 02:36:09 +01:00
if ( isset ( $settings [ 'email_style_custom' ])) {
2023-12-15 18:15:55 +01:00
$settings [ 'email_style_custom' ] = str_replace ([ '{{' , '}}' ], [ '' , '' ], $settings [ 'email_style_custom' ]);
2023-02-16 02:36:09 +01:00
}
2022-11-20 22:28:47 +01:00
2023-12-15 18:15:55 +01:00
if ( ! $account -> isFreeHostedClient ()) {
2020-04-21 07:16:45 +02:00
return $settings ;
2020-09-06 11:38:10 +02:00
}
2020-04-21 07:16:45 +02:00
$saveable_casts = CompanySettings :: $free_plan_casts ;
2020-09-06 11:38:10 +02:00
foreach ( $settings as $key => $value ) {
2023-12-15 18:15:55 +01:00
if ( ! array_key_exists ( $key , $saveable_casts )) {
2020-04-21 07:16:45 +02:00
unset ( $settings -> { $key });
2020-09-06 11:38:10 +02:00
}
2020-04-21 07:16:45 +02:00
}
2020-09-06 11:38:10 +02:00
return $settings ;
2020-04-21 07:16:45 +02:00
}
2021-07-07 05:19:19 +02:00
private function addScheme ( $url , $scheme = 'https://' )
{
2023-02-16 02:36:09 +01:00
if ( Ninja :: isHosted ()) {
2022-11-24 10:33:52 +01:00
$url = str_replace ( 'http://' , '' , $url );
2023-12-15 18:15:55 +01:00
$url = parse_url ( $url , PHP_URL_SCHEME ) === null ? $scheme . $url : $url ;
2022-11-24 10:33:52 +01:00
}
2021-07-07 05:19:19 +02:00
2022-06-21 11:57:17 +02:00
return rtrim ( $url , '/' );
2021-07-07 05:19:19 +02:00
}
2019-07-04 06:04:01 +02:00
}