From 87ecd8f6585d1d02ecb851c4acbfe6a09c8dd003 Mon Sep 17 00:00:00 2001
From: rabuzarus <>
Date: Sat, 24 Oct 2015 15:04:27 +0200
Subject: [PATCH 01/10] tabs have now an ID

---
 mod/contacts.php | 11 ++++++++
 mod/network.php  | 71 +++++++++++++++++++++++++++---------------------
 2 files changed, 51 insertions(+), 31 deletions(-)

diff --git a/mod/contacts.php b/mod/contacts.php
index c562c9822..0ecc5a76d 100644
--- a/mod/contacts.php
+++ b/mod/contacts.php
@@ -550,6 +550,7 @@ function contacts_content(&$a) {
 				'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/block',
 				'sel'   => '',
 				'title' => t('Toggle Blocked status'),
+				'id'	=> 'toggle-block-tab',
 				'accesskey' => 'b',
 			),
 			array(
@@ -557,6 +558,7 @@ function contacts_content(&$a) {
 				'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/ignore',
 				'sel'   => '',
 				'title' => t('Toggle Ignored status'),
+				'id'	=> 'toggle-ignore-tab',
 				'accesskey' => 'i',
 			),
 
@@ -565,6 +567,7 @@ function contacts_content(&$a) {
 				'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/archive',
 				'sel'   => '',
 				'title' => t('Toggle Archive status'),
+				'id'	=> 'toggle-archive-tab',
 				'accesskey' => 'v',
 			),
 			array(
@@ -572,6 +575,7 @@ function contacts_content(&$a) {
 				'url'   => $a->get_baseurl(true) . '/crepair/' . $contact_id,
 				'sel'   => '',
 				'title' => t('Advanced Contact Settings'),
+				'id'	=> 'repair-tab',
 				'accesskey' => 'r',
 			)
 		);
@@ -693,6 +697,7 @@ function contacts_content(&$a) {
 			'url'   => $a->get_baseurl(true) . '/suggest',
 			'sel'   => '',
 			'title' => t('Suggest potential friends'),
+			'id'	=> 'suggestions-tab',
 			'accesskey' => 'g',
 		),
 		array(
@@ -700,6 +705,7 @@ function contacts_content(&$a) {
 			'url'   => $a->get_baseurl(true) . '/contacts/all',
 			'sel'   => ($all) ? 'active' : '',
 			'title' => t('Show all contacts'),
+			'id'	=> 'showall-tab',
 			'accesskey' => 'l',
 		),
 		array(
@@ -707,6 +713,7 @@ function contacts_content(&$a) {
 			'url'   => $a->get_baseurl(true) . '/contacts',
 			'sel'   => ((! $all) && (! $blocked) && (! $hidden) && (! $search) && (! $nets) && (! $ignored) && (! $archived)) ? 'active' : '',
 			'title' => t('Only show unblocked contacts'),
+			'id'	=> 'showunblocked-tab',
 			'accesskey' => 'o',
 		),
 
@@ -715,6 +722,7 @@ function contacts_content(&$a) {
 			'url'   => $a->get_baseurl(true) . '/contacts/blocked',
 			'sel'   => ($blocked) ? 'active' : '',
 			'title' => t('Only show blocked contacts'),
+			'id'	=> 'showblocked-tab',
 			'accesskey' => 'b',
 		),
 
@@ -723,6 +731,7 @@ function contacts_content(&$a) {
 			'url'   => $a->get_baseurl(true) . '/contacts/ignored',
 			'sel'   => ($ignored) ? 'active' : '',
 			'title' => t('Only show ignored contacts'),
+			'id'	=> 'showignored-tab',
 			'accesskey' => 'i',
 		),
 
@@ -731,6 +740,7 @@ function contacts_content(&$a) {
 			'url'   => $a->get_baseurl(true) . '/contacts/archived',
 			'sel'   => ($archived) ? 'active' : '',
 			'title' => t('Only show archived contacts'),
+			'id'	=> 'showarchived-tab',
 			'accesskey' => 'y',
 		),
 
@@ -739,6 +749,7 @@ function contacts_content(&$a) {
 			'url'   => $a->get_baseurl(true) . '/contacts/hidden',
 			'sel'   => ($hidden) ? 'active' : '',
 			'title' => t('Only show hidden contacts'),
+			'id'	=> 'showhidden-tab',
 			'accesskey' => 'h',
 		),
 
diff --git a/mod/network.php b/mod/network.php
index dfd7c0130..639d868fa 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -119,19 +119,19 @@ function network_init(&$a) {
 	$search = ((x($_GET,'search')) ? escape_tags($_GET['search']) : '');
 
 	if(x($_GET,'save')) {
-		$r = q("select * from `search` where `uid` = %d and `term` = '%s' limit 1",
+		$r = q("SELECT * FROM `search` WHERE `uid` = %d AND `term` = '%s' LIMIT 1",
 			intval(local_user()),
 			dbesc($search)
 		);
 		if(! count($r)) {
-			q("insert into `search` ( `uid`,`term` ) values ( %d, '%s') ",
+			q("INSERT INTO `search` ( `uid`,`term` ) VALUES ( %d, '%s') ",
 				intval(local_user()),
 				dbesc($search)
 			);
 		}
 	}
 	if(x($_GET,'remove')) {
-		q("delete from `search` where `uid` = %d and `term` = '%s'",
+		q("DELETE FROM `search` WHERE `uid` = %d AND `term` = '%s'",
 			intval(local_user()),
 			dbesc($search)
 		);
@@ -172,7 +172,7 @@ function saved_searches($search) {
 
 	$o = '';
 
-	$r = q("select `id`,`term` from `search` WHERE `uid` = %d",
+	$r = q("SELECT `id`,`term` FROM `search` WHERE `uid` = %d",
 		intval(local_user())
 	);
 
@@ -355,57 +355,63 @@ function network_content(&$a, $update = 0) {
 	// tabs
 	$tabs = array(
 		array(
-			'label' => t('Commented Order'),
-			'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=comment' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
-			'sel'=>$all_active,
-			'title'=> t('Sort by Comment Date'),
+			'label'	=> t('Commented Order'),
+			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=comment' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
+			'sel'	=> $all_active,
+			'title'	=> t('Sort by Comment Date'),
+			'id'	=> 'commented-order-tab',
 			'accesskey' => "e",
 		),
 		array(
-			'label' => t('Posted Order'),
-			'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
-			'sel'=>$postord_active,
-			'title' => t('Sort by Post Date'),
+			'label'	=> t('Posted Order'),
+			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
+			'sel'	=> $postord_active,
+			'title'	=> t('Sort by Post Date'),
+			'id'	=> 'posted-order-tab',
 			'accesskey' => "t",
 		),
 	);
 
 	if(feature_enabled(local_user(),'personal_tab')) {
 		$tabs[] = array(
-			'label' => t('Personal'),
-			'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&conv=1',
-			'sel' => $conv_active,
-			'title' => t('Posts that mention or involve you'),
+			'label'	=> t('Personal'),
+			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&conv=1',
+			'sel'	=> $conv_active,
+			'title'	=> t('Posts that mention or involve you'),
+			'id'	=> 'personal-tab',
 			'accesskey' => "r",
 		);
 	}
 
 	if(feature_enabled(local_user(),'new_tab')) {
 		$tabs[] = array(
-			'label' => t('New'),
-			'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ($len_naked_cmd ? '/' : '') . 'new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''),
-			'sel' => $new_active,
-			'title' => t('Activity Stream - by date'),
+			'label'	=> t('New'),
+			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ($len_naked_cmd ? '/' : '') . 'new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''),
+			'sel'	=> $new_active,
+			'title'	=> t('Activity Stream - by date'),
+			'id'	=> 'activitiy-by-date-tab',
 			'accesskey' => "w",
 		);
 	}
 
 	if(feature_enabled(local_user(),'link_tab')) {
 		$tabs[] = array(
-			'label' => t('Shared Links'),
-			'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&bmark=1',
-			'sel'=>$bookmarked_active,
-			'title'=> t('Interesting Links'),
+			'label'	=> t('Shared Links'),
+			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&bmark=1',
+			'sel'	=> $bookmarked_active,
+			'title'	=> t('Interesting Links'),
+			'id'	=> 'shared-links-tab',
 			'accesskey' => "b",
 		);
 	}
 
 	if(feature_enabled(local_user(),'star_posts')) {
 		$tabs[] = array(
-			'label' => t('Starred'),
-			'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&star=1',
-			'sel'=>$starred_active,
-			'title' => t('Favourite Posts'),
+			'label'	=> t('Starred'),
+			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&star=1',
+			'sel'	=> $starred_active,
+			'title'	=> t('Favourite Posts'),
+			'id'	=> 'starred-posts-tab',
 			'accesskey' => "m",
 		);
 	}
@@ -446,7 +452,7 @@ function network_content(&$a, $update = 0) {
 		$def_acl = array('allow_cid' => '<' . intval($cid) . '>');
 
 	if($nets) {
-		$r = q("select id from contact where uid = %d and network = '%s' and self = 0",
+		$r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND network = '%s' AND `self` = 0",
 			intval(local_user()),
 			dbesc($nets)
 		);
@@ -475,7 +481,10 @@ function network_content(&$a, $update = 0) {
 		$content = "";
 
 		if ($cid) {
-			$contact = q("SELECT `nick` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `forum`", intval($cid), intval(local_user()));
+			$contact = q("SELECT `nick` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `forum`",
+				intval($cid),
+				intval(local_user())
+			);
 			if ($contact)
 				$content = "@".$contact[0]["nick"]."+".$cid;
 		}
@@ -569,7 +578,7 @@ function network_content(&$a, $update = 0) {
 		);
 		if(count($r)) {
 			$sql_post_table = " INNER JOIN (SELECT DISTINCT(`parent`) FROM `item`
-					    WHERE 1 $sql_options AND `contact-id` = ".intval($cid)." and deleted = 0
+					    WHERE 1 $sql_options AND `contact-id` = ".intval($cid)." AND `deleted` = 0
 					    ORDER BY `item`.`received` DESC) AS `temp1`
 					    ON $sql_table.$sql_parent = `temp1`.`parent` ";
 			$sql_extra = "";

From ea2b3b2f762a323ca5a7a820857c4bea51d22637 Mon Sep 17 00:00:00 2001
From: rabuzarus <>
Date: Sat, 24 Oct 2015 15:57:46 +0200
Subject: [PATCH 02/10] move html from crepair.php to template

---
 mod/crepair.php            | 26 +++++++++++++++-----------
 view/templates/crepair.tpl | 11 +++++++++++
 2 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/mod/crepair.php b/mod/crepair.php
index 686be3948..4f0019099 100644
--- a/mod/crepair.php
+++ b/mod/crepair.php
@@ -137,16 +137,10 @@ function crepair_content(&$a) {
 
 	$contact = $r[0];
 
-	$msg1 = t('Repair Contact Settings');
+	$warning = t('<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working.');
+	$info = t('Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.');
 
-	$msg2 = t('<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working.');
-	$msg3 = t('Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.');
-
-	$o .= '<h2>' . $msg1 . '</h2>';
-
-	$o .= '<div class="error-message">' . $msg2 . EOL . EOL. $msg3 . '</div>';
-
-	$o .= EOL . '<a href="contacts/' . $cid . '">' . t('Return to contact editor') . '</a>' . EOL;
+	$returnaddr = "contacts/$cid";
 
 	$allow_remote_self = get_config('system','allow_users_remote_self');
 
@@ -165,6 +159,11 @@ function crepair_content(&$a) {
 
 	$tpl = get_markup_template('crepair.tpl');
 	$o .= replace_macros($tpl, array(
+		'$title'	=> t('Repair Contact Settings'),
+		'$warning'	=> $warning,
+		'$info'		=> $info,
+		'$returnaddr'	=> $returnaddr,
+		'$return'	=> t('Return to contact editor'),
 		'$update_profile' => update_profile,
 		'$udprofilenow' => t('Refetch contact data'),
 		'$label_name' => t('Name'),
@@ -178,7 +177,12 @@ function crepair_content(&$a) {
 		'$label_photo' => t('New photo from this URL'),
 		'$label_remote_self' => t('Remote Self'),
 		'$allow_remote_self' => $allow_remote_self,
-		'$remote_self' => array('remote_self', t('Mirror postings from this contact'), $contact['remote_self'], t('Mark this contact as remote_self, this will cause friendica to repost new entries from this contact.'), $remote_self_options),
+		'$remote_self' => array('remote_self',
+					t('Mirror postings from this contact'),
+					$contact['remote_self'],
+					t('Mark this contact as remote_self, this will cause friendica to repost new entries from this contact.'),
+					$remote_self_options
+				),
 		'$contact_name' => htmlentities($contact['name']),
 		'$contact_nick' => htmlentities($contact['nick']),
 		'$contact_id'   => $contact['id'],
@@ -189,7 +193,7 @@ function crepair_content(&$a) {
 		'$poll'         => $contact['poll'],
 		'$contact_attag'  => $contact['attag'],
 		'$lbl_submit'   => t('Submit')
-	    ));
+	));
 
 	return $o;
 
diff --git a/view/templates/crepair.tpl b/view/templates/crepair.tpl
index 5b3a6281e..91c85303c 100644
--- a/view/templates/crepair.tpl
+++ b/view/templates/crepair.tpl
@@ -1,3 +1,14 @@
+
+{{include file="section_title.tpl"}}
+
+<div class="error-message">
+	{{$warning}}
+	{{$info}}<br />
+	<br />
+	<a href="{{$returnaddr}}">{{$return}}</a>
+</div>
+<br />
+
 <form id="crepair-form" action="crepair/{{$contact_id}}" method="post" >
 
 <h4>{{$contact_name}}</h4>

From eb33698556350fde10a4a2f9bba7c52971f6212d Mon Sep 17 00:00:00 2001
From: rabuzarus <>
Date: Sat, 24 Oct 2015 16:01:55 +0200
Subject: [PATCH 03/10] some minor changes in crepair.tpl

---
 view/templates/crepair.tpl | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/view/templates/crepair.tpl b/view/templates/crepair.tpl
index 91c85303c..d500f0472 100644
--- a/view/templates/crepair.tpl
+++ b/view/templates/crepair.tpl
@@ -1,10 +1,9 @@
 
 {{include file="section_title.tpl"}}
 
-<div class="error-message">
-	{{$warning}}
-	{{$info}}<br />
-	<br />
+<div class="crepair-error-message">{{$warning}}</div><br>
+<div class="crepair-return">
+	{{$info}}<br>
 	<a href="{{$returnaddr}}">{{$return}}</a>
 </div>
 <br />

From 8f92b6eea478db950610df2978e3d4fd47025e6b Mon Sep 17 00:00:00 2001
From: rabuzarus <>
Date: Sat, 24 Oct 2015 19:51:58 +0200
Subject: [PATCH 04/10] some work on poke template

---
 mod/poke.php                       | 49 +++++++++++++--------------
 view/templates/poke_content.tpl    | 54 ++++++++++++++++--------------
 view/templates/poke_head.tpl       | 18 ++++++++++
 view/theme/duepuntozero/style.css  | 15 +++++++++
 view/theme/frost-mobile/style.css  | 16 +++++++++
 view/theme/frost/style.css         | 16 +++++++++
 view/theme/quattro/dark/style.css  | 14 ++++++++
 view/theme/quattro/green/style.css | 14 ++++++++
 view/theme/quattro/lilac/style.css | 14 ++++++++
 view/theme/quattro/quattro.less    | 12 +++++++
 view/theme/smoothly/style.css      | 19 +++++++++++
 view/theme/vier/style.css          | 16 +++++++++
 12 files changed, 206 insertions(+), 51 deletions(-)
 create mode 100644 view/templates/poke_head.tpl

diff --git a/mod/poke.php b/mod/poke.php
index db1c94963..45a577cda 100644
--- a/mod/poke.php
+++ b/mod/poke.php
@@ -1,4 +1,18 @@
-<?php
+<?php /** @file */
+
+/**
+ *
+ * Poke, prod, finger, or otherwise do unspeakable things to somebody - who must be a connection in your address book
+ * This function can be invoked with the required arguments (verb and cid and private and possibly parent) silently via ajax or
+ * other web request. You must be logged in and connected to a profile. 
+ * If the required arguments aren't present, we'll display a simple form to choose a recipient and a verb.
+ * parent is a special argument which let's you attach this activity as a comment to an existing conversation, which
+ * may have started with somebody else poking (etc.) somebody, but this isn't necessary. This can be used in the more pokes
+ * plugin version to have entire conversations where Alice poked Bob, Bob fingered Alice, Alice hugged Bob, etc.  
+ *
+ * private creates a private conversation with the recipient. Otherwise your profile's default post privacy is used.
+ *
+ */
 
 require_once('include/security.php');
 require_once('include/bbcode.php');
@@ -33,7 +47,7 @@ function poke_init(&$a) {
 	logger('poke: verb ' . $verb . ' contact ' . $contact_id, LOGGER_DEBUG);
 
 
-	$r = q("SELECT * FROM `contact` WHERE `id` = %d and  `uid` = %d LIMIT 1",
+	$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
 		intval($contact_id),
 		intval($uid)
 	);
@@ -46,8 +60,8 @@ function poke_init(&$a) {
 	$target = $r[0];
 
 	if($parent) {
-		$r = q("select uri, private, allow_cid, allow_gid, deny_cid, deny_gid
-			from item where id = %d and parent = %d and uid = %d limit 1",
+		$r = q("SELECT `uri`, `private`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`
+			FROM `item` WHERE `id` = %d AND `parent` = %d AND `uid` = %d LIMIT 1",
 			intval($parent),
 			intval($parent),
 			intval($uid)
@@ -140,7 +154,7 @@ function poke_content(&$a) {
 	$id = '';
 
 	if(intval($_GET['c'])) {
-		$r = q("select id,name from contact where id = %d and uid = %d limit 1",
+		$r = q("SELECT `id`,`name` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
 			intval($_GET['c']),
 			intval(local_user())
 		);
@@ -153,31 +167,16 @@ function poke_content(&$a) {
 
 	$base = $a->get_baseurl();
 
-	$a->page['htmlhead'] .= '<script src="' . $a->get_baseurl(true) . '/library/jquery_ac/friendica.complete.js" ></script>';
-	$a->page['htmlhead'] .= <<< EOT
+	$head_tpl = get_markup_template('poke_head.tpl');
+	$a->page['htmlhead'] .= replace_macros($head_tpl,array(
+		'$baseurl' => $a->get_baseurl(true),
+		'$base' => $base
+	));
 
-<script>$(document).ready(function() {
-	var a;
-	a = $("#poke-recip").autocomplete({
-		serviceUrl: '$base/acl',
-		minChars: 2,
-		width: 350,
-		onSelect: function(value,data) {
-			$("#poke-recip-complete").val(data);
-		}
-	});
-	a.setOptions({ params: { type: 'a' }});
-
-
-});
-
-</script>
-EOT;
 
 	$parent = ((x($_GET,'parent')) ? intval($_GET['parent']) : '0');
 
 
-
 	$verbs = get_poke_verbs();
 
 	$shortlist = array();
diff --git a/view/templates/poke_content.tpl b/view/templates/poke_content.tpl
index 857dfb200..18191de03 100644
--- a/view/templates/poke_content.tpl
+++ b/view/templates/poke_content.tpl
@@ -3,31 +3,33 @@
 
 <div id="poke-desc">{{$desc}}</div>
 
-<form action="poke" method="get">
-<br />
-<br />
 
-<div id="poke-recip-label">{{$clabel}}</div>
-<br />
-<input id="poke-recip" type="text" size="64" maxlength="255" value="{{$name|escape:'html'}}" name="pokename" autocomplete="off" />
-<input id="poke-recip-complete" type="hidden" value="{{$id}}" name="cid" />
-<input id="poke-parent" type="hidden" value="{{$parent}}" name="parent" />
-<br />
-<br />
-<div id="poke-action-label">{{$choice}}</div>
-<br />
-<br />
-<select name="verb" id="poke-verb-select" >
-{{foreach $verbs as $v}}
-<option value="{{$v.0}}">{{$v.1}}</option>
-{{/foreach}}
-</select>
-<br />
-<br />
-<div id="poke-private-desc">{{$prv_desc}}</div>
-<input type="checkbox" name="private" {{if $parent}}disabled="disabled"{{/if}} value="1" />
-<br />
-<br />
-<input type="submit" name="submit" value="{{$submit|escape:'html'}}" />
-</form>
+<div id="poke-wrapper">
+	<form action="poke" method="get">
+
+	<div id="poke-recipient">
+		<div id="poke-recip-label">{{$clabel}}</div>
+		<input id="poke-recip" type="text" size="64" maxlength="255" value="{{$name|escape:'html'}}" name="pokename" autocomplete="off" />
+		<input id="poke-recip-complete" type="hidden" value="{{$id}}" name="cid" />
+		<input id="poke-parent" type="hidden" value="{{$parent}}" name="parent" />
+	</div>
+
+	<div id="poke-action">
+		<div id="poke-action-label">{{$choice}}</div>
+		<select name="verb" id="poke-verb-select" >
+		{{foreach $verbs as $v}}
+		<option value="{{$v.0}}">{{$v.1}}</option>
+		{{/foreach}}
+		</select>
+	</div>
+
+	<div id="poke-privacy-settings">
+		<div id="poke-private-desc">{{$prv_desc}}</div>
+		<input type="checkbox" name="private" {{if $parent}}disabled="disabled"{{/if}} value="1" />
+	</div>
+
+	<input type="submit" name="submit" value="{{$submit|escape:'html'}}" />
+
+	</form>
+</div>
 
diff --git a/view/templates/poke_head.tpl b/view/templates/poke_head.tpl
new file mode 100644
index 000000000..6e30eb7fe
--- /dev/null
+++ b/view/templates/poke_head.tpl
@@ -0,0 +1,18 @@
+<script src="{{$baseurl}}/library/jquery_ac/friendica.complete.js" ></script>
+
+<script>$(document).ready(function() {
+	var a;
+	a = $("#poke-recip").autocomplete({
+		serviceUrl: '{{$base}}/acl',
+		minChars: 2,
+		width: 350,
+		onSelect: function(value,data) {
+			$("#poke-recip-complete").val(data);
+		}
+	});
+	a.setOptions({ params: { type: 'a' }});
+
+
+});
+
+</script>
\ No newline at end of file
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css
index ae2530b6a..087104123 100644
--- a/view/theme/duepuntozero/style.css
+++ b/view/theme/duepuntozero/style.css
@@ -2022,6 +2022,21 @@ a.mail-list-link {
 .message-links-end {
 	clear: both;
 }
+#poke-desc {
+	margin: 5px 0 10px;
+}
+
+#poke-wrapper  {
+	padding: 10px 0 20px;
+}
+
+#poke-recipient, #poke-action, #poke-privacy-settings {
+	margin: 10px 0 30px;
+}
+
+#poke-recip-label, #poke-action-label, #prvmail-message-label {
+	margin: 10px 0 10px;
+}
 
 #sidebar-group-list ul {
 	list-style-type: none;
diff --git a/view/theme/frost-mobile/style.css b/view/theme/frost-mobile/style.css
index f4b46fed8..22460b059 100644
--- a/view/theme/frost-mobile/style.css
+++ b/view/theme/frost-mobile/style.css
@@ -2500,6 +2500,22 @@ a.mail-list-link {
 	clear: both;
 }
 
+#poke-desc {
+	margin: 5px 0 10px;
+}
+
+#poke-wrapper  {
+	padding: 10px 0 0px;
+}
+
+#poke-recipient, #poke-action, #poke-privacy-settings {
+	margin: 10px 0 30px;
+}
+
+#poke-recip-label, #poke-action-label, #prvmail-message-label {
+	margin: 10px 0 10px;
+}
+
 #sidebar-group-list ul {
 	list-style-type: none;
 }
diff --git a/view/theme/frost/style.css b/view/theme/frost/style.css
index 8b87c3bd4..396f32cf9 100644
--- a/view/theme/frost/style.css
+++ b/view/theme/frost/style.css
@@ -2315,6 +2315,22 @@ a.mail-list-link {
 	clear: both;
 }
 
+#poke-desc {
+	margin: 5px 0 10px;
+}
+
+#poke-wrapper  {
+	padding: 10px 0 20px;
+}
+
+#poke-recipient, #poke-action, #poke-privacy-settings {
+	margin: 10px 0 30px;
+}
+
+#poke-recip-label, #poke-action-label, #prvmail-message-label {
+	margin: 10px 0 10px;
+}
+
 #sidebar-group-list ul {
 	list-style-type: none;
 }
diff --git a/view/theme/quattro/dark/style.css b/view/theme/quattro/dark/style.css
index 1eda67de1..aaeb74e75 100644
--- a/view/theme/quattro/dark/style.css
+++ b/view/theme/quattro/dark/style.css
@@ -2267,6 +2267,20 @@ ul.tabs li .active {
   -ms-transition: all 0.2s ease-in-out;
   transition: all 0.2s ease-in-out;
 }
+/* poke */
+#poke-desc {
+  margin: 5px 0 25px;
+}
+#poke-recipient,
+#poke-action,
+#poke-privacy-settings {
+  margin: 10px 0 30px;
+}
+#poke-recip-label,
+#poke-action-label,
+#prvmail-message-label {
+  margin: 10px 0 10px;
+}
 /* theme screenshot */
 .screenshot,
 #theme-preview {
diff --git a/view/theme/quattro/green/style.css b/view/theme/quattro/green/style.css
index 71569971e..ef408b4cd 100644
--- a/view/theme/quattro/green/style.css
+++ b/view/theme/quattro/green/style.css
@@ -2267,6 +2267,20 @@ ul.tabs li .active {
   -ms-transition: all 0.2s ease-in-out;
   transition: all 0.2s ease-in-out;
 }
+/* poke */
+#poke-desc {
+  margin: 5px 0 25px;
+}
+#poke-recipient,
+#poke-action,
+#poke-privacy-settings {
+  margin: 10px 0 30px;
+}
+#poke-recip-label,
+#poke-action-label,
+#prvmail-message-label {
+  margin: 10px 0 10px;
+}
 /* theme screenshot */
 .screenshot,
 #theme-preview {
diff --git a/view/theme/quattro/lilac/style.css b/view/theme/quattro/lilac/style.css
index 55b81e5da..e31a42746 100644
--- a/view/theme/quattro/lilac/style.css
+++ b/view/theme/quattro/lilac/style.css
@@ -2267,6 +2267,20 @@ ul.tabs li .active {
   -ms-transition: all 0.2s ease-in-out;
   transition: all 0.2s ease-in-out;
 }
+/* poke */
+#poke-desc {
+  margin: 5px 0 25px;
+}
+#poke-recipient,
+#poke-action,
+#poke-privacy-settings {
+  margin: 10px 0 30px;
+}
+#poke-recip-label,
+#poke-action-label,
+#prvmail-message-label {
+  margin: 10px 0 10px;
+}
 /* theme screenshot */
 .screenshot,
 #theme-preview {
diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less
index 3c9915576..19847ad2d 100644
--- a/view/theme/quattro/quattro.less
+++ b/view/theme/quattro/quattro.less
@@ -1525,6 +1525,18 @@ ul.tabs {
 	&:hover .mail-delete { .opaque(1); }
 
 }
+/* poke */
+#poke-desc {
+	margin: 5px 0 25px;
+}
+
+#poke-recipient, #poke-action, #poke-privacy-settings {
+	margin: 10px 0 30px;
+}
+
+#poke-recip-label, #poke-action-label, #prvmail-message-label {
+	margin: 10px 0 10px;
+}
 
 /* theme screenshot */
 .screenshot, #theme-preview {
