elgg_load_library('openid_consumer');
$provider = get_input('openid_provider');
-$username = get_input('openid_username');
+
+if ($provider == 'others') {
+ $provider = get_input('openid_url');
+}
$consumer = new ElggOpenIDConsumer($store);
-$consumer->setProvider($provider);
-$consumer->setUsername($username);
+$consumer->setURL($provider);
$consumer->setReturnURL(elgg_get_site_url() . 'mod/openid_client/return.php');
$html = $consumer->requestAuthentication();
echo $html;
exit;
} else {
- $provider_name = elgg_echo("openid_client:provider:$provider");
+ $flipped_providers = array_flip(elgg_get_config('openid_providers'));
+ if (isset($flipped_providers[$provider])) {
+ $provider_name = $flipped_providers[$provider];
+ } else {
+ $provider_name = $provider;
+ }
register_error(elgg_echo('openid_client:error:no_html', array($provider_name)));
forward();
}
class ElggOpenIDConsumer {
- protected $provider;
- protected $username;
+ protected $openIdUrl;
protected $returnURL;
protected $store;
}
}
- /**
- * Set the name of the OpenID provider
- *
- * @param string $provider
- */
- public function setProvider($provider) {
- $this->provider = $provider;
- }
-
/**
* Set the OpenID username
*
* @param string $username
*/
- public function setUsername($username) {
- $this->username = $username;
+ public function setURL($url) {
+ $this->openIdUrl = $url;
}
/**
return false;
}
- $url = $this->getProviderURL();
+ $url = $this->openIdUrl;
if (!$url) {
return false;
}
return $data;
}
- /**
- * Get the OpenID provider URL based on name
- *
- * @return string
- */
- protected function getProviderURL() {
- $url = null;
- $provider = $this->provider;
- $username = $this->username;
- switch ($provider) {
- case 'google':
- $url = 'https://www.google.com/accounts/o8/id';
- break;
- case 'yahoo':
- $url = 'https://me.yahoo.com/';
- break;
- case 'blogger':
- $url = "http://$username.blogspot.com/";
- break;
- case 'wordpress':
- // username is actually the blog name
- $url = "http://$username.wordpress.com/";
- break;
- case 'livejournal':
- $url = "http://$username.livejournal.com/";
- break;
- case 'aol':
- $url = "https://openid.aol.com/";
- break;
- case 'verisign':
- $url = "https://pip.verisignlabs.com/ ";
- break;
- case 'myopenid':
- $url = 'https://myopenid.com/';
- break;
- case 'myspace':
- $url = 'https://api.myspace.com/openid';
- break;
- default:
- $params = array(
- 'provider' => $provider,
- 'username' => $username,
- );
- $url = elgg_trigger_plugin_hook('set', 'openid_client:url', $params);
- break;
- }
-
- return $url;
- }
-
/**
* Add attribute requests to the OpenID authentication request
*
\r
$english = array(\r
\r
+ 'openid_client' => 'OpenID',\r
'openid_client:login:header' => 'Log in with',\r
- 'openid_client:or:header' => 'or',\r
- 'openid_client:login:instructs' => 'Login in with %s',\r
- 'openid_client:provider:google' => 'Google',\r
- 'openid_client:provider:yahoo' => 'Yahoo',\r
- 'openid_client:provider:blogger' => 'Blogger',\r
- 'openid_client:provider:wordpress' => 'Wordpress',\r
+ 'openid_client:login' => 'Login in with OpenID',\r
+ 'openid_client:others' => 'Others...',\r
+ 'openid_client:url' => 'OpenID URL',\r
\r
'openid_client:create' => 'Create an account',\r
'openid_client:create:instructs' => 'Your account has been approved. We just need you to confirm or set the below information.',\r
elgg_extend_view('css/elgg', 'openid_client/css');\r
elgg_extend_view('js/elgg', 'openid_client/js');\r
\r
- elgg_extend_view('core/account/login_box', 'openid_client/login');\r
elgg_register_plugin_hook_handler('register', 'menu:openid_login', 'openid_client_setup_menu');\r
\r
$base = elgg_get_plugins_path() . 'openid_client/actions/openid_client';\r
\r
$base = elgg_get_plugins_path() . 'openid_client/lib';\r
elgg_register_library('openid_client', "$base/helpers.php");\r
+ \r
+ elgg_set_config('openid_providers', array(\r
+ 'N-1' => 'https://n-1.cc/openid/',\r
+ 'Ecoxarxes' => 'https://cooperativa.ecoxarxes.cat/openid/',\r
+ 'Anillosur' => 'https://anillosur.cc/openid/',\r
+ // ...\r
+ ));\r
\r
// don't let OpenID users set their passwords\r
elgg_register_event_handler('pagesetup', 'system', 'openid_client_remove_password');\r
update_data($query);\r
}\r
\r
-/**\r
- * Register login options\r
- *\r
- * @param string $hook\r
- * @param string $type\r
- * @param array $menu\r
- * @param array $params\r
- * @return array\r
- */\r
-function openid_client_setup_menu($hook, $type, $menu, $params) {\r
-\r
- $items = array(\r
- 'large' => array(\r
- 'google' => '',\r
- 'yahoo' => '',\r
- ),\r
- 'small' => array(\r
- 'blogger' => 'toggle',\r
- 'wordpress' => 'toggle',\r
- ),\r
- );\r
- $items = elgg_trigger_plugin_hook('register', 'openid_client:login', null, $items);\r
-\r
- $priority = 100;\r
- foreach ($items as $type => $providers) {\r
- foreach ($providers as $provider => $toggle) {\r
- $provider_name = elgg_echo("openid_client:provider:$provider");\r
-\r
- $options = array(\r
- 'name' => $provider,\r
- 'text' => '<span></span>',\r
- 'title' => elgg_echo('openid_client:login:instructs', array($provider_name)),\r
- 'href' => "action/openid_client/login?openid_provider=$provider",\r
- 'is_action' => true,\r
- 'section' => $type,\r
- 'priority' => $priority,\r
- );\r
-\r
- if ($toggle) {\r
- $options['link_class'] = 'openid-client-toggle';\r
- $options['rel'] = $provider;\r
- }\r
-\r
- $menu[] = ElggMenuItem::factory($options);\r
-\r
- $priority += 10;\r
- }\r
- }\r
-\r
- return $menu;\r
-}\r
-\r
/**\r
* Remove the password view from the account settings form\r
*/\r
* OpenID login if username or full url required
*/
-echo '<label>';
-echo elgg_echo('username');
-echo '</label>';
-echo elgg_view('input/text', array('name' => 'openid_username', 'class' => 'mbs'));
+$options_values = array_flip(elgg_get_config('openid_providers'));
+$options_values['others'] = elgg_echo('openid_client:others');
-echo elgg_view('input/hidden', array('name' => 'openid_provider'));
+?>
+<div>
+<label><?php echo elgg_echo('openid_client:login:header'); ?></label>
+<br />
+<?php
+echo elgg_view('input/dropdown', array(
+ 'name' => 'openid_provider',
+ 'options_values' => $options_values,
+));
+?>
+</div>
+
+<div class="openid-client-url hidden">
+<label><?php echo elgg_echo('openid_client:url'); ?> </label>
+
+<?php
+echo elgg_view('input/text', array('name' => 'openid_url', 'class' => 'mbs'));
+?>
+
+</div>
-echo elgg_view('input/submit', array('value' => elgg_echo('submit')));
\ No newline at end of file
+<div class="elgg-foot">
+ <label class="mtm float-alt">
+ <input type="checkbox" name="persistent" value="true" />
+ <?php echo elgg_echo('user:persistent'); ?>
+ </label>
+
+ <?php echo elgg_view('input/submit', array('value' => elgg_echo('login'))); ?>
+
+ <?php
+ if (isset($vars['returntoreferer'])) {
+ echo elgg_view('input/hidden', array('name' => 'returntoreferer', 'value' => 'true'));
+ }
+ ?>
+</div>
\ No newline at end of file
/**\r
* OpenID client CSS\r
*/\r
-\r
-$site_url = elgg_get_site_url();\r
-\r
?>\r
\r
-.openid-client-login-or {\r
- margin-top: 5px;\r
- text-align: center;\r
- color: #333;\r
-}\r
-\r
-.elgg-menu-openid-login {\r
- text-align: center;\r
-}\r
-\r
-.elgg-menu-openid-login > li {\r
- margin: 3px;\r
-}\r
-\r
-.elgg-menu-openid-login span {\r
- display: block;\r
- background: url("<?php echo $site_url; ?>mod/openid_client/graphics/openid_providers.png") no-repeat left;\r
- border: 1px solid #ccc;\r
-}\r
-\r
-.elgg-menu-openid-login-large span {\r
- height: 32px;\r
- width: 92px;\r
+.elgg-icon-openid {\r
+ background-image: url(<?php echo elgg_get_site_url(); ?>mod/openid_client/graphics/openid_icon.png);\r
}\r
\r
-.elgg-menu-openid-login-small span {\r
- height: 20px;\r
- width: 20px;\r
-}\r
-\r
-.elgg-menu-item-google span {\r
- background-position: -5px -14px;\r
-}\r
-\r
-.elgg-menu-openid-login-large > .elgg-menu-item-yahoo span {\r
- background-position: -105px -14px;\r
-}\r
-\r
-.elgg-menu-item-blogger span {\r
- background-position: -170px -62px;\r
-}\r
-\r
-.elgg-menu-item-wordpress span {\r
- background-position: -146px -62px;\r
-}\r
+.elgg-form-login {\r
+ margin-bottom: 10px;\r
+}
\ No newline at end of file
// OpenID toggle
elgg.register_hook_handler('init', 'system', function() {
- $(".openid-client-toggle").click(function(event) {
- $("#openid-client-login-form").slideDown();
-
- var provider_input = $("#openid-client-login-form input[name=openid_provider]");
- provider_input.attr('value', $(this).attr('rel'));
-
- event.preventDefault();
+ $('.openid-login-icon').click(function(e) {
+ var openid_box = $(this).prev('.elgg-form-openid-client-login');
+ var shown = openid_box.is(':visible') ? openid_box : openid_box.prev();
+ var hidden = !openid_box.is(':visible') ? openid_box : openid_box.prev();
+ shown.fadeOut(function() {
+ hidden.fadeIn();
+ });
+ e.preventDefault();
+ });
+ $(".elgg-form-openid-client-login [name='openid_provider']").change(function(event) {
+ if (this.value == 'others') {
+ $(".openid-client-url").slideDown().find('input').focus();
+ } else {
+ $(".openid-client-url").slideUp();
+ }
});
});
+++ /dev/null
-<?php
-/**
- * OpenID client login choices
- */
-
-echo '<h3 class="openid-client-login-or">' . elgg_echo('openid_client:or:header') . '</h3>';
-echo '<h3>' . elgg_echo('openid_client:login:header') . '</h3>';
-
-echo elgg_view_menu('openid_login', array(
- 'class' => 'elgg-menu-hz',
- 'sort_by' => 'priority',
-));
-
-$form_vars = array(
- 'class' => 'hidden',
- 'id' => 'openid-client-login-form',
-);
-echo elgg_view_form('openid_client/login', $form_vars);