, Nicolas Rod for the University of Geneva */ class ShibbolethStore { /** * * @return ShibbolethStore */ public static function instance() { static $result = false; if (empty($result)) { $result = new self(); } return $result; } /** * * @return ShibbolethConfig */ public static function config() { return Shibboleth::config(); } public function get_unique_id() { return $this->get(__FUNCTION__); } /** * If the user has more than one surname, it is possible depending of the user * home organization that they are all given to the resource. * In the case of the University of Geneva, with two surnames, three different values * for the surname are sent. They are: * 1) "givenname1" * 2) "givenname2" * 3) "givenname1 givenname2" * meaning the string is as follow: "givenname1;givenname2;givenname1 givenname2" * * In such a case, the correct surname is the one which is followed by a space. * This function tests if such a situation is encountered, and returns the first given name. * * @author Nicolas Rod */ public function get_firstname() { $result = $this->get(__FUNCTION__); if (!is_array($result)) { $result = ucfirst($result); return $result; } foreach ($result as $name) { $parts = explode(' ', $name); if (count($parts) > 1) { $result = reset($parts); $result = ucfirst($result); return $result; } } $result = reset($result); $result = ucfirst($result); return $result; } public function get_lastname() { $result = $this->get(__FUNCTION__); $result = ucfirst($result); return $result; } public function get_email() { return $this->get(__FUNCTION__); } public function get_language() { return $this->get(__FUNCTION__); } public function get_gender() { return $this->get(__FUNCTION__); } public function get_address() { return $this->get(__FUNCTION__); } public function get_staff_category() { return $this->get(__FUNCTION__); } public function get_home_organization_type() { return $this->get(__FUNCTION__); } public function get_home_organization() { return $this->get(__FUNCTION__); } public function get_affiliation() { return $this->get(__FUNCTION__); } /** * @return ShibbolethUser */ public function get_user() { $result = new ShibbolethUser(); foreach ($result as $key => $val) { $f = array($this, "get_$key"); if (is_callable($f)) { $result->{$key} = call_user_func($f); } } return $result; } /** * Returns the shibboleth value stored in $_SERVER if it exists or $default if it is not the case. * * @param string $name the generic name. I.e. one of the class const. * @param string $default default value if it is not provided by Shibboleth * @return string */ public function get($name = '', $default = '') { $config = (array) Shibboleth::config(); if ($name) { $name = str_replace('get_', '', $name); $shib_name = isset($config[$name]) ? $config[$name] : ''; if ($shib_name) { $result = isset($_SERVER[$shib_name]) ? $_SERVER[$shib_name] : $default; $result = explode(';', $result); if (empty($result)) { $result = $default; } else if (count($result) == 1) { $result = reset($result); } else { $result = $result; } return $result; } } $result = array(); foreach ($config as $key => $val) { $f = array($this, "get_$key"); if (is_callable($f)) { $result[$key] = call_user_func($f); } } return $result; } }