diff --git a/boot.php b/boot.php
index 9e4c8f0552..2628c0f3f1 100644
--- a/boot.php
+++ b/boot.php
@@ -11,7 +11,7 @@ require_once('include/cache.php');
require_once('library/Mobile_Detect/Mobile_Detect.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
-define ( 'FRIENDICA_VERSION', '3.0.1516' );
+define ( 'FRIENDICA_VERSION', '3.0.1517' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1156 );
diff --git a/doc/Home.md b/doc/Home.md
index 30efc93f7d..1df74b5f26 100644
--- a/doc/Home.md
+++ b/doc/Home.md
@@ -6,6 +6,8 @@ Friendica Documentation and Resources
* [Account Basics](help/Account-Basics)
* [New User Quick Start](help/guide)
+* [Creating posts](help/Text_editor)
+* [Comment, sort and delete posts](help/Text_comment)
* [Profiles](help/Profiles)
* [Connectors](help/Connectors)
* [Making Friends](help/Making-Friends)
diff --git a/doc/Text_comment.md b/doc/Text_comment.md
new file mode 100644
index 0000000000..2aac568378
--- /dev/null
+++ b/doc/Text_comment.md
@@ -0,0 +1,44 @@
+Comment, sort and delete posts
+==============
+
+* [Home](help)
+
+Here you can find an overview of the different ways to comment and sort existing posts. Attention: we've used the "diabook" theme. If you're using another theme, some of the icons may be different.
+
+
+
+The different icons
+
+
This symbol is used to indicate that you like the post. Click it twice to undo your choice.
+
+Darkzero
+
+(incl. more "zero"-themes, slackr, comix, easterbunny, facepark)
+
+Dispy
(incl. smoothly, testbubble)
+
+Frost Mobile
diff --git a/doc/Text_editor.md b/doc/Text_editor.md
new file mode 100644
index 0000000000..fa4393f009
--- /dev/null
+++ b/doc/Text_editor.md
@@ -0,0 +1,40 @@
+Creating posts
+=================
+
+* [Home](help)
+
+Here you can find an overview of the different ways to create and edit your post. Attention: we've used the "diabook" theme. If you're using another theme, some of the icons may be different.
+
+
+
+The different iconss
+
+
+
+(incl. more "zero"-themes, comix, easterbunny, facepark, slackr
+
+Darkbubble
(inkl. smoothly, testbubble)
+
+Frost
+
+Vier
(inkl. dispy)
diff --git a/doc/de/README.md b/doc/de/README.md
index a42b2dde07..5dc32ee76e 100644
--- a/doc/de/README.md
+++ b/doc/de/README.md
@@ -5,4 +5,4 @@ Friendica - doc - german
Hier findest du die deutsche Version der Friendica-Hilfedateien. Es handelt sich um eine selbst erstellte, öffentlich freigegebene Arbeit mit dem Ziel, Friendica durch deutsche Hilfedateien für weitere Personen zugänglich zu machen, die dem Englischen nicht ausreichend mächtig sind.
-Die Daten basieren auf dem offiziellen Friendica-Github https://github.com/friendica/friendica (Stand 12.10.2012).
+Die Daten basieren auf dem offiziellen Friendica-Github https://github.com/friendica/friendica (Stand: 03.11.12)
diff --git a/doc/de/img/camera.png b/doc/img/camera.png
similarity index 100%
rename from doc/de/img/camera.png
rename to doc/img/camera.png
diff --git a/doc/de/img/chain.png b/doc/img/chain.png
similarity index 100%
rename from doc/de/img/chain.png
rename to doc/img/chain.png
diff --git a/doc/de/img/darkbubble.png b/doc/img/darkbubble.png
similarity index 100%
rename from doc/de/img/darkbubble.png
rename to doc/img/darkbubble.png
diff --git a/doc/de/img/darkzero.png b/doc/img/darkzero.png
similarity index 100%
rename from doc/de/img/darkzero.png
rename to doc/img/darkzero.png
diff --git a/doc/de/img/diabook.png b/doc/img/diabook.png
similarity index 100%
rename from doc/de/img/diabook.png
rename to doc/img/diabook.png
diff --git a/doc/de/img/dispy.png b/doc/img/dispy.png
similarity index 100%
rename from doc/de/img/dispy.png
rename to doc/img/dispy.png
diff --git a/doc/de/img/editor_darkbubble.png b/doc/img/editor_darkbubble.png
similarity index 100%
rename from doc/de/img/editor_darkbubble.png
rename to doc/img/editor_darkbubble.png
diff --git a/doc/de/img/editor_frost.png b/doc/img/editor_frost.png
similarity index 100%
rename from doc/de/img/editor_frost.png
rename to doc/img/editor_frost.png
diff --git a/doc/de/img/editor_vier.png b/doc/img/editor_vier.png
similarity index 100%
rename from doc/de/img/editor_vier.png
rename to doc/img/editor_vier.png
diff --git a/doc/de/img/editor_zero.png b/doc/img/editor_zero.png
similarity index 100%
rename from doc/de/img/editor_zero.png
rename to doc/img/editor_zero.png
diff --git a/doc/de/img/friendica_editor.png b/doc/img/friendica_editor.png
similarity index 100%
rename from doc/de/img/friendica_editor.png
rename to doc/img/friendica_editor.png
diff --git a/doc/de/img/frost.png b/doc/img/frost.png
similarity index 100%
rename from doc/de/img/frost.png
rename to doc/img/frost.png
diff --git a/doc/de/img/globe.png b/doc/img/globe.png
similarity index 100%
rename from doc/de/img/globe.png
rename to doc/img/globe.png
diff --git a/doc/de/img/mic.png b/doc/img/mic.png
similarity index 100%
rename from doc/de/img/mic.png
rename to doc/img/mic.png
diff --git a/doc/de/img/padlock.png b/doc/img/padlock.png
similarity index 100%
rename from doc/de/img/padlock.png
rename to doc/img/padlock.png
diff --git a/doc/de/img/paper_clip.png b/doc/img/paper_clip.png
similarity index 100%
rename from doc/de/img/paper_clip.png
rename to doc/img/paper_clip.png
diff --git a/doc/de/img/post_categorize.png b/doc/img/post_categorize.png
similarity index 100%
rename from doc/de/img/post_categorize.png
rename to doc/img/post_categorize.png
diff --git a/doc/de/img/post_choose.png b/doc/img/post_choose.png
similarity index 100%
rename from doc/de/img/post_choose.png
rename to doc/img/post_choose.png
diff --git a/doc/de/img/post_delete.png b/doc/img/post_delete.png
similarity index 100%
rename from doc/de/img/post_delete.png
rename to doc/img/post_delete.png
diff --git a/doc/de/img/post_link.png b/doc/img/post_link.png
similarity index 100%
rename from doc/de/img/post_link.png
rename to doc/img/post_link.png
diff --git a/doc/de/img/post_mark.png b/doc/img/post_mark.png
similarity index 100%
rename from doc/de/img/post_mark.png
rename to doc/img/post_mark.png
diff --git a/doc/de/img/post_share.png b/doc/img/post_share.png
similarity index 100%
rename from doc/de/img/post_share.png
rename to doc/img/post_share.png
diff --git a/doc/de/img/post_tag.png b/doc/img/post_tag.png
similarity index 100%
rename from doc/de/img/post_tag.png
rename to doc/img/post_tag.png
diff --git a/doc/de/img/post_thumbs_down.png b/doc/img/post_thumbs_down.png
similarity index 100%
rename from doc/de/img/post_thumbs_down.png
rename to doc/img/post_thumbs_down.png
diff --git a/doc/de/img/post_thumbs_up.png b/doc/img/post_thumbs_up.png
similarity index 100%
rename from doc/de/img/post_thumbs_up.png
rename to doc/img/post_thumbs_up.png
diff --git a/doc/de/img/posts_define.png b/doc/img/posts_define.png
similarity index 100%
rename from doc/de/img/posts_define.png
rename to doc/img/posts_define.png
diff --git a/doc/de/img/video.png b/doc/img/video.png
similarity index 100%
rename from doc/de/img/video.png
rename to doc/img/video.png
diff --git a/include/Contact.php b/include/Contact.php
index ecc271a8e0..d39d7a28b6 100644
--- a/include/Contact.php
+++ b/include/Contact.php
@@ -22,7 +22,8 @@ function user_remove($uid) {
$r[0]['nickname']
);
- q("DELETE FROM `contact` WHERE `uid` = %d", intval($uid));
+ // don't delete yet, will be done later when contacts have deleted my stuff
+ // q("DELETE FROM `contact` WHERE `uid` = %d", intval($uid));
q("DELETE FROM `gcign` WHERE `uid` = %d", intval($uid));
q("DELETE FROM `group` WHERE `uid` = %d", intval($uid));
q("DELETE FROM `group_member` WHERE `uid` = %d", intval($uid));
@@ -41,7 +42,10 @@ function user_remove($uid) {
q("DELETE FROM `pconfig` WHERE `uid` = %d", intval($uid));
q("DELETE FROM `search` WHERE `uid` = %d", intval($uid));
q("DELETE FROM `spam` WHERE `uid` = %d", intval($uid));
- q("DELETE FROM `user` WHERE `uid` = %d", intval($uid));
+ // don't delete yet, will be done later when contacts have deleted my stuff
+ // q("DELETE FROM `user` WHERE `uid` = %d", intval($uid));
+ q("UPDATE `user` SET `account_removed` = 1, `account_expires_on` = UTC_TIMESTAMP() WHERE `uid` = %d", intval($uid));
+ proc_run('php', "include/notifier.php", "removeme", $uid);
if($uid == local_user()) {
unset($_SESSION['authenticated']);
unset($_SESSION['uid']);
@@ -165,6 +169,7 @@ function mark_for_death($contact) {
q("update contact set `archive` = 1 where id = %d limit 1",
intval($contact['id'])
);
+ q("UPDATE `item` SET `private` = 2 WHERE `contact-id` = %d AND `uid` = %d", intval($contact['id']), intval($contact['uid']));
//contact_remove($contact['id']);
diff --git a/include/api.php b/include/api.php
index fb03b30a0a..8a93093c70 100644
--- a/include/api.php
+++ b/include/api.php
@@ -74,7 +74,7 @@
// process normal login request
$r = q("SELECT * FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' )
- AND `password` = '%s' AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1",
+ AND `password` = '%s' AND `blocked` = 0 AND `account_expired` = 0 AND `account_removed` = 0 AND `verified` = 1 LIMIT 1",
dbesc(trim($user)),
dbesc(trim($user)),
dbesc($encrypted)
diff --git a/include/auth.php b/include/auth.php
index c4f1f08651..523de88ce9 100644
--- a/include/auth.php
+++ b/include/auth.php
@@ -59,7 +59,7 @@ if((isset($_SESSION)) && (x($_SESSION,'authenticated')) && ((! (x($_POST,'auth-p
}
$r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey`
- FROM `user` WHERE `uid` = %d AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1",
+ FROM `user` WHERE `uid` = %d AND `blocked` = 0 AND `account_expired` = 0 AND `account_removed` = 0 AND `verified` = 1 LIMIT 1",
intval($_SESSION['uid'])
);
@@ -147,7 +147,7 @@ else {
$r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey`
FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' )
- AND `password` = '%s' AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1",
+ AND `password` = '%s' AND `blocked` = 0 AND `account_expired` = 0 AND `account_removed` = 0 AND `verified` = 1 LIMIT 1",
dbesc(trim($_POST['username'])),
dbesc(trim($_POST['username'])),
dbesc($encrypted)
diff --git a/include/delivery.php b/include/delivery.php
index 14226e4fba..613453bc7a 100644
--- a/include/delivery.php
+++ b/include/delivery.php
@@ -323,7 +323,7 @@ function delivery_run($argv, $argc){
WHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `contact`.`network` = '%s' AND `user`.`nickname` = '%s'
$sql_extra
- AND `user`.`account_expired` = 0 LIMIT 1",
+ AND `user`.`account_expired` = 0 AND `user`.`account_removed` = 0 LIMIT 1",
dbesc(NETWORK_DFRN),
dbesc($nickname)
);
diff --git a/include/diaspora.php b/include/diaspora.php
index c5b724509c..f645aeb39b 100755
--- a/include/diaspora.php
+++ b/include/diaspora.php
@@ -16,7 +16,7 @@ function diaspora_dispatch_public($msg) {
return;
}
- $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' ) AND `account_expired` = 0 ",
+ $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' ) AND `account_expired` = 0 AND `account_removed` = 0 ",
dbesc(NETWORK_DIASPORA),
dbesc($msg['author'])
);
diff --git a/include/notifier.php b/include/notifier.php
index 171b55fc37..a999c3297b 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -134,6 +134,20 @@ function notifier_run($argv, $argc){
$recipients[] = $suggest[0]['cid'];
$item = $suggest[0];
}
+ elseif($cmd === 'removeme') {
+ $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($item_id));
+ $user = $r[0];
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1", intval($item_id));
+ $self = $r[0];
+ $r = q("SELECT * FROM `contact` WHERE `self` = 0 AND `uid` = %d", intval($item_id));
+ if(! count($r))
+ return;
+ require_once('include/Contact.php');
+ foreach($r as $contact) {
+ terminate_friendship($user, $self, $contact);
+ }
+ return;
+ }
else {
// find ancestors
@@ -575,7 +589,7 @@ function notifier_run($argv, $argc){
AND `contact`.`pending` = 0
AND `contact`.`network` = '%s' AND `user`.`nickname` = '%s'
$sql_extra
- AND `user`.`account_expired` = 0 LIMIT 1",
+ AND `user`.`account_expired` = 0 AND `user`.`account_removed` = 0 LIMIT 1",
dbesc(NETWORK_DFRN),
dbesc($nickname)
);
diff --git a/include/oauth.php b/include/oauth.php
index 103d4c2fa9..28ac4428f0 100644
--- a/include/oauth.php
+++ b/include/oauth.php
@@ -133,7 +133,7 @@ class FKOAuth1 extends OAuthServer {
function loginUser($uid){
logger("FKOAuth1::loginUser $uid");
$a = get_app();
- $r = q("SELECT * FROM `user` WHERE uid=%d AND `blocked` = 0 AND `account_expired` = 0 AND `verified` = 1 LIMIT 1",
+ $r = q("SELECT * FROM `user` WHERE uid=%d AND `blocked` = 0 AND `account_expired` = 0 AND `account_removed` = 0 AND `verified` = 1 LIMIT 1",
intval($uid)
);
if(count($r)){
diff --git a/include/poller.php b/include/poller.php
index fefc9b381d..1af23eb13b 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -67,6 +67,16 @@ function poller_run($argv, $argc){
q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0
AND `account_expires_on` != '0000-00-00 00:00:00'
AND `account_expires_on` < UTC_TIMESTAMP() ");
+
+ // delete user and contact records for recently removed accounts
+
+ $r = q("SELECT * FROM `user` WHERE `account_removed` = 1 AND `account_expires_on` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
+ if ($r) {
+ foreach($r as $user) {
+ q("DELETE FROM `contact` WHERE `uid` = %d", intval($user['uid']));
+ q("DELETE FROM `user` WHERE `uid` = %d", intval($user['uid']));
+ }
+ }
$abandon_days = intval(get_config('system','account_abandon_days'));
if($abandon_days < 1)
@@ -154,7 +164,7 @@ function poller_run($argv, $argc){
$sql_extra
AND `self` = 0 AND `contact`.`blocked` = 0 AND `contact`.`readonly` = 0
AND `contact`.`archive` = 0
- AND `user`.`account_expired` = 0 $abandon_sql ORDER BY RAND()",
+ AND `user`.`account_expired` = 0 AND `user`.`account_removed` = 0 $abandon_sql ORDER BY RAND()",
intval(CONTACT_IS_SHARING),
intval(CONTACT_IS_FRIEND),
dbesc(NETWORK_DIASPORA),
diff --git a/mod/contacts.php b/mod/contacts.php
index 8a36fa4cb6..7668b45b3a 100644
--- a/mod/contacts.php
+++ b/mod/contacts.php
@@ -211,6 +211,9 @@ function contacts_content(&$a) {
intval($contact_id),
intval(local_user())
);
+ if ($archived) {
+ q("UPDATE `item` SET `private` = 2 WHERE `contact-id` = %d AND `uid` = %d", intval($contact_id), intval(local_user()));
+ }
if($r) {
//notice( t('Contact has been ') . (($archived) ? t('archived') : t('unarchived')) . EOL );
info( (($archived) ? t('Contact has been archived') : t('Contact has been unarchived')) . EOL );
diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php
index e55da55722..476212b7af 100644
--- a/mod/dfrn_notify.php
+++ b/mod/dfrn_notify.php
@@ -77,7 +77,7 @@ function dfrn_notify_post(&$a) {
FROM `contact`
LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid`
WHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0
- AND `user`.`nickname` = '%s' AND `user`.`account_expired` = 0 $sql_extra LIMIT 1",
+ AND `user`.`nickname` = '%s' AND `user`.`account_expired` = 0 AND `user`.`account_removed` = 0 $sql_extra LIMIT 1",
dbesc($a->argv[1])
);
@@ -220,7 +220,7 @@ function dfrn_notify_content(&$a) {
$r = q("SELECT `contact`.*, `user`.`nickname`, `user`.`page-flags` FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid`
WHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `user`.`nickname` = '%s'
- AND `user`.`account_expired` = 0 $sql_extra LIMIT 1",
+ AND `user`.`account_expired` = 0 AND `user`.`account_removed` = 0 $sql_extra LIMIT 1",
dbesc($a->argv[1])
);
diff --git a/mod/home.php b/mod/home.php
index 6ed36b7638..76318b157c 100644
--- a/mod/home.php
+++ b/mod/home.php
@@ -25,9 +25,10 @@ function home_content(&$a) {
if(x($_SESSION,'mobile-theme'))
unset($_SESSION['mobile-theme']);
- $o .= '