/**
  * 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'];
 }