From 27aae279e647eeefbe4c01caebddb1fd25aacccc Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 13 Jan 2016 18:34:56 +0100 Subject: [PATCH] More code for rules. --- app/Http/Controllers/RuleController.php | 57 ++++++++++++++++++- app/Http/Requests/RuleGroupFormRequest.php | 49 ++++++++++++++++ app/Http/routes.php | 2 + app/Models/RuleGroup.php | 3 + app/Providers/FireflyServiceProvider.php | 1 + app/Repositories/Rule/RuleRepository.php | 56 ++++++++++++++++++ .../Rule/RuleRepositoryInterface.php | 33 +++++++++++ resources/lang/en_US/firefly.php | 4 ++ resources/views/rules/create-rule-group.twig | 51 +++++++++++++++++ 9 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 app/Http/Requests/RuleGroupFormRequest.php create mode 100644 app/Repositories/Rule/RuleRepository.php create mode 100644 app/Repositories/Rule/RuleRepositoryInterface.php create mode 100644 resources/views/rules/create-rule-group.twig diff --git a/app/Http/Controllers/RuleController.php b/app/Http/Controllers/RuleController.php index 09a69ecfe6..728891eaa0 100644 --- a/app/Http/Controllers/RuleController.php +++ b/app/Http/Controllers/RuleController.php @@ -11,8 +11,14 @@ namespace FireflyIII\Http\Controllers; use Auth; use FireflyIII\Http\Requests; +use FireflyIII\Http\Requests\RuleGroupFormRequest; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleGroup; +use FireflyIII\Repositories\Rule\RuleRepositoryInterface; +use Input; +use Preferences; +use Session; +use URL; use View; /** @@ -32,6 +38,54 @@ class RuleController extends Controller View::share('mainTitleIcon', 'fa-random'); } + /** + * @return View + */ + public function createRuleGroup() + { + $subTitleIcon = 'fa-clone'; + $subTitle = trans('firefly.make_new_rule_group'); + + // put previous url in session if not redirect from store (not "create another"). + if (Session::get('rule-groups.create.fromStore') !== true) { + Session::put('rule-groups.create.url', URL::previous()); + } + Session::forget('accounts.create.fromStore'); + Session::flash('gaEventCategory', 'rules'); + Session::flash('gaEventAction', 'create-rule-group'); + + return view('rules.create-rule-group', compact('subTitleIcon', 'what', 'subTitle')); + } + + /** + * @param RuleGroupFormRequest $request + * @param RuleRepositoryInterface $repository + * + * @return $this|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + */ + public function storeRuleGroup(RuleGroupFormRequest $request, RuleRepositoryInterface $repository) + { + $data = [ + 'title' => $request->input('title'), + 'description' => $request->input('description'), + 'user' => Auth::user()->id, + ]; + + $ruleGroup = $repository->storeRuleGroup($data); + + Session::flash('success', trans('firefly.created_new_rule_group', ['title' => $ruleGroup->title])); + Preferences::mark(); + + if (intval(Input::get('create_another')) === 1) { + // set value so create routine will not overwrite URL: + Session::put('rule-groups.create.fromStore', true); + + return redirect(route('rules.rule-group.create'))->withInput(); + } + + // redirect to previous URL. + return redirect(Session::get('rule-groups.create.url')); + } /** * @return View @@ -54,7 +108,8 @@ class RuleController extends Controller /** * @param RuleGroup $ruleGroup */ - public function editRuleGroup(RuleGroup $ruleGroup) { + public function editRuleGroup(RuleGroup $ruleGroup) + { } } diff --git a/app/Http/Requests/RuleGroupFormRequest.php b/app/Http/Requests/RuleGroupFormRequest.php new file mode 100644 index 0000000000..638c50341b --- /dev/null +++ b/app/Http/Requests/RuleGroupFormRequest.php @@ -0,0 +1,49 @@ + $titleRule, + 'description' => 'between:1,5000', + ]; + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php index 1651ee9e1c..d567211762 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -247,6 +247,8 @@ Route::group( Route::get('/rules/groups/edit/{ruleGroup}', ['uses' => 'RuleController@editRuleGroup', 'as' => 'rules.rule-group.edit']); Route::get('/rules/groups/delete/{ruleGroup}', ['uses' => 'RuleController@deleteRuleGroup', 'as' => 'rules.rule-group.delete']); + Route::post('/rules/groups/store', ['uses' => 'RuleController@storeRuleGroup', 'as' => 'rules.rule-group.store']); + /** * Search Controller diff --git a/app/Models/RuleGroup.php b/app/Models/RuleGroup.php index 4814eed163..e9a9793f33 100644 --- a/app/Models/RuleGroup.php +++ b/app/Models/RuleGroup.php @@ -31,6 +31,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; */ class RuleGroup extends Model { + + protected $fillable = ['user_id', 'order', 'title', 'description', 'active']; + /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ diff --git a/app/Providers/FireflyServiceProvider.php b/app/Providers/FireflyServiceProvider.php index 81df15ccac..7ca97848d9 100644 --- a/app/Providers/FireflyServiceProvider.php +++ b/app/Providers/FireflyServiceProvider.php @@ -90,6 +90,7 @@ class FireflyServiceProvider extends ServiceProvider $this->app->bind('FireflyIII\Repositories\Currency\CurrencyRepositoryInterface', 'FireflyIII\Repositories\Currency\CurrencyRepository'); $this->app->bind('FireflyIII\Repositories\Tag\TagRepositoryInterface', 'FireflyIII\Repositories\Tag\TagRepository'); $this->app->bind('FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface', 'FireflyIII\Repositories\Attachment\AttachmentRepository'); + $this->app->bind('FireflyIII\Repositories\Rule\RuleRepositoryInterface', 'FireflyIII\Repositories\Rule\RuleRepository'); $this->app->bind('FireflyIII\Support\Search\SearchInterface', 'FireflyIII\Support\Search\Search'); // CSV import diff --git a/app/Repositories/Rule/RuleRepository.php b/app/Repositories/Rule/RuleRepository.php new file mode 100644 index 0000000000..1735039246 --- /dev/null +++ b/app/Repositories/Rule/RuleRepository.php @@ -0,0 +1,56 @@ +ruleGroups()->max('order'); + + return intval($entry); + } + + /** + * @param array $data + * + * @return RuleGroup + */ + public function storeRuleGroup(array $data) + { + $order = $this->getHighestOrderRuleGroup(); + + $newRuleGroup = new RuleGroup( + [ + 'user_id' => $data['user'], + 'title' => $data['title'], + 'description' => $data['description'], + 'order' => ($order + 1), + 'active' => 1, + + + ] + ); + $newRuleGroup->save(); + + return $newRuleGroup; + } +} \ No newline at end of file diff --git a/app/Repositories/Rule/RuleRepositoryInterface.php b/app/Repositories/Rule/RuleRepositoryInterface.php new file mode 100644 index 0000000000..1130b49f2f --- /dev/null +++ b/app/Repositories/Rule/RuleRepositoryInterface.php @@ -0,0 +1,33 @@ + 'New rule group', 'rule_priority_up' => 'Give rule more priority', 'rule_priority_down' => 'Give rule less priority', + 'make_new_rule_group' => 'Make new rule group', + 'store_new_rule_group' => 'Store new rule group', + 'created_new_rule_group' => 'New rule group ":title" stored!', + 'no_rules_in_group' => 'There are no rules in this group', // actions and triggers 'rule_trigger_user_action' => '', diff --git a/resources/views/rules/create-rule-group.twig b/resources/views/rules/create-rule-group.twig new file mode 100644 index 0000000000..4bff91f4f3 --- /dev/null +++ b/resources/views/rules/create-rule-group.twig @@ -0,0 +1,51 @@ +{% extends "./layout/default.twig" %} + +{% block breadcrumbs %} + {{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName) }} +{% endblock %} + +{% block content %} + {{ Form.open({'class' : 'form-horizontal','id' : 'store','url' : route('rules.rule-group.store')}) }} +
+
+
+
+

{{ 'mandatoryFields'|_ }}

+
+
+ {{ ExpandedForm.text('title') }} +
+
+
+
+ + +
+
+

{{ 'optionalFields'|_ }}

+
+
+ {{ ExpandedForm.textarea('description') }} +
+
+ + +
+
+

{{ 'options'|_ }}

+
+
+ {{ ExpandedForm.optionsList('create','rule-group') }} +
+ +
+ +
+ +
+ {{ Form.close|raw }} + + +{% endblock %}