/** * Add a single task to the database * * @param array Hash array with task properties (see header of this file) * @return mixed New event ID on success, False on error * @see tasklist_driver::create_task() */ public function create_task($task) { $cal_id = $task['list']; if (!is_array($task['tags'])) { $task['tags'] = array(0 => $this->lists[$cal_id]['name']); } $task_id = parent::create_task($task); if ($task['isclone']) { return $task_id; } $task['_type'] = 'task'; if ($task_id !== false && isset($this->sync_clients[$cal_id])) { if ($task['tags']) { $task['categories'] = $task['tags']; } if ($task['startdate']) { $time = $task['startdate']; if ($task['starttime']) { $time .= ' ' . $task['starttime'] . ':00'; } if (strtotime($time)) { $task['start'] = new DateTime($time); } } if ($task['date']) { $time = $task['date']; if ($task['time']) { $time .= ' ' . $task['time'] . ':00'; } if (strtotime($time)) { $task['due'] = new DateTime($time); } } if ($task['parent_id']) { $parent_task = parent::get_task(array('id' => $task['parent_id'])); $temp = explode('-', $task['parent_id']); if (count($temp) > 1) { $ts = end($temp); } else { $ts = false; } $task['parent_id'] = $parent_task['uid'] . ($ts ? '-' . $ts : ''); } $sync_client = $this->sync_clients[$cal_id]; $task = $this->_save_preprocess($task); $props = $sync_client->create_event($task); if ($props === false) { self::debug_log("Unkown error while creating caldav task, undo creating local task \"{$task_id}\"!"); $task['id'] = $task_id; parent::delete_task($task, true); return false; } else { self::debug_log("Successfully pushed task \"{$task_id}\" to caldav server."); $this->_set_caldav_props($task_id, self::OBJ_TYPE_VTODO, $props); // Trigger calendar sync to update ctags and etags. $this->_sync_calendar($cal_id); $this->_reload_list(); return $task_id; } } else { $this->_reload_list(); return $task_id ? $task_id : false; } }
/** * Add a single event to the database * * @param array Hash array with event properties * @see calendar_driver::new_event() */ public function new_event($event) { if ($event['_type'] == 'task') { if (!class_exists('tasklist_driver')) { require_once dirname(__FILE__) . '/../../../tasklist/drivers/tasklist_driver.php'; } if (!class_exists('tasklist_database_driver')) { require_once dirname(__FILE__) . '/../../../tasklist/drivers/database/tasklist_database_driver.php'; } $tasks = new tasklist_database_driver($this->cal); $event['list'] = $event['calendar']; return $tasks->create_task($event); } if (!$this->validate($event)) { return false; } if (!empty($this->calendars)) { if ($event['calendar'] && !$this->calendars[$event['calendar']]) { return false; } if (!$event['calendar']) { $event['calendar'] = reset(array_keys($this->calendars)); } $event['sequence'] = 0; $event = $this->_save_preprocess($event); $now = gmdate(self::DB_DATE_FORMAT); $this->rc->db->query(sprintf("INSERT INTO " . $this->_get_table($this->db_events) . "\n (calendar_id, created, changed, uid, %s, %s, duration, tzname, all_day, recurrence, title, description, location, categories, url, free_busy, priority, sensitivity, attendees, alarms, notifyat)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $this->rc->db->quote_identifier('start'), $this->rc->db->quote_identifier('end')), $event['calendar'], $now, $now, strval($event['uid']), $event['allday'] ? $event['start']->format(self::DB_DATE_FORMAT_ALLDAY) : $event['start']->format(self::DB_DATE_FORMAT), $event['allday'] ? $event['end']->format(self::DB_DATE_FORMAT_ALLDAY) : $event['end']->format(self::DB_DATE_FORMAT), $event['duration'], $event['allday'] ? 'UTC' : ($event['tzname'] ? $event['tzname'] : $this->cal->timezone->getName()), intval($event['all_day']), $event['_recurrence'], strval($event['title']), strval($event['description']), strval($event['location']), join(',', (array) $event['categories']), strval($event['url']), intval($event['free_busy']), intval($event['priority']), intval($event['sensitivity']), $event['attendees'], $event['alarms'], $event['notifyat']); $event_id = $this->rc->db->insert_id($this->_get_table($this->db_events)); if ($event_id) { $event['id'] = $event_id; // add attachments if (!empty($event['attachments'])) { foreach ($event['attachments'] as $attachment) { $this->add_attachment($attachment, $event_id); unset($attachment); } } $this->_update_recurrences($event); } return $event_id; } return false; }