From 6f72bc8d3a9d82f4762ff77fd008d7a9866ba07f Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 6 May 2016 11:04:21 +0200 Subject: [PATCH 1/3] Better implementation of "hidewall" --- include/dfrn.php | 4 ++-- mod/dfrn_poll.php | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/dfrn.php b/include/dfrn.php index f1b325b57..5778d4ba5 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -71,7 +71,7 @@ class dfrn { * * @return string DFRN feed entries */ - public static function feed($dfrn_id, $owner_nick, $last_update, $direction = 0) { + public static function feed($dfrn_id, $owner_nick, $last_update, $direction = 0, $onlyheader = false) { $a = get_app(); @@ -234,7 +234,7 @@ class dfrn { // This hook can't work anymore // call_hooks('atom_feed', $atom); - if(! count($items)) { + if (!count($items) OR $onlyheader) { $atom = trim($doc->saveXML()); call_hooks('atom_feed_end', $atom); diff --git a/mod/dfrn_poll.php b/mod/dfrn_poll.php index ab6637607..9613229da 100644 --- a/mod/dfrn_poll.php +++ b/mod/dfrn_poll.php @@ -25,6 +25,8 @@ function dfrn_poll_init(&$a) { $dfrn_id = substr($dfrn_id,2); } + $hidewall = false; + if(($dfrn_id === '') && (! x($_POST,'dfrn_id'))) { if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) { http_status_exit(403); @@ -35,16 +37,17 @@ function dfrn_poll_init(&$a) { $r = q("SELECT `hidewall`,`nickname` FROM `user` WHERE `user`.`nickname` = '%s' LIMIT 1", dbesc($a->argv[1]) ); - if(! $r) + if (!$r) http_status_exit(404); - if(($r[0]['hidewall']) && (! local_user())) - http_status_exit(403); + + $hidewall = ($r[0]['hidewall'] && !local_user()); + $user = $r[0]['nickname']; } logger('dfrn_poll: public feed request from ' . $_SERVER['REMOTE_ADDR'] . ' for ' . $user); header("Content-type: application/atom+xml"); - echo dfrn::feed('', $user,$last_update); + echo dfrn::feed('', $user,$last_update, 0, $hidewall); killme(); } From b7c14803b228505e277b1a313f720969f1740718 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 6 May 2016 18:27:19 +0200 Subject: [PATCH 2/3] The feed header is now displayed even with "hidewall" activated --- include/dfrn.php | 64 +++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/include/dfrn.php b/include/dfrn.php index 5778d4ba5..21756b87d 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -462,45 +462,53 @@ class dfrn { */ private function add_author($doc, $owner, $authorelement, $public) { - $author = $doc->createElement($authorelement); - - $namdate = datetime_convert('UTC', 'UTC', $owner['name-date'].'+00:00' , ATOM_TIME); - $uridate = datetime_convert('UTC', 'UTC', $owner['uri-date'].'+00:00', ATOM_TIME); - $picdate = datetime_convert('UTC', 'UTC', $owner['avatar-date'].'+00:00', ATOM_TIME); - - $attributes = array("dfrn:updated" => $namdate); - xml::add_element($doc, $author, "name", $owner["name"], $attributes); - - $attributes = array("dfrn:updated" => $namdate); - xml::add_element($doc, $author, "uri", app::get_baseurl().'/profile/'.$owner["nickname"], $attributes); - - $attributes = array("dfrn:updated" => $namdate); - xml::add_element($doc, $author, "dfrn:handle", $owner["addr"], $attributes); - - $attributes = array("rel" => "photo", "type" => "image/jpeg", "dfrn:updated" => $picdate, - "media:width" => 175, "media:height" => 175, "href" => $owner['photo']); - xml::add_element($doc, $author, "link", "", $attributes); - - $attributes = array("rel" => "avatar", "type" => "image/jpeg", "dfrn:updated" => $picdate, - "media:width" => 175, "media:height" => 175, "href" => $owner['photo']); - xml::add_element($doc, $author, "link", "", $attributes); - - $birthday = feed_birthday($owner['uid'], $owner['timezone']); - - if ($birthday) - xml::add_element($doc, $author, "dfrn:birthday", $birthday); - // Is the profile hidden or shouldn't be published in the net? Then add the "hide" element $r = q("SELECT `id` FROM `profile` INNER JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE (`hidewall` OR NOT `net-publish`) AND `user`.`uid` = %d", intval($owner['uid'])); if ($r) + $hidewall = true; + else + $hidewall = false; + + $author = $doc->createElement($authorelement); + + $namdate = datetime_convert('UTC', 'UTC', $owner['name-date'].'+00:00', ATOM_TIME); + $uridate = datetime_convert('UTC', 'UTC', $owner['uri-date'].'+00:00', ATOM_TIME); + $picdate = datetime_convert('UTC', 'UTC', $owner['avatar-date'].'+00:00', ATOM_TIME); + + if (!$public OR !$hidewall) + $attributes = array("dfrn:updated" => $namdate); + else + $attributes = array(); + + xml::add_element($doc, $author, "name", $owner["name"], $attributes); + xml::add_element($doc, $author, "uri", app::get_baseurl().'/profile/'.$owner["nickname"], $attributes); + xml::add_element($doc, $author, "dfrn:handle", $owner["addr"], $attributes); + + $attributes = array("rel" => "photo", "type" => "image/jpeg", + "media:width" => 175, "media:height" => 175, "href" => $owner['photo']); + + if (!$public OR !$hidewall) + $attributes["dfrn:updated"] = $picdate; + + xml::add_element($doc, $author, "link", "", $attributes); + + $attributes["rel"] = "avatar"; + xml::add_element($doc, $author, "link", "", $attributes); + + if ($hidewall) xml::add_element($doc, $author, "dfrn:hide", "true"); // The following fields will only be generated if the data isn't meant for a public feed if ($public) return $author; + $birthday = feed_birthday($owner['uid'], $owner['timezone']); + + if ($birthday) + xml::add_element($doc, $author, "dfrn:birthday", $birthday); + // Only show contact details when we are allowed to $r = q("SELECT `profile`.`about`, `profile`.`name`, `profile`.`homepage`, `user`.`nickname`, `user`.`timezone`, `profile`.`locality`, `profile`.`region`, `profile`.`country-name`, `profile`.`pub_keywords`, `profile`.`dob` From 4d105111a7cca83de591e427ea81af5c45c3e0e2 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 6 May 2016 18:30:34 +0200 Subject: [PATCH 3/3] Added documentation --- include/dfrn.php | 1 + 1 file changed, 1 insertion(+) diff --git a/include/dfrn.php b/include/dfrn.php index 21756b87d..a974056e6 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -68,6 +68,7 @@ class dfrn { * @param string $owner_nick Owner nick name * @param string $last_update Date of the last update * @param int $direction Can be -1, 0 or 1. + * @param boolean $onlyheader Output only the header without content? (Default is "no") * * @return string DFRN feed entries */