/** * 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; }
/** * Returns an user setting. * * @param string $settingName The key of the setting to get. * @param object $defaultValue Default value if setting is empty. * * @return mix Setting value. */ public function getSetting($settingName, $defaultValue = null) { if (is_null($this->_setting)) { $this->_setting = new Phprojekt_Setting(); $this->_setting->setModule('User'); } $value = $this->_setting->getSetting($settingName, $this->id); if (empty($value)) { $value = $defaultValue; } return $value; }
/** * Test setSettings */ public function testSetSettings() { // Save favorites setting $timecardSetting = clone $this->_model; $favorites = array(0 => 1, 1 => 2); $params = array('favorites' => $favorites); $timecardSetting->setSettings($params); // Check it was well saved $settingsModel = new Phprojekt_Setting(); $settingsModel->setModule('Timecard'); $response = $settingsModel->getSetting('favorites'); $response = unserialize($response); $this->assertEquals($favorites, $response); }
/** * Saves an user. * * If the request parameter "id" is null or 0, the function will add a new user, * if the "id" is an existing user, the function will update it. * * The save action will save some values into the setting table. * * OPTIONAL request parameters: * <pre> * - integer <b>id</b> id of the user to save. * - mixed <b>all other user fields</b> All the fields values to save. * </pre> * * If there is an error, the save will return a Zend_Controller_Action_Exception, * if not, it returns a string in JSON format with: * <pre> * - type => 'success'. * - message => Success message. * - id => Id of the user. * </pre> * * @throws Zend_Controller_Action_Exception On error in the action save or wrong id. * * @return void */ public function jsonSaveAction() { $id = (int) $this->getRequest()->getParam('id'); $this->setCurrentProjectId(); // Settings $setting = new Phprojekt_Setting(); $setting->setModule('User'); $message = $setting->validateSettings($this->getRequest()->getParams()); if (!empty($message)) { $type = "error"; $id = 0; } else { if (empty($id)) { $model = $this->getModelObject(); $message = Phprojekt::getInstance()->translate(self::ADD_TRUE_TEXT); } else { $model = $this->getModelObject()->find($id); $message = Phprojekt::getInstance()->translate(self::EDIT_TRUE_TEXT); } $params = $this->setParams($this->getRequest()->getParams(), $model); Default_Helpers_Save::save($model, $params); if (empty($id)) { $id = $model->id; } $setting->setSettings($this->getRequest()->getParams(), $id); $type = "success"; } $return = array('type' => $type, 'message' => $message, 'id' => $id); Phprojekt_Converter_Json::echoConvert($return); }
/** * 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'); }
/** * Disables all types of frontend messages. * * @return void */ public function disableFrontendMessages() { $defaultSettings = array(Core_Models_Notification_Setting::FIELD_LOGIN_LOGOUT => 0, Core_Models_Notification_Setting::FIELD_DATARECORDS => 0, Core_Models_Notification_Setting::FIELD_USERGENERATED => 0, Core_Models_Notification_Setting::FIELD_ALERTS => 0); $setting = new Phprojekt_Setting(); $setting->setModule('Notification'); $setting->setSettings($defaultSettings); }
/** * Test getList */ public function testGetList() { $setting = new Phprojekt_Setting(); $setting->setModule('Timecard'); $metadata = $setting->getModel()->getFieldDefinition(Phprojekt_ModelInformation_Default::ORDERING_FORM); $records = $setting->getList(4, $metadata); $data = array('id' => 0, 'favorites' => "1,2"); $this->assertEquals(array($data), $records); $setting = new Phprojekt_Setting(); $setting->setModule('Notification'); $metadata = $setting->getModel()->getFieldDefinition(Phprojekt_ModelInformation_Default::ORDERING_FORM); $records = $setting->getList(0, $metadata); $data = array('id' => 0, 'loginlogout' => 0, 'datarecords' => 1, 'alerts' => 1); $this->assertEquals(array($data), $records); }
/** * Save the favorites projects for the current user. * * OPTIONAL request parameters: * <pre> * - array <b>favorites</b> Array with ids of the projects. * </pre> * * The return is a string in JSON format with: * <pre> * - type => 'success'. * - message => Success message. * - id => 0. * </pre> * * @return void */ public function jsonFavoritesSaveAction() { $setting = new Phprojekt_Setting(); $setting->setModule('Timecard'); $setting->setSettings($this->getRequest()->getParams()); $message = Phprojekt::getInstance()->translate(self::EDIT_TRUE_TEXT); $return = array('type' => 'success', 'message' => $message, 'id' => 0); Phprojekt_Converter_Json::echoConvert($return); }
/** * Saves the settings for one module. * * OPTIONAL request parameters: * <pre> * - string <b>moduleName</b> Name of the module. * - mixed <b>all other module fields</b> All the fields values to save. * </pre> * * The return is a string in JSON format with: * <pre> * - type => 'success' or 'error'. * - message => Success or error message. * - id => 0. * </pre> * * @throws Zend_Controller_Action_Exception On error in the action save or wrong id. * * @return void */ public function jsonSaveAction() { $module = Cleaner::sanitize('alnum', $this->getRequest()->getParam('moduleName', null)); $this->setCurrentProjectId(); $setting = new Phprojekt_Setting(); $setting->setModule($module); $message = $setting->validateSettings($this->getRequest()->getParams()); if (!empty($message)) { $type = "error"; } else { $message = Phprojekt::getInstance()->translate(self::EDIT_TRUE_TEXT); $setting->setSettings($this->getRequest()->getParams()); $type = "success"; } $return = array('type' => $type, 'message' => $message, 'id' => 0); Phprojekt_Converter_Json::echoConvert($return); }
/** * 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); }