diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index 04650dc5e6..3745e92442 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -274,7 +274,9 @@ class TransactionController extends Controller $journalData = $request->getJournalData(); $journal = $repository->store($journalData); + // rescan journal, UpdateJournalConnection event(new JournalSaved($journal)); + // ConnectJournalToPiggyBank event(new JournalCreated($journal, intval($request->get('piggy_bank_id')))); if (intval($request->get('reminder_id')) > 0) { diff --git a/app/Http/Requests/BillFormRequest.php b/app/Http/Requests/BillFormRequest.php index b225ab91bc..49dc166af6 100644 --- a/app/Http/Requests/BillFormRequest.php +++ b/app/Http/Requests/BillFormRequest.php @@ -47,14 +47,16 @@ class BillFormRequest extends Request */ public function rules() { - $nameRule = 'required|between:1,255|uniqueForUser:bills,name'; + $nameRule = 'required|between:1,255|uniqueObjectForUser:bills,name,name_encrypted'; + $matchRule = 'required|between:1,255|uniqueObjectForUser:bills,match,match_encrypted'; if (intval(Input::get('id')) > 0) { - $nameRule = 'required|between:1,255'; + $nameRule .= ',' . intval(Input::get('id')); + $matchRule .= ',' . intval(Input::get('id')); } $rules = [ 'name' => $nameRule, - 'match' => 'required|between:1,255', + 'match' => $matchRule, 'amount_min' => 'required|numeric|min:0.01', 'amount_max' => 'required|numeric|min:0.01', 'amount_currency_id' => 'required|exists:transaction_currencies,id', diff --git a/app/Http/Requests/BudgetFormRequest.php b/app/Http/Requests/BudgetFormRequest.php index e03c0c708b..57cd60d20f 100644 --- a/app/Http/Requests/BudgetFormRequest.php +++ b/app/Http/Requests/BudgetFormRequest.php @@ -28,9 +28,9 @@ class BudgetFormRequest extends Request public function rules() { - $nameRule = 'required|between:1,100|uniqueForUser:budgets,name'; + $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,name,encrypted'; if (Budget::find(Input::get('id'))) { - $nameRule = 'required|between:1,100'; + $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,name,encrypted,'.intval(Input::get('id')); } return [ diff --git a/app/Http/Requests/CategoryFormRequest.php b/app/Http/Requests/CategoryFormRequest.php index 7b9e577dc0..4a074750bd 100644 --- a/app/Http/Requests/CategoryFormRequest.php +++ b/app/Http/Requests/CategoryFormRequest.php @@ -28,9 +28,9 @@ class CategoryFormRequest extends Request public function rules() { - $nameRule = 'required|between:1,100|uniqueForUser:categories,name'; + $nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name,encrypted'; if (Category::find(Input::get('id'))) { - $nameRule = 'required|between:1,100'; + $nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name,encrypted,'.intval(Input::get('id')); } return [ diff --git a/app/Http/Requests/PiggyBankFormRequest.php b/app/Http/Requests/PiggyBankFormRequest.php index 2c9a668807..2e950b8019 100644 --- a/app/Http/Requests/PiggyBankFormRequest.php +++ b/app/Http/Requests/PiggyBankFormRequest.php @@ -29,10 +29,10 @@ class PiggyBankFormRequest extends Request public function rules() { - $nameRule = 'required|between:1,255|uniquePiggyBankForUser:piggy_banks,name'; + $nameRule = 'required|between:1,255|uniquePiggyBankForUser'; $targetDateRule = 'date'; if (intval(Input::get('id'))) { - $nameRule = 'required|between:1,255'; + $nameRule = 'required|between:1,255|uniquePiggyBankForUser:'.intval(Input::get('id')); } diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php index d875d967ba..3ba63000ab 100644 --- a/app/Validation/FireflyValidator.php +++ b/app/Validation/FireflyValidator.php @@ -165,6 +165,46 @@ class FireflyValidator extends Validator } + /** + * Validate an object and its unicity. Checks for encryption / encrypted values as well. + * + * parameter 0: the table + * parameter 1: the field + * parameter 2: the encrypted / not encrypted boolean. Defaults to "encrypted". + * parameter 3: an id to ignore (when editing) + * + * @param $attribute + * @param $value + * @param $parameters + * + * @return bool + */ + public function validateUniqueObjectForUser($attribute, $value, $parameters) + { + $table = $parameters[0]; + $field = $parameters[1]; + $encrypted = isset($parameters[2]) ? $parameters[2] : 'encrypted'; + $exclude = isset($parameters[3]) ? $parameters[3] : null; + + $query = DB::table($table)->where('user_id', Auth::user()->id); + + if (!is_null($exclude)) { + $query->where('id', '!=', $exclude); + } + + + $set = $query->get(); + foreach ($set as $entry) { + $isEncrypted = intval($entry->$encrypted) == 1 ? true : false; + $checkValue = $isEncrypted ? Crypt::decrypt($entry->$field) : $entry->$field; + if ($checkValue == $value) { + return false; + } + } + + return true; + } + /** * @param $attribute * @param $value @@ -174,18 +214,24 @@ class FireflyValidator extends Validator */ public function validateUniquePiggyBankForUser($attribute, $value, $parameters) { - $query = DB::table($parameters[0])->where('piggy_banks.' . $parameters[1], $value); + $exclude = isset($parameters[0]) ? $parameters[0] : null; + $query = DB::table('piggy_banks'); $query->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id'); $query->where('accounts.user_id', Auth::user()->id); - if (isset($paramers[2])) { - $query->where('piggy_banks.id', '!=', $parameters[2]); + if (!is_null($exclude)) { + $query->where('piggy_banks.id', '!=', $exclude); } - $count = $query->count(); - if ($count == 0) { - return true; + $set = $query->get(['piggy_banks.*']); + + foreach($set as $entry) { + $isEncrypted = intval($entry->encrypted) == 1 ? true : false; + $checkValue = $isEncrypted ? Crypt::decrypt($entry->name) : $entry->name; + if($checkValue == $value) { + return false; + } } - return false; + return true; } } diff --git a/resources/views/layouts/default.blade.php b/resources/views/layouts/default.blade.php index 43f08e6c3f..685112e0ae 100644 --- a/resources/views/layouts/default.blade.php +++ b/resources/views/layouts/default.blade.php @@ -1,6 +1,5 @@ -getName();?> diff --git a/resources/views/partials/menu.blade.php b/resources/views/partials/menu.blade.php index f96d7b8bf8..740dab2346 100644 --- a/resources/views/partials/menu.blade.php +++ b/resources/views/partials/menu.blade.php @@ -1,4 +1,6 @@ +getName();?> +