diff --git a/view/theme/smoothly/style.css b/view/theme/smoothly/style.css
index 46d8902ae..da180ae61 100644
--- a/view/theme/smoothly/style.css
+++ b/view/theme/smoothly/style.css
@@ -2693,6 +2693,25 @@ margin-left: 0px;
 	border: 1px solid #7C7D7B;
 }
 
+/* ========== */
+/* = Poke = */
+/* ========== */
+#poke-desc {
+	margin: 5px 0 20px;
+}
+#poke-wrapper  {
+	margin: 40px 0 20px;
+}
+#poke-recipient, #poke-action, #poke-privacy-settings {
+	margin: 10px 0 30px;
+}
+#poke-recip-label, #poke-action-label, #prvmail-message-label {
+	margin: 10px 0 20px;
+}
+#poke-recip {
+	float: none;
+}
+
 /* ================= */
 /* = Notifications = */
 /* ================= */
diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css
index 1c03edc6b..a6a27832f 100644
--- a/view/theme/vier/style.css
+++ b/view/theme/vier/style.css
@@ -2496,6 +2496,22 @@ a.mail-list-link {
 	border: none;
 }
 
+/* ========== */
+/* = Poke = */
+/* ========== */
+#poke-desc {
+	margin: 10px 0 20px;
+}
+#poke-wrapper  {
+	margin: 40px 0 20px;
+}
+#poke-recipient, #poke-action, #poke-privacy-settings {
+	margin: 10px 0 30px;
+}
+#poke-recip-label, #poke-action-label, #prvmail-message-label {
+	margin: 10px 0 20px;
+}
+
 /* ========== */
 /* = Events = */
 /* ========== */

