diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php old mode 100644 new mode 100755 index 51c882d6b439..3edff381e7de --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -140,6 +140,12 @@ class TaskController extends BaseController return View::make('tasks.edit', $data); } + + public function cloneTask(TaskRequest $request, $publicId) + { + return self::edit($request, $publicId, true); + } + /** * Show the form for editing the specified resource. * @@ -147,7 +153,7 @@ class TaskController extends BaseController * * @return \Illuminate\Contracts\View\View */ - public function edit(TaskRequest $request) + public function edit(TaskRequest $request, $publicId, $clone = false) { $this->checkTimezone(); $task = $request->entity(); @@ -172,19 +178,35 @@ class TaskController extends BaseController $actions[] = DropdownButton::DIVIDER; if (! $task->trashed()) { + if (! $clone) { + $actions[] = ['url' => 'javascript:submitAction("clone")', 'label' => trans("texts.clone_task")]; + } $actions[] = ['url' => 'javascript:submitAction("archive")', 'label' => trans('texts.archive_task')]; $actions[] = ['url' => 'javascript:onDeleteClick()', 'label' => trans('texts.delete_task')]; } else { $actions[] = ['url' => 'javascript:submitAction("restore")', 'label' => trans('texts.restore_task')]; } + if ($clone) { + $task->id = null; + $task->public_id = null; + $task->deleted_at = null; + + $method = 'POST'; + $url = 'tasks'; + } + else{ + $method = 'PUT'; + $url = 'tasks/'.$task->public_id; + } + $data = [ 'task' => $task, 'entity' => $task, 'clientPublicId' => $task->client ? $task->client->public_id : 0, 'projectPublicId' => $task->project ? $task->project->public_id : 0, - 'method' => 'PUT', - 'url' => 'tasks/'.$task->public_id, + 'method' => $method, + 'url' => $url, 'title' => trans('texts.edit_task'), 'actions' => $actions, 'timezone' => Auth::user()->account->timezone ? Auth::user()->account->timezone->name : DEFAULT_TIMEZONE, @@ -229,8 +251,13 @@ class TaskController extends BaseController */ private function save($request, $publicId = null) { + $action = Input::get('action'); + if ( in_array($action, ['clone'])) { + return redirect()->to(sprintf('tasks/%s/clone', $publicId)); + } + if (in_array($action, ['archive', 'delete', 'restore'])) { return self::bulk(); } diff --git a/app/Ninja/Datatables/TaskDatatable.php b/app/Ninja/Datatables/TaskDatatable.php index 885f95823351..3590f5b6573c 100644 --- a/app/Ninja/Datatables/TaskDatatable.php +++ b/app/Ninja/Datatables/TaskDatatable.php @@ -85,6 +85,15 @@ class TaskDatatable extends EntityDatatable return (! $model->deleted_at || $model->deleted_at == '0000-00-00') && Auth::user()->can('view', [ENTITY_TASK, $model]); }, ], + [ + trans('texts.clone_task'), + function ($model) { + return URL::to("tasks/{$model->public_id}/clone"); + }, + function ($model) { + return Auth::user()->can('create', ENTITY_TASK); + }, + ], [ trans('texts.view_invoice'), function ($model) { diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 876e72ef6e2c..9eefcc6861a8 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -549,6 +549,7 @@ $LANG = array( 'created_task' => 'Successfully created task', 'updated_task' => 'Successfully updated task', 'edit_task' => 'Edit Task', + 'clone_task' => 'Clone Task', 'archive_task' => 'Archive Task', 'restore_task' => 'Restore Task', 'delete_task' => 'Delete Task', diff --git a/resources/lang/en_AU/texts.php b/resources/lang/en_AU/texts.php index a7eb57be27e8..333b67b504c8 100644 --- a/resources/lang/en_AU/texts.php +++ b/resources/lang/en_AU/texts.php @@ -549,6 +549,7 @@ $LANG = array( 'created_task' => 'Successfully created task', 'updated_task' => 'Successfully updated task', 'edit_task' => 'Edit Task', + 'clone_task' => 'Clone Task', 'archive_task' => 'Archive Task', 'restore_task' => 'Restore Task', 'delete_task' => 'Delete Task', diff --git a/resources/lang/en_GB/texts.php b/resources/lang/en_GB/texts.php index fa480a1cc268..fdaeaa090edb 100644 --- a/resources/lang/en_GB/texts.php +++ b/resources/lang/en_GB/texts.php @@ -549,6 +549,7 @@ $LANG = array( 'created_task' => 'Successfully created task', 'updated_task' => 'Successfully updated task', 'edit_task' => 'Edit Task', + 'clone_task' => 'Clone Task', 'archive_task' => 'Archive Task', 'restore_task' => 'Restore Task', 'delete_task' => 'Delete Task', diff --git a/resources/views/tasks/edit.blade.php b/resources/views/tasks/edit.blade.php index 70706cc73fb7..014753e7d1c9 100644 --- a/resources/views/tasks/edit.blade.php +++ b/resources/views/tasks/edit.blade.php @@ -40,6 +40,7 @@ @endif {!! Former::text('action') !!} {!! Former::text('time_log') !!} + {!! Former::text('is_running') !!}
diff --git a/routes/web.php b/routes/web.php index 12916940fc30..a35b4294dcf8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -183,6 +183,7 @@ Route::group(['middleware' => ['lookup:user', 'auth:user']], function () { Route::delete('task_statuses/{task_status_id}', 'TaskKanbanController@deleteStatus'); Route::put('task_status_order/{task_id}', 'TaskKanbanController@updateTask'); Route::resource('tasks', 'TaskController'); + Route::get('tasks/{tasks}/clone', 'TaskController@cloneTask'); Route::get('api/tasks/{client_id?}/{project_id?}', 'TaskController@getDatatable'); Route::get('tasks/create/{client_id?}/{project_id?}', 'TaskController@create'); Route::post('tasks/bulk', 'TaskController@bulk'); @@ -442,4 +443,4 @@ if (Utils::isNinjaDev()) */ // Include static app constants -require_once app_path() . '/Constants.php'; \ No newline at end of file +require_once app_path() . '/Constants.php';