]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/profilesettings.php
Moved shareLocation preference check to Profile class
[quix0rs-gnu-social.git] / actions / profilesettings.php
index 7227c5c7e96974ee4bbcc709bbe0273a7d4434b4..2279732c1eca2145703e5c56d45e4612f0f0cd78 100644 (file)
@@ -33,8 +33,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
     exit(1);
 }
 
-require_once INSTALLDIR.'/lib/accountsettingsaction.php';
-
 /**
  * Change profile settings
  *
@@ -46,7 +44,7 @@ require_once INSTALLDIR.'/lib/accountsettingsaction.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-class ProfilesettingsAction extends AccountSettingsAction
+class ProfilesettingsAction extends SettingsAction
 {
     /**
      * Title of the page
@@ -126,15 +124,15 @@ class ProfilesettingsAction extends AccountSettingsAction
                 // TRANS: Tooltip for field label in form for profile settings. Plural
                 // TRANS: is decided by the number of characters available for the
                 // TRANS: biography (%d).
-                $bioInstr = sprintf(_m('Describe yourself and your interests in %d character',
-                                       'Describe yourself and your interests in %d characters',
+                $bioInstr = sprintf(_m('Describe yourself and your interests in %d character.',
+                                       'Describe yourself and your interests in %d characters.',
                                        $maxBio),
                                     $maxBio);
             } else {
                 // TRANS: Tooltip for field label in form for profile settings.
-                $bioInstr = _('Describe yourself and your interests');
+                $bioInstr = _('Describe yourself and your interests.');
             }
-            // TRANS: Text area label in form for profile settings where users can provide.
+            // TRANS: Text area label in form for profile settings where users can provide
             // TRANS: their biography.
             $this->textarea('bio', _('Bio'),
                             ($this->arg('bio')) ? $this->arg('bio') : $profile->bio,
@@ -145,14 +143,14 @@ class ProfilesettingsAction extends AccountSettingsAction
             $this->input('location', _('Location'),
                          ($this->arg('location')) ? $this->arg('location') : $profile->location,
                          // TRANS: Tooltip for field label in form for profile settings.
-                         _('Where you are, like "City, State (or Region), Country"'));
+                         _('Where you are, like "City, State (or Region), Country".'));
             $this->elementEnd('li');
             if (common_config('location', 'share') == 'user') {
                 $this->elementStart('li');
                 // TRANS: Checkbox label in form for profile settings.
                 $this->checkbox('sharelocation', _('Share my current location when posting notices'),
                                 ($this->arg('sharelocation')) ?
-                                $this->arg('sharelocation') : $user->shareLocation());
+                                $this->arg('sharelocation') : $this->scoped->shareLocation());
                 $this->elementEnd('li');
             }
             Event::handle('EndProfileFormData', array($this));
@@ -161,14 +159,14 @@ class ProfilesettingsAction extends AccountSettingsAction
             $this->input('tags', _('Tags'),
                          ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()),
                          // TRANS: Tooltip for field label in form for profile settings.
-                         _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated'));
+                         _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated.'));
             $this->elementEnd('li');
             $this->elementStart('li');
             $language = common_language();
             // TRANS: Dropdownlist label in form for profile settings.
             $this->dropdown('language', _('Language'),
                          // TRANS: Tooltip for dropdown list label in form for profile settings.
-                            get_nice_language_list(), _('Preferred language'),
+                            get_nice_language_list(), _('Preferred language.'),
                             false, $language);
             $this->elementEnd('li');
             $timezone = common_timezone();
@@ -191,7 +189,27 @@ class ProfilesettingsAction extends AccountSettingsAction
                             ($this->arg('autosubscribe')) ?
                             $this->boolean('autosubscribe') : $user->autosubscribe);
             $this->elementEnd('li');
+            $this->elementStart('li');
+            $this->dropdown('subscribe_policy',
+                            // TRANS: Dropdown field label on profile settings, for what policies to apply when someone else tries to subscribe to your updates.
+                            _('Subscription policy'),
+                            // TRANS: Dropdown field option for following policy.
+                            array(User::SUBSCRIBE_POLICY_OPEN     => _('Let anyone follow me'),
+                                  // TRANS: Dropdown field option for following policy.
+                                  User::SUBSCRIBE_POLICY_MODERATE => _('Ask me first')),
+                            // TRANS: Dropdown field title on group edit form.
+                            _('Whether other users need your permission to follow your updates.'),
+                            false,
+                            (empty($user->subscribe_policy)) ? User::SUBSCRIBE_POLICY_OPEN : $user->subscribe_policy);
+            $this->elementEnd('li');
         }
+        $this->elementStart('li');
+        $this->checkbox('private_stream',
+                        // TRANS: Checkbox label in profile settings.
+                        _('Make updates visible only to my followers'),
+                        ($this->arg('private_stream')) ?
+                        $this->boolean('private_stream') : $user->private_stream);
+        $this->elementEnd('li');
         $this->elementEnd('ul');
         // TRANS: Button to save input in profile settings.
         $this->submit('save', _m('BUTTON','Save'));
@@ -233,6 +251,8 @@ class ProfilesettingsAction extends AccountSettingsAction
             $bio = $this->trimmed('bio');
             $location = $this->trimmed('location');
             $autosubscribe = $this->boolean('autosubscribe');
+            $subscribe_policy = $this->trimmed('subscribe_policy');
+            $private_stream = $this->boolean('private_stream');
             $language = $this->trimmed('language');
             $timezone = $this->trimmed('timezone');
             $tagstring = $this->trimmed('tags');
@@ -278,18 +298,24 @@ class ProfilesettingsAction extends AccountSettingsAction
                 return;
             }
 
-            if ($tagstring) {
-                $tags = array_map('common_canonical_tag', preg_split('/[\s,]+/', $tagstring));
-            } else {
-                $tags = array();
-            }
+            $tags = array();
+            $tag_priv = array();
+            if (is_string($tagstring) && strlen($tagstring) > 0) {
 
-            foreach ($tags as $tag) {
-                if (!common_valid_profile_tag($tag)) {
-                    // TRANS: Validation error in form for profile settings.
-                    // TRANS: %s is an invalid tag.
-                    $this->showForm(sprintf(_('Invalid tag: "%s"'), $tag));
-                    return;
+                $tags = preg_split('/[\s,]+/', $tagstring);
+
+                foreach ($tags as &$tag) {
+                    $private = @$tag[0] === '.';
+
+                    $tag = common_canonical_tag($tag);
+                    if (!common_valid_profile_tag($tag)) {
+                        // TRANS: Validation error in form for profile settings.
+                        // TRANS: %s is an invalid tag.
+                        $this->showForm(sprintf(_('Invalid tag: "%s".'), $tag));
+                        return;
+                    }
+
+                    $tag_priv[$tag] = $private;
                 }
             }
 
@@ -332,11 +358,15 @@ class ProfilesettingsAction extends AccountSettingsAction
             }
 
             // XXX: XOR
-            if ($user->autosubscribe ^ $autosubscribe) {
+            if (($user->autosubscribe ^ $autosubscribe) ||
+                ($user->private_stream ^ $private_stream) ||
+                ($user->subscribe_policy != $subscribe_policy)) {
 
                 $original = clone($user);
 
-                $user->autosubscribe = $autosubscribe;
+                $user->autosubscribe    = $autosubscribe;
+                $user->private_stream   = $private_stream;
+                $user->subscribe_policy = $subscribe_policy;
 
                 $result = $user->update($original);
 
@@ -344,7 +374,7 @@ class ProfilesettingsAction extends AccountSettingsAction
                     common_log_db_error($user, 'UPDATE', __FILE__);
                     // TRANS: Server error thrown when user profile settings could not be updated to
                     // TRANS: automatically subscribe to any subscriber.
-                    $this->serverError(_('Could not update user for autosubscribe.'));
+                    $this->serverError(_('Could not update user for autosubscribe or subscribe_policy.'));
                     return;
                 }
             }
@@ -379,7 +409,7 @@ class ProfilesettingsAction extends AccountSettingsAction
 
                 $exists = false;
 
-                $prefs = User_location_prefs::staticGet('user_id', $user->id);
+                $prefs = User_location_prefs::getKV('user_id', $user->id);
 
                 if (empty($prefs)) {
                     $prefs = new User_location_prefs();
@@ -420,7 +450,7 @@ class ProfilesettingsAction extends AccountSettingsAction
             }
 
             // Set the user tags
-            $result = $user->setSelfTags($tags);
+            $result = $user->setSelfTags($tags, $tag_priv);
 
             if (!$result) {
                 // TRANS: Server error thrown when user profile settings tags could not be saved.
@@ -441,7 +471,7 @@ class ProfilesettingsAction extends AccountSettingsAction
     function nicknameExists($nickname)
     {
         $user = common_current_user();
-        $other = User::staticGet('nickname', $nickname);
+        $other = User::getKV('nickname', $nickname);
         if (!$other) {
             return false;
         } else {
@@ -454,6 +484,9 @@ class ProfilesettingsAction extends AccountSettingsAction
 
         $this->elementStart('div', array('id' => 'aside_primary',
                                          'class' => 'aside'));
+
+        $this->elementStart('div', array('id' => 'account_actions',
+                                         'class' => 'section'));
         $this->elementStart('ul');
         if (Event::handle('StartProfileSettingsActions', array($this))) {
             if ($user->hasRight(Right::BACKUPACCOUNT)) {
@@ -484,5 +517,6 @@ class ProfilesettingsAction extends AccountSettingsAction
         }
         $this->elementEnd('ul');
         $this->elementEnd('div');
+        $this->elementEnd('div');
     }
 }