/** * Sets a fields definitions for each field. * * @return void */ public function setFields() { // username $this->fillField('username', 'Username', 'text', 1, 1, array('required' => true, 'length' => 255)); // password $this->fillField('password', 'Password', 'password', 0, 2, array('length' => 50)); // firstname $this->fillField('firstname', 'First name', 'text', 2, 3, array('required' => true, 'length' => 255)); // lastname $this->fillField('lastname', 'Last name', 'text', 3, 4, array('required' => true, 'length' => 255)); // email $this->fillField('email', 'Email', 'text', 0, 5, array('length' => 255)); // language $range = array(); $languageRange = Phprojekt_LanguageAdapter::getLanguageList(); foreach ($languageRange as $key => $value) { $range[] = $this->getRangeValues($key, $value); } $this->fillField('language', 'Language', 'selectbox', 0, 6, array('range' => $range, 'required' => true, 'default' => 'en')); // timeZone $range = array(); $timeZoneRange = Phprojekt_Converter_Time::getTimeZones(); foreach ($timeZoneRange as $key => $value) { $range[] = $this->getRangeValues($key, $value); } $this->fillField('timeZone', 'Time zone', 'selectbox', 0, 7, array('range' => $range, 'required' => true, 'default' => '000')); // status $this->fillField('status', 'Status', 'selectbox', 4, 8, array('range' => array($this->getFullRangeValues('A', 'Active'), $this->getFullRangeValues('I', 'Inactive')), 'default' => 'A')); // admin $this->fillField('admin', 'Admin', 'selectbox', 5, 9, array('range' => array($this->getFullRangeValues(0, 'No'), $this->getFullRangeValues(1, 'Yes')), 'integer' => true, 'default' => 0)); }
/** * Constructor. * * @return void */ public function __construct() { $this->_languageRange = Phprojekt_LanguageAdapter::getLanguageList(); $this->_timeZoneRange = Phprojekt_Converter_Time::getTimeZones(); }
private static function _ldapIntegration($userId, $username, $password, $loginServer = null) { $userId = intval($userId); $conf = Phprojekt::getInstance()->getConfig(); $ldapOptions = $conf->authentication->ldap->toArray(); // Zend library does not allow determining from which server the user was found from // That's why we need to request the server from the user during login. $account = null; if ($loginServer !== null && array_key_exists($loginServer, $ldapOptions)) { $searchOpts = $ldapOptions[$loginServer]; try { $ldap = new Zend_Ldap($searchOpts); $ldap->connect(); $ldap->bind($username, $password); $filter = sprintf("(\n &(\n |(objectclass=posixAccount)\n (objectclass=Person)\n )\n (\n |(uid=%s)\n (samAccountName=%s)\n )\n )", $username, $username); $result = $ldap->search($filter, $searchOpts['baseDn']); $account = $result->getFirst(); $ldap->disconnect(); } catch (Exception $e) { throw new Phprojekt_Auth_Exception('Failed to establish a search connection to the LDAP server:' . ' ' . $server . ' ' . 'Please check your configuration for that server.', 8); } } else { throw new Phprojekt_Auth_Exception('Server not specified during login! " . "Please check that your login screen contains the login domain selection.', 9); } if ($account !== null) { // User found $integration = isset($conf->authentication->integration) ? $conf->authentication->integration->toArray() : array(); $firstname = ""; $lastname = ""; $email = ""; if (isset($account['givenname'])) { $firstname = $account['givenname'][0]; } if (isset($account['sn'])) { $lastname = $account['sn'][0]; } if (isset($account['mail'])) { $email = $account['mail'][0]; } // Set user params $params = array(); $params['id'] = intval($userId); // New user has id = 0 $params['username'] = $username; $params['password'] = $password; $admins = array(); if (isset($integration['systemAdmins'])) { $admins = split(",", $integration['systemAdmins']); foreach ($admins as $key => $admin) { $admins[$key] = trim($admin); } } $params['admin'] = in_array($username, $admins) ? 1 : 0; // Default to non-admin (0) if ($userId > 0) { $user = self::_getUser($userId); $params['admin'] = intval($user->admin); } // Integrate with parameters found from LDAP server $params['firstname'] = $firstname; $params['lastname'] = $lastname; $params['email'] = $email; if ($userId > 0) { // Update user parameters with those found from LDAP server $user->find($userId); $params['id'] = $userId; if (!self::_saveUser($params)) { throw new Phprojekt_Auth_Exception('User update failed for LDAP parameters', 10); } } else { // Add new user to PHProjekt // TODO: Default conf could be defined in configuration // Lists needed for checks ? // Set default parameters for users $params['status'] = "A"; // Active user $params['language'] = isset($conf->language) ? $conf->language : "en"; // Conf language / English $params['timeZone'] = "0000"; // (GMT) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London // Default integration vals from config if (isset($integration['admin']) && $params['admin'] == 0) { $val = intval($integration['admin']); if ($val == 1 || $val == 0) { $params['admin'] = $val; } } if (isset($integration['status'])) { $val = trim(strtoupper($integration['status'])); if (in_array($val, array("A", "I"))) { $params['status'] = $val; } } if (isset($integration['language'])) { $val = trim(strtolower($integration['language'])); $languages = Phprojekt_LanguageAdapter::getLanguageList(); if (array_key_exists($val, $languages)) { $params['language'] = $val; } else { if (($val = array_search('(' . $val . ')', $languages)) !== false) { $params['language'] = $val; } } } if (isset($integration['timeZone'])) { $val = trim(strtolower($integration['timeZone'])); $timezones = Phprojekt_Converter_Time::getTimeZones(); if (array_key_exists($val, $timezones)) { $params['timeZone'] = $val; } else { if (($val = array_search($val, $timezones)) !== false) { $params['timeZone'] = $val; } } } if (!self::_saveUser($params)) { throw new Phprojekt_Auth_Exception('User creation failed after LDAP authentication', 10); } } } else { throw new Phprojekt_Auth_Exception('Failed to find the LDAP user with the given username', 11); } }