mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-03 22:27:31 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Invoice Ninja (https://invoiceninja.com).
 | 
						|
 *
 | 
						|
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
						|
 *
 | 
						|
 * @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
 | 
						|
 *
 | 
						|
 * @license https://opensource.org/licenses/AAL
 | 
						|
 */
 | 
						|
 | 
						|
namespace App\Http\Requests\User;
 | 
						|
 | 
						|
use App\DataMapper\DefaultSettings;
 | 
						|
use App\Factory\UserFactory;
 | 
						|
use App\Http\Requests\Request;
 | 
						|
use App\Http\ValidationRules\User\AttachableUser;
 | 
						|
use App\Http\ValidationRules\ValidUserForCompany;
 | 
						|
use App\Libraries\MultiDB;
 | 
						|
use App\Models\User;
 | 
						|
use Illuminate\Validation\Rule;
 | 
						|
 | 
						|
class StoreUserRequest extends Request
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Determine if the user is authorized to make this request.
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function authorize() : bool
 | 
						|
    {
 | 
						|
        return auth()->user()->isAdmin();
 | 
						|
    }
 | 
						|
 | 
						|
    public function rules()
 | 
						|
    {
 | 
						|
        $rules = [];
 | 
						|
 | 
						|
        $rules['first_name'] = 'required|string|max:100';
 | 
						|
        $rules['last_name'] = 'required|string|max:100';
 | 
						|
 | 
						|
        if (config('ninja.db.multi_db_enabled')) {
 | 
						|
            $rules['email'] = ['email', new ValidUserForCompany(), new AttachableUser()];
 | 
						|
        } else {
 | 
						|
            $rules['email'] = ['email', new AttachableUser()];
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        if (auth()->user()->company()->account->isFreeHostedClient()) {
 | 
						|
            $rules['hosted_users'] = new CanAddUserRule(auth()->user()->company()->account);
 | 
						|
        }
 | 
						|
 | 
						|
        return $rules;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function prepareForValidation()
 | 
						|
    {
 | 
						|
        $input = $this->all();
 | 
						|
 | 
						|
//unique user rule - check company_user table for user_id / company_id  / account_id if none exist we can add the user. ELSE return false
 | 
						|
 | 
						|
//nlog($this->all());
 | 
						|
//nlog($this->input('company_user.account'));
 | 
						|
// nlog($this->input('company_user.account.id'));
 | 
						|
// nlog($this->input('company_user.account.id'));
 | 
						|
 | 
						|
        if (isset($input['company_user'])) {
 | 
						|
            if (! isset($input['company_user']['is_admin'])) {
 | 
						|
                $input['company_user']['is_admin'] = false;
 | 
						|
            }
 | 
						|
 | 
						|
            if (! isset($input['company_user']['permissions'])) {
 | 
						|
                $input['company_user']['permissions'] = '';
 | 
						|
            }
 | 
						|
 | 
						|
            if (! isset($input['company_user']['settings'])) {
 | 
						|
                //$input['company_user']['settings'] = DefaultSettings::userSettings();
 | 
						|
                $input['company_user']['settings'] = null;
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            $input['company_user'] = [
 | 
						|
                //'settings' => DefaultSettings::userSettings(),
 | 
						|
                'settings' => null,
 | 
						|
                'permissions' => '',
 | 
						|
            ];
 | 
						|
        }
 | 
						|
 | 
						|
        $this->replace($input);
 | 
						|
    }
 | 
						|
 | 
						|
    //@todo make sure the user links back to the account ID for this company!!!!!!
 | 
						|
    public function fetchUser() :User
 | 
						|
    {
 | 
						|
        $user = MultiDB::hasUser(['email' => $this->input('email')]);
 | 
						|
 | 
						|
        if (! $user) {
 | 
						|
            $user = UserFactory::create(auth()->user()->account->id);
 | 
						|
        }
 | 
						|
 | 
						|
        return $user;
 | 
						|
    }
 | 
						|
}
 |