mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-11-04 05:15:39 +00:00 
			
		
		
		
	Fixed double named accounts.
This commit is contained in:
		@@ -31,9 +31,9 @@ class AccountFormRequest extends Request
 | 
			
		||||
        $accountRoles = join(',', array_keys(Config::get('firefly.accountRoles')));
 | 
			
		||||
        $types        = join(',', array_keys(Config::get('firefly.subTitlesByIdentifier')));
 | 
			
		||||
 | 
			
		||||
        $nameRule = 'required|between:1,100|uniqueForUser:accounts,name';
 | 
			
		||||
        $nameRule = 'required|between:1,100|uniqueAccountForUser';
 | 
			
		||||
        if (Account::find(Input::get('id'))) {
 | 
			
		||||
            $nameRule = 'required|between:1,100|belongsToUser:accounts';
 | 
			
		||||
            $nameRule = 'required|between:1,100|belongsToUser:accounts|uniqueForUser:'.Input::get('id');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return [
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ class Account extends Model
 | 
			
		||||
        = [
 | 
			
		||||
            'user_id'         => 'required|exists:users,id',
 | 
			
		||||
            'account_type_id' => 'required|exists:account_types,id',
 | 
			
		||||
            'name'            => 'required|between:1,1024|uniqueForUser:accounts,name',
 | 
			
		||||
            'name'            => 'required|between:1,1024|uniqueAccountForUser',
 | 
			
		||||
            'active'          => 'required|boolean'
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -285,12 +285,14 @@ class AccountRepository implements AccountRepositoryInterface
 | 
			
		||||
                'active'          => $data['active'] === true ? true : false,
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        if (!$newAccount->isValid()) {
 | 
			
		||||
            // does the account already exist?
 | 
			
		||||
            $existingAccount = Account::where('user_id', $data['user'])->where('account_type_id', $accountType->id)->where('name', $data['name'])->first();
 | 
			
		||||
            if (!$existingAccount) {
 | 
			
		||||
                Log::error('Account create error: ' . $newAccount->getErrors()->toJson());
 | 
			
		||||
                var_dump($newAccount->getErrors()->toArray());
 | 
			
		||||
                App::abort(500);
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            $newAccount = $existingAccount;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -4,8 +4,11 @@ namespace FireflyIII\Validation;
 | 
			
		||||
 | 
			
		||||
use Auth;
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use Config;
 | 
			
		||||
use DB;
 | 
			
		||||
use FireflyIII\Models\AccountType;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use Input;
 | 
			
		||||
use Navigation;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -34,6 +37,13 @@ class FireflyValidator extends Validator
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param $attribute
 | 
			
		||||
     * @param $value
 | 
			
		||||
     * @param $parameters
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function validatePiggyBankReminder($attribute, $value, $parameters)
 | 
			
		||||
    {
 | 
			
		||||
        $array = $this->data;
 | 
			
		||||
@@ -51,14 +61,44 @@ class FireflyValidator extends Validator
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $nextReminder = Navigation::addPeriod($startDate, $array['reminder'],0);
 | 
			
		||||
        $nextReminder = Navigation::addPeriod($startDate, $array['reminder'], 0);
 | 
			
		||||
        // reminder is beyond target?
 | 
			
		||||
        if($nextReminder > $targetDate) {
 | 
			
		||||
        if ($nextReminder > $targetDate) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param $attribute
 | 
			
		||||
     * @param $value
 | 
			
		||||
     * @param $parameters
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function validateUniqueAccountForUser($attribute, $value, $parameters)
 | 
			
		||||
    {
 | 
			
		||||
        // get account type from data, we must have this:
 | 
			
		||||
        $type     = isset($this->data['what']) ? $this->data['what'] : Input::get('what');
 | 
			
		||||
        $longType = Config::get('firefly.accountTypeByIdentifier.' . $type);
 | 
			
		||||
        $dbType   = AccountType::whereType($longType)->first();
 | 
			
		||||
        if (!$dbType) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        $query = DB::table('accounts')->where('name', $value)->where('account_type_id', $dbType->id)->where('user_id', Auth::user()->id);
 | 
			
		||||
        if (isset($parameters[0])) {
 | 
			
		||||
            $query->where('id', '!=', $parameters[0]);
 | 
			
		||||
        }
 | 
			
		||||
        $count = $query->count();
 | 
			
		||||
        if ($count == 0) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param $attribute
 | 
			
		||||
     * @param $value
 | 
			
		||||
@@ -69,7 +109,7 @@ class FireflyValidator extends Validator
 | 
			
		||||
    public function validateUniqueForUser($attribute, $value, $parameters)
 | 
			
		||||
    {
 | 
			
		||||
        $query = DB::table($parameters[0])->where($parameters[1], $value);
 | 
			
		||||
        $query->where('user_id',Auth::user()->id);
 | 
			
		||||
        $query->where('user_id', Auth::user()->id);
 | 
			
		||||
        if (isset($paramers[2])) {
 | 
			
		||||
            $query->where('id', '!=', $parameters[2]);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user