]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/profilesettings.php
Merge branch '0.9.x' into 1.0.x
[quix0rs-gnu-social.git] / actions / profilesettings.php
index 161e35b111f450ed7ce14ef5d3e94f79bac9e0f3..e1d686ca292678cf2790683aea0fbd4266fc3f24 100644 (file)
@@ -33,7 +33,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
     exit(1);
 }
 
-require_once INSTALLDIR.'/lib/accountsettingsaction.php';
+
 
 /**
  * Change profile settings
@@ -47,16 +47,16 @@ require_once INSTALLDIR.'/lib/accountsettingsaction.php';
  * @link     http://status.net/
  */
 
-class ProfilesettingsAction extends AccountSettingsAction
+class ProfilesettingsAction extends SettingsAction
 {
     /**
      * Title of the page
      *
      * @return string Title of the page
      */
-
     function title()
     {
+        // TRANS: Page title for profile settings.
         return _('Profile settings');
     }
 
@@ -65,9 +65,9 @@ class ProfilesettingsAction extends AccountSettingsAction
      *
      * @return instructions for use
      */
-
     function getInstructions()
     {
+        // TRANS: Usage instructions for profile settings.
         return _('You can update your personal profile info here '.
                  'so people know more about you.');
     }
@@ -85,7 +85,6 @@ class ProfilesettingsAction extends AccountSettingsAction
      *
      * @return void
      */
-
     function showContent()
     {
         $user = common_current_user();
@@ -96,6 +95,7 @@ class ProfilesettingsAction extends AccountSettingsAction
                                           'class' => 'form_settings',
                                           'action' => common_local_url('profilesettings')));
         $this->elementStart('fieldset');
+        // TRANS: Profile settings form legend.
         $this->element('legend', null, _('Profile information'));
         $this->hidden('token', common_session_token());
 
@@ -103,38 +103,54 @@ class ProfilesettingsAction extends AccountSettingsAction
         $this->elementStart('ul', 'form_data');
         if (Event::handle('StartProfileFormData', array($this))) {
             $this->elementStart('li');
+            // TRANS: Field label in form for profile settings.
             $this->input('nickname', _('Nickname'),
                          ($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname,
-                         _('1-64 lowercase letters or numbers, no punctuation or spaces'));
+                         // TRANS: Tooltip for field label in form for profile settings.
+                         _('1-64 lowercase letters or numbers, no punctuation or spaces.'));
             $this->elementEnd('li');
             $this->elementStart('li');
+            // TRANS: Field label in form for profile settings.
             $this->input('fullname', _('Full name'),
                          ($this->arg('fullname')) ? $this->arg('fullname') : $profile->fullname);
             $this->elementEnd('li');
             $this->elementStart('li');
+            // TRANS: Field label in form for profile settings.
             $this->input('homepage', _('Homepage'),
                          ($this->arg('homepage')) ? $this->arg('homepage') : $profile->homepage,
-                         _('URL of your homepage, blog, or profile on another site'));
+                         // TRANS: Tooltip for field label in form for profile settings.
+                         _('URL of your homepage, blog, or profile on another site.'));
             $this->elementEnd('li');
             $this->elementStart('li');
             $maxBio = Profile::maxBio();
             if ($maxBio > 0) {
-                $bioInstr = sprintf(_('Describe yourself and your interests in %d chars'),
+                // 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',
+                                       $maxBio),
                                     $maxBio);
             } else {
+                // TRANS: Tooltip for field label in form for profile settings.
                 $bioInstr = _('Describe yourself and your interests');
             }
+            // 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,
                             $bioInstr);
             $this->elementEnd('li');
             $this->elementStart('li');
+            // TRANS: Field label in form for profile settings.
             $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"'));
             $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());
@@ -142,14 +158,18 @@ class ProfilesettingsAction extends AccountSettingsAction
             }
             Event::handle('EndProfileFormData', array($this));
             $this->elementStart('li');
+            // TRANS: Field label in form for profile settings.
             $this->input('tags', _('Tags'),
                          ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()),
-                         _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated'));
+                         // TRANS: Tooltip for field label in form for profile settings.
+                         _('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'),
-                            get_nice_language_list(), _('Preferred language'),
+                         // TRANS: Tooltip for dropdown list label in form for profile settings.
+                            get_nice_language_list(), _('Preferred language.'),
                             false, $language);
             $this->elementEnd('li');
             $timezone = common_timezone();
