From ec3f9b199f696e47403d6b672d7c217ba8e8785e Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 9 Jul 2012 16:51:36 -0400 Subject: [PATCH] Squashed commit of the following: commit 90620124a20d8c9da19b26920b02b521766c42e4 Author: Evan Prodromou Date: Mon Jul 9 16:50:05 2012 -0400 Add a checkbox to hide OpenID links commit 47a4a5824208868bd5f4f163456f8e08380e5f36 Author: Evan Prodromou Date: Mon Jul 9 16:35:15 2012 -0400 Don't show the profile links if the hide_profile_link flag is set commit eafd4b8ba1f7c06c92e5279b1a703c5534aa7255 Author: Evan Prodromou Date: Mon Jul 9 16:30:23 2012 -0400 class for user_openid_prefs table commit 60e3e3825b20745c08b4d30dbbcac2d7ce604a2f Author: Evan Prodromou Date: Mon Jul 9 16:29:15 2012 -0400 add User_openid_prefs table and class --- plugins/OpenID/OpenIDPlugin.php | 26 ++++--- plugins/OpenID/User_openid_prefs.php | 100 +++++++++++++++++++++++++++ plugins/OpenID/openidsettings.php | 57 +++++++++++++++ 3 files changed, 173 insertions(+), 10 deletions(-) create mode 100644 plugins/OpenID/User_openid_prefs.php diff --git a/plugins/OpenID/OpenIDPlugin.php b/plugins/OpenID/OpenIDPlugin.php index ff2e2adb5b..3d8dab8213 100644 --- a/plugins/OpenID/OpenIDPlugin.php +++ b/plugins/OpenID/OpenIDPlugin.php @@ -362,10 +362,9 @@ class OpenIDPlugin extends Plugin require_once dirname(__FILE__) . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; case 'User_openid': - require_once dirname(__FILE__) . '/User_openid.php'; - return false; + case 'User_openid_prefs': case 'User_openid_trustroot': - require_once dirname(__FILE__) . '/User_openid_trustroot.php'; + require_once dirname(__FILE__) . '/' . $cls . '.php'; return false; case 'Auth_OpenID_TeamsExtension': case 'Auth_OpenID_TeamsRequest': @@ -574,6 +573,8 @@ class OpenIDPlugin extends Plugin null, false), new ColumnDef('modified', 'timestamp'))); + $schema->ensureTable('user_openid_prefs', User_openid_prefs::schemaDef()); + /* These are used by JanRain OpenID library */ $schema->ensureTable('oid_associations', @@ -826,15 +827,20 @@ class OpenIDPlugin extends Plugin function onOtherAccountProfiles($profile, &$links) { - $oid = new User_openid(); + $prefs = User_openid_prefs::staticGet('user_id', $profile->id); + + if (empty($prefs) || !$prefs->hide_profile_link) { - $oid->user_id = $profile->id; + $oid = new User_openid(); - if ($oid->find()) { - while ($oid->fetch()) { - $links[] = array('href' => $oid->display, - 'text' => _('OpenID'), - 'image' => $this->path("icons/openid-16x16.gif")); + $oid->user_id = $profile->id; + + if ($oid->find()) { + while ($oid->fetch()) { + $links[] = array('href' => $oid->display, + 'text' => _('OpenID'), + 'image' => $this->path("icons/openid-16x16.gif")); + } } } diff --git a/plugins/OpenID/User_openid_prefs.php b/plugins/OpenID/User_openid_prefs.php new file mode 100644 index 0000000000..74a21f685e --- /dev/null +++ b/plugins/OpenID/User_openid_prefs.php @@ -0,0 +1,100 @@ +. + * + * @category OpenID + * @package StatusNet + * @author Evan Prodromou + * @copyright 2012 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Store preferences for OpenID use in StatusNet + * + * @category OpenID + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * @see DB_DataObject + */ + +class User_openid_prefs extends Managed_DataObject +{ + public $__table = 'user_openid_prefs'; // table name + + public $user_id; // The User with the prefs + public $hide_profile_link; // Hide the link on the profile block? + public $created; // datetime + public $modified; // datetime + + /** + * Get an instance by key + * + * This is a utility method to get a single instance with a given key value. + * + * @param string $k Key to use to lookup (usually 'user_id' for this class) + * @param mixed $v Value to lookup + * + * @return TagSub object found, or null for no hits + * + */ + function staticGet($k, $v=null) + { + return Managed_DataObject::staticGet('User_openid_prefs', $k, $v); + } + + /** + * The One True Thingy that must be defined and declared. + */ + + public static function schemaDef() + { + return array( + 'description' => 'Per-user preferences for OpenID display', + 'fields' => array('user_id' => array('type' => 'integer', + 'not null' => true, + 'description' => 'User whose prefs we are saving'), + 'hide_profile_link' => array('type' => 'int', + 'not null' => true, + 'default' => 0, + 'description' => 'Whether to hide profile links from profile block'), + 'created' => array('type' => 'datetime', + 'not null' => true, + 'description' => 'date this record was created'), + 'modified' => array('type' => 'datetime', + 'not null' => true, + 'description' => 'date this record was modified'), + ), + 'primary key' => array('user_id'), + 'foreign keys' => array('user_openid_prefs_user_id_fkey' => array('user', array('user_id' => 'id')), + ), + 'indexes' => array(), + ); + } +} diff --git a/plugins/OpenID/openidsettings.php b/plugins/OpenID/openidsettings.php index f1a62384b4..0dc4930ce1 100644 --- a/plugins/OpenID/openidsettings.php +++ b/plugins/OpenID/openidsettings.php @@ -222,6 +222,22 @@ class OpenidsettingsAction extends SettingsAction // TRANS: Button text to remove an OpenID trustroot. 'value' => _m('BUTTON','Remove'))); $this->elementEnd('fieldset'); + + $prefs = User_openid_prefs::staticGet('user_id', $user->id); + + $this->elementStart('fieldset'); + $this->element('legend', null, _m('LEGEND','Preferences')); + $this->elementStart('ul', 'form_data'); + $this->checkBox('hide_profile_link', "Hide OpenID links from my profile", !empty($prefs) && $prefs->hide_profile_link); + $this->element('input', array('type' => 'submit', + 'id' => 'settings_openid_prefs_save', + 'name' => 'save_prefs', + 'class' => 'submit', + // TRANS: Button text to save OpenID prefs + 'value' => _m('BUTTON','Save'))); + $this->elementEnd('ul'); + $this->elementEnd('fieldset'); + $this->elementEnd('form'); } @@ -258,6 +274,8 @@ class OpenidsettingsAction extends SettingsAction $this->removeOpenid(); } else if($this->arg('remove_trustroots')) { $this->removeTrustroots(); + } else if($this->arg('save_prefs')) { + $this->savePrefs(); } else { // TRANS: Unexpected form validation error. $this->showForm(_m('Something weird happened.')); @@ -326,4 +344,43 @@ class OpenidsettingsAction extends SettingsAction $this->showForm(_m('OpenID removed.'), true); return; } + + /** + * Handles a request to save preferences + * + * Validates input and, if everything is OK, deletes the OpenID. + * Reloads the form with a success or error notification. + * + * @return void + */ + function savePrefs() + { + $cur = common_current_user(); + + if (empty($cur)) { + throw new ClientException(_("Not logged in.")); + } + + $orig = null; + $prefs = User_openid_prefs::staticGet('user_id', $cur->id); + + if (empty($prefs)) { + $prefs = new User_openid_prefs(); + $prefs->user_id = $cur->id; + $prefs->created = common_sql_now(); + } else { + $orig = clone($prefs); + } + + $prefs->hide_profile_link = $this->boolean('hide_profile_link'); + + if (empty($orig)) { + $prefs->insert(); + } else { + $prefs->update($orig); + } + + $this->showForm(_m('OpenID preferences saved.'), true); + return; + } } -- 2.39.5