/** * Get all the values for the current project and sub-projects and return 3 array: * 1. With Projects names. * 2. With users names. * 3. Relations Projects-User-Bookings. * * @param string $startDate Start date for make the query. * @param string $endDate End date for make the query. * @param integer $projectId Current Project ID. * * @return array Array with 'users', 'projects' and 'rows'. */ public function getStatistics($startDate, $endDate, $projectId) { $data['data'] = array(); $data['data']['users'] = array(); $data['data']['projects'] = array(); $data['data']['rows'] = array(); // Get Sub-Projects $activeRecord = new Project_Models_Project(); $tree = new Phprojekt_Tree_Node_Database($activeRecord, $projectId); $tree = $tree->setup(); $projectsId = array(0); foreach ($tree as $node) { if ($node->id) { $projectsId[] = (int) $node->id; $data['data']['projects'][$node->id] = $node->getDepthDisplay('title'); } } // Get Timecard $model = new Timecard_Models_Timecard(); $where = sprintf('(DATE(start_datetime) >= %s AND DATE(start_datetime) <= %s AND project_id IN (%s))', $model->_db->quote($startDate), $model->_db->quote($endDate), implode(", ", $projectsId)); $records = $model->fetchAll($where); $users = new Phprojekt_User_User(); foreach ($records as $record) { if (!isset($data['data']['users'][$record->ownerId])) { $user = $users->findUserById($record->ownerId); $data['data']['users'][$record->ownerId] = $user->username; } if (!isset($data['data']['rows'][$record->projectId][$record->ownerId])) { $data['data']['rows'][$record->projectId][$record->ownerId] = 0; } $data['data']['rows'][$record->projectId][$record->ownerId] += $record->minutes; } return $data; }
/** * Set some values deppend on the params * * Sanitize some values and calculate the minutes value. * * @return array */ public function setParams() { $args = func_get_args(); $params = $args[0]; $model = $args[1]; $params['startDatetime'] = Cleaner::sanitize('datetime', $params['startDatetime']); if (isset($params['endTime'])) { $params['endTime'] = Cleaner::sanitize('time', $params['endTime']); if ($params['endTime'] == '') { unset($params['endTime']); } } $params['projectId'] = (int) $params['projectId']; $params['notes'] = Cleaner::sanitize('string', $params['notes']); if (isset($params['endTime']) && isset($params['startDatetime'])) { $params['minutes'] = Timecard_Models_Timecard::getDiffTime($params['endTime'], substr($params['startDatetime'], 11)); } else { if (!isset($params['endTime'])) { $params['minutes'] = 0; } else { $params['minutes'] = Timecard_Models_Timecard::getDiffTime($params['endTime'], substr($model->startDatetime, 11)); } } return $params; }
/** * Test getRights function */ public function testGetUsersRights() { $module = new Project_Models_Project(array('db' => $this->sharedFixture)); $module->find(2); $getRights = $module->getUsersRights(); $this->assertTrue($getRights['currentUser']['admin']); $this->assertEquals($getRights['currentUser']['userId'], '1'); $this->assertEquals($getRights['currentUser']['write'], true); $this->assertEquals($getRights[3]['itemId'], 2); $this->assertEquals($getRights[3]['write'], true); $module = new Timecard_Models_Timecard(array('db' => $this->sharedFixture)); $this->assertEquals(array(), $module->getUsersRights()); }