]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Squashed commit of the following:
authorEvan Prodromou <evan@status.net>
Mon, 9 Jul 2012 20:51:36 +0000 (16:51 -0400)
committerEvan Prodromou <evan@status.net>
Mon, 9 Jul 2012 20:54:47 +0000 (16:54 -0400)
commit 90620124a20d8c9da19b26920b02b521766c42e4
Author: Evan Prodromou <evan@status.net>
Date:   Mon Jul 9 16:50:05 2012 -0400

    Add a checkbox to hide OpenID links

commit 47a4a5824208868bd5f4f163456f8e08380e5f36
Author: Evan Prodromou <evan@status.net>
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 <evan@status.net>
Date:   Mon Jul 9 16:30:23 2012 -0400

    class for user_openid_prefs table

commit 60e3e3825b20745c08b4d30dbbcac2d7ce604a2f
Author: Evan Prodromou <evan@status.net>
Date:   Mon Jul 9 16:29:15 2012 -0400

    add User_openid_prefs table and class

plugins/OpenID/OpenIDPlugin.php
plugins/OpenID/User_openid_prefs.php [new file with mode: 0644]
plugins/OpenID/openidsettings.php

index ff2e2adb5b9aa1237df3153dc8d6cb1ae07bd256..3d8dab8213c30f94d11889ae5090ad1e4924029b 100644 (file)
@@ -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 (file)
index 0000000..74a21f6
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2012, StatusNet, Inc.
+ *
+ * User_openid_prefs.php
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  OpenID
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @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 <evan@status.net>
+ * @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(),
+                     );
+    }
+}
index f1a62384b4d2c4f5e86359b13fabbd449b8cd70a..0dc4930ce1b8931841207c5d0b94806f4ca5313c 100644 (file)
@@ -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;
+    }
 }