]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/profilesettings.php
generate an etag for shownotice
[quix0rs-gnu-social.git] / actions / profilesettings.php
index 47064c7c398ffc88dc1253f23e8bc1eb12242f67..81e589c6e01649e108d5300ddadc2358bde2b06f 100644 (file)
@@ -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() {
@@ -187,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');
@@ -434,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);
+    }
 }