From ddc8f069f2f4a6571b162061497e91e0497103b3 Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Sat, 24 Oct 2015 20:41:21 +0200
Subject: [PATCH 05/10] Workaround for bad configured servers

---
 include/socgraph.php | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/include/socgraph.php b/include/socgraph.php
index b0f0c8672..225acda4a 100644
--- a/include/socgraph.php
+++ b/include/socgraph.php
@@ -748,8 +748,11 @@ function poco_check_server($server_url, $network = "", $force = false) {
 	}
 
 	if (!$serverret["success"] OR ($serverret["body"] == "") OR (sizeof($xmlobj) == 0) OR !is_object($xmlobj)) {
-		$last_failure = datetime_convert();
-		$failure = true;
+		// Workaround for bad configured servers (known nginx problem)
+		if ($serverret["debug"]["http_code"] != "403") {
+			$last_failure = datetime_convert();
+			$failure = true;
+		}
 	} elseif ($network == NETWORK_DIASPORA)
 		$last_contact = datetime_convert();
 

From ecf65e52eec44a2e06ed1fa40248cb1b7889cc32 Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Sat, 24 Oct 2015 20:42:47 +0200
Subject: [PATCH 06/10] OStatus: send the coordinates in an additional field

---
 include/items.php | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/include/items.php b/include/items.php
