/**
  * Saves a task.
  *
  * @param TaskModel $task
  * @param bool      $validate
  *
  * @return bool
  */
 public function saveTask(TaskModel $task, $validate = true)
 {
     if ($task->isNew()) {
         $taskRecord = new TaskRecord();
     } else {
         $taskRecord = $this->_getTaskRecordById($task->id);
     }
     $taskRecord->type = $task->type;
     $taskRecord->status = $task->status;
     $taskRecord->settings = $task->settings;
     $taskRecord->description = $task->description;
     $taskRecord->totalSteps = $task->totalSteps;
     $taskRecord->currentStep = $task->currentStep;
     if (!$task->parentId || !$task->isNew()) {
         $success = $taskRecord->saveNode($validate);
     } else {
         $parentTaskRecord = $this->_getTaskRecordById($task->parentId);
         $success = $taskRecord->appendTo($parentTaskRecord, $validate);
     }
     if ($success) {
         if ($task->isNew()) {
             $task->id = $taskRecord->id;
             if ($task->parentId) {
                 // We'll be needing this soon
                 $this->_taskRecordsById[$taskRecord->id] = $taskRecord;
             }
         }
         return true;
     } else {
         $task->addErrors($taskRecord->getErrors());
         return false;
     }
 }