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. + +diabook + +The different icons + +post_thumbs_up.png This symbol is used to indicate that you like the post. Click it twice to undo your choice.

+ +post_thumbs_down.png This symbol is used to indicate that you dislike the post. Click it twice to undo your choice. +

+ +post_share.png This symbol is used to share a post. A copy of this post will automatically appear in your status editor and add a link to the original post. +

+ +post_mark.png This symbol is used to mark a post. Marked posts will appear on your network page at the "starred" tab (from "star"). Click it twice to undo your choice. +

+ +post_tag.png This symbol is used to tag a post with a self-chosen keyword. When you click at the word, you'll get a list of all posts with this tag. Attention: you can't delete the tag once you've set one. +

+ +post_categorize.png This symbol is used to categorize posts. Choose an existing folder or create a new one. You'll find the created folder on your network page under the "saved folders" tab. +

+ +post_delete.png This symbol is used to delete your own post or to remove a post of another person from your stream. +

+ +post_choose.png This symbol is used to choose more than one post to delete in a single step. After selecting all posts, go to the end of the page and click "Delete Selected Items".

+ +**Symbols of other themes** + +Darkbubble darkbubble.png + +Darkzero darkzero.png + +(incl. more "zero"-themes, slackr, comix, easterbunny, facepark) + +Dispy dispy.png (incl. smoothly, testbubble) + +Frost Mobile frost.png 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. + +editor + +The different iconss + +editor This symbol is used to upload a picture from your computer. If you only want to add an adress (url), you can also use the "tree" icon at the upper part of the editor. After selecting an image, you'll see a thumbnail in the editor. +

+ +paper_clip This symbol is used to add files from your computer. There'll be no preview of the content. +

+ +chain This symbol is used to add a web address (url). You'll see a short preview of the website. +

+ +video This symbol is used to add a web address (url) of a video file. You'll see a small preview of the video. +

+ +mic This symbol is used to add a web address (url) of an audio file. You'll see a player in your completed post. +

+ +globe This symbol is used to add your geographic location. This location will be added into a Google Maps search. That's why a note like "New York" or "10004" is already enough. +

+ +**Symbols of other themes** + +Cleanzero cleanzero.png + +(incl. more "zero"-themes, comix, easterbunny, facepark, slackr + +Darkbubble darkbubble.png (inkl. smoothly, testbubble) + +Frost frost.png + +Vier vier.png (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 456d984de1..7517abb70c 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 .= '

' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '

'; if(file_exists('home.html')) $o .= file_get_contents('home.html'); + else $o .= '

' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '

'; + $o .= login(($a->config['register_policy'] == REGISTER_CLOSED) ? 0 : 1); diff --git a/mod/openid.php b/mod/openid.php index e2cea7d851..5d5539f00e 100644 --- a/mod/openid.php +++ b/mod/openid.php @@ -27,7 +27,7 @@ function openid_content(&$a) { $r = q("SELECT `user`.*, `user`.`pubkey` as `upubkey`, `user`.`prvkey` as `uprvkey` FROM `user` WHERE `openid` = '%s' AND `blocked` = 0 - AND `account_expired` = 0 AND `verified` = 1 LIMIT 1", + AND `account_expired` = 0 AND `account_removed` = 0 AND `verified` = 1 LIMIT 1", dbesc($authid) ); diff --git a/mod/post.php b/mod/post.php index 4a7e33b23b..c0e783a6aa 100644 --- a/mod/post.php +++ b/mod/post.php @@ -20,7 +20,7 @@ function post_post(&$a) { else { $nickname = $a->argv[2]; $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' - AND `account_expired` = 0 LIMIT 1", + AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1", dbesc($nickname) ); if(! count($r)) diff --git a/mod/profile.php b/mod/profile.php index 6a80909e73..827166f927 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -12,7 +12,7 @@ function profile_init(&$a) { if($a->argc > 1) $which = $a->argv[1]; else { - $r = q("select nickname from user where blocked = 0 and account_expired = 0 and verified = 1 order by rand() limit 1"); + $r = q("select nickname from user where blocked = 0 and account_expired = 0 and account_removed = 0 and verified = 1 order by rand() limit 1"); if(count($r)) { goaway($a->get_baseurl() . '/profile/' . $r[0]['nickname']); } diff --git a/mod/pubsub.php b/mod/pubsub.php index 64fbda289f..0e29628b80 100644 --- a/mod/pubsub.php +++ b/mod/pubsub.php @@ -44,7 +44,7 @@ function pubsub_init(&$a) { $subscribe = (($hub_mode === 'subscribe') ? 1 : 0); - $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1", + $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1", dbesc($nick) ); if(! count($r)) { @@ -112,7 +112,7 @@ function pubsub_post(&$a) { $nick = (($a->argc > 1) ? notags(trim($a->argv[1])) : ''); $contact_id = (($a->argc > 2) ? intval($a->argv[2]) : 0 ); - $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1", + $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1", dbesc($nick) ); if(! count($r)) diff --git a/mod/receive.php b/mod/receive.php index 2bd3cc65bc..0523fd9cc5 100644 --- a/mod/receive.php +++ b/mod/receive.php @@ -31,7 +31,7 @@ function receive_post(&$a) { $guid = $a->argv[2]; - $r = q("SELECT * FROM `user` WHERE `guid` = '%s' AND `account_expired` = 0 LIMIT 1", + $r = q("SELECT * FROM `user` WHERE `guid` = '%s' AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1", dbesc($guid) ); if(! count($r)) diff --git a/mod/salmon.php b/mod/salmon.php index 1e16f9d14b..5df1e1c9e5 100644 --- a/mod/salmon.php +++ b/mod/salmon.php @@ -30,7 +30,7 @@ function salmon_post(&$a) { $nick = (($a->argc > 1) ? notags(trim($a->argv[1])) : ''); $mentions = (($a->argc > 2 && $a->argv[2] === 'mention') ? true : false); - $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1", + $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1", dbesc($nick) ); if(! count($r))