/** * Lazy load the userId list. * * @return array $_userIdList */ protected function _getUserIdList() { if (empty(self::$_userIdList)) { /* @var $user Phprojekt_User_User */ $user = new Phprojekt_User_User(); $users = $user->getAllowedUsers(); foreach ($users as $node) { self::$_userIdList[$node['id']] = $this->getRangeValues($node['id'], $node['name']); } } return self::$_userIdList; }
/** * Sets a fields definitions for each field. * * @return void */ public function setFields() { // password $this->fillField('password', 'Password', 'password', 0, 1, array('length' => 50)); // confirmValue $this->fillField('confirmValue', 'Confirm Password', 'password', 0, 2, array('length' => 50)); // oldValue $this->fillField('oldValue', 'Old Password', 'password', 0, 3, array('length' => 50)); // email $this->fillField('email', 'Email', 'text', 0, 4, array('length' => 255)); // language $range = array(); foreach ($this->_languageRange as $key => $value) { $range[] = $this->getRangeValues($key, $value); } $this->fillField('language', 'Language', 'selectbox', 0, 5, array('range' => $range, 'required' => true, 'default' => 'en')); // timeZone $range = array(); foreach ($this->_timeZoneRange as $key => $value) { $range[] = $this->getRangeValues($key, $value); } $this->fillField('timeZone', 'Time zone', 'selectbox', 0, 6, array('range' => $range, 'required' => true, 'default' => '000')); // Proxies Phprojekt::setCurrentProjectId(IndexController::INVISIBLE_ROOT); $user = new Phprojekt_User_User(); $range = $user->getAllowedUsers(); // remove ourselves from the proxy list $i = 0; foreach ($range as $entry) { if ((int) $entry['id'] == Phprojekt_Auth::getUserId()) { array_splice($range, $i, 1); break; } $i++; } $this->fillField('proxies', 'Proxies', 'multiplefilteringselectbox', 0, 7, array('range' => $range, 'required' => true)); }
/** * Save the roles-user relation for one projectId. * * @param array $roles Array with the roles ID. * @param array users Array with the users ID. * @param integer $projectId The project ID. * * @return void */ public function saveRelation($roles, $users, $projectId) { $where = sprintf('project_id = %d', (int) $projectId); foreach ($this->fetchAll($where) as $relation) { $relation->delete(); } // Save roles only for allowed users $activeRecord = new Phprojekt_User_User(); $result = $activeRecord->getAllowedUsers(); foreach ($result as $user) { $userId = $user['id']; if (in_array($userId, $users)) { $clone = clone $this; $clone->roleId = $roles[$userId]; $clone->userId = $userId; $clone->projectId = $projectId; $clone->save(); // Reset cache $sessionName = 'Project_Models_ProjectRoleUserPermissions-fetchUserRole-' . $projectId . '-' . $userId; $roleNamespace = new Zend_Session_Namespace($sessionName); $roleNamespace->unsetAll(); } } }
/** * Gets the data range for a select using a model. * * @param Phprojekt_ModelInformation_Interface $field Class with data of the field. * * @return array Array with 'id' and 'name'. */ public function getRangeFromModel(Phprojekt_ModelInformation_Interface $field) { $options = array(); list($module, $key, $value) = explode('#', $field->formRange); $module = trim($module); $key = trim($key); $value = trim($value); switch ($module) { case 'Project': $activeRecord = new Project_Models_Project(); $tree = new Phprojekt_Tree_Node_Database($activeRecord, 1); $tree = $tree->setup(); foreach ($tree as $node) { $options[] = array('id' => (int) $node->{$key}, 'name' => $node->getDepthDisplay($value)); } break; case 'User': $activeRecord = new Phprojekt_User_User(); $result = $activeRecord->getAllowedUsers(); if (!$field->isRequired && $field->formType == 'selectValues') { $options[] = array('id' => 0, 'name' => ''); } $options = array_merge($options, $result); break; default: $activeRecord = Phprojekt_Loader::getModel($module, $module); if (method_exists($activeRecord, 'getRangeFromModel')) { $options = call_user_func(array($activeRecord, 'getRangeFromModel'), $field); } else { $result = $activeRecord->fetchAll(); $options = $this->_setRangeValues($field, $result, $key, $value); } break; } return $options; }