@@ -158,20 +178,24 @@ class ProfilesettingsAction extends AccountSettingsAction
                 $timezones[$v] = $v;
             }
             $this->elementStart('li');
+            // TRANS: Dropdownlist label in form for profile settings.
             $this->dropdown('timezone', _('Timezone'),
+                         // TRANS: Tooltip for dropdown list label in form for profile settings.
                             $timezones, _('What timezone are you normally in?'),
                             true, $timezone);
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->checkbox('autosubscribe',
+                            // TRANS: Checkbox label in form for profile settings.
                             _('Automatically subscribe to whoever '.
-                              'subscribes to me (best for non-humans)'),
+                              'subscribes to me (best for non-humans).'),
                             ($this->arg('autosubscribe')) ?
                             $this->boolean('autosubscribe') : $user->autosubscribe);
             $this->elementEnd('li');
         }
         $this->elementEnd('ul');
-        $this->submit('save', _('Save'));
+        // TRANS: Button to save input in profile settings.
+        $this->submit('save', _m('BUTTON','Save'));
 
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
@@ -185,12 +209,12 @@ class ProfilesettingsAction extends AccountSettingsAction
      *
      * @return void
      */
-
     function handlePost()
     {
         // CSRF protection
         $token = $this->trimmed('token');
         if (!$token || $token != common_session_token()) {
+            // TRANS: Form validation error.
             $this->showForm(_('There was a problem with your session token. '.
                               'Try again, please.'));
             return;
@@ -198,7 +222,13 @@ class ProfilesettingsAction extends AccountSettingsAction
 
         if (Event::handle('StartProfileSaveForm', array($this))) {
 
-            $nickname = $this->trimmed('nickname');
+            try {
+                $nickname = Nickname::normalize($this->trimmed('nickname'));
+            } catch (NicknameException $e) {
+                $this->showForm($e->getMessage());
+                return;
+            }
+
             $fullname = $this->trimmed('fullname');
             $homepage = $this->trimmed('homepage');
             $bio = $this->trimmed('bio');
@@ -209,36 +239,43 @@ class ProfilesettingsAction extends AccountSettingsAction
             $tagstring = $this->trimmed('tags');
 
             // Some validation
-            if (!Validate::string($nickname, array('min_length' => 1,
-                                                   'max_length' => 64,
-                                                   'format' => NICKNAME_FMT))) {
-                $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
-                return;
-            } else if (!User::allowed_nickname($nickname)) {
+            if (!User::allowed_nickname($nickname)) {
+                // TRANS: Validation error in form for profile settings.
                 $this->showForm(_('Not a valid nickname.'));
                 return;
             } else if (!is_null($homepage) && (strlen($homepage) > 0) &&
                        !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) {
+                // TRANS: Validation error in form for profile settings.
                 $this->showForm(_('Homepage is not a valid URL.'));
                 return;
             } else if (!is_null($fullname) && mb_strlen($fullname) > 255) {
-                $this->showForm(_('Full name is too long (max 255 chars).'));
+                // TRANS: Validation error in form for profile settings.
+                $this->showForm(_('Full name is too long (maximum 255 characters).'));
                 return;
             } else if (Profile::bioTooLong($bio)) {
-                $this->showForm(sprintf(_('Bio is too long (max %d chars).'),
+                // TRANS: Validation error in form for profile settings.
+                // TRANS: Plural form is used based on the maximum number of allowed
+                // TRANS: characters for the biography (%d).
+                $this->showForm(sprintf(_m('Bio is too long (maximum %d character).',
+                                           'Bio is too long (maximum %d characters).',
+                                           Profile::maxBio()),
                                         Profile::maxBio()));
                 return;
             } else if (!is_null($location) && mb_strlen($location) > 255) {
-                $this->showForm(_('Location is too long (max 255 chars).'));
+                // TRANS: Validation error in form for profile settings.
+                $this->showForm(_('Location is too long (maximum 255 characters).'));
                 return;
             }  else if (is_null($timezone) || !in_array($timezone, DateTimeZone::listIdentifiers())) {
+                // TRANS: Validation error in form for profile settings.
                 $this->showForm(_('Timezone not selected.'));
                 return;
             } else if ($this->nicknameExists($nickname)) {
+                // TRANS: Validation error in form for profile settings.
                 $this->showForm(_('Nickname already in use. Try another one.'));
                 return;
             } else if (!is_null($language) && strlen($language) > 50) {
-                $this->showForm(_('Language is too long (max 50 chars).'));
+                // TRANS: Validation error in form for profile settings.
+                $this->showForm(_('Language is too long (maximum 50 characters).'));
                 return;
             }
 
@@ -250,7 +287,9 @@ class ProfilesettingsAction extends AccountSettingsAction
 
             foreach ($tags as $tag) {
                 if (!common_valid_profile_tag($tag)) {
-                    $this->showForm(sprintf(_('Invalid tag: "%s"'), $tag));
+                    // TRANS: Validation error in form for profile settings.
+                    // TRANS: %s is an invalid tag.
+                    $this->showForm(sprintf(_('Invalid tag: "%s".'), $tag));
                     return;
                 }
             }
@@ -280,7 +319,8 @@ class ProfilesettingsAction extends AccountSettingsAction
 
                 if ($result === false) {
                     common_log_db_error($user, 'UPDATE', __FILE__);
-                    $this->serverError(_('Couldn\'t update user.'));
+                    // TRANS: Server error thrown when user profile settings could not be updated.
+                    $this->serverError(_('Could not update user.'));
                     return;
                 } else {
                     // Re-initialize language environment if it changed
@@ -303,7 +343,9 @@ class ProfilesettingsAction extends AccountSettingsAction
 
                 if ($result === false) {
                     common_log_db_error($user, 'UPDATE', __FILE__);
-                    $this->serverError(_('Couldn\'t update user for autosubscribe.'));
+                    // 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.'));
                     return;
                 }
             }
@@ -360,7 +402,8 @@ class ProfilesettingsAction extends AccountSettingsAction
 
                 if ($result === false) {
                     common_log_db_error($prefs, ($exists) ? 'UPDATE' : 'INSERT', __FILE__);
-                    $this->serverError(_('Couldn\'t save location prefs.'));
+                    // TRANS: Server error thrown when user profile location preference settings could not be updated.
+                    $this->serverError(_('Could not save location prefs.'));
                     return;
                 }
             }
@@ -372,7 +415,8 @@ class ProfilesettingsAction extends AccountSettingsAction
 
             if ($result === false) {
                 common_log_db_error($profile, 'UPDATE', __FILE__);
-                $this->serverError(_('Couldn\'t save profile.'));
+                // TRANS: Server error thrown when user profile settings could not be saved.
+                $this->serverError(_('Could not save profile.'));
                 return;
             }
 
@@ -380,7 +424,8 @@ class ProfilesettingsAction extends AccountSettingsAction
             $result = $user->setSelfTags($tags);
 
             if (!$result) {
-                $this->serverError(_('Couldn\'t save tags.'));
+                // TRANS: Server error thrown when user profile settings tags could not be saved.
+                $this->serverError(_('Could not save tags.'));
                 return;
             }
 
@@ -388,6 +433,7 @@ class ProfilesettingsAction extends AccountSettingsAction
             Event::handle('EndProfileSaveForm', array($this));
             common_broadcast_profile($profile);
 
+            // TRANS: Confirmation shown when user profile settings are saved.
             $this->showForm(_('Settings saved.'), true);
 
         }
@@ -403,4 +449,45 @@ class ProfilesettingsAction extends AccountSettingsAction
             return $other->id != $user->id;
         }
     }
+
+    function showAside() {
+        $user = common_current_user();
+
+        $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)) {
+                $this->elementStart('li');
+                $this->element('a',
+                               array('href' => common_local_url('backupaccount')),
+                               // TRANS: Option in profile settings to create a backup of the account of the currently logged in user.
+                               _('Backup account'));
+                $this->elementEnd('li');
+            }
+            if ($user->hasRight(Right::DELETEACCOUNT)) {
+                $this->elementStart('li');
+                $this->element('a',
+                               array('href' => common_local_url('deleteaccount')),
+                               // TRANS: Option in profile settings to delete the account of the currently logged in user.
+                               _('Delete account'));
+                $this->elementEnd('li');
+            }
+            if ($user->hasRight(Right::RESTOREACCOUNT)) {
+                $this->elementStart('li');
+                $this->element('a',
+                               array('href' => common_local_url('restoreaccount')),
+                               // TRANS: Option in profile settings to restore the account of the currently logged in user from a backup.
+                               _('Restore account'));
+                $this->elementEnd('li');
+            }
+            Event::handle('EndProfileSettingsActions', array($this));
+        }
+        $this->elementEnd('ul');
+        $this->elementEnd('div');
+        $this->elementEnd('div');
+    }
 }