X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Fprofilesettings.php;h=81e589c6e01649e108d5300ddadc2358bde2b06f;hb=c3f2d195f934c4deff91d30640ec703cb576e55d;hp=0474c693751509e135609866e23eae1516aeea4b;hpb=9eca4e08745be9375048577bee2078012aa5cd21;p=quix0rs-gnu-social.git diff --git a/actions/profilesettings.php b/actions/profilesettings.php index 0474c69375..81e589c6e0 100644 --- a/actions/profilesettings.php +++ b/actions/profilesettings.php @@ -35,6 +35,8 @@ class ProfilesettingsAction extends SettingsAction { $this->show_avatar_form(); common_element('h2', NULL, _('Change password')); $this->show_password_form(); + common_element('h2', NULL, _('Delete my account')); + $this->show_delete_form(); common_show_footer(); } @@ -54,7 +56,10 @@ class ProfilesettingsAction extends SettingsAction { $this->upload_avatar(); } else if ($this->arg('changepass')) { $this->change_password(); + } else if ($this->arg('deleteaccount')) { + $this->delete_account(); } + } function show_settings_form() { @@ -67,10 +72,9 @@ class ProfilesettingsAction extends SettingsAction { 'action' => common_local_url('profilesettings'))); common_hidden('token', common_session_token()); - - - + # too much common patterns here... abstractable? + common_input('nickname', _('Nickname'), ($this->arg('nickname')) ? $this->arg('nickname') : $profile->nickname, _('1-64 lowercase letters or numbers, no punctuation or spaces')); @@ -85,6 +89,9 @@ class ProfilesettingsAction extends SettingsAction { common_input('location', _('Location'), ($this->arg('location')) ? $this->arg('location') : $profile->location, _('Where you are, like "City, State (or Region), Country"')); + common_input('tags', _('Tags'), + ($this->arg('tags')) ? $this->arg('tags') : implode(' ', $user->getSelfTags()), + _('Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated')); $language = common_language(); common_dropdown('language', _('Language'), get_nice_language_list(), _('Preferred language'), TRUE, $language); @@ -110,6 +117,12 @@ class ProfilesettingsAction extends SettingsAction { $user = common_current_user(); $profile = $user->getProfile(); + if (!$profile) { + common_log_db_error($user, 'SELECT', __FILE__); + $this->server_error(_('User without matching profile')); + return; + } + $original = $profile->getOriginalAvatar(); @@ -179,6 +192,75 @@ class ProfilesettingsAction extends SettingsAction { common_element_end('form'); } + + function show_feeds_list($feeds) { + common_element_start('div', array('class' => 'feedsdel')); + common_element('p', null, 'Feeds:'); + common_element_start('ul', array('class' => 'xoxo')); + + foreach ($feeds as $key => $value) { + $this->common_feed_item($feeds[$key]); + } + common_element_end('ul'); + common_element_end('div'); + } + + function common_feed_item($feed) { + $user = common_current_user(); + $nickname = $user->nickname; + + switch($feed['item']) { + case 'notices': default: + $feed_classname = $feed['type']; + $feed_mimetype = "application/".$feed['type']."+xml"; + $feed_title = "$nickname's ".$feed['version']." notice feed"; + $feed['textContent'] = "RSS"; + break; + + case 'foaf': + $feed_classname = "foaf"; + $feed_mimetype = "application/".$feed['type']."+xml"; + $feed_title = "$nickname's FOAF file"; + $feed['textContent'] = "FOAF"; + break; + } + common_element_start('li'); + common_element('a', array('href' => $feed['href'], + 'class' => $feed_classname, + 'type' => $feed_mimetype, + 'title' => $feed_title), + $feed['textContent']); + common_element_end('li'); + } + + function show_delete_form() { + $user = common_current_user(); + $notices = DB_DataObject::factory('notice'); + $notices->profile_id = $user->id; + $notice_count = (int) $notices->count(); + + common_element_start('form', array('method' => 'POST', + 'id' => 'delete', + 'action' => + common_local_url('profilesettings'))); + + common_hidden('token', common_session_token()); + common_element('p', null, "You can copy your notices and contacts by saving the two links belowxbefore deleting your account. Be careful, this operation cannot be undone."); + + + $this->show_feeds_list(array(0=>array('href'=>common_local_url('userrss', array('limit' => $notice_count, 'nickname' => $user->nickname)), + 'type' => 'rss', + 'version' => 'RSS 1.0', + 'item' => 'notices'), + 1=>array('href'=>common_local_url('foaf',array('nickname' => $user->nickname)), + 'type' => 'rdf', + 'version' => 'FOAF', + 'item' => 'foaf'))); + + common_submit('deleteaccount', _('Delete my account')); + common_element_end('form'); + } + function save_profile() { $nickname = $this->trimmed('nickname'); $fullname = $this->trimmed('fullname'); @@ -188,7 +270,8 @@ class ProfilesettingsAction extends SettingsAction { $autosubscribe = $this->boolean('autosubscribe'); $language = $this->trimmed('language'); $timezone = $this->trimmed('timezone'); - + $tagstring = $this->trimmed('tags'); + # Some validation if (!Validate::string($nickname, array('min_length' => 1, @@ -218,10 +301,24 @@ class ProfilesettingsAction extends SettingsAction { } else if ($this->nickname_exists($nickname)) { $this->show_form(_('Nickname already in use. Try another one.')); return; - } else if (!is_null($language) && strlen($language) > 50) { - $this->show_form(_('Language is too long (max 50 chars).')); + } else if (!is_null($language) && strlen($language) > 50) { + $this->show_form(_('Language is too long (max 50 chars).')); + return; } + if ($tagstring) { + $tags = array_map('common_canonical_tag', preg_split('/[\s,]+/', $tagstring)); + } else { + $tags = array(); + } + + foreach ($tags as $tag) { + if (!common_valid_profile_tag($tag)) { + $this->show_form(sprintf(_('Invalid tag: "%s"'), $tag)); + return; + } + } + $user = common_current_user(); $user->query('BEGIN'); @@ -294,6 +391,15 @@ class ProfilesettingsAction extends SettingsAction { return; } + # Set the user tags + + $result = $user->setSelfTags($tags); + + if (!$result) { + common_server_error(_('Couldn\'t save tags.')); + return; + } + $user->query('COMMIT'); common_broadcast_profile($profile); @@ -402,4 +508,23 @@ class ProfilesettingsAction extends SettingsAction { $this->show_form(_('Password saved.'), true); } + function delete_account() { + + $user = common_current_user(); + assert(!is_null($user)); # should already be checked + + // delete avatar (profile_id and filename) + // delete fave (user_id) + // delete message (from_profile, to_profile) + // delete notice (profile_id) (also delete from notice_source and notice_tag) + // delete notice_inbox (user_id) + // delete subscription (subscriber, subscribed) + // delete user (id) + // delete user_openid (user_id) + // delete profile (id) + // delete tags tables (to verify) + // delete all the users notices + + $this->show_form(_('Your account has been deleted.'), true); + } }