$v) { if (substr($k, 0, 10) == 'openid_ns_' && $v == self::NS) { $ns = substr($k, 10); break; } } if ($ns === false) { return; } $_SESSION['openid']['ax'] = array( 'types' => array(), 'data' => array(), 'counts' => array() ); foreach ($_REQUEST as $k => $v) { if (substr($k, 0, 8 + strlen($ns)) == "openid_{$ns}_") { // TODO: Need to check mode etc $rest = substr($k, 8 + strlen($ns)); if (substr($rest, 0, 5) == 'type_') { $_SESSION['openid']['ax']['types'][substr($rest, 5)] = $v; } else if (substr($rest, 0, 6) == 'count_') { $_SESSION['openid']['ax']['counts'][substr($rest, 6)] = (int) $v; } } } foreach ($_SESSION['openid']['ax']['types'] as $alias => $uri) { if (!isset($_SESSION['openid']['ax']['counts'][$alias])) { $_SESSION['openid']['ax']['counts'][$alias] = 1; } $count = $_SESSION['openid']['ax']['counts'][$alias]; if ($count > 1) { for ($i = 1; $i < $count + 1; $i++) { $_SESSION['openid']['ax']['data'][$alias][] = $_REQUEST["openid_{$ns}_value_{$alias}_$i"]; } } else if ($count == 1) { $_SESSION['openid']['ax']['data'][$alias] = $_REQUEST["openid_{$ns}_value_$alias"]; } } } public function decorate(&$args, $ns) { $args['openid.ns.' . $ns] = self::NS; $args['openid.' . $ns . '.mode'] = 'fetch_request'; foreach (array_merge(self::$optional, self::$required) as $alias) { $args['openid.' . $ns . '.type.' . $alias] = self::$aliases[$alias]; } foreach (self::$count as $alias => $count) { $args['openid.' . $ns . '.count.' . $alias] = $count; } if (!empty(self::$optional)) { $args['openid.' . $ns . '.if_available'] = implode(',', self::$optional); } if (!empty(self::$required)) { $args['openid.' . $ns . '.required'] = implode(',', self::$required); } } } $ax = new AttributeExchange(); $_POIDSY['decorators'][] = $ax; $_POIDSY['handlers'][] = $ax; unset($ax); ?>