0byt3m1n1
Path:
/
data
/
applications
/
aps.bak
/
tikiwiki
/
1.9.7-31
/
htdocs
/
lib
/
tasks
/
[
Home
]
File: tasklib.php
<?php //this script may only be included - so its better to die if called directly. if (strpos($_SERVER["SCRIPT_NAME"],basename(__FILE__)) !== false) { header("location: index.php"); exit; } /* Task properties: user, taskId, title, description, date, status, priority, completed, percentage */ class TaskLib extends TikiLib { function TaskLib($db) { # this is probably uneeded now if (!$db) { die ("Invalid db object passed to TaskLib constructor"); } $this->db = $db; } function get_task($user, $taskId, $task_version = null, $admin_mode = false) { if($admin_mode){ $query = "select distinct `t_head`.*, `t_history`.* FROM "; $query .= "`tiki_user_tasks_history` AS `t_history`, `tiki_user_tasks` AS `t_head` "; $query .= "WHERE "; $query .= "`t_head`.`taskId` = `t_history`.`belongs_to` AND"; if($task_version == null){ $query .= "`t_history`.`task_version` = `t_head`.`last_version` AND "; } else { $query .= "`t_history`.`task_version` = $task_version AND "; } $query .= "`t_head`.`taskId`= ? "; $value = array((int)$taskId); } else { $query = "select distinct `t_head`.*, `t_history`.* FROM "; $query .= "`tiki_user_tasks_history` AS `t_history`, `tiki_user_tasks` AS `t_head`, "; $query .= "`users_users`, `users_usergroups` "; $query .= "WHERE "; $query .= "`t_head`.`taskId` = `t_history`.`belongs_to` AND"; if($task_version == null){ $query .= "`t_history`.`task_version` = `t_head`.`last_version` AND "; } else { $query .= "`t_history`.`task_version` = $task_version AND "; } $query .= "`t_head`.`taskId`= ? AND "; $query .= "((`t_head`.`user`=? or `t_head`.`creator` = ? ) or "; $query .= "(`users_users`.`login` = ? and "; $query .= "`users_users`.`userId` = `users_usergroups`.`userId` and "; $query .= "`users_usergroups`.`groupName` = `t_head`.`public_for_group`))"; $value = array((int)$taskId, $user, $user, $user); } $result = $this->query($query,$value); if($res = $result->fetchRow()){ if(($res['user'] == $user and $res['rights_by_creator'] == NULL) or ($res['creator'] == $user)){ $res['disabled'] = false; } else { $res['disabled'] = true; } if($res['percentage'] == NULL) $res['percentage_null'] = true; else $res['percentage_null'] = false; } return $res; } function get_default_new_task($user) { $task = array(); $task['taskId'] = 0; $task['task_version'] = 0; $task['user'] = $user; $task['creator'] = $user; $task['public_for_group'] = NULL; $task['rights_by_creator'] = 'y'; $task['priority'] = 3; $task['completed'] = NULL; $task['deleted'] = NULL; $task['created'] = date("U"); $task['status'] = NULL; $task['percentage'] = NULL; $task['accepted_creator'] = NULL; $task['accepted_user'] = NULL; /*--history --*/ $task['belongs_to'] = 0; $task['last_version'] = 0; $task['title'] = NULL; $task['description'] = NULL; $task['start'] = NULL; $task['end'] =NULL; $task['lasteditor'] = $user; $task['lastchanges'] = date("U"); /*--*/ $task['percentage_null'] = true; return $task; } function accept_task($user, $taskId, $value) { $query = "update `tiki_user_tasks` set accepted_user = ? where `user`=? and `taskId`=?"; $this->query($query, array($value,$user,(int)$taskId)); $query = "update `tiki_user_tasks` set accepted_creator = ? where `creator`=? and `taskId`=?"; $this->query($query, array($value,$user,(int)$taskId)); } function new_task($task_user, $creator, $public_for_group, $rights_by_creator, $created, $values){ $query = "INSERT INTO `tiki_user_tasks` ( "; $query .= "`last_version`, `user`, `creator`, "; $query .= "`public_for_group`, `rights_by_creator`, `created`) "; $query .= "VALUES (?, ?, ?, ?, ?, ?)"; $this->query($query,array((int) 0, $task_user, $creator, $public_for_group, $rights_by_creator, (int)$created)); $query = "select `taskId` from `tiki_user_tasks` where `creator` = ? AND `created` = ?"; $taskId = $this->getOne($query, array($creator, (int)$created)); $values['belongs_to'] = $taskId; $values['lasteditor'] = $creator; $values['lastchanges'] = $created; $values['task_version'] = (int) 0; if($task_user != $creator) $values['accepted_creator'] = 'y'; $query = "INSERT INTO `tiki_user_tasks_history` ( "; $comma = ''; $query_values = ""; foreach ($values as $key => $value) { $query .= "$comma `$key`"; $query_values .= "$comma ?"; $comma = ', '; } $query .= " ) VALUES ( " . $query_values . ")"; $this->query($query,$values); return $taskId; } function update_task($taskId, $user, $values, $values_head = null, $admin_mode = false){ $query = "SELECT `tiki_user_tasks_history`.* "; $query .= "FROM `tiki_user_tasks`, `tiki_user_tasks_history` WHERE "; $query .= "`tiki_user_tasks`.`taskId` = ? AND "; $query .= "`tiki_user_tasks`.`taskId` = `tiki_user_tasks_history`.`belongs_to` AND "; $query .= "`tiki_user_tasks`.`last_version` = `tiki_user_tasks_history`.`task_version` "; $values_select = array((int) $taskId); if(!$admin_mode){ $values_select[] = $user; $values_select[] = $user; $query .= " AND (`user` = ? OR `creator` = ?) "; } $result = $this->query($query,$values_select); $entries = $result->fetchRow(); $query = "INSERT INTO `tiki_user_tasks_history` ("; $query_values = ") VALUES ("; $count_values = 0; foreach ($values as $key => $value) { $entries[$key] = $value; $count_values++; //echo("$key: $value<br />"); } if ($entries['percentage'] == NULL){ $entries['status'] = NULL; $entries['completed'] = NULL; } else if ($entries['percentage'] >= 100) { $entries['status'] = 'c'; $entries['completed'] = date('U'); } else { $entries['status'] = 'o'; $entries['completed'] = NULL; } if($count_values > 0){ $count_entries = 0; $entries['task_version'] = $entries['task_version'] + 1; $entries['lasteditor'] = $user; $entries['lastchanges'] = date('U'); $comma = ''; foreach ($entries as $key => $value) { $query .= "$comma `$key`"; $query_values.= "$comma ?"; $comma = ', '; $count_entries++; //echo("entries.$key: $value<br />"); } //echo("$query<br />"); $query .= $query_values . ")"; $this->query($query,$entries); } $insert_values = array(); $query = "UPDATE `tiki_user_tasks` SET `last_version`= ? "; $insert_values['last_version'] = (int)$entries['task_version']; $count_values_head = 0; if($values_head != null) { foreach ($values_head as $key => $value) { $query .= ", `$key` = ? "; $insert_values[$key] = $value; $count_values_head++; } } $insert_values['taskId'] = (int)$taskId; $query .= "WHERE `taskId`=? "; if($count_values > 0 or $count_values_head > 0) $this->query($query,$insert_values); return $taskId; } function mark_task_as_trash($taskId, $user, $admin_mode = false) { $result = $this->query("SELECT * FROM `tiki_user_tasks` WHERE taskId = ?",array($taskId)); $res = $result->fetchRow(); if($user == $res['creator'] or ($user == $res['user'] and $res['rights_by_creator'] == null) or $admin_mode){ $values = array('deleted' => (int)date('U')); $this->update_task($taskId, $user, $values, null, $admin_mode); } } function unmark_task_as_trash($taskId, $user, $admin_mode = false) { $result = $this->query("SELECT * FROM `tiki_user_tasks` WHERE taskId = ?",array($taskId)); $res = $result->fetchRow(); if($user == $res['creator'] or ($user == $res['user'] and $res['rights_by_creator'] == NULL) or $admin_mode){ $values = array('deleted' => NULL); $this->update_task($taskId, $user, $values, null, $admin_mode); } } function open_task($taskId, $user) { $values = array('percentage' => (int) 0, 'status' => 'o', 'completed' => NULL); $this->update_task($taskId, $user, $values); } function waiting_task($taskId, $user) { $values = array('percentage' => NULL, 'status' => NULL, 'completed' => NULL); $this->update_task($taskId, $user, $values); } function mark_complete_task($taskId, $user) { $values = array('percentage' => (int) 100, 'status' => 'c', 'completed' => (int)date('U')); $this->update_task($taskId, $user, $values); } function update_task_percentage($taskId, $user, $percentage){ $values = array('percentage' => $percentage); $this->update_task($taskId, $user, $values); } function emty_trash($user) { $query = "SELECT `tiki_user_tasks`.`taskId` FROM `tiki_user_tasks`, `tiki_user_tasks_history` "; $query .= "WHERE `tiki_user_tasks`.`creator` = ? AND "; $query .= "`tiki_user_tasks`.`taskId` = `tiki_user_tasks_history`.`belongs_to` AND "; $query .= "`tiki_user_tasks`.`last_version` = `tiki_user_tasks_history`.`task_version` AND "; $query .= "`tiki_user_tasks_history`.`deleted` IS NOT NULL"; $result = $this->query($query,array($user)); while ($res = $result->fetchRow()) { $query = "DELETE FROM `tiki_user_tasks_history` WHERE `belongs_to` = ?"; $this->query($query,$res); $query = "DELETE FROM `tiki_user_tasks` WHERE `taskId` = ?"; $this->query($query,$res); } } /** * Retruns the tasklist for a user * $user * $offset * $maxRecords lenth of the returned list if it is -1 it returns the full list * $find serach string * $sort_mode for sorting, * $show_private show private tasks user == creator it shows also shared tasks * to use this option $use_show_shared_for_group must be false * $show_submitted show submitted tasks creator == user and user != $user it shows also shared tasks * to use this option $use_show_shared_for_group must be false * $show_received show received tasks creator != user and user == $user it shows also shared tasks * to use this option $use_show_shared_for_group must be false * $show_shared show shared tasks creator != user and user != user * but the user is in the group to view the this task * to use this option $use_show_shared_for_group must be false * $use_show_shared_for_group * enables the optin $show_shared_for_group with true and * disables $show_shared, $show_received, $show_submitted and $show_private * $show_shared_for_group * shows on null all shared tasks or by a value the tasks to the group value * $show_trash if on true it shows also the as deleted marked tasks * $show_completed if on true it shows also the as completed marked tasks * $use_admin_mode shows all shard tasks also if the user is not in the group to view the task * changed by sir-b 18th of January 2005 **/ function list_tasks($user, $offset = 0, $maxRecords = -1, $find = null, $sort_mode = 'priority_asc', $show_private = true, $show_submitted = true, $show_received = true, $show_shared = true, $use_show_shared_for_group = false, $show_shared_for_group = null, $show_trash = false, $show_completed = false, $use_admin_mode = false) { $list_tasks_start = microtime(); $values = array(); if($use_admin_mode){ $query = "FROM `tiki_user_tasks_history` AS `t_history`, `tiki_user_tasks` AS `t_head` "; $query .= "WHERE `t_head`.`public_for_group` IS NOT NULL "; $query .= "AND `t_head`.`taskId` = `t_history`.`belongs_to` "; $query .= "AND `t_head`.`last_version` = `t_history`.`task_version` "; } else { $query = "FROM `tiki_user_tasks_history` AS `t_history`, `tiki_user_tasks` AS `t_head` "; if($show_shared or $use_show_shared_for_group) { $userid = $this->get_user_id($user); $query .= ", `users_usergroups` "; } $query .= "WHERE "; $query .= "`t_head`.`taskId` = `t_history`.`belongs_to` AND "; $query .= "`t_head`.`last_version` = `t_history`.`task_version` AND "; $query .= "( "; $query .= "( 1 = 0 ) "; //Dummy if($use_show_shared_for_group){ $query .= " OR "; $query .= "(`users_usergroups`.`userId` = ?"; $query .= "AND `users_usergroups`.`groupName` = `t_head`.`public_for_group` "; $values[] = $userid; if($show_shared_for_group){ $query .= "AND `t_head`.`public_for_group` = ? "; $values[] = $show_shared_for_group; $query .= ") "; } } else { //private if($show_private){ $query .= " OR "; $query .= "(`t_head`.`user` = ? AND `t_head`.`creator` = ? ) "; $values[] = $user; $values[] = $user; } //submitted if($show_submitted){ $query .= " OR "; $query .= "(`t_head`.`user` != ? AND `t_head`.`creator` = ? ) "; $values[] = $user; $values[] = $user; } //received if($show_received){ $query .= " OR "; $query .= "(`t_head`.`user` = ? AND `t_head`.`creator` != ? ) "; $values[] = $user; $values[] = $user; } //shared if($show_shared){ $query .= " OR "; $query .= "(`t_head`.`user` != ? AND `t_head`.`creator` != ? "; $query .= "AND `users_usergroups`.`userId` = ? "; $query .= "AND `users_usergroups`.`groupName` = `t_head`.`public_for_group`) "; $values[] = $user; $values[] = $user; $values[] = $userid; } } $query .= ") "; if($find){ $query .= " AND "; $query .= "( "; $query .= "`t_history`.`title` like ? or "; $query .= "`t_history`.`description` like ? or"; $query .= "`t_head`.`user` like ? or "; $query .= "`t_head`.`creator` like ? "; $query .= ") "; $values[] = "'%" . $find . "%'"; $values[] = "'%" . $find . "%'"; $values[] = "'%" . $find . "%'"; $values[] = "'%" . $find . "%'"; } if($show_trash == false){ $query .= " AND "; $query .= "( `t_history`.`deleted` IS NULL) "; } if($show_completed == false){ $query .= " AND "; $query .= "( `t_history`.`completed` IS NULL) "; } } if(isset($sort_mode) and strlen($sort_mode) > 1){ $order_str = "`t_history`.".$this->convert_sortmode($sort_mode) . ", "; } else $order_str = ''; // Place the count query before the addition of the order by // clause to make the query work in postgres.. $query_count = "select count(distinct `t_head`.`taskId`) $query"; $cant = $this->getOne($query_count,$values); $query .= "ORDER BY $order_str `t_head`.`taskId` desc"; $tasklist = array(); $query_tasklist = "select distinct `t_head`.*, `t_history`.* $query"; $result = $this->query($query_tasklist, $values, $maxRecords, $offset); //echo("$query_tasklist<br />"); while ($res = $result->fetchRow()) { if(($res['user'] == $user) or ($res['creator'] == $user)){ $res['disabled'] = false; } else { $res['disabled'] = true; } if($res['percentage'] == NULL) $res['percentage_null'] = true; else $res['percentage_null'] = false; $tasklist[] = $res; } $retval = array(); $retval["data"] = $tasklist; $retval["cant"] = $cant; $list_tasks_end = microtime(); $list_tasks_time = $list_tasks_end - $list_tasks_start; //echo("list_task in $list_tasks_time seconds<br />"); return $retval; } function get_user_with_permissions($perm) { /* $query = "SELECT DISTINCT `users_users`.`login` AS `login` "; $query.= "FROM `users_grouppermissions`, `users_usergroups`, `users_users` "; $query.= "WHERE `users_usergroups`.`userId` = `users_users`.`userId` AND "; $query.= "`users_grouppermissions`.`groupName` = `users_usergroups`.`groupName` AND "; $query.= "`users_grouppermissions`.`permName` = ? "; $query.= "ORDER BY `login`"; $result = $this->query($query, array($perm)); */ $query = "SELECT DISTINCT `users_users`.`login` AS `login` FROM `users_users` ORDER BY `login`"; $result = $this->query($query, array()); $ret = array(); while ($res = $result->fetchRow()) { $ret[] = $res; } sort($ret); return $ret; } } global $dbTiki; $tasklib = new TaskLib($dbTiki); ?>