/** * Validates a user with given email address and password, * returns either boolean false or a User object with that user's * information * * @param string $email * @param string $password * @return mixed Response */ public static function verifyCredentials($email, $password) { $query = new \TaskerMAN\Core\DBQuery("SELECT `id`, `password`\r\n\t\t\tFROM `users`\r\n\t\t\tWHERE `email` = ?\r\n\t\t\tLIMIT 1\r\n\t\t"); $query->execute($email); $fetch = $query->row(); // Compare given password with stored user password hash if (password_verify($password, $fetch['password'])) { return new User($fetch['id']); } else { return false; } }
/** * Loads user info into the object * * @return boolean */ private function load() { $query = new \TaskerMAN\Core\DBQuery("SELECT `email`, `name`, `admin`, `api_token`\r\n\t\t\tFROM `users`\r\n\t\t\tWHERE `id` = ?\r\n\t\t\tLIMIT 1\r\n\t\t"); $query->execute($this->id); $fetch = $query->row(); if (empty($fetch)) { return false; } $this->email = $fetch['email']; $this->name = $fetch['name']; $this->admin = (bool) $fetch['admin']; $this->api_token = $fetch['api_token']; return true; }
/** * Returns HTML for dropdown * * @param int $selected Already selected uid * @return string HTML output */ public static function generate($selected = null) { $output = ''; $query = new \TaskerMAN\Core\DBQuery("SELECT\n\t\t\t`users`.`id`,\n\t\t\t`users`.`name`\n\n\t\t\tFROM `users`\n\n\t\t\tORDER BY `users`.`name` ASC\n\t\t"); $query->execute(); while ($row = $query->row()) { $output .= '<option value="' . $row['id'] . '"'; if ($row['id'] == $selected) { $output .= ' selected'; } $output .= '>' . $row['name'] . '</option>' . "\n"; } return $output; }
/** * Loads step data from the database into the object * * @param int $id * @return boolean */ private function load($id) { $query = new \TaskerMAN\Core\DBQuery("SELECT `steps`.*,\r\n\t\t\t(\r\n\t\t\t\tSELECT `assignee_uid`\r\n\t\t\t\tFROM `tasks`\r\n\t\t\t\tWHERE `id` = `steps`.`task_id`\r\n\t\t\t) AS `assignee_uid`\r\n\t\t\tFROM `steps`\r\n\t\t\tWHERE `steps`.`id` = ?\r\n\t\t\tLIMIT 1\r\n\t\t"); $query->execute($id); if ($query->rowCount() == 0) { return false; } $fetch = $query->row(); $this->id = $id; $this->task_id = $fetch['task_id']; $this->assignee_uid = $fetch['assignee_uid']; $this->title = $fetch['title']; $this->comment = $fetch['comment']; return true; }
/** * Loads task details from the database into the object * * @param int $id * @return boolean */ private function load($id) { $query = new \TaskerMAN\Core\DBQuery("SELECT `tasks`.*,\r\n\t\t\t`users_assignee`.`name` AS `assignee_name`,\r\n\t\t\t`users_created`.`name` AS `created_name`\r\n\t\t\t\r\n\t\t\tFROM `tasks`\r\n\r\n\t\t\tJOIN `users` AS `users_assignee` ON `users_assignee`.`id` = `tasks`.`assignee_uid`\r\n\t\t\tJOIN `users` AS `users_created` ON `users_created`.`id` = `tasks`.`created_uid`\r\n\r\n\t\t\tWHERE `tasks`.`id` = ?\r\n\t\t\tLIMIT 1\r\n\t\t"); $query->execute($id); if ($query->rowCount() == 0) { return false; } $fetch = $query->row(); $this->id = $fetch['id']; $this->created_uid = $fetch['created_uid']; $this->created_name = $fetch['created_name']; $this->created_time = $fetch['created_time']; $this->assignee_uid = $fetch['assignee_uid']; $this->assignee_name = $fetch['assignee_name']; $this->due_by = $fetch['due_by']; $this->completed_time = $fetch['completed_time']; $this->status = $fetch['status']; $this->title = $fetch['title']; }
/** * Returns statistics on task data * * @param int optional user id * @return array statistics */ public static function getStats($uid = null) { if (!is_null($uid)) { $where = ' AND `assignee_uid` = :uid'; } else { $where = null; } $query = new \TaskerMAN\Core\DBQuery("SELECT\r\n\r\n\t\t\t(\r\n\t\t\t\tSELECT COUNT(*)\r\n\t\t\t\tFROM `tasks`\r\n\t\t\t\tWHERE `status` <> 0\r\n\t\t\t\t{$where}\r\n\t\t\t) AS `total`,\r\n\r\n\t\t\t(\r\n\t\t\t\tSELECT COUNT(*)\r\n\t\t\t\tFROM `tasks`\r\n\t\t\t\tWHERE `tasks`.`status` = 1\r\n\t\t\t\t{$where}\r\n\t\t\t) AS `outstanding`,\r\n\r\n\t\t\t(\r\n\t\t\t\tSELECT COUNT(*)\r\n\t\t\t\tFROM `tasks`\r\n\t\t\t\tWHERE `tasks`.`status` = 1\r\n\t\t\t\tAND `tasks`.`due_by` BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 1 WEEK)\r\n\t\t\t\t{$where}\r\n\t\t\t) AS `due_in_week`,\r\n\r\n\t\t\t(\r\n\t\t\t\tSELECT COUNT(*)\r\n\t\t\t\tFROM `tasks`\r\n\t\t\t\tWHERE `tasks`.`status` = 1\r\n\t\t\t\tAND NOW() > `tasks`.`due_by`\r\n\t\t\t\t{$where}\r\n\t\t\t) AS `overdue`,\r\n\r\n\t\t\t(\r\n\t\t\t\tSELECT COUNT(*)\r\n\t\t\t\tFROM `tasks`\r\n\t\t\t\tWHERE `tasks`.`status` = 2\r\n\t\t\t\t{$where}\r\n\t\t\t) AS `completed`,\r\n\r\n\t\t\t(\r\n\t\t\t\tSELECT COUNT(*)\r\n\t\t\t\tFROM `tasks`\r\n\t\t\t\tWHERE `tasks`.`status` = 2\r\n\t\t\t\tAND `tasks`.`due_by` <= `tasks`.`completed_time`\r\n\t\t\t\t{$where}\r\n\t\t\t) AS `completed_late`,\r\n\r\n\t\t\t(\r\n\t\t\t\tSELECT COUNT(*)\r\n\t\t\t\tFROM `tasks`\r\n\t\t\t\tWHERE `tasks`.`status` = 2\r\n\t\t\t\tAND `tasks`.`due_by` > `tasks`.`completed_time`\r\n\t\t\t\t{$where}\r\n\t\t\t) AS `completed_on_time`,\r\n\r\n\t\t\t(\r\n\t\t\t\tSELECT ROUND(\r\n\t\t\t\t\t\t\tABS(\r\n\t\t\t\t\t\t\t\tAVG(\r\n\t\t\t\t\t\t\t\t\tTIME_TO_SEC(\r\n\t\t\t\t\t\t\t\t\t\t\t\tTIMEDIFF(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`tasks`.`created_time`, `tasks`.`completed_time`\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\tFROM `tasks`\r\n\t\t\t\tWHERE `tasks`.`status` = 2\r\n\t\t\t\t{$where}\r\n\t\t\t) AS `average_completion_time`,\r\n\r\n\t\t\t(\r\n\t\t\t\tSELECT COUNT(*)\r\n\t\t\t\tFROM `users`\r\n\t\t\t) AS `user_count`\r\n\r\n\t\t"); if (!is_null($uid)) { $query->bindValue(':uid', $uid); } $query->execute(); $stats = $query->row(); // Calculate percentage of tasks completed on time if ($stats['completed'] > 0) { $stats['average_completion_time'] = \TaskerMAN\WebInterface\DateFormat::timeFormat($stats['average_completion_time'], true); $stats['completed_on_time_percentage'] = round($stats['completed_on_time'] / $stats['completed'] * 100, 2); } else { $stats['average_completion_time'] = 'n/a'; $stats['completed_on_time_percentage'] = 100; } $stats['avg_tasks_per_user'] = floor($stats['total'] / $stats['user_count']); return $stats; }
/** * Returns total count of users in database * * @return int Count */ public static function getNumUsers() { $conditional = self::buildConditional(); $query = new \TaskerMAN\Core\DBQuery("SELECT\r\n\t\t \tCOUNT(*) AS `count`\r\n\t\t\tFROM `users`\r\n\r\n\t\t\t{$conditional}\r\n\t\t"); // Bind any conditional parameters if (!is_null($conditional)) { foreach (self::$search_criteria as $key => $criteria) { if ($criteria['enabled']) { $query->bindValue($criteria['parameter'], $criteria['value']); } } } $query->execute(); $row = $query->row(); return $row['count']; }
<?php $tasks = range(1, 50); // Title generation $verbs = array('Fix', 'Create', 'Confirm', 'Eat', 'Drink', 'Paint', 'Code', 'Test'); $things = array('beer', 'user interface', 'burgers', 'pizza', 'code', 'Jack Reed', 'desktop application', 'Java', 'PHP', 'coffee', 'meeting', 'pasta'); // Get array of all user IDs $query = new TaskerMAN\Core\DBQuery("SELECT `id` FROM `users`"); $query->execute(); while ($row = $query->row()) { $users[] = $row['id']; } // Get array of all admins $query = new TaskerMAN\Core\DBQuery("SELECT `id` FROM `users` WHERE `admin` = '1'"); $query->execute(); while ($row = $query->row()) { $admins[] = $row['id']; } foreach ($tasks as $i) { $t = new TaskerMAN\Application\Task(); $t->setAssignee($users[array_rand($users)]); $due_by = rand_future_time(); $t->setDueBy(date('Y-m-d', $due_by)); $t->setCreatedByUser($admins[array_rand($admins)]); if (rand(1, 5) > 2) { $status = 2; } else { $status = 1; } $t->setStatus($status); $steps = range(1, rand(1, 3));
/** * Deletes a given user from the database * * @param int $id * @return boolean */ public static function delete($id) { // Do not allow deletion if only one user is registered $query = new \TaskerMAN\Core\DBQuery("SELECT COUNT(*) AS `rowCount`\r\n\t\t\tFROM `users`\r\n\t\t\tWHERE `admin` = '1'\r\n\t\t"); $query->execute(); $fetch = $query->row(); if ($fetch['rowCount'] == 1) { throw new UserManagementException('Cannot delete last remaining administrator'); return false; } $query = new \TaskerMAN\Core\DBQuery("DELETE FROM `users`\r\n\t\t\tWHERE `id` = ?\r\n\t\t\tLIMIT 1\r\n\t\t"); $query->execute($id); // Assign this user's tasks to currently logged in user $query = new \TaskerMAN\Core\DBQuery("UPDATE `tasks`\r\n\t\t\tSET `assignee_uid` = ?\r\n\t\t\tWHERE `assignee_uid` = ?\r\n\t\t"); $query->execute(\TaskerMAN\WebInterface\WebInterface::$user->getID(), $id); // Make all tasks this user created to now be created by the currently logged in user $query = new \TaskerMAN\Core\DBQuery("UPDATE `tasks`\r\n\t\t\tSET `created_uid` = ?\r\n\t\t\tWHERE `created_uid` = ?\r\n\t\t"); $query->execute(\TaskerMAN\WebInterface\WebInterface::$user->getID(), $id); return true; }
/** * Returns the API token for a given user id * * @param int user id * @return string API Token */ public static function getUserAPIToken($uid) { $query = new \TaskerMAN\Core\DBQuery("SELECT `api_token`\r\n\t\t\tFROM `users`\r\n\t\t\tWHERE `id` = ?\r\n\t\t\tLIMIT 1\r\n\t\t"); $query->execute($uid); if ($query->rowCount() < 1) { return false; } $fetch = $query->row(); return $fetch['api_token']; }