From c9e4a09da6575ea6dbe6284bb1fda04eabdc14a4 Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 20 Jan 2016 15:23:36 +0100 Subject: [PATCH] Sort by alphabet. --- .../Journal/JournalRepository.php | 48 +-- app/Repositories/Rule/RuleRepository.php | 235 ++++++----- .../Rule/RuleRepositoryInterface.php | 62 +-- app/Repositories/Tag/TagRepository.php | 157 ++++--- app/Rules/Processor.php | 131 +++--- app/Support/Amount.php | 84 ++-- app/Support/CacheProperties.php | 16 +- app/Support/ExpandedForm.php | 232 +++++------ app/Support/Preferences.php | 40 +- app/Support/Steam.php | 43 +- app/Validation/FireflyValidator.php | 385 +++++++++--------- 11 files changed, 713 insertions(+), 720 deletions(-) diff --git a/app/Repositories/Journal/JournalRepository.php b/app/Repositories/Journal/JournalRepository.php index e0b3dc3dc8..ba3b4200e3 100644 --- a/app/Repositories/Journal/JournalRepository.php +++ b/app/Repositories/Journal/JournalRepository.php @@ -364,30 +364,6 @@ class JournalRepository implements JournalRepositoryInterface return [$fromAccount, $toAccount]; } - /** - * @param array $data - * - * @return array - */ - protected function storeWithdrawalAccounts(array $data) - { - $fromAccount = Account::find($data['account_id']); - - if (strlen($data['expense_account']) > 0) { - $toType = AccountType::where('type', 'Expense account')->first(); - $toAccount = Account::firstOrCreateEncrypted( - ['user_id' => $data['user'], 'account_type_id' => $toType->id, 'name' => $data['expense_account'], 'active' => 1] - ); - } else { - $toType = AccountType::where('type', 'Cash account')->first(); - $toAccount = Account::firstOrCreateEncrypted( - ['user_id' => $data['user'], 'account_type_id' => $toType->id, 'name' => 'Cash account', 'active' => 1] - ); - } - - return [$fromAccount, $toAccount]; - } - /** * @param array $data * @@ -411,4 +387,28 @@ class JournalRepository implements JournalRepositoryInterface return [$fromAccount, $toAccount]; } + + /** + * @param array $data + * + * @return array + */ + protected function storeWithdrawalAccounts(array $data) + { + $fromAccount = Account::find($data['account_id']); + + if (strlen($data['expense_account']) > 0) { + $toType = AccountType::where('type', 'Expense account')->first(); + $toAccount = Account::firstOrCreateEncrypted( + ['user_id' => $data['user'], 'account_type_id' => $toType->id, 'name' => $data['expense_account'], 'active' => 1] + ); + } else { + $toType = AccountType::where('type', 'Cash account')->first(); + $toAccount = Account::firstOrCreateEncrypted( + ['user_id' => $data['user'], 'account_type_id' => $toType->id, 'name' => 'Cash account', 'active' => 1] + ); + } + + return [$fromAccount, $toAccount]; + } } diff --git a/app/Repositories/Rule/RuleRepository.php b/app/Repositories/Rule/RuleRepository.php index 5f4be310b5..0af4ad1ff6 100644 --- a/app/Repositories/Rule/RuleRepository.php +++ b/app/Repositories/Rule/RuleRepository.php @@ -23,6 +23,99 @@ use FireflyIII\Models\RuleTrigger; class RuleRepository implements RuleRepositoryInterface { + /** + * @param Rule $rule + * + * @return bool + */ + public function destroy(Rule $rule) + { + foreach ($rule->ruleTriggers as $trigger) { + $trigger->delete(); + } + foreach ($rule->ruleActions as $action) { + $action->delete(); + } + $rule->delete(); + + return true; + } + + /** + * @param RuleGroup $ruleGroup + * + * @return int + */ + public function getHighestOrderInRuleGroup(RuleGroup $ruleGroup) + { + return intval($ruleGroup->rules()->max('order')); + } + + /** + * @param Rule $rule + * + * @return bool + */ + public function moveDown(Rule $rule) + { + $order = $rule->order; + + // find the rule with order+1 and give it order-1 + $other = $rule->ruleGroup->rules()->where('order', ($order + 1))->first(); + if ($other) { + $other->order = $other->order - 1; + $other->save(); + } + + + $rule->order = ($rule->order + 1); + $rule->save(); + $this->resetRulesInGroupOrder($rule->ruleGroup); + } + + /** + * @param Rule $rule + * + * @return bool + */ + public function moveUp(Rule $rule) + { + $order = $rule->order; + + // find the rule with order-1 and give it order+1 + $other = $rule->ruleGroup->rules()->where('order', ($order - 1))->first(); + if ($other) { + $other->order = ($other->order + 1); + $other->save(); + } + + $rule->order = ($rule->order - 1); + $rule->save(); + $this->resetRulesInGroupOrder($rule->ruleGroup); + } + + /** + * @param Rule $rule + * @param array $ids + * + * @return bool + */ + public function reorderRuleActions(Rule $rule, array $ids) + { + $order = 1; + foreach ($ids as $actionId) { + /** @var RuleTrigger $trigger */ + $action = $rule->ruleActions()->find($actionId); + if (!is_null($action)) { + $action->order = $order; + $action->save(); + $order++; + } + } + + return true; + } + /** * @param Rule $rule * @param array $ids @@ -70,73 +163,6 @@ class RuleRepository implements RuleRepositoryInterface } - /** - * @param Rule $rule - * @param array $ids - * - * @return bool - */ - public function reorderRuleActions(Rule $rule, array $ids) - { - $order = 1; - foreach ($ids as $actionId) { - /** @var RuleTrigger $trigger */ - $action = $rule->ruleActions()->find($actionId); - if (!is_null($action)) { - $action->order = $order; - $action->save(); - $order++; - } - } - - return true; - } - - - /** - * @param Rule $rule - * - * @return bool - */ - public function moveUp(Rule $rule) - { - $order = $rule->order; - - // find the rule with order-1 and give it order+1 - $other = $rule->ruleGroup->rules()->where('order', ($order - 1))->first(); - if ($other) { - $other->order = ($other->order + 1); - $other->save(); - } - - $rule->order = ($rule->order - 1); - $rule->save(); - $this->resetRulesInGroupOrder($rule->ruleGroup); - } - - /** - * @param Rule $rule - * - * @return bool - */ - public function moveDown(Rule $rule) - { - $order = $rule->order; - - // find the rule with order+1 and give it order-1 - $other = $rule->ruleGroup->rules()->where('order', ($order + 1))->first(); - if ($other) { - $other->order = $other->order - 1; - $other->save(); - } - - - $rule->order = ($rule->order + 1); - $rule->save(); - $this->resetRulesInGroupOrder($rule->ruleGroup); - } - - /** * @param array $data * @@ -185,58 +211,6 @@ class RuleRepository implements RuleRepositoryInterface return $rule; } - /** - * @param Rule $rule - * @param string $action - * @param string $value - * @param bool $stopProcessing - * @param int $order - * - * @return RuleTrigger - */ - public function storeTrigger(Rule $rule, $action, $value, $stopProcessing, $order) - { - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = $order; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = $stopProcessing; - $ruleTrigger->trigger_type = $action; - $ruleTrigger->trigger_value = $value; - $ruleTrigger->save(); - - return $ruleTrigger; - } - - /** - * @param Rule $rule - * - * @return bool - */ - public function destroy(Rule $rule) - { - foreach ($rule->ruleTriggers as $trigger) { - $trigger->delete(); - } - foreach ($rule->ruleActions as $action) { - $action->delete(); - } - $rule->delete(); - - return true; - } - - /** - * @param RuleGroup $ruleGroup - * - * @return int - */ - public function getHighestOrderInRuleGroup(RuleGroup $ruleGroup) - { - return intval($ruleGroup->rules()->max('order')); - } - - /** * @param Rule $rule * @param string $action @@ -261,6 +235,29 @@ class RuleRepository implements RuleRepositoryInterface return $ruleAction; } + /** + * @param Rule $rule + * @param string $action + * @param string $value + * @param bool $stopProcessing + * @param int $order + * + * @return RuleTrigger + */ + public function storeTrigger(Rule $rule, $action, $value, $stopProcessing, $order) + { + $ruleTrigger = new RuleTrigger; + $ruleTrigger->rule()->associate($rule); + $ruleTrigger->order = $order; + $ruleTrigger->active = 1; + $ruleTrigger->stop_processing = $stopProcessing; + $ruleTrigger->trigger_type = $action; + $ruleTrigger->trigger_value = $value; + $ruleTrigger->save(); + + return $ruleTrigger; + } + /** * @param Rule $rule * @param array $data diff --git a/app/Repositories/Rule/RuleRepositoryInterface.php b/app/Repositories/Rule/RuleRepositoryInterface.php index 7843c8c72a..42829751ff 100644 --- a/app/Repositories/Rule/RuleRepositoryInterface.php +++ b/app/Repositories/Rule/RuleRepositoryInterface.php @@ -36,27 +36,11 @@ interface RuleRepositoryInterface public function getHighestOrderInRuleGroup(RuleGroup $ruleGroup); /** - * @param Rule $rule - * @param array $ids + * @param Rule $rule * * @return bool */ - public function reorderRuleTriggers(Rule $rule, array $ids); - - /** - * @param Rule $rule - * @param array $ids - * - * @return bool - */ - public function reorderRuleActions(Rule $rule, array $ids); - - /** - * @param RuleGroup $ruleGroup - * - * @return bool - */ - public function resetRulesInGroupOrder(RuleGroup $ruleGroup); + public function moveDown(Rule $rule); /** * @param Rule $rule @@ -67,18 +51,26 @@ interface RuleRepositoryInterface /** * @param Rule $rule - * @param array $data - * - * @return Rule - */ - public function update(Rule $rule, array $data); - - /** - * @param Rule $rule + * @param array $ids * * @return bool */ - public function moveDown(Rule $rule); + public function reorderRuleActions(Rule $rule, array $ids); + + /** + * @param Rule $rule + * @param array $ids + * + * @return bool + */ + public function reorderRuleTriggers(Rule $rule, array $ids); + + /** + * @param RuleGroup $ruleGroup + * + * @return bool + */ + public function resetRulesInGroupOrder(RuleGroup $ruleGroup); /** * @param array $data @@ -94,9 +86,9 @@ interface RuleRepositoryInterface * @param bool $stopProcessing * @param int $order * - * @return RuleTrigger + * @return RuleAction */ - public function storeTrigger(Rule $rule, $action, $value, $stopProcessing, $order); + public function storeAction(Rule $rule, $action, $value, $stopProcessing, $order); /** * @param Rule $rule @@ -105,8 +97,16 @@ interface RuleRepositoryInterface * @param bool $stopProcessing * @param int $order * - * @return RuleAction + * @return RuleTrigger */ - public function storeAction(Rule $rule, $action, $value, $stopProcessing, $order); + public function storeTrigger(Rule $rule, $action, $value, $stopProcessing, $order); + + /** + * @param Rule $rule + * @param array $data + * + * @return Rule + */ + public function update(Rule $rule, array $data); } \ No newline at end of file diff --git a/app/Repositories/Tag/TagRepository.php b/app/Repositories/Tag/TagRepository.php index d0368d05f1..952090e750 100644 --- a/app/Repositories/Tag/TagRepository.php +++ b/app/Repositories/Tag/TagRepository.php @@ -22,6 +22,48 @@ class TagRepository implements TagRepositoryInterface { + /** + * @param Collection $accounts + * @param Carbon $start + * @param Carbon $end + * + * @return Collection + */ + public function allCoveredByBalancingActs(Collection $accounts, Carbon $start, Carbon $end) + { + $ids = $accounts->pluck('id')->toArray(); + $set = Auth::user()->tags() + ->leftJoin('tag_transaction_journal', 'tag_transaction_journal.tag_id', '=', 'tags.id') + ->leftJoin('transaction_journals', 'tag_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') + ->leftJoin('transaction_types', 'transaction_journals.transaction_type_id', '=', 'transaction_types.id') + ->leftJoin( + 'transactions AS t_from', function (JoinClause $join) { + $join->on('transaction_journals.id', '=', 't_from.transaction_journal_id')->where('t_from.amount', '<', 0); + } + ) + ->leftJoin( + 'transactions AS t_to', function (JoinClause $join) { + $join->on('transaction_journals.id', '=', 't_to.transaction_journal_id')->where('t_to.amount', '>', 0); + } + ) + ->where('tags.tagMode', 'balancingAct') + ->where('transaction_types.type', TransactionType::TRANSFER) + ->where('transaction_journals.date', '>=', $start->format('Y-m-d')) + ->where('transaction_journals.date', '<=', $end->format('Y-m-d')) + ->whereNull('transaction_journals.deleted_at') + ->whereIn('t_from.account_id', $ids) + ->whereIn('t_to.account_id', $ids) + ->groupBy('t_to.account_id') + ->get( + [ + 't_to.account_id', + DB::Raw('SUM(`t_to`.`amount`) as `sum`'), + ] + ); + + return $set; + } + /** * * @param TransactionJournal $journal @@ -95,49 +137,6 @@ class TagRepository implements TagRepositoryInterface return $amount; } - - /** - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return Collection - */ - public function allCoveredByBalancingActs(Collection $accounts, Carbon $start, Carbon $end) - { - $ids = $accounts->pluck('id')->toArray(); - $set = Auth::user()->tags() - ->leftJoin('tag_transaction_journal', 'tag_transaction_journal.tag_id', '=', 'tags.id') - ->leftJoin('transaction_journals', 'tag_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') - ->leftJoin('transaction_types', 'transaction_journals.transaction_type_id', '=', 'transaction_types.id') - ->leftJoin( - 'transactions AS t_from', function (JoinClause $join) { - $join->on('transaction_journals.id', '=', 't_from.transaction_journal_id')->where('t_from.amount', '<', 0); - } - ) - ->leftJoin( - 'transactions AS t_to', function (JoinClause $join) { - $join->on('transaction_journals.id', '=', 't_to.transaction_journal_id')->where('t_to.amount', '>', 0); - } - ) - ->where('tags.tagMode', 'balancingAct') - ->where('transaction_types.type', TransactionType::TRANSFER) - ->where('transaction_journals.date', '>=', $start->format('Y-m-d')) - ->where('transaction_journals.date', '<=', $end->format('Y-m-d')) - ->whereNull('transaction_journals.deleted_at') - ->whereIn('t_from.account_id', $ids) - ->whereIn('t_to.account_id', $ids) - ->groupBy('t_to.account_id') - ->get( - [ - 't_to.account_id', - DB::Raw('SUM(`t_to`.`amount`) as `sum`'), - ] - ); - - return $set; - } - /** * @param Tag $tag * @@ -278,42 +277,6 @@ class TagRepository implements TagRepositoryInterface return $tag; } - /** - * @param TransactionJournal $journal - * @param Tag $tag - * - * @return boolean - */ - protected function connectBalancingAct(TransactionJournal $journal, Tag $tag) - { - /** @var TransactionType $withdrawal */ - $withdrawal = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); - $withdrawals = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->count(); - /** @var TransactionType $transfer */ - $transfer = TransactionType::whereType(TransactionType::TRANSFER)->first(); - $transfers = $tag->transactionjournals()->where('transaction_type_id', $transfer->id)->count(); - - - // only if this is the only withdrawal. - if ($journal->transaction_type_id == $withdrawal->id && $withdrawals < 1) { - $journal->tags()->save($tag); - $journal->save(); - - return true; - } - // and only if this is the only transfer - if ($journal->transaction_type_id == $transfer->id && $transfers < 1) { - $journal->tags()->save($tag); - $journal->save(); - - return true; - } - - // ignore expense - return false; - - } - /** * @param TransactionJournal $journal * @param Tag $tag @@ -361,6 +324,42 @@ class TagRepository implements TagRepositoryInterface } + /** + * @param TransactionJournal $journal + * @param Tag $tag + * + * @return boolean + */ + protected function connectBalancingAct(TransactionJournal $journal, Tag $tag) + { + /** @var TransactionType $withdrawal */ + $withdrawal = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); + $withdrawals = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->count(); + /** @var TransactionType $transfer */ + $transfer = TransactionType::whereType(TransactionType::TRANSFER)->first(); + $transfers = $tag->transactionjournals()->where('transaction_type_id', $transfer->id)->count(); + + + // only if this is the only withdrawal. + if ($journal->transaction_type_id == $withdrawal->id && $withdrawals < 1) { + $journal->tags()->save($tag); + $journal->save(); + + return true; + } + // and only if this is the only transfer + if ($journal->transaction_type_id == $transfer->id && $transfers < 1) { + $journal->tags()->save($tag); + $journal->save(); + + return true; + } + + // ignore expense + return false; + + } + /** * @param TransactionJournal $journal * @param Tag $tag diff --git a/app/Rules/Processor.php b/app/Rules/Processor.php index eb932ca2ec..54125bfcac 100644 --- a/app/Rules/Processor.php +++ b/app/Rules/Processor.php @@ -25,17 +25,14 @@ use Log; */ class Processor { - /** @var Rule */ - protected $rule; - /** @var TransactionJournal */ protected $journal; - - /** @var array */ - private $triggerTypes = []; - + /** @var Rule */ + protected $rule; /** @var array */ private $actionTypes = []; + /** @var array */ + private $triggerTypes = []; /** * Processor constructor. @@ -51,6 +48,38 @@ class Processor $this->actionTypes = Domain::getRuleActions(); } + /** + * @return TransactionJournal + */ + public function getJournal() + { + return $this->journal; + } + + /** + * @param TransactionJournal $journal + */ + public function setJournal($journal) + { + $this->journal = $journal; + } + + /** + * @return Rule + */ + public function getRule() + { + return $this->rule; + } + + /** + * @param Rule $rule + */ + public function setRule($rule) + { + $this->rule = $rule; + } + public function handle() { // get all triggers: @@ -62,6 +91,34 @@ class Processor } + /** + * @return bool + */ + protected function actions() + { + /** + * @var int $index + * @var RuleAction $action + */ + foreach ($this->rule->ruleActions()->orderBy('order', 'ASC')->get() as $action) { + $type = $action->action_type; + $class = $this->actionTypes[$type]; + Log::debug('Action #' . $action->id . ' for rule #' . $action->rule_id . ' (' . $type . ')'); + if (!class_exists($class)) { + abort(500, 'Could not instantiate class for rule action type "' . $type . '" (' . $class . ').'); + } + /** @var ActionInterface $actionClass */ + $actionClass = new $class($action, $this->journal); + $actionClass->act(); + if ($action->stop_processing) { + break; + } + + } + + return true; + } + /** * TODO stop when stop_processing is present. * @@ -101,65 +158,5 @@ class Processor } - /** - * @return bool - */ - protected function actions() - { - /** - * @var int $index - * @var RuleAction $action - */ - foreach ($this->rule->ruleActions()->orderBy('order', 'ASC')->get() as $action) { - $type = $action->action_type; - $class = $this->actionTypes[$type]; - Log::debug('Action #' . $action->id . ' for rule #' . $action->rule_id . ' (' . $type . ')'); - if (!class_exists($class)) { - abort(500, 'Could not instantiate class for rule action type "' . $type . '" (' . $class . ').'); - } - /** @var ActionInterface $actionClass */ - $actionClass = new $class($action, $this->journal); - $actionClass->act(); - if ($action->stop_processing) { - break; - } - - } - - return true; - } - - /** - * @return Rule - */ - public function getRule() - { - return $this->rule; - } - - /** - * @param Rule $rule - */ - public function setRule($rule) - { - $this->rule = $rule; - } - - /** - * @return TransactionJournal - */ - public function getJournal() - { - return $this->journal; - } - - /** - * @param TransactionJournal $journal - */ - public function setJournal($journal) - { - $this->journal = $journal; - } - } \ No newline at end of file diff --git a/app/Support/Amount.php b/app/Support/Amount.php index 72bb329ad7..be465b5872 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -17,6 +17,17 @@ use Preferences as Prefs; class Amount { + /** + * @param $amount + * @param bool $coloured + * + * @return string + */ + public function format($amount, $coloured = true) + { + return $this->formatAnything($this->getDefaultCurrency(), $amount, $coloured); + } + /** * This method will properly format the given number, in color or "black and white", * as a currency, given two things: the currency required and the current locale. @@ -48,48 +59,6 @@ class Amount return $result; } - /** - * @param $amount - * @param bool $coloured - * - * @return string - */ - public function format($amount, $coloured = true) - { - return $this->formatAnything($this->getDefaultCurrency(), $amount, $coloured); - } - - /** - * @return string - */ - public function getCurrencySymbol() - { - $cache = new CacheProperties; - $cache->addProperty('getCurrencySymbol'); - if ($cache->has()) { - return $cache->get(); - } else { - $currencyPreference = Prefs::get('currencyPreference', env('DEFAULT_CURRENCY', 'EUR')); - $currency = TransactionCurrency::whereCode($currencyPreference->data)->first(); - - $cache->store($currency->symbol); - - return $currency->symbol; - } - } - - /** - * @param string $symbol - * @param float $amount - * @param bool $coloured - * - * @return string - */ - public function formatWithSymbol($symbol, $amount, $coloured = true) - { - return $this->formatAnything($this->getDefaultCurrency(), $amount, $coloured); - } - /** * * @param TransactionJournal $journal @@ -139,6 +108,18 @@ class Amount return $this->formatAnything($currency, $transaction->amount, $coloured); } + /** + * @param string $symbol + * @param float $amount + * @param bool $coloured + * + * @return string + */ + public function formatWithSymbol($symbol, $amount, $coloured = true) + { + return $this->formatAnything($this->getDefaultCurrency(), $amount, $coloured); + } + /** * @return Collection */ @@ -173,6 +154,25 @@ class Amount } } + /** + * @return string + */ + public function getCurrencySymbol() + { + $cache = new CacheProperties; + $cache->addProperty('getCurrencySymbol'); + if ($cache->has()) { + return $cache->get(); + } else { + $currencyPreference = Prefs::get('currencyPreference', env('DEFAULT_CURRENCY', 'EUR')); + $currency = TransactionCurrency::whereCode($currencyPreference->data)->first(); + + $cache->store($currency->symbol); + + return $currency->symbol; + } + } + /** * @return TransactionCurrency */ diff --git a/app/Support/CacheProperties.php b/app/Support/CacheProperties.php index ba2d654b3d..ed0c1f3302 100644 --- a/app/Support/CacheProperties.php +++ b/app/Support/CacheProperties.php @@ -71,6 +71,14 @@ class CacheProperties return Cache::has($this->md5); } + /** + * @param $data + */ + public function store($data) + { + Cache::forever($this->md5, $data); + } + /** * @return void */ @@ -95,12 +103,4 @@ class CacheProperties $this->md5 = md5($this->md5); } - - /** - * @param $data - */ - public function store($data) - { - Cache::forever($this->md5, $data); - } } diff --git a/app/Support/ExpandedForm.php b/app/Support/ExpandedForm.php index 37e4cc6c53..2fe9edcd3e 100644 --- a/app/Support/ExpandedForm.php +++ b/app/Support/ExpandedForm.php @@ -19,25 +19,6 @@ use Session; class ExpandedForm { - /** - * @param $name - * @param null $value - * @param array $options - * - * @return string - */ - public function staticText($name, $value, array $options = []) - { - $label = $this->label($name, $options); - $options = $this->expandOptionArray($name, $label, $options); - $classes = $this->getHolderClasses($name); - $value = $this->fillFieldValue($name, $value); - $html = view('form.static', compact('classes', 'name', 'label', 'value', 'options'))->render(); - - return $html; - - } - /** * @param $name * @param null $value @@ -63,86 +44,6 @@ class ExpandedForm } - /** - * @param $name - * @param $options - * - * @return mixed - */ - protected function label($name, $options) - { - if (isset($options['label'])) { - return $options['label']; - } - - return trans('form.' . $name); - - } - - /** - * @param $name - * @param $label - * @param array $options - * - * @return array - */ - protected function expandOptionArray($name, $label, array $options) - { - $options['class'] = 'form-control'; - $options['id'] = 'ffInput_' . $name; - $options['autocomplete'] = 'off'; - $options['placeholder'] = ucfirst($label); - - return $options; - } - - /** - * @param $name - * - * @return string - */ - protected function getHolderClasses($name) - { - /* - * Get errors from session: - */ - /** @var MessageBag $errors */ - $errors = Session::get('errors'); - $classes = 'form-group'; - - if (!is_null($errors) && $errors->has($name)) { - $classes = 'form-group has-error has-feedback'; - } - - return $classes; - } - - /** - * @param $name - * @param $value - * - * @return mixed - */ - protected function fillFieldValue($name, $value) - { - if (Session::has('preFilled')) { - $preFilled = Session::get('preFilled'); - $value = isset($preFilled[$name]) && is_null($value) ? $preFilled[$name] : $value; - } - // @codeCoverageIgnoreStart - try { - if (!is_null(Input::old($name))) { - $value = Input::old($name); - } - } catch (RuntimeException $e) { - // don't care about session errors. - } - - // @codeCoverageIgnoreEnd - - return $value; - } - /** * @param $name * @param null $value @@ -208,6 +109,23 @@ class ExpandedForm return $html; } + /** + * @param $name + * @param array $options + * + * @return string + */ + public function file($name, array $options = []) + { + $label = $this->label($name, $options); + $options = $this->expandOptionArray($name, $label, $options); + $classes = $this->getHolderClasses($name); + $html = view('form.file', compact('classes', 'name', 'label', 'options'))->render(); + + return $html; + + } + /** * @param $name * @param null $value @@ -366,6 +284,25 @@ class ExpandedForm return $html; } + /** + * @param $name + * @param null $value + * @param array $options + * + * @return string + */ + public function staticText($name, $value, array $options = []) + { + $label = $this->label($name, $options); + $options = $this->expandOptionArray($name, $label, $options); + $classes = $this->getHolderClasses($name); + $value = $this->fillFieldValue($name, $value); + $html = view('form.static', compact('classes', 'name', 'label', 'value', 'options'))->render(); + + return $html; + + } + /** * @param $name * @param null $value @@ -385,23 +322,6 @@ class ExpandedForm return $html; } - /** - * @param $name - * @param array $options - * - * @return string - */ - public function file($name, array $options = []) - { - $label = $this->label($name, $options); - $options = $this->expandOptionArray($name, $label, $options); - $classes = $this->getHolderClasses($name); - $html = view('form.file', compact('classes', 'name', 'label', 'options'))->render(); - - return $html; - - } - /** * @param $name * @param null $value @@ -440,4 +360,84 @@ class ExpandedForm return $html; } + + /** + * @param $name + * @param $label + * @param array $options + * + * @return array + */ + protected function expandOptionArray($name, $label, array $options) + { + $options['class'] = 'form-control'; + $options['id'] = 'ffInput_' . $name; + $options['autocomplete'] = 'off'; + $options['placeholder'] = ucfirst($label); + + return $options; + } + + /** + * @param $name + * @param $value + * + * @return mixed + */ + protected function fillFieldValue($name, $value) + { + if (Session::has('preFilled')) { + $preFilled = Session::get('preFilled'); + $value = isset($preFilled[$name]) && is_null($value) ? $preFilled[$name] : $value; + } + // @codeCoverageIgnoreStart + try { + if (!is_null(Input::old($name))) { + $value = Input::old($name); + } + } catch (RuntimeException $e) { + // don't care about session errors. + } + + // @codeCoverageIgnoreEnd + + return $value; + } + + /** + * @param $name + * + * @return string + */ + protected function getHolderClasses($name) + { + /* + * Get errors from session: + */ + /** @var MessageBag $errors */ + $errors = Session::get('errors'); + $classes = 'form-group'; + + if (!is_null($errors) && $errors->has($name)) { + $classes = 'form-group has-error has-feedback'; + } + + return $classes; + } + + /** + * @param $name + * @param $options + * + * @return mixed + */ + protected function label($name, $options) + { + if (isset($options['label'])) { + return $options['label']; + } + + return trans('form.' . $name); + + } } diff --git a/app/Support/Preferences.php b/app/Support/Preferences.php index e705f9cb55..531eb3e0ad 100644 --- a/app/Support/Preferences.php +++ b/app/Support/Preferences.php @@ -13,16 +13,6 @@ use FireflyIII\Models\Preference; */ class Preferences { - /** - * @return string - */ - public function lastActivity() - { - $preference = $this->get('lastActivity', microtime())->data; - - return md5($preference); - } - /** * @param string $name * @param string $default @@ -53,6 +43,26 @@ class Preferences } + /** + * @return string + */ + public function lastActivity() + { + $preference = $this->get('lastActivity', microtime())->data; + + return md5($preference); + } + + /** + * @return bool + */ + public function mark() + { + $this->set('lastActivity', microtime()); + + return true; + } + /** * @param $name * @param string $value @@ -80,14 +90,4 @@ class Preferences return $pref; } - - /** - * @return bool - */ - public function mark() - { - $this->set('lastActivity', microtime()); - - return true; - } } diff --git a/app/Support/Steam.php b/app/Support/Steam.php index 647b75f138..0358e07abd 100644 --- a/app/Support/Steam.php +++ b/app/Support/Steam.php @@ -16,27 +16,6 @@ use FireflyIII\Models\Transaction; class Steam { - /** - * @param array $accounts - * - * @return array - */ - public function getLastActivities(array $accounts) - { - $list = []; - - $set = Auth::user()->transactions() - ->whereIn('account_id', $accounts) - ->groupBy('account_id') - ->get(['transactions.account_id', DB::raw('MAX(`transaction_journals`.`date`) as `max_date`')]); - - foreach ($set as $entry) { - $list[intval($entry->account_id)] = new Carbon($entry->max_date); - } - - return $list; - } - /** * * @param \FireflyIII\Models\Account $account @@ -163,7 +142,29 @@ class Steam return $result; } + /** + * @param array $accounts + * + * @return array + */ + public function getLastActivities(array $accounts) + { + $list = []; + + $set = Auth::user()->transactions() + ->whereIn('account_id', $accounts) + ->groupBy('account_id') + ->get(['transactions.account_id', DB::raw('MAX(`transaction_journals`.`date`) as `max_date`')]); + + foreach ($set as $entry) { + $list[intval($entry->account_id)] = new Carbon($entry->max_date); + } + + return $list; + } + // parse PHP size: + /** * @param $string * diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php index d386645292..8fd6befc1f 100644 --- a/app/Validation/FireflyValidator.php +++ b/app/Validation/FireflyValidator.php @@ -40,83 +40,6 @@ class FireflyValidator extends Validator parent::__construct($translator, $data, $rules, $messages, $customAttributes); } - /** - * @param $attribute - * - * @return bool - */ - public function validateRuleTriggerValue($attribute) - { - // get the index from a string like "rule-trigger-value.2". - $parts = explode('.', $attribute); - $index = $parts[count($parts) - 1]; - - // loop all rule-triggers. - // check if rule-value matches the thing. - if (is_array($this->data['rule-trigger'])) { - $name = $this->getRuleTriggerName($index); - $value = $this->getRuleTriggerValue($index); - switch ($name) { - default: - return true; - case 'amount_less': - return is_numeric($value); - break; - case 'transaction_type': - $count = TransactionType::where('type', $value)->count(); - - return $count === 1; - break; - case 'invalid': - return false; - break; - } - } - } - - /** - * @param $attribute - * - * @return bool - */ - public function validateRuleActionValue($attribute) - { - // get the index from a string like "rule-action-value.2". - $parts = explode('.', $attribute); - $index = $parts[count($parts) - 1]; - // loop all rule-actions. - // check if rule-action-value matches the thing. - - if (is_array($this->data['rule-action'])) { - $name = isset($this->data['rule-action'][$index]) ? $this->data['rule-action'][$index] : 'invalid'; - $value = isset($this->data['rule-action-value'][$index]) ? $this->data['rule-action-value'][$index] : false; - switch ($name) { - default: - Log::debug(' (' . $attribute . ') (index:' . $index . ') Name is "' . $name . '" so no action is taken.'); - - return true; - case 'set_budget': - /** @var BudgetRepositoryInterface $repository */ - $repository = app('FireflyIII\Repositories\Budget\BudgetRepositoryInterface'); - $budgets = $repository->getBudgets(); - // count budgets, should have at least one - $count = $budgets->filter( - function (Budget $budget) use ($value) { - return $budget->name == $value; - } - )->count(); - - return ($count === 1); - case 'invalid': - return false; - - } - } - - return false; - } - - /** * @param $attribute * @param $value @@ -166,6 +89,82 @@ class FireflyValidator extends Validator return (intval($checksum) === 1); } + /** + * @param $attribute + * + * @return bool + */ + public function validateRuleActionValue($attribute) + { + // get the index from a string like "rule-action-value.2". + $parts = explode('.', $attribute); + $index = $parts[count($parts) - 1]; + // loop all rule-actions. + // check if rule-action-value matches the thing. + + if (is_array($this->data['rule-action'])) { + $name = isset($this->data['rule-action'][$index]) ? $this->data['rule-action'][$index] : 'invalid'; + $value = isset($this->data['rule-action-value'][$index]) ? $this->data['rule-action-value'][$index] : false; + switch ($name) { + default: + Log::debug(' (' . $attribute . ') (index:' . $index . ') Name is "' . $name . '" so no action is taken.'); + + return true; + case 'set_budget': + /** @var BudgetRepositoryInterface $repository */ + $repository = app('FireflyIII\Repositories\Budget\BudgetRepositoryInterface'); + $budgets = $repository->getBudgets(); + // count budgets, should have at least one + $count = $budgets->filter( + function (Budget $budget) use ($value) { + return $budget->name == $value; + } + )->count(); + + return ($count === 1); + case 'invalid': + return false; + + } + } + + return false; + } + + /** + * @param $attribute + * + * @return bool + */ + public function validateRuleTriggerValue($attribute) + { + // get the index from a string like "rule-trigger-value.2". + $parts = explode('.', $attribute); + $index = $parts[count($parts) - 1]; + + // loop all rule-triggers. + // check if rule-value matches the thing. + if (is_array($this->data['rule-trigger'])) { + $name = $this->getRuleTriggerName($index); + $value = $this->getRuleTriggerValue($index); + switch ($name) { + default: + return true; + case 'amount_less': + return is_numeric($value); + break; + case 'transaction_type': + $count = TransactionType::where('type', $value)->count(); + + return $count === 1; + break; + case 'invalid': + return false; + break; + } + } + } + /** * @param $attribute * @param $value @@ -197,122 +196,6 @@ class FireflyValidator extends Validator return false; } - /** - * @return bool - */ - protected function validateAccountAnonymously() - { - if (!isset($this->data['user_id'])) { - return false; - } - - $user = User::find($this->data['user_id']); - $type = AccountType::find($this->data['account_type_id'])->first(); - $value = $this->tryDecrypt($this->data['name']); - - - $set = $user->accounts()->where('account_type_id', $type->id)->get(); - /** @var Account $entry */ - foreach ($set as $entry) { - if ($entry->name == $value) { - return false; - } - } - - return true; - } - - /** - * @param $value - * - * @return mixed - */ - protected function tryDecrypt($value) - { - try { - $value = Crypt::decrypt($value); - } catch (DecryptException $e) { - // do not care. - } - - return $value; - } - - /** - * @param $value - * @param $parameters - * - * @return bool - */ - protected function validateByAccountTypeString($value, $parameters) - { - $search = Config::get('firefly.accountTypeByIdentifier.' . $this->data['what']); - $type = AccountType::whereType($search)->first(); - $ignore = isset($parameters[0]) ? intval($parameters[0]) : 0; - - $set = Auth::user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)->get(); - /** @var Account $entry */ - foreach ($set as $entry) { - if ($entry->name == $value) { - return false; - } - } - - return true; - } - - /** - * @param $value - * @param $parameters - * - * @return bool - */ - protected function validateByAccountTypeId($value, $parameters) - { - $type = AccountType::find($this->data['account_type_id'])->first(); - $ignore = isset($parameters[0]) ? intval($parameters[0]) : 0; - $value = $this->tryDecrypt($value); - - $set = Auth::user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)->get(); - /** @var Account $entry */ - foreach ($set as $entry) { - if ($entry->name == $value) { - return false; - } - } - - return true; - - } - - /** - * @param $value - * - * @return bool - * @internal param $parameters - * - */ - protected function validateByAccountId($value) - { - /** @var Account $existingAccount */ - $existingAccount = Account::find($this->data['id']); - - $type = $existingAccount->accountType; - $ignore = $existingAccount->id; - $value = $this->tryDecrypt($value); - - $set = Auth::user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)->get(); - /** @var Account $entry */ - foreach ($set as $entry) { - if ($entry->name == $value) { - return false; - } - } - - return true; - - } - /** * @param $attribute * @param $value @@ -407,6 +290,122 @@ class FireflyValidator extends Validator return true; } + /** + * @param $value + * + * @return mixed + */ + protected function tryDecrypt($value) + { + try { + $value = Crypt::decrypt($value); + } catch (DecryptException $e) { + // do not care. + } + + return $value; + } + + /** + * @return bool + */ + protected function validateAccountAnonymously() + { + if (!isset($this->data['user_id'])) { + return false; + } + + $user = User::find($this->data['user_id']); + $type = AccountType::find($this->data['account_type_id'])->first(); + $value = $this->tryDecrypt($this->data['name']); + + + $set = $user->accounts()->where('account_type_id', $type->id)->get(); + /** @var Account $entry */ + foreach ($set as $entry) { + if ($entry->name == $value) { + return false; + } + } + + return true; + } + + /** + * @param $value + * + * @return bool + * @internal param $parameters + * + */ + protected function validateByAccountId($value) + { + /** @var Account $existingAccount */ + $existingAccount = Account::find($this->data['id']); + + $type = $existingAccount->accountType; + $ignore = $existingAccount->id; + $value = $this->tryDecrypt($value); + + $set = Auth::user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)->get(); + /** @var Account $entry */ + foreach ($set as $entry) { + if ($entry->name == $value) { + return false; + } + } + + return true; + + } + + /** + * @param $value + * @param $parameters + * + * @return bool + */ + protected function validateByAccountTypeId($value, $parameters) + { + $type = AccountType::find($this->data['account_type_id'])->first(); + $ignore = isset($parameters[0]) ? intval($parameters[0]) : 0; + $value = $this->tryDecrypt($value); + + $set = Auth::user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)->get(); + /** @var Account $entry */ + foreach ($set as $entry) { + if ($entry->name == $value) { + return false; + } + } + + return true; + + } + + /** + * @param $value + * @param $parameters + * + * @return bool + */ + protected function validateByAccountTypeString($value, $parameters) + { + $search = Config::get('firefly.accountTypeByIdentifier.' . $this->data['what']); + $type = AccountType::whereType($search)->first(); + $ignore = isset($parameters[0]) ? intval($parameters[0]) : 0; + + $set = Auth::user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)->get(); + /** @var Account $entry */ + foreach ($set as $entry) { + if ($entry->name == $value) { + return false; + } + } + + return true; + } + /** * @param int $index *