index 7d1ab1cb3..ebda49e9a 100644
--- a/include/items.php
+++ b/include/items.php
@@ -4392,7 +4392,7 @@ function subscribe_to_hub($url,$importer,$contact,$hubmode = 'subscribe') {
 }
 
 
-function atom_author($tag,$name,$uri,$h,$w,$photo) {
+function atom_author($tag,$name,$uri,$h,$w,$photo,$geo) {
 	$o = '';
 	if(! $tag)
 		return $o;
@@ -4410,6 +4410,10 @@ function atom_author($tag,$name,$uri,$h,$w,$photo) {
 	$o .= "\t".'<link rel="avatar" type="image/jpeg" media:width="' . $w . '" media:height="' . $h . '" href="' . $photo . '" />' . "\r\n";
 
 	if ($tag == "author") {
+
+		if($geo)
+			$o .= '<georss:point>'.xmlify($geo).'</georss:point>'."\r\n";
+
 		$r = q("SELECT `profile`.`locality`, `profile`.`region`, `profile`.`country-name`,
 				`profile`.`name`, `profile`.`pub_keywords`, `profile`.`about`,
 				`profile`.`homepage`,`contact`.`nick` FROM `profile`
@@ -4473,11 +4477,11 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
 	$o = "\r\n\r\n<entry>\r\n";
 
 	if(is_array($author))
-		$o .= atom_author('author',$author['name'],$author['url'],80,80,$author['thumb']);
+		$o .= atom_author('author',$author['name'],$author['url'],80,80,$author['thumb'], $item['coord']);
 	else
-		$o .= atom_author('author',(($item['author-name']) ? $item['author-name'] : $item['name']),(($item['author-link']) ? $item['author-link'] : $item['url']),80,80,(($item['author-avatar']) ? $item['author-avatar'] : $item['thumb']));
+		$o .= atom_author('author',(($item['author-name']) ? $item['author-name'] : $item['name']),(($item['author-link']) ? $item['author-link'] : $item['url']),80,80,(($item['author-avatar']) ? $item['author-avatar'] : $item['thumb']), $item['coord']);
 	if(strlen($item['owner-name']))
-		$o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']);
+		$o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar'], $item['coord']);
 
 	if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) {
 		$parent = q("SELECT `guid` FROM `item` WHERE `id` = %d", intval($item["parent"]));

From a11833e2486382be9c996bdbd4e5081d8f54a0f3 Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Sat, 24 Oct 2015 20:44:18 +0200
Subject: [PATCH 07/10] Statusnet is now GNU Social

---
 include/contact_selectors.php | 2 +-
 mod/uimport.php               | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/include/contact_selectors.php b/include/contact_selectors.php
index f0ac87a09..f10486623 100644
--- a/include/contact_selectors.php
+++ b/include/contact_selectors.php
@@ -88,7 +88,7 @@ function network_to_name($s, $profile = "") {
 		NETWORK_PUMPIO   => t('pump.io'),
 		NETWORK_TWITTER  => t('Twitter'),
 		NETWORK_DIASPORA2 => t('Diaspora Connector'),
-		NETWORK_STATUSNET => t('Statusnet'),
+		NETWORK_STATUSNET => t('GNU Social'),
 		NETWORK_APPNET => t('App.net')
 	);
 
diff --git a/mod/uimport.php b/mod/uimport.php
index f61eab0a1..ffa4f3ed7 100644
--- a/mod/uimport.php
+++ b/mod/uimport.php
@@ -57,8 +57,8 @@ function uimport_content(&$a) {
 		unset($_SESSION['theme']);
 	if(x($_SESSION,'mobile-theme'))
 		unset($_SESSION['mobile-theme']);
-	
-	
+
+
     $tpl = get_markup_template("uimport.tpl");
     return replace_macros($tpl, array(
         '$regbutt' => t('Import'),
@@ -66,8 +66,8 @@ function uimport_content(&$a) {
             'title' => t("Move account"),
 			'intro' => t("You can import an account from another Friendica server."),
 			'instruct' => t("You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."),
-			'warn' => t("This feature is experimental. We can't import contacts from the OStatus network (statusnet/identi.ca) or from Diaspora"),
+			'warn' => t("This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"),
             'field' => array('accountfile', t('Account file'),'<input id="id_accountfile" name="accountfile" type="file">', t('To export your account, go to "Settings->Export your personal data" and select "Export account"')),
-        ),  
+        ),
     ));
 }

From 4631c13d083b49753acc8a8eae18503ea554afe3 Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Sun, 25 Oct 2015 09:15:36 +0100
Subject: [PATCH 08/10] Profile data are now reduced to only the most important
 fields

---
 mod/profiles.php                           |  45 ++++---
 view/templates/profile_edit.tpl            | 124 +++++++++++++++++++
 view/theme/vier/templates/profile_edit.tpl | 133 ++++++++++++++++++++-
 3 files changed, 284 insertions(+), 18 deletions(-)

diff --git a/mod/profiles.php b/mod/profiles.php
index 6c1a82c7b..3ba57c883 100644
--- a/mod/profiles.php
+++ b/mod/profiles.php
@@ -206,7 +206,7 @@ function profiles_post(&$a) {
 			if($ignore_year)
 				$dob = '0000-' . $dob;
 		}
-                
+
 		$name = notags(trim($_POST['name']));
 
 		if(! strlen($name)) {
@@ -327,7 +327,7 @@ function profiles_post(&$a) {
 
 		$hide_friends = (($_POST['hide-friends'] == 1) ? 1: 0);
 
-
+		set_pconfig(local_user(),'system','detailled_profile', (($_POST['detailled_profile'] == 1) ? 1: 0));
 
 		$changes = array();
 		$value = '';
@@ -540,7 +540,7 @@ function profile_activity($changed, $value) {
 		return;
 
 	$arr = array();
-	$arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), local_user()); 
+	$arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), local_user());
 	$arr['uid'] = local_user();
 	$arr['contact-id'] = $self[0]['id'];
 	$arr['wall'] = 1;
@@ -552,7 +552,7 @@ function profile_activity($changed, $value) {
 	$arr['author-avatar'] = $arr['owner-avatar'] = $self[0]['thumb'];
 	$arr['verb'] = ACTIVITY_UPDATE;
 	$arr['object-type'] = ACTIVITY_OBJ_PROFILE;
-				
+
 	$A = '[url=' . $self[0]['url'] . ']' . $self[0]['name'] . '[/url]';
 
 
@@ -570,7 +570,7 @@ function profile_activity($changed, $value) {
 		$changes .= $ch;
 	}
 
-	$prof = '[url=' . $self[0]['url'] . '?tab=profile' . ']' . t('public profile') . '[/url]';	
+	$prof = '[url=' . $self[0]['url'] . '?tab=profile' . ']' . t('public profile') . '[/url]';
 
 	if($t == 1 && strlen($value)) {
 		$message = sprintf( t('%1$s changed %2$s to &ldquo;%3$s&rdquo;'), $A, $changes, $value);
@@ -578,9 +578,9 @@ function profile_activity($changed, $value) {
 	}
 	else
 		$message = 	sprintf( t('%1$s has an updated %2$s, changing %3$s.'), $A, $prof, $changes);
- 
 
-	$arr['body'] = $message;  
+
+	$arr['body'] = $message;
 
 	$arr['object'] = '<object><type>' . ACTIVITY_OBJ_PROFILE . '</type><title>' . $self[0]['name'] . '</title>'
 	. '<id>' . $self[0]['url'] . '/' . $self[0]['name'] . '</id>';
@@ -664,8 +664,10 @@ function profiles_content(&$a) {
 			'$no_selected' => (($r[0]['hide-friends'] == 0) ? " checked=\"checked\" " : "")
 		));
 
+		$personal_account = !(in_array($a->user["page-flags"],
+					array(PAGE_COMMUNITY, PAGE_PRVGROUP)));
 
-
+		$detailled_profile = (get_pconfig(local_user(),'system','detailled_profile') AND $personal_account);
 
 		$f = get_config('system','birthday_input_format');
 		if(! $f)
@@ -674,6 +676,17 @@ function profiles_content(&$a) {
 		$is_default = (($r[0]['is-default']) ? 1 : 0);
 		$tpl = get_markup_template("profile_edit.tpl");
 		$o .= replace_macros($tpl,array(
+			'$personal_account' => $personal_account,
+			'$detailled_profile' => $detailled_profile,
+
+			'$details' => array(
+                                'detailled_profile', //Name
+                                t('Show more profile fields:'), //Label
+                                $detailled_profile, //Value
+                                '', //Help string
+                                array(t('No'),t('Yes')) //Off - On strings
+                        ),
+
 			'$multi_profiles' => feature_enabled(local_user(),'multi_profiles'),
 			'$form_security_token' => get_form_security_token("profile_edit"),
 			'$form_security_token_photo' => get_form_security_token("profile_photo"),
@@ -775,10 +788,10 @@ function profiles_content(&$a) {
 
 		return $o;
 	}
-	
+
 	//Profiles list.
 	else {
-		
+
 		//If we don't support multi profiles, don't display this list.
 		if(!feature_enabled(local_user(),'multi_profiles')){
 			$r = q(
@@ -790,11 +803,11 @@ function profiles_content(&$a) {
 				goaway($a->get_baseurl(true) . '/profiles/'.$r[0]['id']);
 			}
 		}
-		
+
 		$r = q("SELECT * FROM `profile` WHERE `uid` = %d",
 			local_user());
 		if(count($r)) {
-			
+
 			$tpl_header = get_markup_template('profile_listing_header.tpl');
 			$o .= replace_macros($tpl_header,array(
 				'$header' => t('Edit/Manage Profiles'),
@@ -802,17 +815,17 @@ function profiles_content(&$a) {
 				'$cr_new' => t('Create New Profile'),
 				'$cr_new_link' => 'profiles/new?t=' . get_form_security_token("profile_new")
 			));
-			
-			
+
+
 			$tpl = get_markup_template('profile_entry.tpl');
-			
+
 			foreach($r as $rr) {
 				$o .= replace_macros($tpl, array(
 					'$photo' => $a->get_cached_avatar_image($rr['thumb']),
 					'$id' => $rr['id'],
 					'$alt' => t('Profile Image'),
 					'$profile_name' => $rr['profile-name'],
-					'$visible' => (($rr['is-default']) ? '<strong>' . t('visible to everybody') . '</strong>' 
+					'$visible' => (($rr['is-default']) ? '<strong>' . t('visible to everybody') . '</strong>'
 						: '<a href="' . $a->get_baseurl(true) . '/profperm/' . $rr['id'] . '" />' . t('Edit visibility') . '</a>')
 				));
 			}
diff --git a/view/templates/profile_edit.tpl b/view/templates/profile_edit.tpl
index 480add440..76445685d 100644
--- a/view/templates/profile_edit.tpl
+++ b/view/templates/profile_edit.tpl
@@ -21,6 +21,8 @@
 <form id="profile-edit-form" name="form1" action="profiles/{{$profile_id}}" method="post" >
 <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
 
+{{if $detailled_profile}}
+{{include file="field_yesno.tpl" field=$details}}
 <div id="profile-edit-profile-name-wrapper" >
 <label id="profile-edit-profile-name-label" for="profile-edit-profile-name" >{{$lbl_profname}} </label>
 <input type="text" size="32" name="profile_name" id="profile-edit-profile-name" value="{{$profile_name|escape:'html'}}" /><div class="required">*</div>
@@ -318,7 +320,129 @@
 </div>
 <div class="profile-edit-submit-end"></div>
 
+{{else}}
+{{if $personal_account}}
+{{include file="field_yesno.tpl" field=$details}}
+{{/if}}
+<div id="profile-edit-profile-name-wrapper" >
+<label id="profile-edit-profile-name-label" for="profile-edit-profile-name" >{{$lbl_profname}} </label>
+<input type="text" size="32" name="profile_name" id="profile-edit-profile-name" value="{{$profile_name|escape:'html'}}" /><div class="required">*</div>
+</div>
+<div id="profile-edit-profile-name-end"></div>
 
+<div id="profile-edit-name-wrapper" >
+<label id="profile-edit-name-label" for="profile-edit-name" >{{$lbl_fullname}} </label>
+<input type="text" size="32" name="name" id="profile-edit-name" value="{{$name|escape:'html'}}" />
+</div>
+<div id="profile-edit-name-end"></div>
+
+{{if $personal_account}}
+<div id="profile-edit-gender-wrapper" >
+<label id="profile-edit-gender-label" for="gender-select" >{{$lbl_gender}} </label>
+{{$gender}}
+</div>
+<div id="profile-edit-gender-end"></div>
+
+<div id="profile-edit-dob-wrapper" >
+<label id="profile-edit-dob-label" for="dob-select" >{{$lbl_bd}} </label>
+<div id="profile-edit-dob" >
+{{$dob}} {{$age}}
+</div>
+</div>
+<div id="profile-edit-dob-end"></div>
+{{/if}}
+
+<div id="profile-edit-homepage-wrapper" >
+<label id="profile-edit-homepage-label" for="profile-edit-homepage" >{{$lbl_homepage}} </label>
+<input type="url" size="32" name="homepage" id="profile-edit-homepage" value="{{$homepage|escape:'html'}}" />
+</div>
+<div id="profile-edit-homepage-end"></div>
+
+{{$hide_friends}}
+
+<div id="profile-edit-address-wrapper" >
+<label id="profile-edit-address-label" for="profile-edit-address" >{{$lbl_address}} </label>
+<input type="text" size="32" name="address" id="profile-edit-address" value="{{$address|escape:'html'}}" />
+</div>
+<div id="profile-edit-address-end"></div>
+
+<div id="profile-edit-locality-wrapper" >
+<label id="profile-edit-locality-label" for="profile-edit-locality" >{{$lbl_city}} </label>
+<input type="text" size="32" name="locality" id="profile-edit-locality" value="{{$locality|escape:'html'}}" />
+</div>
+<div id="profile-edit-locality-end"></div>
+
+
+<div id="profile-edit-postal-code-wrapper" >
+<label id="profile-edit-postal-code-label" for="profile-edit-postal-code" >{{$lbl_zip}} </label>
+<input type="text" size="32" name="postal_code" id="profile-edit-postal-code" value="{{$postal_code|escape:'html'}}" />
+</div>
+<div id="profile-edit-postal-code-end"></div>
+
+<div id="profile-edit-country-name-wrapper" >
+<label id="profile-edit-country-name-label" for="profile-edit-country-name" >{{$lbl_country}} </label>
+<select name="country_name" id="profile-edit-country-name" onChange="Fill_States('{{$region}}');">
+<option selected="selected" >{{$country_name}}</option>
+<option>temp</option>
+</select>
+</div>
+<div id="profile-edit-country-name-end"></div>
+
+<div id="profile-edit-region-wrapper" >
+<label id="profile-edit-region-label" for="profile-edit-region" >{{$lbl_region}} </label>
+<select name="region" id="profile-edit-region" onChange="Update_Globals();" >
+<option selected="selected" >{{$region}}</option>
+<option>temp</option>
+</select>
+</div>
+<div id="profile-edit-region-end"></div>
+
+<div id="profile-edit-pubkeywords-wrapper" >
+<label id="profile-edit-pubkeywords-label" for="profile-edit-pubkeywords" >{{$lbl_pubkey}} </label>
+<input type="text" size="32" name="pub_keywords" id="profile-edit-pubkeywords" title="{{$lbl_ex2}}" value="{{$pub_keywords|escape:'html'}}" />
+</div><div id="profile-edit-pubkeywords-desc">{{$lbl_pubdsc}}</div>
+<div id="profile-edit-pubkeywords-end"></div>
+
+<div id="profile-edit-prvkeywords-wrapper" >
+<label id="profile-edit-prvkeywords-label" for="profile-edit-prvkeywords" >{{$lbl_prvkey}} </label>
+<input type="text" size="32" name="prv_keywords" id="profile-edit-prvkeywords" title="{{$lbl_ex2}}" value="{{$prv_keywords|escape:'html'}}" />
+</div><div id="profile-edit-prvkeywords-desc">{{$lbl_prvdsc}}</div>
+<div id="profile-edit-prvkeywords-end"></div>
+
+<div id="about-jot-wrapper" >
+<p id="about-jot-desc" >
+{{$lbl_about}}
+</p>
+
+<textarea rows="10" cols="72" id="profile-about-text" name="about" >{{$about}}</textarea>
+
+</div>
+<div id="about-jot-end"></div>
+
+<div class="profile-edit-submit-wrapper" >
+<input type="submit" name="submit" class="profile-edit-submit-button" value="{{$submit}}" />
+</div>
+<div class="profile-edit-submit-end"></div>
+
+        <input type="hidden" name="pdesc" id="profile-edit-pdesc" value="{{$pdesc}}" />
+        <input type="hidden" id="contact-jot-text" name="contact" value="{{$contact}}" />
+        <input type="hidden" name="hometown" id="profile-edit-hometown" value="{{$hometown}}" />
+        <input type="hidden" name="politic" id="profile-edit-politic" value="{{$politic}}" />
+        <input type="hidden" name="religion" id="profile-edit-religion" value="{{$religion}}" />
+        <input type="hidden" id="likes-jot-text" name="likes" value="{{$likes}}" />
+        <input type="hidden" id="dislikes-jot-text" name="dislikes" value="{{$dislikes}}" />
+        <input type="hidden" name="with" id="profile-edit-with" value="{{$with}}" />
+        <input type="hidden" name="howlong" id="profile-edit-howlong" value="{{$howlong}}" />
+        <input type="hidden" id="romance-jot-text" name="romance" value="{{$romance}}" />
+        <input type="hidden" id="work-jot-text" name="work" value="{{$work}}" />
+        <input type="hidden" id="education-jot-text" name="education" value="{{$education}}" />
+        <input type="hidden" id="interest-jot-text" name="interest" value="{{$interest}}" />
+        <input type="hidden" id="music-jot-text" name="music" value="{{$music}}" />
+        <input type="hidden" id="book-jot-text" name="book" value="{{$book}}" />
+        <input type="hidden" id="tv-jot-text" name="tv" value="{{$tv}}" />
+        <input type="hidden" id="film-jot-text" name="film" value="{{$film}}" />
+
+{{/if}}
 </form>
 </div>
 <script type="text/javascript">Fill_Country('{{$country_name}}');Fill_States('{{$region}}');</script>
diff --git a/view/theme/vier/templates/profile_edit.tpl b/view/theme/vier/templates/profile_edit.tpl
index db512eb7f..927041056 100644
--- a/view/theme/vier/templates/profile_edit.tpl
+++ b/view/theme/vier/templates/profile_edit.tpl
@@ -32,9 +32,11 @@
   <input type="hidden" name="profile" value="{{$profile_name}}" />
   
   <!-- Profile picture -->
+{{if $detailled_profile}}
   <div class="toggle-section js-toggle-section">
     <a class="section-caption js-section-toggler" href="javascript:;">{{$lbl_picture_section}} &raquo;</a>
     <div class="js-section toggle-section-content hidden">
+{{/if}}
       
       <div id="profile-photo-upload-wrapper">
         <label id="profile-photo-upload-label" for="profile-photo-upload">{{$lbl_profile_photo}}:</label>
@@ -46,19 +48,23 @@
       </div>
       <div class="profile-edit-submit-end"></div>
     
+{{if $detailled_profile}}
     </div>
   </div>
-  
+{{/if}}
 </form>
 
 <form id="profile-edit-form" name="form1" action="profiles/{{$profile_id}}" method="post" >
   <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
-  
+
+{{if $detailled_profile}}
   <!-- Basic information -->
   <div class="toggle-section js-toggle-section">
     <a class="section-caption js-section-toggler" href="javascript:;">{{$lbl_basic_section}} &raquo;</a>
     <div class="js-section toggle-section-content hidden">
       
+      {{include file="field_yesno.tpl" field=$details}}
+
       {{if $multi_profiles}}
         <div id="profile-edit-profile-name-wrapper" >
           <label id="profile-edit-profile-name-label" for="profile-edit-profile-name" >{{$lbl_profname}} </label>
@@ -309,6 +315,129 @@
       
     </div>
   </div>
+{{else}}
+
+{{if $personal_account}}
+{{include file="field_yesno.tpl" field=$details}}
+{{/if}}
+<div id="profile-edit-profile-name-wrapper" >
+<label id="profile-edit-profile-name-label" for="profile-edit-profile-name" >{{$lbl_profname}} </label>
+<input type="text" size="32" name="profile_name" id="profile-edit-profile-name" value="{{$profile_name|escape:'html'}}" /><div class="required">*</div>
+</div>
+<div id="profile-edit-profile-name-end"></div>
+
+<div id="profile-edit-name-wrapper" >
+<label id="profile-edit-name-label" for="profile-edit-name" >{{$lbl_fullname}} </label>
+<input type="text" size="32" name="name" id="profile-edit-name" value="{{$name|escape:'html'}}" />
+</div>
+<div id="profile-edit-name-end"></div>
+
+{{if $personal_account}}
+<div id="profile-edit-gender-wrapper" >
+<label id="profile-edit-gender-label" for="gender-select" >{{$lbl_gender}} </label>
+{{$gender}}
+</div>
+<div id="profile-edit-gender-end"></div>
+
+<div id="profile-edit-dob-wrapper" >
+<label id="profile-edit-dob-label" for="dob-select" >{{$lbl_bd}} </label>
+<div id="profile-edit-dob" >
+{{$dob}} {{$age}}
+</div>
+</div>
+<div id="profile-edit-dob-end"></div>
+{{/if}}
+
+      <div id="profile-edit-homepage-wrapper" >
+        <label id="profile-edit-homepage-label" for="profile-edit-homepage" >{{$lbl_homepage}} </label>
+        <input type="text" size="32" name="homepage" id="profile-edit-homepage" value="{{$homepage}}" />
+      </div>
+      <div id="profile-edit-homepage-end"></div>
+
+{{$hide_friends}}
+
+<div id="profile-edit-address-wrapper" >
+<label id="profile-edit-address-label" for="profile-edit-address" >{{$lbl_address}} </label>
+<input type="text" size="32" name="address" id="profile-edit-address" value="{{$address|escape:'html'}}" />
+</div>
+<div id="profile-edit-address-end"></div>
+
+<div id="profile-edit-locality-wrapper" >
+<label id="profile-edit-locality-label" for="profile-edit-locality" >{{$lbl_city}} </label>
+<input type="text" size="32" name="locality" id="profile-edit-locality" value="{{$locality|escape:'html'}}" />
+</div>
+<div id="profile-edit-locality-end"></div>
+
+
+<div id="profile-edit-postal-code-wrapper" >
+<label id="profile-edit-postal-code-label" for="profile-edit-postal-code" >{{$lbl_zip}} </label>
+<input type="text" size="32" name="postal_code" id="profile-edit-postal-code" value="{{$postal_code|escape:'html'}}" />
+</div>
+<div id="profile-edit-postal-code-end"></div>
+
+<div id="profile-edit-country-name-wrapper" >
+<label id="profile-edit-country-name-label" for="profile-edit-country-name" >{{$lbl_country}} </label>
+<select name="country_name" id="profile-edit-country-name" onChange="Fill_States('{{$region}}');">
+<option selected="selected" >{{$country_name}}</option>
+<option>temp</option>
+</select>
+</div>
+<div id="profile-edit-country-name-end"></div>
+<div id="profile-edit-region-wrapper" >
+<label id="profile-edit-region-label" for="profile-edit-region" >{{$lbl_region}} </label>
+<select name="region" id="profile-edit-region" onChange="Update_Globals();" >
+<option selected="selected" >{{$region}}</option>
+<option>temp</option>
+</select>
+</div>
+<div id="profile-edit-region-end"></div>
+
+<div id="profile-edit-pubkeywords-wrapper" >
+<label id="profile-edit-pubkeywords-label" for="profile-edit-pubkeywords" >{{$lbl_pubkey}} </label>
+<input type="text" size="32" name="pub_keywords" id="profile-edit-pubkeywords" title="{{$lbl_ex2}}" value="{{$pub_keywords|escape:'html'}}" />
+</div><div id="profile-edit-pubkeywords-desc">{{$lbl_pubdsc}}</div>
+<div id="profile-edit-pubkeywords-end"></div>
+
+<div id="profile-edit-prvkeywords-wrapper" >
+<label id="profile-edit-prvkeywords-label" for="profile-edit-prvkeywords" >{{$lbl_prvkey}} </label>
+<input type="text" size="32" name="prv_keywords" id="profile-edit-prvkeywords" title="{{$lbl_ex2}}" value="{{$prv_keywords|escape:'html'}}" />
+</div><div id="profile-edit-prvkeywords-desc">{{$lbl_prvdsc}}</div>
+<div id="profile-edit-prvkeywords-end"></div>
+
+<div id="about-jot-wrapper" >
+<p id="about-jot-desc" >
+{{$lbl_about}}
+</p>
+
+<textarea rows="10" cols="72" id="profile-about-text" name="about" >{{$about}}</textarea>
+
+</div>
+<div id="about-jot-end"></div>
+
+<div class="profile-edit-submit-wrapper" >
+<input type="submit" name="submit" class="profile-edit-submit-button" value="{{$submit}}" />
+</div>
+<div class="profile-edit-submit-end"></div>
+
+        <input type="hidden" name="pdesc" id="profile-edit-pdesc" value="{{$pdesc}}" />
+        <input type="hidden" id="contact-jot-text" name="contact" value="{{$contact}}" />
+        <input type="hidden" name="hometown" id="profile-edit-hometown" value="{{$hometown}}" />
+        <input type="hidden" name="politic" id="profile-edit-politic" value="{{$politic}}" />
+        <input type="hidden" name="religion" id="profile-edit-religion" value="{{$religion}}" />
+        <input type="hidden" id="likes-jot-text" name="likes" value="{{$likes}}" />
+        <input type="hidden" id="dislikes-jot-text" name="dislikes" value="{{$dislikes}}" />
+        <input type="hidden" name="with" id="profile-edit-with" value="{{$with}}" />
+        <input type="hidden" name="howlong" id="profile-edit-howlong" value="{{$howlong}}" />
+        <input type="hidden" id="romance-jot-text" name="romance" value="{{$romance}}" />
+        <input type="hidden" id="work-jot-text" name="work" value="{{$work}}" />
+        <input type="hidden" id="education-jot-text" name="education" value="{{$education}}" />
+        <input type="hidden" id="interest-jot-text" name="interest" value="{{$interest}}" />
+        <input type="hidden" id="music-jot-text" name="music" value="{{$music}}" />
+        <input type="hidden" id="book-jot-text" name="book" value="{{$book}}" />
+        <input type="hidden" id="tv-jot-text" name="tv" value="{{$tv}}" />
+        <input type="hidden" id="film-jot-text" name="film" value="{{$film}}" />
+
+{{/if}}
   
 </form>
 </div>

From c7205ea705797dd1ad27dc5ae7e87d4e98169801 Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Sun, 25 Oct 2015 10:17:23 +0100
Subject: [PATCH 09/10] Bugfix: Authorization at ejabberd only worked for uid=1

---
 include/auth_ejabberd.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/include/auth_ejabberd.php b/include/auth_ejabberd.php
index 5d69f1de7..9a9d9acca 100755
--- a/include/auth_ejabberd.php
+++ b/include/auth_ejabberd.php
@@ -140,6 +140,7 @@ class exAuth
 								$sQuery = "SELECT `uid`, `password` FROM `user` WHERE `nickname`='". $db->escape($sUser) ."'";
 								$this->writeDebugLog("[debug] using query ". $sQuery);
 								if ($oResult = q($sQuery)){
+									$uid = $oResult[0]["uid"];
 									$Error = ($oResult[0]["password"] != hash('whirlpool',$aCommand[3]));
 /*
 									if ($oResult[0]["password"] == hash('whirlpool',$aCommand[3])) {
@@ -156,9 +157,10 @@ class exAuth
 								} else {
 									$this->writeLog("[MySQL] invalid query: ". $sQuery);
 									$Error = true;
+									$uid = -1;
 								}
 								if ($Error) {
-									$oConfig = q("SELECT `v` FROM `pconfig` WHERE `uid`=1 AND `cat` = 'xmpp' AND `k`='password' LIMIT 1;");
+									$oConfig = q("SELECT `v` FROM `pconfig` WHERE `uid`=%d AND `cat` = 'xmpp' AND `k`='password' LIMIT 1;", intval($uid));
 									$this->writeLog("[exAuth] got password ".$oConfig[0]["v"]);
 									$Error = ($aCommand[3] != $oConfig[0]["v"]);
 								}

From 5b93bff6dad386dc85662f45fab58d239444a19d Mon Sep 17 00:00:00 2001
From: rabuzarus <>
Date: Sun, 25 Oct 2015 14:40:56 +0100
Subject: [PATCH 10/10] poke template: make use of global.css

---
 view/global.css                    | 17 +++++++++++++++++
 view/theme/duepuntozero/style.css  | 17 +----------------
 view/theme/frost-mobile/style.css  |  2 +-
 view/theme/quattro/dark/style.css  | 14 --------------
 view/theme/quattro/green/style.css | 14 --------------
 view/theme/quattro/lilac/style.css | 14 --------------
 view/theme/quattro/quattro.less    | 12 ------------
 view/theme/smoothly/style.css      | 14 +-------------
 view/theme/vier/style.css          | 15 ---------------
 9 files changed, 20 insertions(+), 99 deletions(-)

diff --git a/view/global.css b/view/global.css
index c2f584003..55f44ee51 100644
--- a/view/global.css
+++ b/view/global.css
@@ -212,3 +212,20 @@ a {
   clip: rect(0,0,0,0);
   border: 0;
 }
+
+/* poke */
+#poke-desc {
+	margin: 5px 0 10px;
+}
+
+#poke-wrapper  {
+	padding: 10px 0 0px;
+}
+
+#poke-recipient, #poke-action, #poke-privacy-settings {
+	margin: 10px 0 30px;
+}
+
+#poke-recip-label, #poke-action-label, #prvmail-message-label {
+	margin: 10px 0 10px;
+}
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css
index 087104123..16c01c6df 100644
--- a/view/theme/duepuntozero/style.css
+++ b/view/theme/duepuntozero/style.css
@@ -959,7 +959,7 @@ input#dfrn-url {
 }
 
 .wall-item-content-wrapper.comment {
-#	margin-left: 50px;
+	/*margin-left: 50px;*/
 	background: #EEEEEE;
 }
 
@@ -2022,21 +2022,6 @@ a.mail-list-link {
 .message-links-end {
 	clear: both;
 }
-#poke-desc {
-	margin: 5px 0 10px;
-}
-
-#poke-wrapper  {
-	padding: 10px 0 20px;
-}
-
-#poke-recipient, #poke-action, #poke-privacy-settings {
-	margin: 10px 0 30px;
-}
-
-#poke-recip-label, #poke-action-label, #prvmail-message-label {
-	margin: 10px 0 10px;
-}
 
 #sidebar-group-list ul {
 	list-style-type: none;
diff --git a/view/theme/frost-mobile/style.css b/view/theme/frost-mobile/style.css
index 22460b059..5f78cfc4b 100644
--- a/view/theme/frost-mobile/style.css
+++ b/view/theme/frost-mobile/style.css
@@ -4233,7 +4233,7 @@ ul.notifications-menu-popup {
 #recip {
 	
 }
-.autocomplete-w1 { background: #ffffff; no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }
+.autocomplete-w1 { background: #ffffff no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }
 .autocomplete { color:#000; border:1px solid #999; background:#FFF; cursor:default; text-align:left; max-height:350px; overflow:auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px;  _margin:0; _overflow-x:hidden; }
 .autocomplete .selected { background:#F0F0F0; }
 .autocomplete div { padding:2px 5px; white-space:nowrap; overflow:hidden; }
diff --git a/view/theme/quattro/dark/style.css b/view/theme/quattro/dark/style.css
index aaeb74e75..1eda67de1 100644
--- a/view/theme/quattro/dark/style.css
+++ b/view/theme/quattro/dark/style.css
@@ -2267,20 +2267,6 @@ ul.tabs li .active {
   -ms-transition: all 0.2s ease-in-out;
   transition: all 0.2s ease-in-out;
 }
-/* poke */
-#poke-desc {
-  margin: 5px 0 25px;
-}
-#poke-recipient,
-#poke-action,
-#poke-privacy-settings {
-  margin: 10px 0 30px;
-}
-#poke-recip-label,
-#poke-action-label,
-#prvmail-message-label {
-  margin: 10px 0 10px;
-}
 /* theme screenshot */
 .screenshot,
 #theme-preview {
diff --git a/view/theme/quattro/green/style.css b/view/theme/quattro/green/style.css
index ef408b4cd..71569971e 100644
--- a/view/theme/quattro/green/style.css
+++ b/view/theme/quattro/green/style.css
@@ -2267,20 +2267,6 @@ ul.tabs li .active {
   -ms-transition: all 0.2s ease-in-out;
   transition: all 0.2s ease-in-out;
 }
-/* poke */
-#poke-desc {
-  margin: 5px 0 25px;
-}
-#poke-recipient,
-#poke-action,
-#poke-privacy-settings {
-  margin: 10px 0 30px;
-}
-#poke-recip-label,
-#poke-action-label,
-#prvmail-message-label {
-  margin: 10px 0 10px;
-}
 /* theme screenshot */
 .screenshot,
 #theme-preview {
diff --git a/view/theme/quattro/lilac/style.css b/view/theme/quattro/lilac/style.css
index e31a42746..55b81e5da 100644
--- a/view/theme/quattro/lilac/style.css
+++ b/view/theme/quattro/lilac/style.css
@@ -2267,20 +2267,6 @@ ul.tabs li .active {
   -ms-transition: all 0.2s ease-in-out;
   transition: all 0.2s ease-in-out;
 }
-/* poke */
-#poke-desc {
-  margin: 5px 0 25px;
-}
-#poke-recipient,
-#poke-action,
-#poke-privacy-settings {
-  margin: 10px 0 30px;
-}
-#poke-recip-label,
-#poke-action-label,
-#prvmail-message-label {
-  margin: 10px 0 10px;
-}
 /* theme screenshot */
 .screenshot,
 #theme-preview {
diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less
index 19847ad2d..3c9915576 100644
--- a/view/theme/quattro/quattro.less
+++ b/view/theme/quattro/quattro.less
@@ -1525,18 +1525,6 @@ ul.tabs {
 	&:hover .mail-delete { .opaque(1); }
 
 }
-/* poke */
-#poke-desc {
-	margin: 5px 0 25px;
-}
-
-#poke-recipient, #poke-action, #poke-privacy-settings {
-	margin: 10px 0 30px;
-}
-
-#poke-recip-label, #poke-action-label, #prvmail-message-label {
-	margin: 10px 0 10px;
-}
 
 /* theme screenshot */
 .screenshot, #theme-preview {
diff --git a/view/theme/smoothly/style.css b/view/theme/smoothly/style.css
index da180ae61..bcb47367f 100644
--- a/view/theme/smoothly/style.css
+++ b/view/theme/smoothly/style.css
@@ -291,7 +291,7 @@ section {
 	margin: 10px 0 0 230px;
 }
 
-.login-form,
+.login-form {
 	margin-top: 10px;
 }
 
@@ -2696,18 +2696,6 @@ margin-left: 0px;
 /* ========== */
 /* = Poke = */
 /* ========== */
-#poke-desc {
-	margin: 5px 0 20px;
-}
-#poke-wrapper  {
-	margin: 40px 0 20px;
-}
-#poke-recipient, #poke-action, #poke-privacy-settings {
-	margin: 10px 0 30px;
-}
-#poke-recip-label, #poke-action-label, #prvmail-message-label {
-	margin: 10px 0 20px;
-}
 #poke-recip {
 	float: none;
 }
diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css
index a6a27832f..a35e6d21d 100644
--- a/view/theme/vier/style.css
+++ b/view/theme/vier/style.css
@@ -2496,21 +2496,6 @@ a.mail-list-link {
 	border: none;
 }
 
-/* ========== */
-/* = Poke = */
-/* ========== */
-#poke-desc {
-	margin: 10px 0 20px;
-}
-#poke-wrapper  {
-	margin: 40px 0 20px;
-}
-#poke-recipient, #poke-action, #poke-privacy-settings {
-	margin: 10px 0 30px;
-}
-#poke-recip-label, #poke-action-label, #prvmail-message-label {
-	margin: 10px 0 20px;
-}
 
 /* ========== */
 /* = Events = */