/** * Save the settings for the timecard * * @param array $params $_POST values * * @return void */ public function setSettings($params) { $namespace = new Zend_Session_Namespace(Phprojekt_Setting::IDENTIFIER . Phprojekt_Auth::getUserId()); $fields = $this->getFieldDefinition(Phprojekt_ModelInformation_Default::ORDERING_FORM); foreach ($fields as $data) { foreach ($params as $key => $value) { if ($key == $data['key']) { $setting = new Phprojekt_Setting(); $setting->setModule('Timecard'); if ($key == 'favorites') { if (count($value) === 1 && $value[0] === "") { $value = array(); } $value = serialize($value); } $where = sprintf('user_id = %d AND key_value = %s AND module_id = %d', (int) Phprojekt_Auth::getUserId(), $setting->_db->quote($key), (int) Phprojekt_Module::getId('Timecard')); $record = $setting->fetchAll($where); if (isset($record[0])) { $record[0]->keyValue = $key; $record[0]->value = $value; $record[0]->save(); } else { $setting->userId = Phprojekt_Auth::getUserId(); $setting->moduleId = Phprojekt_Module::getId('Timecard'); $setting->keyValue = $key; $setting->value = $value; $setting->identifier = 'Timecard'; $setting->save(); } $namespace->{$key} = $value; break; } } } }
/** * Collect all the values of the settings and return it in one row. * * @param integer $moduleId The current moduleId. * @param array $metadata Array with all the fields. * @param integer $userId The user ID, if is not setted, the current user is used. * * @return array Array with all the settings and values. */ public function getList($moduleId, $metadata, $userId = null) { $setting = new Phprojekt_Setting(); $setting->setModule('Notification'); $settings = array(); if ($userId === null) { $userId = (int) Phprojekt_Auth::getUserId(); } $where = sprintf('module_id = %d AND user_id = %d', (int) $moduleId, (int) $userId); $record = $setting->fetchAll($where); $data = array(); $data['id'] = 0; foreach ($metadata as $meta) { $data[$meta['key']] = $meta['default']; // This is to use the default value defined in getFieldDefinition() foreach ($record as $oneSetting) { if ($oneSetting->keyValue == $meta['key']) { $getter = 'get' . ucfirst($oneSetting->keyValue); if (method_exists($this, $getter)) { $data[$meta['key']] = call_user_func(array($this, $getter), $oneSetting->value); } else { $data[$meta['key']] = $oneSetting->value; } break; } } } $settings[] = $data; return $settings; }
/** * Tests logout action on login controller */ public function testLoginLogoutAction() { $this->setRequestUrl('Login/logout'); try { $this->front->dispatch($this->request, $this->response); } catch (Zend_Controller_Response_Exception $error) { $this->assertEquals(0, $error->getCode()); try { $authNamespace = new Zend_Session_Namespace('Phprojekt_Auth-login'); $this->fail('An error occured on logout action: Id ' . $authNamespace->userId . ' is still logued'); } catch (Zend_Session_Exception $error) { $this->assertEquals(0, $error->getCode()); // Try to fetch login data in settings table to assure it has been deleted $settingsModel = new Phprojekt_Setting(); $settingsModel->setModule('User'); $db = Phprojekt::getInstance()->getDb(); $where = sprintf("user_id = 1 AND key_value LIKE %s", $db->quote(Phprojekt_Auth::LOGGED_TOKEN . '%')); $rows = $settingsModel->fetchAll($where); $this->assertTrue(count($rows) == 0); // Remove all cache files before the tests end Phprojekt::getInstance()->getCache()->clean(); return; } } $this->fail('An error occured on logout action'); }
/** * Save the settings into the table. * * @param array $params $_POST fields. * @param integer $userId The user ID, if is not setted, the current user is used. * * @return void */ public function setSettings($params, $userId = 0) { if (!$userId) { $userId = Phprojekt_Auth::getUserId(); } if (empty($params['password'])) { $password = Phprojekt_Auth::getRealUser()->getSetting('password', $userId); } else { $password = Phprojekt_Auth::cryptString($params['password']); } $namespace = new Zend_Session_Namespace(Phprojekt_Setting::IDENTIFIER . $userId); $fields = $this->getFieldDefinition(Phprojekt_ModelInformation_Default::ORDERING_FORM); foreach ($fields as $data) { foreach ($params as $key => $value) { if ($key == $data['key'] && $key != 'oldValue' && $key != 'confirmValue') { if ($key == 'proxies') { if (count($value) === 1 && $value[0] === "") { $value = array(); } $proxyTable = new Phprojekt_Auth_ProxyTable(); $proxyTable->setProxyIdsForUserId($value); } else { $setting = new Phprojekt_Setting(); $setting->setModule('User'); if ($key == 'password') { $value = $password; } $where = sprintf('user_id = %d AND key_value = %s AND module_id = %d', (int) $userId, $setting->_db->quote($key), 0); $record = $setting->fetchAll($where); if (isset($record[0])) { $record[0]->keyValue = $key; $record[0]->value = $value; $record[0]->save(); } else { $setting->userId = $userId; $setting->moduleId = 0; $setting->keyValue = $key; $setting->value = $value; $setting->identifier = 'Core'; $setting->save(); } $namespace->{$key} = $value; } break; } } } }
/** * Deletes login data on DB and cookies. * * @param integer $userId ID of the user. * * @return void */ private static function _deleteDbAndCookies($userId) { if ($userId) { // Delete all DB settings table token rows $db = Phprojekt::getInstance()->getDb(); $setting = new Phprojekt_Setting(); $setting->setModule('User'); $where = sprintf("user_id = %d AND key_value LIKE %s", (int) $userId, $db->quote(self::LOGGED_TOKEN . '%')); $rows = $setting->fetchAll($where); foreach ($rows as $row) { $row->delete(); } } // Don't work with cookies if headers have already been sent (when unittest are being executed) if (headers_sent()) { return; } self::_setCookies("", 0, 1); }