mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Some code cleanup courtesy of PHPStorm.
This commit is contained in:
parent
a755badd5f
commit
820722f44e
@ -40,7 +40,7 @@ class Handler extends ExceptionHandler
|
||||
*/
|
||||
public function report(Exception $e)
|
||||
{
|
||||
return parent::report($e);
|
||||
parent::report($e);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -101,44 +101,12 @@ class RuleController extends Controller
|
||||
// has old input?
|
||||
if (Input::old()) {
|
||||
// process old triggers.
|
||||
$newIndex = 0;
|
||||
foreach (Input::old('rule-trigger') as $index => $entry) {
|
||||
$count = ($newIndex + 1);
|
||||
$triggerCount++;
|
||||
$oldTrigger = $entry;
|
||||
$oldValue = Input::old('rule-trigger-value')[$index];
|
||||
$oldChecked = isset(Input::old('rule-trigger-stop')[$index]) ? true : false;
|
||||
$oldTriggers[] = view(
|
||||
'rules.partials.trigger',
|
||||
[
|
||||
'oldTrigger' => $oldTrigger,
|
||||
'oldValue' => $oldValue,
|
||||
'oldChecked' => $oldChecked,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$newIndex++;
|
||||
}
|
||||
$oldTriggers = $this->getPreviousTriggers();
|
||||
$triggerCount = count($oldTriggers);
|
||||
|
||||
// process old actions
|
||||
$newIndex = 0;
|
||||
foreach (Input::old('rule-action') as $index => $entry) {
|
||||
$count = ($newIndex + 1);
|
||||
$actionCount++;
|
||||
$oldAction = $entry;
|
||||
$oldValue = Input::old('rule-action-value')[$index];
|
||||
$oldChecked = isset(Input::old('rule-action-stop')[$index]) ? true : false;
|
||||
$oldActions[] = view(
|
||||
'rules.partials.action',
|
||||
[
|
||||
'oldTrigger' => $oldAction,
|
||||
'oldValue' => $oldValue,
|
||||
'oldChecked' => $oldChecked,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$newIndex++;
|
||||
}
|
||||
$oldActions = $this->getPreviousActions();
|
||||
$actionCount = count($oldActions);
|
||||
}
|
||||
|
||||
$subTitleIcon = 'fa-clone';
|
||||
@ -164,107 +132,23 @@ class RuleController extends Controller
|
||||
*/
|
||||
public function edit(Rule $rule)
|
||||
{
|
||||
|
||||
// count for current rule's triggers/actions.
|
||||
$triggerCount = 0;
|
||||
$actionCount = 0;
|
||||
|
||||
// collection of those triggers/actions.
|
||||
$oldTriggers = [];
|
||||
$oldActions = [];
|
||||
|
||||
// has old input?
|
||||
if (Input::old()) {
|
||||
// process old triggers.
|
||||
$newIndex = 0;
|
||||
foreach (Input::old('rule-trigger') as $index => $entry) {
|
||||
$count = ($newIndex + 1);
|
||||
$triggerCount++;
|
||||
$oldTrigger = $entry;
|
||||
$oldValue = Input::old('rule-trigger-value')[$index];
|
||||
$oldChecked = isset(Input::old('rule-trigger-stop')[$index]) ? true : false;
|
||||
$oldTriggers[] = view(
|
||||
'rules.partials.trigger',
|
||||
[
|
||||
'oldTrigger' => $oldTrigger,
|
||||
'oldValue' => $oldValue,
|
||||
'oldChecked' => $oldChecked,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$newIndex++;
|
||||
}
|
||||
$oldTriggers = $this->getPreviousTriggers();
|
||||
$triggerCount = count($oldTriggers);
|
||||
|
||||
// process old actions
|
||||
$newIndex = 0;
|
||||
foreach (Input::old('rule-action') as $index => $entry) {
|
||||
$count = ($newIndex + 1);
|
||||
$actionCount++;
|
||||
$oldAction = $entry;
|
||||
$oldValue = Input::old('rule-action-value')[$index];
|
||||
$oldChecked = isset(Input::old('rule-action-stop')[$index]) ? true : false;
|
||||
$oldActions[] = view(
|
||||
'rules.partials.action',
|
||||
[
|
||||
'oldTrigger' => $oldAction,
|
||||
'oldValue' => $oldValue,
|
||||
'oldChecked' => $oldChecked,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$newIndex++;
|
||||
}
|
||||
$oldActions = $this->getPreviousActions();
|
||||
$actionCount = count($oldActions);
|
||||
} else {
|
||||
// get current triggers
|
||||
$newIndex = 0;
|
||||
/**
|
||||
* @var int $index
|
||||
* @var RuleTrigger $entry
|
||||
*/
|
||||
foreach ($rule->ruleTriggers as $index => $entry) {
|
||||
if ($entry->trigger_type != 'user_action') {
|
||||
$count = ($newIndex + 1);
|
||||
$triggerCount++;
|
||||
$oldTrigger = $entry->trigger_type;
|
||||
$oldValue = $entry->trigger_value;
|
||||
$oldChecked = $entry->stop_processing;
|
||||
$oldTriggers[] = view(
|
||||
'rules.partials.trigger',
|
||||
[
|
||||
'oldTrigger' => $oldTrigger,
|
||||
'oldValue' => $oldValue,
|
||||
'oldChecked' => $oldChecked,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$newIndex++;
|
||||
}
|
||||
|
||||
}
|
||||
$oldTriggers = $this->getCurrentTriggers($rule);
|
||||
$triggerCount = count($oldTriggers);
|
||||
|
||||
// get current actions
|
||||
$newIndex = 0;
|
||||
/**
|
||||
* @var int $index
|
||||
* @var RuleAction $entry
|
||||
*/
|
||||
foreach ($rule->ruleActions as $index => $entry) {
|
||||
$count = ($newIndex + 1);
|
||||
$actionCount++;
|
||||
$oldAction = $entry->action_type;
|
||||
$oldValue = $entry->action_value;
|
||||
$oldChecked = $entry->stop_processing;
|
||||
$oldActions[] = view(
|
||||
'rules.partials.action',
|
||||
[
|
||||
'oldTrigger' => $oldAction,
|
||||
'oldValue' => $oldValue,
|
||||
'oldChecked' => $oldChecked,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$newIndex++;
|
||||
}
|
||||
$oldActions = $this->getCurrentActions($rule);
|
||||
$actionCount = count($oldActions);
|
||||
}
|
||||
|
||||
// get rule trigger for update / store-journal:
|
||||
@ -459,5 +343,111 @@ class RuleController extends Controller
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Rule $rule
|
||||
*/
|
||||
private function getCurrentActions(Rule $rule)
|
||||
{
|
||||
$index = 0;
|
||||
$actions = [];
|
||||
|
||||
/** @var RuleAction $entry */
|
||||
foreach ($rule->ruleActions as $entry) {
|
||||
$count = ($index + 1);
|
||||
$actions[] = view(
|
||||
'rules.partials.action',
|
||||
[
|
||||
'oldTrigger' => $entry->action_type,
|
||||
'oldValue' => $entry->action_value,
|
||||
'oldChecked' => $entry->stop_processing,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$index++;
|
||||
}
|
||||
|
||||
return $actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Rule $rule
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function getCurrentTriggers(Rule $rule)
|
||||
{
|
||||
$index = 0;
|
||||
$triggers = [];
|
||||
|
||||
/** @var RuleTrigger $entry */
|
||||
foreach ($rule->ruleTriggers as $entry) {
|
||||
if ($entry->trigger_type != 'user_action') {
|
||||
$count = ($index + 1);
|
||||
$triggers[] = view(
|
||||
'rules.partials.trigger',
|
||||
[
|
||||
'oldTrigger' => $entry->trigger_type,
|
||||
'oldValue' => $entry->trigger_value,
|
||||
'oldChecked' => $entry->stop_processing,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$index++;
|
||||
}
|
||||
}
|
||||
|
||||
return $triggers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function getPreviousActions()
|
||||
{
|
||||
$newIndex = 0;
|
||||
$actions = [];
|
||||
foreach (Input::old('rule-action') as $index => $entry) {
|
||||
$count = ($newIndex + 1);
|
||||
$checked = isset(Input::old('rule-action-stop')[$index]) ? true : false;
|
||||
$actions[] = view(
|
||||
'rules.partials.action',
|
||||
[
|
||||
'oldTrigger' => $entry,
|
||||
'oldValue' => Input::old('rule-action-value')[$index],
|
||||
'oldChecked' => $checked,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$newIndex++;
|
||||
}
|
||||
|
||||
return $actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function getPreviousTriggers()
|
||||
{
|
||||
$newIndex = 0;
|
||||
$triggers = [];
|
||||
foreach (Input::old('rule-trigger') as $index => $entry) {
|
||||
$count = ($newIndex + 1);
|
||||
$oldChecked = isset(Input::old('rule-trigger-stop')[$index]) ? true : false;
|
||||
$triggers[] = view(
|
||||
'rules.partials.trigger',
|
||||
[
|
||||
'oldTrigger' => $entry,
|
||||
'oldValue' => Input::old('rule-trigger-value')[$index],
|
||||
'oldChecked' => $oldChecked,
|
||||
'count' => $count,
|
||||
]
|
||||
)->render();
|
||||
$newIndex++;
|
||||
}
|
||||
|
||||
return $triggers;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Query\JoinClause;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
use Watson\Validating\ValidatingTrait;
|
||||
|
||||
use Illuminate\Database\Query\Builder;
|
||||
|
||||
/**
|
||||
* FireflyIII\Models\Account
|
||||
@ -30,8 +30,8 @@ use Watson\Validating\ValidatingTrait;
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\PiggyBank[] $piggyBanks
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Transaction[] $transactions
|
||||
* @property-read \FireflyIII\User $user
|
||||
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Account accountTypeIn($types)
|
||||
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Account hasMetaValue($name, $value)
|
||||
* @method static Builder|\FireflyIII\Models\Account accountTypeIn($types)
|
||||
* @method static Builder|\FireflyIII\Models\Account hasMetaValue($name, $value)
|
||||
* @property string $startBalance
|
||||
* @property string $endBalance
|
||||
*/
|
||||
@ -293,6 +293,11 @@ class Account extends Model
|
||||
return $this->belongsTo('FireflyIII\User');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Account $value
|
||||
*
|
||||
* @return Account
|
||||
*/
|
||||
public static function routeBinder(Account $value)
|
||||
{
|
||||
|
||||
|
@ -175,6 +175,11 @@ class Attachment extends Model
|
||||
$this->attributes['notes'] = Crypt::encrypt($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Attachment $value
|
||||
*
|
||||
* @return Attachment
|
||||
*/
|
||||
public static function routeBinder(Attachment $value)
|
||||
{
|
||||
if (Auth::check()) {
|
||||
|
@ -28,6 +28,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @property boolean $match_encrypted
|
||||
* @property-read Collection|TransactionJournal[] $transactionjournals
|
||||
* @property-read User $user
|
||||
* @property Carbon $nextExpectedMatch
|
||||
* @property Carbon $lastFoundMatch
|
||||
*/
|
||||
class Bill extends Model
|
||||
{
|
||||
@ -127,6 +129,11 @@ class Bill extends Model
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Bill $value
|
||||
*
|
||||
* @return Bill
|
||||
*/
|
||||
public static function routeBinder(Bill $value)
|
||||
{
|
||||
if (Auth::check()) {
|
||||
|
@ -23,6 +23,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @property-read Collection|BudgetLimit[] $budgetlimits
|
||||
* @property-read Collection|TransactionJournal[] $transactionjournals
|
||||
* @property-read User $user
|
||||
* @property string $dateFormatted
|
||||
* @property string $budgeted
|
||||
*/
|
||||
class Budget extends Model
|
||||
{
|
||||
@ -125,6 +127,11 @@ class Budget extends Model
|
||||
return $this->belongsTo('FireflyIII\User');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Budget $value
|
||||
*
|
||||
* @return Budget
|
||||
*/
|
||||
public static function routeBinder(Budget $value)
|
||||
{
|
||||
if (Auth::check()) {
|
||||
|
@ -112,6 +112,11 @@ class Category extends Model
|
||||
return $this->belongsTo('FireflyIII\User');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Category $value
|
||||
*
|
||||
* @return Category
|
||||
*/
|
||||
public static function routeBinder(Category $value)
|
||||
{
|
||||
if (Auth::check()) {
|
||||
|
@ -47,6 +47,11 @@ class LimitRepetition extends Model
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public static function routeBinder($value)
|
||||
{
|
||||
if (Auth::check()) {
|
||||
|
@ -122,6 +122,11 @@ class PiggyBank extends Model
|
||||
$this->attributes['targetamount'] = strval(round($value, 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PiggyBank $value
|
||||
*
|
||||
* @return PiggyBank
|
||||
*/
|
||||
public static function routeBinder(PiggyBank $value)
|
||||
{
|
||||
if (Auth::check()) {
|
||||
|
@ -170,6 +170,11 @@ class Tag extends Model
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Tag $value
|
||||
*
|
||||
* @return Tag
|
||||
*/
|
||||
public static function routeBinder(Tag $value)
|
||||
{
|
||||
if (Auth::check()) {
|
||||
|
@ -44,6 +44,8 @@ class TransactionCurrency extends Model
|
||||
|
||||
/**
|
||||
* @param TransactionCurrency $currency
|
||||
*
|
||||
* @return TransactionCurrency
|
||||
*/
|
||||
public static function routeBinder(TransactionCurrency $currency)
|
||||
{
|
||||
|
@ -25,7 +25,7 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate
|
||||
*/
|
||||
public function countJournals(Category $category)
|
||||
{
|
||||
return $category->transactionJournals()->count();
|
||||
return $category->transactionjournals()->count();
|
||||
|
||||
}
|
||||
|
||||
@ -39,7 +39,7 @@ class SingleCategoryRepository extends ComponentRepository implements SingleCate
|
||||
*/
|
||||
public function countJournalsInRange(Category $category, Carbon $start, Carbon $end)
|
||||
{
|
||||
return $category->transactionJournals()->before($end)->after($start)->count();
|
||||
return $category->transactionjournals()->before($end)->after($start)->count();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -8,6 +8,11 @@ use FireflyIII\Models\Rule;
|
||||
use FireflyIII\Models\RuleGroup;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
/**
|
||||
* Class RuleGroupRepository
|
||||
*
|
||||
* @package FireflyIII\Repositories\RuleGroup
|
||||
*/
|
||||
class RuleGroupRepository implements RuleGroupRepositoryInterface
|
||||
{
|
||||
/**
|
||||
|
@ -52,6 +52,8 @@ interface RuleGroupRepositoryInterface
|
||||
public function resetRuleGroupOrder();
|
||||
|
||||
/**
|
||||
* @param RuleGroup $ruleGroup
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function resetRulesInGroupOrder(RuleGroup $ruleGroup);
|
||||
|
@ -35,7 +35,7 @@ class ComponentRepository
|
||||
->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
|
||||
->whereIn('accounts.id', $ids)
|
||||
->after($start)
|
||||
->first([DB::Raw('SUM(`transactions`.`amount`) as `journalAmount`')]);
|
||||
->first([DB::raw('SUM(`transactions`.`amount`) as `journalAmount`')]);
|
||||
$amount = $entry->journalAmount;
|
||||
|
||||
return $amount;
|
||||
|
@ -10,11 +10,8 @@
|
||||
namespace FireflyIII\Rules\Actions;
|
||||
|
||||
|
||||
use Auth;
|
||||
use FireflyIII\Models\Category;
|
||||
use FireflyIII\Models\RuleAction;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class ClearBudget
|
||||
|
@ -10,11 +10,8 @@
|
||||
namespace FireflyIII\Rules\Actions;
|
||||
|
||||
|
||||
use Auth;
|
||||
use FireflyIII\Models\Category;
|
||||
use FireflyIII\Models\RuleAction;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class ClearCategory
|
||||
|
@ -39,6 +39,9 @@ class Processor
|
||||
|
||||
/**
|
||||
* Processor constructor.
|
||||
*
|
||||
* @param Rule $rule
|
||||
* @param TransactionJournal $journal
|
||||
*/
|
||||
public function __construct(Rule $rule, TransactionJournal $journal)
|
||||
{
|
||||
|
@ -136,7 +136,7 @@ class Amount
|
||||
{
|
||||
$currency = $transaction->transactionJournal->transactionCurrency;
|
||||
|
||||
return $this->formatAnything($currency, $transaction->amount);
|
||||
return $this->formatAnything($currency, $transaction->amount, $coloured);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -19,7 +19,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @package FireflyIII\Support\Binder
|
||||
*/
|
||||
class CategoryList implements BinderInterface
|
||||
|
||||
{
|
||||
|
||||
/**
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
namespace FireflyIII\Support\Binder;
|
||||
|
||||
use Auth;
|
||||
use Carbon\Carbon;
|
||||
use Exception;
|
||||
use Log;
|
||||
|
@ -28,7 +28,7 @@ class Steam
|
||||
$set = Auth::user()->transactions()
|
||||
->whereIn('account_id', $accounts)
|
||||
->groupBy('account_id')
|
||||
->get(['transactions.account_id', DB::Raw('MAX(`transaction_journals`.`date`) as `max_date`')]);
|
||||
->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);
|
||||
|
@ -8,18 +8,18 @@ use Twig_SimpleFunction;
|
||||
|
||||
/**
|
||||
* Class Rule
|
||||
*
|
||||
* @package FireflyIII\Support\Twig
|
||||
*/
|
||||
class Rule extends Twig_Extension
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function getFunctions()
|
||||
{
|
||||
$functions = [];
|
||||
|
||||
$functions[] = new Twig_SimpleFunction(
|
||||
/**
|
||||
* @return Twig_SimpleFunction
|
||||
*/
|
||||
public function allJournalTriggers()
|
||||
{
|
||||
return new Twig_SimpleFunction(
|
||||
'allJournalTriggers', function () {
|
||||
return [
|
||||
'store-journal' => trans('firefly.rule_trigger_store_journal'),
|
||||
@ -27,8 +27,14 @@ class Rule extends Twig_Extension
|
||||
];
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
$functions[] = new Twig_SimpleFunction(
|
||||
/**
|
||||
* @return Twig_SimpleFunction
|
||||
*/
|
||||
public function allRuleTriggers()
|
||||
{
|
||||
return new Twig_SimpleFunction(
|
||||
'allRuleTriggers', function () {
|
||||
$ruleTriggers = array_keys(Config::get('firefly.rule-triggers'));
|
||||
$possibleTriggers = [];
|
||||
@ -44,7 +50,15 @@ class Rule extends Twig_Extension
|
||||
|
||||
);
|
||||
|
||||
$functions[] = new Twig_SimpleFunction('allRuleActions', function () {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Twig_SimpleFunction
|
||||
*/
|
||||
public function allActionTriggers()
|
||||
{
|
||||
return new Twig_SimpleFunction(
|
||||
'allRuleActions', function () {
|
||||
// array of valid values for actions
|
||||
$ruleActions = array_keys(Config::get('firefly.rule-actions'));
|
||||
$possibleActions = [];
|
||||
@ -54,9 +68,21 @@ class Rule extends Twig_Extension
|
||||
unset($key, $ruleActions);
|
||||
|
||||
return $possibleActions;
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getFunctions()
|
||||
{
|
||||
return [
|
||||
$this->allJournalTriggers(),
|
||||
$this->allRuleTriggers(),
|
||||
$this->allActionTriggers(),
|
||||
];
|
||||
|
||||
return $functions;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -40,12 +40,10 @@ class FireflyValidator extends Validator
|
||||
|
||||
/**
|
||||
* @param $attribute
|
||||
* @param $value
|
||||
* @param $parameters
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function validateRuleTriggerValue($attribute, $value, $parameters)
|
||||
public function validateRuleTriggerValue($attribute)
|
||||
{
|
||||
// get the index from a string like "rule-trigger-value.2".
|
||||
$parts = explode('.', $attribute);
|
||||
@ -76,12 +74,10 @@ class FireflyValidator extends Validator
|
||||
|
||||
/**
|
||||
* @param $attribute
|
||||
* @param $value
|
||||
* @param $parameters
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function validateRuleActionValue($attribute, $value, $parameters)
|
||||
public function validateRuleActionValue($attribute)
|
||||
{
|
||||
// get the index from a string like "rule-action-value.2".
|
||||
$parts = explode('.', $attribute);
|
||||
|
Loading…
Reference in New Issue
Block a user