/** * Add task to data provider * @param Task $task * @return int */ public function add_task(Task $task) { $this->lock_file(); $task->set_id($this->get_new_id()); $this->save_task($task); $xml_dom = $this->get_xml_dom(); $task_child_xml = $xml_dom->addChild(self::TASK_XML); foreach ($task->get($this->index_row) as $item_name => $item_value) { $task_child_xml->addAttribute($item_name, $item_value); } $task_child_xml->addAttribute(TaskConst::TYPE, TaskConst::TASK); if ($task->have_subtasks()) { $sub_tasks_child_xml = $task_child_xml->addChild(self::SUB_TASKS_XML); foreach ($task->sub_tasks()->get_all() as $sub_task) { $sub_task->set_id($this->get_new_id()); $sub_task_child_xml = $sub_tasks_child_xml->addChild(self::TASK_XML); foreach ($sub_task->get($this->index_row) as $item_name => $item_value) { $sub_task_child_xml->addAttribute($item_name, $item_value); } $sub_task_child_xml->addAttribute(TaskConst::TYPE, TaskConst::SUB_TASK); $this->save_task($sub_task); } } $this->save_xml_dom($xml_dom); $this->release_file(); return $task->get_id(); }
/** * Sql Insert * @param Task $task * @return Task */ private function insert_task(Task $task) { $task_array = $task->to_array(); unset($task_array['id']); $task_array_keys = array_map(function ($entity) { return ":" . $entity; }, array_keys($task_array)); $query = $this->connection->prepare("INSERT INTO {$this->table_name}(" . implode(',', array_keys($task_array)) . ") values(" . implode(',', $task_array_keys) . ")"); $query->execute($task_array); $task->set_id($this->connection->lastInsertId()); return $task; }