diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index 412aeb67cec6..860fee6e9a61 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -96,7 +96,7 @@ class TaskController extends BaseController */ public function store(CreateTaskRequest $request) { - return $this->save(); + return $this->save($request); } /** @@ -202,7 +202,7 @@ class TaskController extends BaseController { $task = $request->entity(); - return $this->save($task->public_id); + return $this->save($request, $task->public_id); } /** @@ -222,7 +222,7 @@ class TaskController extends BaseController * * @return \Illuminate\Http\RedirectResponse */ - private function save($publicId = null) + private function save($request, $publicId = null) { $action = Input::get('action'); @@ -230,7 +230,7 @@ class TaskController extends BaseController return self::bulk(); } - $task = $this->taskRepo->save($publicId, Input::all()); + $task = $this->taskRepo->save($publicId, $request->input()); if ($publicId) { Session::flash('message', trans('texts.updated_task')); diff --git a/app/Http/Requests/TaskRequest.php b/app/Http/Requests/TaskRequest.php index 141bf89f08eb..a9af01ada365 100644 --- a/app/Http/Requests/TaskRequest.php +++ b/app/Http/Requests/TaskRequest.php @@ -5,4 +5,22 @@ namespace App\Http\Requests; class TaskRequest extends EntityRequest { protected $entityType = ENTITY_TASK; + + public function sanitize() + { + $input = $this->all(); + + // check if we're creating a new project + if ($this->input('project_id') == '-1' && $this->user()->can('create', ENTITY_PROJECT)) { + $project = app('App\Services\ProjectService')->save([ + 'name' => $this->input('project_name'), + 'client_id' => $this->input('client') + ]); + $input['project_id'] = $project->public_id; + } + + $this->replace($input); + + return $this->all(); + } } diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 9997cc2bc2fd..c0166e19cf75 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -2392,6 +2392,7 @@ $LANG = array( 'credit_created_by' => 'Credit created by payment :transaction_reference', 'created_payment_and_credit' => 'Successfully created payment and credit', 'created_payment_and_credit_emailed_client' => 'Successfully created payment and credit, and emailed client', + 'create_project' => 'Create project', ); diff --git a/resources/views/tasks/edit.blade.php b/resources/views/tasks/edit.blade.php index 4486a5c55d0b..67dc549ed71d 100644 --- a/resources/views/tasks/edit.blade.php +++ b/resources/views/tasks/edit.blade.php @@ -58,7 +58,9 @@ @endif @else {!! Former::select('client')->addOption('', '')->addGroupClass('client-select') !!} - {!! Former::select('project_id')->addOption('', '')->addGroupClass('project-select') + {!! Former::select('project_id') + ->addOption('', '') + ->addGroupClass('project-select') ->label(trans('texts.project')) !!} @endif @@ -552,6 +554,7 @@ $projectCombobox = $('select#project_id'); $projectCombobox.find('option').remove().end().combobox('refresh'); $projectCombobox.append(new Option('', '')); + $projectCombobox.append(new Option("{{ trans('texts.create_project')}}: $name", '-1')); var list = clientId ? (projectsForClientMap.hasOwnProperty(clientId) ? projectsForClientMap[clientId] : []).concat(projectsForAllClients) : projects; for (var i=0; i' + match + ''; + }) + } + }, + template: '
', + matcher: function (item) { + if (item.indexOf("{{ trans('texts.create_project') }}") == 0) { + return this.query.length; + } + return ~item.toLowerCase().indexOf(this.query.toLowerCase()); + } + }); if (projectId) { var project = projectMap[projectId];