CS fixes
This commit is contained in:
parent
58d9ed1227
commit
357644ec9b
1 changed files with 198 additions and 199 deletions
|
@ -24,18 +24,17 @@
|
|||
|
||||
class tasklist_database_driver extends tasklist_driver
|
||||
{
|
||||
const IS_COMPLETE_SQL = "(status='COMPLETED' OR (complete=1 AND status=''))";
|
||||
const IS_COMPLETE_SQL = "(`status` = 'COMPLETED' OR (`complete` = 1 AND `status` = ''))";
|
||||
|
||||
public $undelete = true; // yes, we can
|
||||
public $sortable = false;
|
||||
public $undelete = true; // yes, we can
|
||||
public $sortable = false;
|
||||
public $alarm_types = array('DISPLAY');
|
||||
|
||||
private $rc;
|
||||
private $plugin;
|
||||
private $lists = array();
|
||||
private $lists = array();
|
||||
private $tags = array();
|
||||
private $list_ids = '';
|
||||
private $tags = array();
|
||||
|
||||
private $db_tasks = 'tasks';
|
||||
private $db_lists = 'tasklists';
|
||||
|
||||
|
@ -45,7 +44,7 @@ class tasklist_database_driver extends tasklist_driver
|
|||
*/
|
||||
public function __construct($plugin)
|
||||
{
|
||||
$this->rc = $plugin->rc;
|
||||
$this->rc = $plugin->rc;
|
||||
$this->plugin = $plugin;
|
||||
|
||||
// read database config
|
||||
|
@ -61,29 +60,31 @@ class tasklist_database_driver extends tasklist_driver
|
|||
*/
|
||||
private function _read_lists()
|
||||
{
|
||||
$hidden = array_filter(explode(',', $this->rc->config->get('hidden_tasklists', '')));
|
||||
$hidden = array_filter(explode(',', $this->rc->config->get('hidden_tasklists', '')));
|
||||
|
||||
if (!empty($this->rc->user->ID)) {
|
||||
$list_ids = array();
|
||||
$result = $this->rc->db->query(
|
||||
"SELECT *, tasklist_id AS id FROM " . $this->db_lists . "
|
||||
WHERE user_id=?
|
||||
ORDER BY CASE WHEN name='INBOX' THEN 0 ELSE 1 END, name",
|
||||
$this->rc->user->ID
|
||||
);
|
||||
if (!empty($this->rc->user->ID)) {
|
||||
$list_ids = array();
|
||||
$result = $this->rc->db->query(
|
||||
"SELECT *, `tasklist_id` AS id FROM " . $this->db_lists
|
||||
. " WHERE `user_id` = ?"
|
||||
. " ORDER BY CASE WHEN `name` = 'INBOX' THEN 0 ELSE 1 END, `name`",
|
||||
$this->rc->user->ID
|
||||
);
|
||||
|
||||
while ($result && ($arr = $this->rc->db->fetch_assoc($result))) {
|
||||
$arr['showalarms'] = intval($arr['showalarms']);
|
||||
$arr['active'] = !in_array($arr['id'], $hidden);
|
||||
$arr['name'] = html::quote($arr['name']);
|
||||
$arr['listname'] = html::quote($arr['name']);
|
||||
$arr['editable'] = true;
|
||||
$arr['rights'] = 'lrswikxtea';
|
||||
$this->lists[$arr['id']] = $arr;
|
||||
$list_ids[] = $this->rc->db->quote($arr['id']);
|
||||
while ($result && ($arr = $this->rc->db->fetch_assoc($result))) {
|
||||
$arr['showalarms'] = intval($arr['showalarms']);
|
||||
$arr['active'] = !in_array($arr['id'], $hidden);
|
||||
$arr['name'] = html::quote($arr['name']);
|
||||
$arr['listname'] = html::quote($arr['name']);
|
||||
$arr['editable'] = true;
|
||||
$arr['rights'] = 'lrswikxtea';
|
||||
|
||||
$this->lists[$arr['id']] = $arr;
|
||||
$list_ids[] = $this->rc->db->quote($arr['id']);
|
||||
}
|
||||
|
||||
$this->list_ids = join(',', $list_ids);
|
||||
}
|
||||
$this->list_ids = join(',', $list_ids);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -91,14 +92,15 @@ class tasklist_database_driver extends tasklist_driver
|
|||
*/
|
||||
public function get_lists($filter = 0)
|
||||
{
|
||||
// attempt to create a default list for this user
|
||||
if (empty($this->lists)) {
|
||||
$prop = array('name' => 'Default', 'color' => '000000');
|
||||
if ($this->create_list($prop))
|
||||
$this->_read_lists();
|
||||
}
|
||||
// attempt to create a default list for this user
|
||||
if (empty($this->lists)) {
|
||||
$prop = array('name' => 'Default', 'color' => '000000');
|
||||
if ($this->create_list($prop)) {
|
||||
$this->_read_lists();
|
||||
}
|
||||
}
|
||||
|
||||
return $this->lists;
|
||||
return $this->lists;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -111,17 +113,18 @@ class tasklist_database_driver extends tasklist_driver
|
|||
public function create_list(&$prop)
|
||||
{
|
||||
$result = $this->rc->db->query(
|
||||
"INSERT INTO " . $this->db_lists . "
|
||||
(user_id, name, color, showalarms)
|
||||
VALUES (?, ?, ?, ?)",
|
||||
"INSERT INTO " . $this->db_lists
|
||||
. " (`user_id`, `name`, `color`, `showalarms`)"
|
||||
. " VALUES (?, ?, ?, ?)",
|
||||
$this->rc->user->ID,
|
||||
strval($prop['name']),
|
||||
strval($prop['color']),
|
||||
$prop['showalarms']?1:0
|
||||
$prop['showalarms'] ? 1 : 0
|
||||
);
|
||||
|
||||
if ($result)
|
||||
if ($result) {
|
||||
return $this->rc->db->insert_id($this->db_lists);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -136,13 +139,11 @@ class tasklist_database_driver extends tasklist_driver
|
|||
public function edit_list(&$prop)
|
||||
{
|
||||
$query = $this->rc->db->query(
|
||||
"UPDATE " . $this->db_lists . "
|
||||
SET name=?, color=?, showalarms=?
|
||||
WHERE tasklist_id=?
|
||||
AND user_id=?",
|
||||
"UPDATE " . $this->db_lists . " SET `name` = ?, `color` = ?, `showalarms` = ?"
|
||||
. " WHERE `tasklist_id` = ? AND `user_id` = ?",
|
||||
strval($prop['name']),
|
||||
strval($prop['color']),
|
||||
$prop['showalarms']?1:0,
|
||||
$prop['showalarms'] ? 1 : 0,
|
||||
$prop['id'],
|
||||
$this->rc->user->ID
|
||||
);
|
||||
|
@ -161,10 +162,12 @@ class tasklist_database_driver extends tasklist_driver
|
|||
{
|
||||
$hidden = array_flip(explode(',', $this->rc->config->get('hidden_tasklists', '')));
|
||||
|
||||
if ($prop['active'])
|
||||
if ($prop['active']) {
|
||||
unset($hidden[$prop['id']]);
|
||||
else
|
||||
}
|
||||
else {
|
||||
$hidden[$prop['id']] = 1;
|
||||
}
|
||||
|
||||
return $this->rc->user->save_prefs(array('hidden_tasklists' => join(',', array_keys($hidden))));
|
||||
}
|
||||
|
@ -183,16 +186,13 @@ class tasklist_database_driver extends tasklist_driver
|
|||
if ($this->lists[$list_id]) {
|
||||
// delete all tasks linked with this list
|
||||
$this->rc->db->query(
|
||||
"DELETE FROM " . $this->db_tasks . "
|
||||
WHERE tasklist_id=?",
|
||||
"DELETE FROM " . $this->db_tasks . " WHERE `tasklist_id` = ?",
|
||||
$list_id
|
||||
);
|
||||
|
||||
// delete list record
|
||||
$query = $this->rc->db->query(
|
||||
"DELETE FROM " . $this->db_lists . "
|
||||
WHERE tasklist_id=?
|
||||
AND user_id=?",
|
||||
"DELETE FROM " . $this->db_lists . " WHERE `tasklist_id` = ? AND `user_id` = ?",
|
||||
$list_id,
|
||||
$this->rc->user->ID
|
||||
);
|
||||
|
@ -234,23 +234,24 @@ class tasklist_database_driver extends tasklist_driver
|
|||
*/
|
||||
function count_tasks($lists = null)
|
||||
{
|
||||
if (empty($lists))
|
||||
if (empty($lists)) {
|
||||
$lists = array_keys($this->lists);
|
||||
else if (!is_array($lists))
|
||||
}
|
||||
else if (!is_array($lists)) {
|
||||
$lists = explode(',', (string) $lists);
|
||||
}
|
||||
|
||||
// only allow to select from lists of this user
|
||||
$list_ids = array_map(array($this->rc->db, 'quote'), array_intersect($lists, array_keys($this->lists)));
|
||||
|
||||
$today_date = new DateTime('now', $this->plugin->timezone);
|
||||
$today = $today_date->format('Y-m-d');
|
||||
$today_date = new DateTime('now', $this->plugin->timezone);
|
||||
$today = $today_date->format('Y-m-d');
|
||||
$tomorrow_date = new DateTime('now + 1 day', $this->plugin->timezone);
|
||||
$tomorrow = $tomorrow_date->format('Y-m-d');
|
||||
$tomorrow = $tomorrow_date->format('Y-m-d');
|
||||
|
||||
$result = $this->rc->db->query(sprintf(
|
||||
"SELECT task_id, flagged, date FROM " . $this->db_tasks . "
|
||||
WHERE tasklist_id IN (%s)
|
||||
AND del=0 AND NOT " . self::IS_COMPLETE_SQL,
|
||||
"SELECT `task_id`, `flagged`, `date` FROM " . $this->db_tasks
|
||||
. " WHERE `tasklist_id` IN (%s) AND `del` = 0 AND NOT " . self::IS_COMPLETE_SQL,
|
||||
join(',', $list_ids)
|
||||
));
|
||||
|
||||
|
@ -277,30 +278,35 @@ class tasklist_database_driver extends tasklist_driver
|
|||
*
|
||||
* @param array Hash array wiht filter criterias
|
||||
* @param array List of lists to get tasks from
|
||||
*
|
||||
* @return array List of tasks records matchin the criteria
|
||||
* @see tasklist_driver::list_tasks()
|
||||
*/
|
||||
function list_tasks($filter, $lists = null)
|
||||
{
|
||||
if (empty($lists))
|
||||
if (empty($lists)) {
|
||||
$lists = array_keys($this->lists);
|
||||
else if (!is_array($lists))
|
||||
}
|
||||
else if (!is_array($lists)) {
|
||||
$lists = explode(',', (string) $lists);
|
||||
}
|
||||
|
||||
// only allow to select from lists of this user
|
||||
$list_ids = array_map(array($this->rc->db, 'quote'), array_intersect($lists, array_keys($this->lists)));
|
||||
$sql_add = '';
|
||||
$sql_add = '';
|
||||
|
||||
// add filter criteria
|
||||
if ($filter['from'] || ($filter['mask'] & tasklist::FILTER_MASK_TODAY)) {
|
||||
$sql_add .= ' AND (date IS NULL OR date >= ?)';
|
||||
$sql_add .= " AND (`date` IS NULL OR `date` >= ?)";
|
||||
$datefrom = $filter['from'];
|
||||
}
|
||||
if ($filter['to']) {
|
||||
if ($filter['mask'] & tasklist::FILTER_MASK_OVERDUE)
|
||||
$sql_add .= ' AND (date IS NOT NULL AND date <= ' . $this->rc->db->quote($filter['to']) . ')';
|
||||
else
|
||||
$sql_add .= ' AND (date IS NULL OR date <= ' . $this->rc->db->quote($filter['to']) . ')';
|
||||
if ($filter['mask'] & tasklist::FILTER_MASK_OVERDUE) {
|
||||
$sql_add .= " AND (`date` IS NOT NULL AND `date` <= " . $this->rc->db->quote($filter['to']) . ")";
|
||||
}
|
||||
else {
|
||||
$sql_add .= " AND (`date` IS NULL OR `date` <= " . $this->rc->db->quote($filter['to']) . ")";
|
||||
}
|
||||
}
|
||||
|
||||
// special case 'today': also show all events with date before today
|
||||
|
@ -308,47 +314,48 @@ class tasklist_database_driver extends tasklist_driver
|
|||
$datefrom = date('Y-m-d', 0);
|
||||
}
|
||||
|
||||
if ($filter['mask'] & tasklist::FILTER_MASK_NODATE)
|
||||
$sql_add = ' AND date IS NULL';
|
||||
if ($filter['mask'] & tasklist::FILTER_MASK_NODATE) {
|
||||
$sql_add = " AND `date` IS NULL";
|
||||
}
|
||||
|
||||
if ($filter['mask'] & tasklist::FILTER_MASK_COMPLETE)
|
||||
$sql_add .= ' AND ' . self::IS_COMPLETE_SQL;
|
||||
else if (empty($filter['since'])) // don't show complete tasks by default
|
||||
$sql_add .= ' AND NOT ' . self::IS_COMPLETE_SQL;
|
||||
if ($filter['mask'] & tasklist::FILTER_MASK_COMPLETE) {
|
||||
$sql_add .= " AND " . self::IS_COMPLETE_SQL;
|
||||
}
|
||||
else if (empty($filter['since'])) {
|
||||
// don't show complete tasks by default
|
||||
$sql_add .= " AND NOT " . self::IS_COMPLETE_SQL;
|
||||
}
|
||||
|
||||
if ($filter['mask'] & tasklist::FILTER_MASK_FLAGGED)
|
||||
$sql_add .= ' AND flagged=1';
|
||||
if ($filter['mask'] & tasklist::FILTER_MASK_FLAGGED) {
|
||||
$sql_add .= " AND `flagged` = 1";
|
||||
}
|
||||
|
||||
// compose (slow) SQL query for searching
|
||||
// FIXME: improve searching using a dedicated col and normalized values
|
||||
if ($filter['search']) {
|
||||
$sql_query = array();
|
||||
foreach (array('title','description','organizer','attendees') as $col)
|
||||
$sql_query[] = $this->rc->db->ilike($col, '%'.$filter['search'].'%');
|
||||
$sql_add = 'AND (' . join(' OR ', $sql_query) . ')';
|
||||
foreach (array('title', 'description', 'organizer', 'attendees') as $col) {
|
||||
$sql_query[] = $this->rc->db->ilike($col, '%' . $filter['search'] . '%');
|
||||
}
|
||||
$sql_add = "AND (" . join(" OR ", $sql_query) . ")";
|
||||
}
|
||||
|
||||
if ($filter['since'] && is_numeric($filter['since'])) {
|
||||
$sql_add .= ' AND changed >= ' . $this->rc->db->quote(date('Y-m-d H:i:s', $filter['since']));
|
||||
$sql_add .= " AND `changed` >= " . $this->rc->db->quote(date('Y-m-d H:i:s', $filter['since']));
|
||||
}
|
||||
|
||||
if ($filter['uid']) {
|
||||
$sql_add .= ' AND `uid` IN (' . implode(',', array_map(array($this->rc->db, 'quote'), $filter['uid'])) . ')';
|
||||
$sql_add .= " AND `uid` IN (" . implode(',', array_map(array($this->rc->db, 'quote'), $filter['uid'])) . ")";
|
||||
}
|
||||
|
||||
$tasks = array();
|
||||
if (!empty($list_ids)) {
|
||||
$result = $this->rc->db->query(sprintf(
|
||||
"SELECT * FROM " . $this->db_tasks . "
|
||||
WHERE tasklist_id IN (%s)
|
||||
AND del=0
|
||||
%s
|
||||
ORDER BY parent_id, task_id ASC",
|
||||
join(',', $list_ids),
|
||||
$sql_add
|
||||
),
|
||||
$result = $this->rc->db->query("SELECT * FROM " . $this->db_tasks
|
||||
. " WHERE `tasklist_id` IN (" . join(',', $list_ids) . ")"
|
||||
. " AND `del` = 0" . $sql_add
|
||||
. " ORDER BY `parent_id`, `task_id` ASC",
|
||||
$datefrom
|
||||
);
|
||||
);
|
||||
|
||||
while ($result && ($rec = $this->rc->db->fetch_assoc($result))) {
|
||||
$tasks[] = $this->_read_postprocess($rec);
|
||||
|
@ -369,20 +376,16 @@ class tasklist_database_driver extends tasklist_driver
|
|||
*/
|
||||
public function get_task($prop, $filter = 0)
|
||||
{
|
||||
if (is_string($prop))
|
||||
if (is_string($prop)) {
|
||||
$prop['uid'] = $prop;
|
||||
}
|
||||
|
||||
$query_col = $prop['id'] ? 'task_id' : 'uid';
|
||||
|
||||
$result = $this->rc->db->query(sprintf(
|
||||
"SELECT * FROM " . $this->db_tasks . "
|
||||
WHERE tasklist_id IN (%s)
|
||||
AND %s=?
|
||||
AND del=0",
|
||||
$this->list_ids,
|
||||
$query_col
|
||||
),
|
||||
$prop['id'] ? $prop['id'] : $prop['uid']
|
||||
$result = $this->rc->db->query("SELECT * FROM " . $this->db_tasks
|
||||
. " WHERE `tasklist_id` IN (" . $this->list_ids . ")"
|
||||
. " AND `$query_col` = ? AND `del` = 0",
|
||||
$prop['id'] ? $prop['id'] : $prop['uid']
|
||||
);
|
||||
|
||||
if ($result && ($rec = $this->rc->db->fetch_assoc($result))) {
|
||||
|
@ -395,46 +398,46 @@ class tasklist_database_driver extends tasklist_driver
|
|||
/**
|
||||
* Get all decendents of the given task record
|
||||
*
|
||||
* @param mixed Hash array with task properties or task UID
|
||||
* @param mixed Hash array with task properties or task UID
|
||||
* @param boolean True if all childrens children should be fetched
|
||||
*
|
||||
* @return array List of all child task IDs
|
||||
*/
|
||||
public function get_childs($prop, $recursive = false)
|
||||
{
|
||||
// resolve UID first
|
||||
if (is_string($prop)) {
|
||||
$result = $this->rc->db->query(sprintf(
|
||||
"SELECT task_id AS id, tasklist_id AS list FROM " . $this->db_tasks . "
|
||||
WHERE tasklist_id IN (%s)
|
||||
AND uid=?",
|
||||
$this->list_ids
|
||||
),
|
||||
$prop);
|
||||
$result = $this->rc->db->query(
|
||||
"SELECT `task_id` AS id, `tasklist_id` AS list FROM " . $this->db_tasks
|
||||
. " WHERE `tasklist_id` IN (" . $this->list_ids . ")"
|
||||
. " AND `uid` = ?",
|
||||
$prop
|
||||
);
|
||||
|
||||
$prop = $this->rc->db->fetch_assoc($result);
|
||||
}
|
||||
|
||||
$childs = array();
|
||||
$childs = array();
|
||||
$task_ids = array($prop['id']);
|
||||
|
||||
// query for childs (recursively)
|
||||
while (!empty($task_ids)) {
|
||||
$result = $this->rc->db->query(sprintf(
|
||||
"SELECT task_id AS id FROM " . $this->db_tasks . "
|
||||
WHERE tasklist_id IN (%s)
|
||||
AND parent_id IN (%s)
|
||||
AND del=0",
|
||||
$this->list_ids,
|
||||
join(',', array_map(array($this->rc->db, 'quote'), $task_ids))
|
||||
));
|
||||
$result = $this->rc->db->query(
|
||||
"SELECT `task_id` AS id FROM " . $this->db_tasks
|
||||
. " WHERE `tasklist_id` IN (" . $this->list_ids . ")"
|
||||
. " AND `parent_id` IN (" . join(',', array_map(array($this->rc->db, 'quote'), $task_ids)) . ")"
|
||||
. " AND `del` = 0",
|
||||
);
|
||||
|
||||
$task_ids = array();
|
||||
while ($result && ($rec = $this->rc->db->fetch_assoc($result))) {
|
||||
$childs[] = $rec['id'];
|
||||
$childs[] = $rec['id'];
|
||||
$task_ids[] = $rec['id'];
|
||||
}
|
||||
|
||||
if (!$recursive)
|
||||
if (!$recursive) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $childs;
|
||||
|
@ -443,38 +446,41 @@ class tasklist_database_driver extends tasklist_driver
|
|||
/**
|
||||
* Get a list of pending alarms to be displayed to the user
|
||||
*
|
||||
* @param integer Current time (unix timestamp)
|
||||
* @param mixed List of list IDs to show alarms for (either as array or comma-separated string)
|
||||
* @param integer Current time (unix timestamp)
|
||||
* @param mixed List of list IDs to show alarms for (either as array or comma-separated string)
|
||||
*
|
||||
* @return array A list of alarms, each encoded as hash array with task properties
|
||||
* @see tasklist_driver::pending_alarms()
|
||||
*/
|
||||
public function pending_alarms($time, $lists = null)
|
||||
{
|
||||
if (empty($lists))
|
||||
if (empty($lists)) {
|
||||
$lists = array_keys($this->lists);
|
||||
else if (!is_array($lists))
|
||||
}
|
||||
else if (!is_array($lists)) {
|
||||
$lists = explode(',', (string) $lists);
|
||||
}
|
||||
|
||||
// only allow to select from calendars with activated alarms
|
||||
$list_ids = array();
|
||||
foreach ($lists as $lid) {
|
||||
if ($this->lists[$lid] && $this->lists[$lid]['showalarms'])
|
||||
if ($this->lists[$lid] && $this->lists[$lid]['showalarms']) {
|
||||
$list_ids[] = $lid;
|
||||
}
|
||||
}
|
||||
$list_ids = array_map(array($this->rc->db, 'quote'), $list_ids);
|
||||
|
||||
$alarms = array();
|
||||
if (!empty($list_ids)) {
|
||||
$result = $this->rc->db->query(sprintf(
|
||||
"SELECT * FROM " . $this->db_tasks . "
|
||||
WHERE tasklist_id IN (%s)
|
||||
AND notify <= %s AND NOT " . self::IS_COMPLETE_SQL,
|
||||
join(',', $list_ids),
|
||||
$this->rc->db->fromunixtime($time)
|
||||
));
|
||||
$result = $this->rc->db->query("SELECT * FROM " . $this->db_tasks
|
||||
. " WHERE `tasklist_id` IN (" . join(',', $list_ids) . ")"
|
||||
. " AND `notify` <= " . $this->rc->db->fromunixtime($time)
|
||||
. " AND NOT " . self::IS_COMPLETE_SQL,
|
||||
);
|
||||
|
||||
while ($result && ($rec = $this->rc->db->fetch_assoc($result)))
|
||||
while ($result && ($rec = $this->rc->db->fetch_assoc($result))) {
|
||||
$alarms[] = $this->_read_postprocess($rec);
|
||||
}
|
||||
}
|
||||
|
||||
return $alarms;
|
||||
|
@ -490,12 +496,9 @@ class tasklist_database_driver extends tasklist_driver
|
|||
// set new notifyat time or unset if not snoozed
|
||||
$notify_at = $snooze > 0 ? date('Y-m-d H:i:s', time() + $snooze) : null;
|
||||
|
||||
$query = $this->rc->db->query(sprintf(
|
||||
"UPDATE " . $this->db_tasks . "
|
||||
SET changed=%s, notify=?
|
||||
WHERE task_id=?
|
||||
AND tasklist_id IN (" . $this->list_ids . ")",
|
||||
$this->rc->db->now()),
|
||||
$query = $this->rc->db->query("UPDATE " . $this->db_tasks
|
||||
. " SET `changed` = " . $this->rc->db->now() . ", `notify` = ?"
|
||||
. " WHERE `task_id` = ? AND `tasklist_id` IN (" . $this->list_ids . ")",
|
||||
$notify_at,
|
||||
$task_id
|
||||
);
|
||||
|
@ -518,13 +521,14 @@ class tasklist_database_driver extends tasklist_driver
|
|||
*/
|
||||
private function _read_postprocess($rec)
|
||||
{
|
||||
$rec['id'] = $rec['task_id'];
|
||||
$rec['list'] = $rec['tasklist_id'];
|
||||
$rec['id'] = $rec['task_id'];
|
||||
$rec['list'] = $rec['tasklist_id'];
|
||||
$rec['changed'] = new DateTime($rec['changed']);
|
||||
$rec['tags'] = array_filter(explode(',', $rec['tags']));
|
||||
$rec['tags'] = array_filter(explode(',', $rec['tags']));
|
||||
|
||||
if (!$rec['parent_id'])
|
||||
if (!$rec['parent_id']) {
|
||||
unset($rec['parent_id']);
|
||||
}
|
||||
|
||||
// decode serialized alarms
|
||||
if ($rec['alarms']) {
|
||||
|
@ -542,6 +546,7 @@ class tasklist_database_driver extends tasklist_driver
|
|||
}
|
||||
|
||||
unset($rec['task_id'], $rec['tasklist_id'], $rec['created']);
|
||||
|
||||
return $rec;
|
||||
}
|
||||
|
||||
|
@ -549,6 +554,7 @@ class tasklist_database_driver extends tasklist_driver
|
|||
* 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()
|
||||
*/
|
||||
|
@ -556,8 +562,9 @@ class tasklist_database_driver extends tasklist_driver
|
|||
{
|
||||
// check list permissions
|
||||
$list_id = $prop['list'] ? $prop['list'] : reset(array_keys($this->lists));
|
||||
if (!$this->lists[$list_id] || $this->lists[$list_id]['readonly'])
|
||||
if (!$this->lists[$list_id] || $this->lists[$list_id]['readonly']) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (is_array($prop['valarms'])) {
|
||||
$prop['alarms'] = $this->serialize_alarms($prop['valarms']);
|
||||
|
@ -570,18 +577,19 @@ class tasklist_database_driver extends tasklist_driver
|
|||
}
|
||||
|
||||
foreach (array('parent_id', 'date', 'time', 'startdate', 'starttime', 'alarms', 'recurrence', 'status') as $col) {
|
||||
if (empty($prop[$col]))
|
||||
if (empty($prop[$col])) {
|
||||
$prop[$col] = null;
|
||||
}
|
||||
}
|
||||
|
||||
$notify_at = $this->_get_notification($prop);
|
||||
$result = $this->rc->db->query(sprintf(
|
||||
"INSERT INTO " . $this->db_tasks . "
|
||||
(tasklist_id, uid, parent_id, created, changed, title, date, time, startdate, starttime, description, tags, flagged, complete, status, alarms, recurrence, notify)
|
||||
VALUES (?, ?, ?, %s, %s, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
$this->rc->db->now(),
|
||||
$this->rc->db->now()
|
||||
),
|
||||
$now = $this->rc->db->now();
|
||||
|
||||
$result = $this->rc->db->query("INSERT INTO " . $this->db_tasks
|
||||
. " (`tasklist_id`, `uid`, `parent_id`, `created`, `changed`, `title`, `date`, `time`,"
|
||||
. " `startdate`, `starttime`, `description`, `tags`, `flagged`, `complete`, `status`,"
|
||||
. " `alarms`, `recurrence`, `notify`)"
|
||||
. " VALUES (?, ?, ?, $now, $now, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
$list_id,
|
||||
$prop['uid'],
|
||||
$prop['parent_id'],
|
||||
|
@ -600,8 +608,9 @@ class tasklist_database_driver extends tasklist_driver
|
|||
$notify_at
|
||||
);
|
||||
|
||||
if ($result)
|
||||
if ($result) {
|
||||
return $this->rc->db->insert_id($this->db_tasks);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -610,6 +619,7 @@ class tasklist_database_driver extends tasklist_driver
|
|||
* Update an task entry with the given data
|
||||
*
|
||||
* @param array Hash array with task properties
|
||||
*
|
||||
* @return boolean True on success, False on error
|
||||
* @see tasklist_driver::edit_task()
|
||||
*/
|
||||
|
@ -627,15 +637,18 @@ class tasklist_database_driver extends tasklist_driver
|
|||
|
||||
$sql_set = array();
|
||||
foreach (array('title', 'description', 'flagged', 'complete') as $col) {
|
||||
if (isset($prop[$col]))
|
||||
if (isset($prop[$col])) {
|
||||
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . $this->rc->db->quote($prop[$col]);
|
||||
}
|
||||
}
|
||||
foreach (array('parent_id', 'date', 'time', 'startdate', 'starttime', 'alarms', 'recurrence', 'status') as $col) {
|
||||
if (isset($prop[$col]))
|
||||
if (isset($prop[$col])) {
|
||||
$sql_set[] = $this->rc->db->quote_identifier($col) . '=' . (empty($prop[$col]) ? 'NULL' : $this->rc->db->quote($prop[$col]));
|
||||
}
|
||||
}
|
||||
if (isset($prop['tags']))
|
||||
if (isset($prop['tags'])) {
|
||||
$sql_set[] = $this->rc->db->quote_identifier('tags') . '=' . $this->rc->db->quote(join(',', (array)$prop['tags']));
|
||||
}
|
||||
|
||||
if (isset($prop['date']) || isset($prop['time']) || isset($prop['alarms'])) {
|
||||
$notify_at = $this->_get_notification($prop);
|
||||
|
@ -644,28 +657,23 @@ class tasklist_database_driver extends tasklist_driver
|
|||
|
||||
// moved from another list
|
||||
if ($prop['_fromlist'] && ($newlist = $prop['list'])) {
|
||||
$sql_set[] = 'tasklist_id=' . $this->rc->db->quote($newlist);
|
||||
$sql_set[] = $this->rc->db->quote_identifier('tasklist_id') . '=' . $this->rc->db->quote($newlist);
|
||||
}
|
||||
|
||||
$query = $this->rc->db->query(sprintf(
|
||||
"UPDATE " . $this->db_tasks . "
|
||||
SET changed=%s %s
|
||||
WHERE task_id=?
|
||||
AND tasklist_id IN (%s)",
|
||||
$this->rc->db->now(),
|
||||
($sql_set ? ', ' . join(', ', $sql_set) : ''),
|
||||
$this->list_ids
|
||||
),
|
||||
$prop['id']
|
||||
$result = $this->rc->db->query("UPDATE " . $this->db_tasks
|
||||
. " SET `changed` = " . $this->rc->db->now() . ($sql_set ? ', ' . join(', ', $sql_set) : '')
|
||||
. " WHERE `task_id` = ? AND `tasklist_id` IN (" . $this->list_ids . ")",
|
||||
$prop['id']
|
||||
);
|
||||
|
||||
return $this->rc->db->affected_rows($query);
|
||||
return $this->rc->db->affected_rows($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move a single task to another list
|
||||
*
|
||||
* @param array Hash array with task properties:
|
||||
* @param array Hash array with task properties
|
||||
*
|
||||
* @return boolean True on success, False on error
|
||||
* @see tasklist_driver::move_task()
|
||||
*/
|
||||
|
@ -679,6 +687,7 @@ class tasklist_database_driver extends tasklist_driver
|
|||
*
|
||||
* @param array Hash array with task properties
|
||||
* @param boolean Remove record irreversible
|
||||
*
|
||||
* @return boolean True on success, False on error
|
||||
* @see tasklist_driver::delete_task()
|
||||
*/
|
||||
|
@ -687,50 +696,39 @@ class tasklist_database_driver extends tasklist_driver
|
|||
$task_id = $prop['id'];
|
||||
|
||||
if ($task_id && $force) {
|
||||
$query = $this->rc->db->query(
|
||||
"DELETE FROM " . $this->db_tasks . "
|
||||
WHERE task_id=?
|
||||
AND tasklist_id IN (" . $this->list_ids . ")",
|
||||
$result = $this->rc->db->query("DELETE FROM " . $this->db_tasks
|
||||
. " WHERE `task_id` = ? AND `tasklist_id` IN (" . $this->list_ids . ")",
|
||||
$task_id
|
||||
);
|
||||
}
|
||||
else if ($task_id) {
|
||||
$query = $this->rc->db->query(sprintf(
|
||||
"UPDATE " . $this->db_tasks . "
|
||||
SET changed=%s, del=1
|
||||
WHERE task_id=?
|
||||
AND tasklist_id IN (%s)",
|
||||
$this->rc->db->now(),
|
||||
$this->list_ids
|
||||
),
|
||||
$task_id
|
||||
$result = $this->rc->db->query("UPDATE " . $this->db_tasks
|
||||
. " SET `changed` = " . $this->rc->db->now() . ", `del` = 1"
|
||||
. " WHERE `task_id` = ? AND `tasklist_id` IN (" . $this->list_ids . ")",
|
||||
$task_id
|
||||
);
|
||||
}
|
||||
|
||||
return $this->rc->db->affected_rows($query);
|
||||
return $this->rc->db->affected_rows($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restores a single deleted task (if supported)
|
||||
*
|
||||
* @param array Hash array with task properties
|
||||
*
|
||||
* @return boolean True on success, False on error
|
||||
* @see tasklist_driver::undelete_task()
|
||||
*/
|
||||
public function undelete_task($prop)
|
||||
{
|
||||
$query = $this->rc->db->query(sprintf(
|
||||
"UPDATE " . $this->db_tasks . "
|
||||
SET changed=%s, del=0
|
||||
WHERE task_id=?
|
||||
AND tasklist_id IN (%s)",
|
||||
$this->rc->db->now(),
|
||||
$this->list_ids
|
||||
),
|
||||
$prop['id']
|
||||
$result = $this->rc->db->query("UPDATE " . $this->db_tasks
|
||||
. " SET `changed` = " . $this->rc->db->now() . ", `del` = 0"
|
||||
. " WHERE `task_id` = ? AND `tasklist_id` IN (" . $this->list_ids . ")",
|
||||
$prop['id']
|
||||
);
|
||||
|
||||
return $this->rc->db->affected_rows($query);
|
||||
return $this->rc->db->affected_rows($result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -741,11 +739,10 @@ class tasklist_database_driver extends tasklist_driver
|
|||
if ($task['valarms'] && !$this->is_complete($task)) {
|
||||
$alarm = libcalendaring::get_next_alarm($task, 'task');
|
||||
|
||||
if ($alarm['time'] && in_array($alarm['action'], $this->alarm_types))
|
||||
return date('Y-m-d H:i:s', $alarm['time']);
|
||||
}
|
||||
|
||||
return null;
|
||||
if ($alarm['time'] && in_array($alarm['action'], $this->alarm_types)) {
|
||||
return date('Y-m-d H:i:s', $alarm['time']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -837,15 +834,17 @@ class tasklist_database_driver extends tasklist_driver
|
|||
public function user_delete($args)
|
||||
{
|
||||
$db = $this->rc->db;
|
||||
|
||||
$lists = $db->query("SELECT `tasklist_id` FROM " . $this->db_lists . " WHERE `user_id` = ?", $args['user']->ID);
|
||||
|
||||
$list_ids = array();
|
||||
$lists = $db->query("SELECT tasklist_id FROM " . $this->db_lists . " WHERE user_id=?", $args['user']->ID);
|
||||
while ($row = $db->fetch_assoc($lists)) {
|
||||
$list_ids[] = $row['tasklist_id'];
|
||||
}
|
||||
|
||||
if (!empty($list_ids)) {
|
||||
foreach (array($this->db_tasks, $this->db_lists) as $table) {
|
||||
$db->query(sprintf("DELETE FROM $table WHERE tasklist_id IN (%s)", join(',', $list_ids)));
|
||||
$db->query(sprintf("DELETE FROM $table WHERE `tasklist_id` IN (%s)", join(',', $list_ids)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue