]> git.mxchange.org Git - friendica.git/commitdiff
Merge branch 'develop' into task/3954-move-auth-to-src
authorHypolite Petovan <mrpetovan@gmail.com>
Wed, 3 Jan 2018 00:30:41 +0000 (19:30 -0500)
committerHypolite Petovan <mrpetovan@gmail.com>
Wed, 3 Jan 2018 00:30:41 +0000 (19:30 -0500)
54 files changed:
boot.php
include/bb2diaspora.php
include/bbcode.php
include/conversation.php
include/crypto.php [deleted file]
include/event.php
include/identity.php
include/items.php
include/oembed.php [deleted file]
include/tags.php
include/text.php
index.php
mod/contacts.php
mod/crepair.php
mod/dfrn_confirm.php
mod/dfrn_poll.php
mod/display.php
mod/events.php
mod/fetch.php
mod/hostxrd.php
mod/hovercard.php
mod/item.php
mod/message.php
mod/network.php
mod/nogroup.php
mod/oembed.php [deleted file]
mod/photo.php
mod/photos.php
mod/ping.php
mod/profile.php
mod/receive.php
mod/salmon.php
mod/videos.php
mod/xrd.php
src/App.php
src/Content/OEmbed.php [new file with mode: 0644]
src/Core/Worker.php
src/Model/Contact.php
src/Model/User.php
src/Module/Feed.php [new file with mode: 0644]
src/Module/Oembed.php [new file with mode: 0644]
src/Network/Probe.php
src/Object/Post.php
src/ParseUrl.php
src/Protocol/DFRN.php
src/Protocol/Diaspora.php
src/Protocol/OStatus.php
src/Protocol/Salmon.php
src/Util/Crypto.php [new file with mode: 0644]
src/Worker/PubSubPublish.php
view/templates/shared_content.tpl
view/theme/frio/style.php
view/theme/frio/templates/searchbox.tpl
view/theme/frio/theme.php

index be97cab75713ffa32911041185e07b88cee8b724..379d1bf3daad640bb35670f0815f505a827321b2 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -573,6 +573,51 @@ function x($s, $k = null)
        }
 }
 
+/**
+ * Return the provided variable value if it exists and is truthy or the provided
+ * default value instead.
+ *
+ * Works with initialized variables and potentially uninitialized array keys
+ *
+ * Usages:
+ * - defaults($var, $default)
+ * - defaults($array, 'key', $default)
+ *
+ * @brief Returns a defaut value if the provided variable or array key is falsy
+ * @see x()
+ * @return mixed
+ */
+function defaults() {
+       $args = func_get_args();
+
+       if (count($args) < 2) {
+               throw new BadFunctionCallException('defaults() requires at least 2 parameters');
+       }
+       if (count($args) > 3) {
+               throw new BadFunctionCallException('defaults() cannot use more than 3 parameters');
+       }
+       if (count($args) === 3 && !is_array($args[0])) {
+               throw new BadFunctionCallException('defaults($arr, $key, $def) requires an array as first parameter');
+       }
+       if (count($args) === 3 && is_null($args[1])) {
+               throw new BadFunctionCallException('defaults($arr, $key, $def) $key is null');
+       }
+
+       $default = array_pop($args);
+
+       if (call_user_func_array('x', $args)) {
+               if (count($args) === 1) {
+                       $return = $args[0];
+               } else {
+                       $return = $args[0][$args[1]];
+               }
+       } else {
+               $return = $default;
+       }
+
+       return $return;
+}
+
 /**
  * @brief Returns the baseurl.
  *
@@ -1516,14 +1561,11 @@ function argv($x)
 function infinite_scroll_data($module)
 {
        if (PConfig::get(local_user(), 'system', 'infinite_scroll')
-               && ($module == "network") && ($_GET["mode"] != "minimal")
+               && $module == 'network'
+               && defaults($_GET, 'mode', '') != 'minimal'
        ) {
                // get the page number
-               if (is_string($_GET["page"])) {
-                       $pageno = $_GET["page"];
-               } else {
-                       $pageno = 1;
-               }
+               $pageno = defaults($_GET, 'page', 1);
 
                $reload_uri = "";
 
@@ -1534,7 +1576,8 @@ function infinite_scroll_data($module)
                        }
                }
 
-               if (($a->page_offset != "") && ! strstr($reload_uri, "&offset=")) {
+               $a = get_app();
+               if ($a->page_offset != "" && !strstr($reload_uri, "&offset=")) {
                        $reload_uri .= "&offset=" . urlencode($a->page_offset);
                }
 
index e1a67d432d261600cae885ed2185b422275288cd..714d780048b9724fe48f5570cd78ed6a433f65a7 100644 (file)
@@ -7,7 +7,6 @@ use Friendica\Network\Probe;
 
 use League\HTMLToMarkdown\HtmlConverter;
 
-require_once 'include/oembed.php';
 require_once 'include/event.php';
 require_once 'library/markdown.php';
 require_once 'include/html2bbcode.php';
index be59c180726860a0292f2e10ef0b9e574afbd56f..261bdfcf660cc69034a5c927088a77a08aaf0bd8 100644 (file)
@@ -2,13 +2,13 @@
 
 use Friendica\App;
 use Friendica\Content\Smilies;
+use Friendica\Content\OEmbed;
 use Friendica\Core\Cache;
 use Friendica\Core\System;
 use Friendica\Core\Config;
 use Friendica\Model\Contact;
 use Friendica\Util\Map;
 
-require_once 'include/oembed.php';
 require_once 'include/event.php';
 require_once 'mod/proxy.php';
 require_once 'include/plaintext.php';
@@ -232,7 +232,7 @@ function tryoembed($match) {
        $url = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"),
                                array("https://www.youtube.com/", "https://player.vimeo.com/"), $url);
 
-       $o = oembed_fetch_url($url);
+       $o = OEmbed::fetchURL($url);
 
        if (!is_object($o)) {
                return $match[0];
@@ -246,7 +246,7 @@ function tryoembed($match) {
                return $match[0];
        }
 
-       $html = oembed_format_object($o);
+       $html = OEmbed::formatObject($o);
 
        return $html;
 }
@@ -435,60 +435,65 @@ function bb_replace_images($body, $images) {
        return $newbody;
 }
 
-function bb_ShareAttributes($share, $simplehtml) {
+function bb_ShareAttributes($share, $simplehtml)
+{
        $attributes = $share[2];
 
        $author = "";
        preg_match("/author='(.*?)'/ism", $attributes, $matches);
-       if ($matches[1] != "")
-               $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8');
+       if (x($matches, 1)) {
+               $author = html_entity_decode($matches[1], ENT_QUOTES, 'UTF-8');
+       }
 
        preg_match('/author="(.*?)"/ism', $attributes, $matches);
-       if ($matches[1] != "")
+       if (x($matches, 1)) {
                $author = $matches[1];
+       }
 
        $profile = "";
        preg_match("/profile='(.*?)'/ism", $attributes, $matches);
-       if ($matches[1] != "")
+       if (x($matches, 1)) {
                $profile = $matches[1];
+       }
 
        preg_match('/profile="(.*?)"/ism', $attributes, $matches);
-       if ($matches[1] != "")
+       if (x($matches, 1)) {
                $profile = $matches[1];
+       }
 
        $avatar = "";
        preg_match("/avatar='(.*?)'/ism", $attributes, $matches);
-       if ($matches[1] != "")
+       if (x($matches, 1)) {
                $avatar = $matches[1];
+       }
 
        preg_match('/avatar="(.*?)"/ism', $attributes, $matches);
-       if ($matches[1] != "")
+       if (x($matches, 1)) {
                $avatar = $matches[1];
+       }
 
        $link = "";
        preg_match("/link='(.*?)'/ism", $attributes, $matches);
-       if ($matches[1] != "")
+       if (x($matches, 1)) {
                $link = $matches[1];
+       }
 
        preg_match('/link="(.*?)"/ism', $attributes, $matches);
-       if ($matches[1] != "")
+       if (x($matches, 1)) {
                $link = $matches[1];
+       }
 
        $posted = "";
 
-       $itemcache = get_itemcachepath();
-
        preg_match("/posted='(.*?)'/ism", $attributes, $matches);
-       if ($matches[1] != "")
+       if (x($matches, 1)) {
                $posted = $matches[1];
+       }
 
        preg_match('/posted="(.*?)"/ism', $attributes, $matches);
-       if ($matches[1] != "")
+       if (x($matches, 1)) {
                $posted = $matches[1];
-
-       // relative dates only make sense when they aren't cached
-       if ($itemcache == "")
-               $reldate = (($posted) ? " " . relative_date($posted) : '');
+       }
 
        // We only call this so that a previously unknown contact can be added.
        // This is important for the function "get_contact_details_by_url".
@@ -497,99 +502,107 @@ function bb_ShareAttributes($share, $simplehtml) {
 
        $data = Contact::getDetailsByURL($profile);
 
-       if (isset($data["name"]) && ($data["name"] != "") && isset($data["addr"]) && ($data["addr"] != ""))
-               $userid_compact = $data["name"]." (".$data["addr"].")";
-       else
-               $userid_compact = GetProfileUsername($profile,$author, true);
+       if (x($data, "name") && x($data, "addr")) {
+               $userid_compact = $data["name"] . " (" . $data["addr"] . ")";
+       } else {
+               $userid_compact = GetProfileUsername($profile, $author, true);
+       }
 
-       if (isset($data["addr"]) && ($data["addr"] != ""))
+       if (x($data, "addr")) {
                $userid = $data["addr"];
-       else
-               $userid = GetProfileUsername($profile,$author, false);
+       } else {
+               $userid = GetProfileUsername($profile, $author, false);
+       }
 
-       if (isset($data["name"]) && ($data["name"] != ""))
+       if (x($data, "name")) {
                $author = $data["name"];
+       }
 
-       if (isset($data["micro"]) && ($data["micro"] != ""))
+       if (x($data, "micro")) {
                $avatar = $data["micro"];
+       }
 
        $preshare = trim($share[1]);
 
-       if ($preshare != "")
+       if ($preshare != "") {
                $preshare .= "<br /><br />";
+       }
 
        switch ($simplehtml) {
                case 1:
-                       $text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').' <a href="'.$profile.'">'.$userid."</a>: <br />»".$share[3]."«";
+                       $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . ' <a href="' . $profile . '">' . $userid . "</a>: <br />»" . $share[3] . "«";
                        break;
                case 2:
-                       $text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').' '.$userid_compact.": <br />".$share[3];
+                       $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . ' ' . $userid_compact . ": <br />" . $share[3];
                        break;
                case 3: // Diaspora
-                       $headline .= '<b>'.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').$userid.':</b><br />';
+                       $headline .= '<b>' . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . $userid . ':</b><br />';
 
                        $text = trim($share[1]);
 
-                       if ($text != "")
+                       if ($text != "") {
                                $text .= "<hr />";
+                       }
 
                        if (substr(normalise_link($link), 0, 19) != "http://twitter.com/") {
-                               $text .= $headline.'<blockquote>'.trim($share[3])."</blockquote><br />";
+                               $text .= $headline . '<blockquote>' . trim($share[3]) . "</blockquote><br />";
 
-                               if ($link != "")
-                                       $text .= '<br /><a href="'.$link.'">[l]</a>';
-                       } else
-                               $text .= '<br /><a href="'.$link.'">'.$link.'</a>';
+                               if ($link != "") {
+                                       $text .= '<br /><a href="' . $link . '">[l]</a>';
+                               }
+                       } else {
+                               $text .= '<br /><a href="' . $link . '">' . $link . '</a>';
+                       }
 
                        break;
                case 4:
-                       $headline .= '<br /><b>'.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8');
-                       $headline .= sprintf(t('<a href="%1$s" target="_blank">%2$s</a> %3$s'), $link, $userid, $posted);
+                       $headline .= '<br /><b>' . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8');
+                       $headline .= t('<a href="%1$s" target="_blank">%2$s</a> %3$s', $link, $userid, $posted);
                        $headline .= ":</b><br />";
 
                        $text = trim($share[1]);
 
-                       if ($text != "")
+                       if ($text != "") {
                                $text .= "<hr />";
+                       }
 
-                       $text .= $headline.'<blockquote class="shared_content">'.trim($share[3])."</blockquote><br />";
+                       $text .= $headline . '<blockquote class="shared_content">' . trim($share[3]) . "</blockquote><br />";
 
                        break;
                case 5:
-                       $text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').' '.$userid_compact.": <br />".$share[3];
+                       $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . ' ' . $userid_compact . ": <br />" . $share[3];
                        break;
                case 6: // app.net
-                       $text = $preshare."&gt;&gt; @".$userid_compact.": <br />".$share[3];
+                       $text = $preshare . "&gt;&gt; @" . $userid_compact . ": <br />" . $share[3];
                        break;
                case 7: // statusnet/GNU Social
-                       $text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8')." @".$userid_compact.": ".$share[3];
+                       $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . " @" . $userid_compact . ": " . $share[3];
                        break;
                case 8: // twitter
-                       $text = $preshare."RT @".$userid_compact.": ".$share[3];
+                       $text = $preshare . "RT @" . $userid_compact . ": " . $share[3];
                        break;
                case 9: // Google+/Facebook
-                       $text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').' '.$userid_compact.": <br />".$share[3];
+                       $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . ' ' . $userid_compact . ": <br />" . $share[3];
 
-                       if ($link != "")
-                               $text .= "<br /><br />".$link;
+                       if ($link != "") {
+                               $text .= "<br /><br />" . $link;
+                       }
                        break;
                default:
-                       $text = trim($share[1])."\n";
+                       $text = trim($share[1]) . "\n";
 
                        $avatar = proxy_url($avatar, false, PROXY_SIZE_THUMB);
 
                        $tpl = get_markup_template('shared_content.tpl');
-                       $text .= replace_macros($tpl,
-                                       array(
-                                               '$profile' => $profile,
-                                               '$avatar' => $avatar,
-                                               '$author' => $author,
-                                               '$link' => $link,
-                                               '$posted' => $posted,
-                                               '$reldate' => $reldate,
-                                               '$content' => trim($share[3])
-                                       )
-                               );
+                       $text .= replace_macros($tpl, array(
+                                       '$profile' => $profile,
+                                       '$avatar' => $avatar,
+                                       '$author' => $author,
+                                       '$link' => $link,
+                                       '$posted' => $posted,
+                                       '$content' => trim($share[3])
+                               )
+                       );
                        break;
        }
 
@@ -1263,7 +1276,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa
 //     $Text = preg_replace("/\[youtube\](.*?)\[\/youtube\]/", '<object width="425" height="350" type="application/x-shockwave-flash" data="http://www.youtube.com/v/$1" ><param name="movie" value="http://www.youtube.com/v/$1"></param><!--[if IE]><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" width="425" height="350" /><![endif]--></object>', $Text);
 
        // oembed tag
-       $Text = oembed_bbcode2html($Text);
+       $Text = OEmbed::BBCode2HTML($Text);
 
        // Avoid triple linefeeds through oembed
        $Text = str_replace("<br style='clear:left'></span><br /><br />", "<br style='clear:left'></span><br />", $Text);
index ee68d8f5c91fc0351c7aa73835f5fbc27ec8b17b..958d507d78d979223c71c9c773ebbf73c15d3154 100644 (file)
@@ -545,8 +545,10 @@ function conversation(App $a, $items, $mode, $update, $preview = false) {
                $profile_owner = $a->profile['profile_uid'];
 
                if (!$update) {
-                       $tab = notags(trim($_GET['tab']));
-                       $tab = ( $tab ? $tab : 'posts' );
+                       $tab = 'posts';
+                       if (x($_GET, 'tab')) {
+                               $tab = notags(trim($_GET['tab']));
+                       }
                        if ($tab === 'posts') {
                                /*
                                 * This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
@@ -647,20 +649,10 @@ function conversation(App $a, $items, $mode, $update, $preview = false) {
 
                                $threadsid++;
 
-                               $comment     = '';
                                $owner_url   = '';
                                $owner_name  = '';
                                $sparkle     = '';
 
-                               if ($mode === 'search' || $mode === 'community') {
-                                       if (((activity_match($item['verb'], ACTIVITY_LIKE)) || (activity_match($item['verb'], ACTIVITY_DISLIKE)))
-                                               && ($item['id'] != $item['parent']))
-                                               continue;
-                                       $nickname = $item['nickname'];
-                               } else {
-                                       $nickname = $a->user['nickname'];
-                               }
-
                                // prevent private email from leaking.
                                if ($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) {
                                        continue;
@@ -813,7 +805,6 @@ function conversation(App $a, $items, $mode, $update, $preview = false) {
                                        'like' => '',
                                        'dislike' => '',
                                        'comment' => '',
-                                       //'conv' => (($preview) ? '' : array('href'=> 'display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))),
                                        'conv' => (($preview) ? '' : array('href'=> 'display/'.$item['guid'], 'title'=> t('View in context'))),
                                        'previewing' => $previewing,
                                        'wait' => t('Please wait'),
@@ -1197,39 +1188,40 @@ function format_like($cnt, array $arr, $type, $id) {
        return $o;
 }
 
-function status_editor(App $a, $x, $notes_cid = 0, $popup = false) {
+function status_editor(App $a, $x, $notes_cid = 0, $popup = false)
+{
        $o = '';
 
-       $geotag = (x($x, 'allow_location') ? replace_macros(get_markup_template('jot_geotag.tpl'), array()) : '');
+       $geotag = x($x, 'allow_location') ? replace_macros(get_markup_template('jot_geotag.tpl'), array()) : '';
 
        $tpl = get_markup_template('jot-header.tpl');
        $a->page['htmlhead'] .= replace_macros($tpl, array(
-               '$newpost' => 'true',
-               '$baseurl' => System::baseUrl(true),
-               '$geotag' => $geotag,
-               '$nickname' => $x['nickname'],
-               '$ispublic' => t('Visible to <strong>everybody</strong>'),
-               '$linkurl' => t('Please enter a link URL:'),
-               '$vidurl' => t("Please enter a video link/URL:"),
-               '$audurl' => t("Please enter an audio link/URL:"),
-               '$term' => t('Tag term:'),
-               '$fileas' => t('Save to Folder:'),
+               '$newpost'   => 'true',
+               '$baseurl'   => System::baseUrl(true),
+               '$geotag'    => $geotag,
+               '$nickname'  => $x['nickname'],
+               '$ispublic'  => t('Visible to <strong>everybody</strong>'),
+               '$linkurl'   => t('Please enter a link URL:'),
+               '$vidurl'    => t("Please enter a video link/URL:"),
+               '$audurl'    => t("Please enter an audio link/URL:"),
+               '$term'      => t('Tag term:'),
+               '$fileas'    => t('Save to Folder:'),
                '$whereareu' => t('Where are you right now?'),
-               '$delitems' => t('Delete item(s)?')
+               '$delitems'  => t('Delete item(s)?')
        ));
 
        $tpl = get_markup_template('jot-end.tpl');
        $a->page['end'] .= replace_macros($tpl, array(
-               '$newpost' => 'true',
-               '$baseurl' => System::baseUrl(true),
-               '$geotag' => $geotag,
-               '$nickname' => $x['nickname'],
-               '$ispublic' => t('Visible to <strong>everybody</strong>'),
-               '$linkurl' => t('Please enter a link URL:'),
-               '$vidurl' => t("Please enter a video link/URL:"),
-               '$audurl' => t("Please enter an audio link/URL:"),
-               '$term' => t('Tag term:'),
-               '$fileas' => t('Save to Folder:'),
+               '$newpost'   => 'true',
+               '$baseurl'   => System::baseUrl(true),
+               '$geotag'    => $geotag,
+               '$nickname'  => $x['nickname'],
+               '$ispublic'  => t('Visible to <strong>everybody</strong>'),
+               '$linkurl'   => t('Please enter a link URL:'),
+               '$vidurl'    => t("Please enter a video link/URL:"),
+               '$audurl'    => t("Please enter an audio link/URL:"),
+               '$term'      => t('Tag term:'),
+               '$fileas'    => t('Save to Folder:'),
                '$whereareu' => t('Where are you right now?')
        ));
 
@@ -1262,57 +1254,56 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) {
        $tpl = get_markup_template("jot.tpl");
 
        $o .= replace_macros($tpl,array(
-               '$return_path' => $query_str,
-               '$action' =>  'item',
-               '$share' => (x($x,'button') ? $x['button'] : t('Share')),
-               '$upload' => t('Upload photo'),
-               '$shortupload' => t('upload photo'),
-               '$attach' => t('Attach file'),
-               '$shortattach' => t('attach file'),
-               '$weblink' => t('Insert web link'),
+               '$return_path'  => $query_str,
+               '$action'       => 'item',
+               '$share'        => defaults($x, 'button', t('Share')),
+               '$upload'       => t('Upload photo'),
+               '$shortupload'  => t('upload photo'),
+               '$attach'       => t('Attach file'),
+               '$shortattach'  => t('attach file'),
+               '$weblink'      => t('Insert web link'),
                '$shortweblink' => t('web link'),
-               '$video' => t('Insert video link'),
-               '$shortvideo' => t('video link'),
-               '$audio' => t('Insert audio link'),
-               '$shortaudio' => t('audio link'),
-               '$setloc' => t('Set your location'),
-               '$shortsetloc' => t('set location'),
-               '$noloc' => t('Clear browser location'),
-               '$shortnoloc' => t('clear location'),
-               '$title' => $x['title'],
+               '$video'        => t('Insert video link'),
+               '$shortvideo'   => t('video link'),
+               '$audio'        => t('Insert audio link'),
+               '$shortaudio'   => t('audio link'),
+               '$setloc'       => t('Set your location'),
+               '$shortsetloc'  => t('set location'),
+               '$noloc'        => t('Clear browser location'),
+               '$shortnoloc'   => t('clear location'),
+               '$title'        => defaults($x, 'title', ''),
                '$placeholdertitle' => t('Set title'),
-               '$category' => $x['category'],
-               '$placeholdercategory' => (Feature::isEnabled(local_user(), 'categories') ? t('Categories (comma-separated list)') : ''),
-               '$wait' => t('Please wait'),
-               '$permset' => t('Permission settings'),
+               '$category'     => defaults($x, 'category', ''),
+               '$placeholdercategory' => Feature::isEnabled(local_user(), 'categories') ? t('Categories (comma-separated list)') : '',
+               '$wait'         => t('Please wait'),
+               '$permset'      => t('Permission settings'),
                '$shortpermset' => t('permissions'),
-               '$ptyp' => (($notes_cid) ? 'note' : 'wall'),
-               '$content' => $x['content'],
-               '$post_id' => $x['post_id'],
-               '$baseurl' => System::baseUrl(true),
-               '$defloc' => $x['default_location'],
-               '$visitor' => $x['visitor'],
-               '$pvisit' => (($notes_cid) ? 'none' : $x['visitor']),
-               '$public' => t('Public post'),
-               '$jotnets' => $jotnets,
-               '$lockstate' => $x['lockstate'],
-               '$bang' => $x['bang'],
-               '$profile_uid' => $x['profile_uid'],
-               '$preview' => ((Feature::isEnabled($x['profile_uid'],'preview')) ? t('Preview') : ''),
-               '$jotplugins' => $jotplugins,
-               '$notes_cid' => $notes_cid,
-               '$sourceapp' => t($a->sourcename),
-               '$cancel' => t('Cancel'),
-               '$rand_num' => random_digits(12),
+               '$ptyp'         => $notes_cid ? 'note' : 'wall',
+               '$content'      => defaults($x, 'content', ''),
+               '$post_id'      => defaults($x, 'post_id', ''),
+               '$baseurl'      => System::baseUrl(true),
+               '$defloc'       => $x['default_location'],
+               '$visitor'      => $x['visitor'],
+               '$pvisit'       => $notes_cid ? 'none' : $x['visitor'],
+               '$public'       => t('Public post'),
+               '$lockstate'    => $x['lockstate'],
+               '$bang'         => $x['bang'],
+               '$profile_uid'  => $x['profile_uid'],
+               '$preview'      => Feature::isEnabled($x['profile_uid'], 'preview') ? t('Preview') : '',
+               '$jotplugins'   => $jotplugins,
+               '$notes_cid'    => $notes_cid,
+               '$sourceapp'    => t($a->sourcename),
+               '$cancel'       => t('Cancel'),
+               '$rand_num'     => random_digits(12),
 
                // ACL permissions box
-               '$acl' => $x['acl'],
-               '$acl_data' => $x['acl_data'],
-               '$group_perms' => t('Post to Groups'),
+               '$acl'           => $x['acl'],
+               '$acl_data'      => $x['acl_data'],
+               '$group_perms'   => t('Post to Groups'),
                '$contact_perms' => t('Post to Contacts'),
-               '$private' => t('Private post'),
-               '$is_private' => $private_post,
-               '$public_link' => $public_post_link,
+               '$private'       => t('Private post'),
+               '$is_private'    => $private_post,
+               '$public_link'   => $public_post_link,
 
                //jot nav tab (used in some themes)
                '$message' => t('Message'),
@@ -1321,7 +1312,7 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) {
 
 
        if ($popup == true) {
-               $o = '<div id="jot-popup" style="display: none;">'.$o.'</div>';
+               $o = '<div id="jot-popup" style="display: none;">' . $o . '</div>';
        }
 
        return $o;
@@ -1577,9 +1568,9 @@ function get_responses($conv_responses, $response_verbs, $ob, $item) {
        $ret = array();
        foreach ($response_verbs as $v) {
                $ret[$v] = array();
-               $ret[$v]['count'] = ((x($conv_responses[$v], $item['uri'])) ? $conv_responses[$v][$item['uri']] : '');
-               $ret[$v]['list']  = ((x($conv_responses[$v], $item['uri'])) ? $conv_responses[$v][$item['uri'] . '-l'] : '');
-               $ret[$v]['self']  = ((x($conv_responses[$v], $item['uri'])) ? $conv_responses[$v][$item['uri'] . '-self'] : '0');
+               $ret[$v]['count'] = defaults($conv_responses[$v], $item['uri'], '');
+               $ret[$v]['list']  = defaults($conv_responses[$v], $item['uri'] . '-l', '');
+               $ret[$v]['self']  = defaults($conv_responses[$v], $item['uri'] . '-self', '0');
                if (count($ret[$v]['list']) > MAX_LIKERS) {
                        $ret[$v]['list_part'] = array_slice($ret[$v]['list'], 0, MAX_LIKERS);
                        array_push($ret[$v]['list_part'], '<a href="#" data-toggle="modal" data-target="#' . $v . 'Modal-'
diff --git a/include/crypto.php b/include/crypto.php
deleted file mode 100644 (file)
index dfc44c1..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-<?php
-
-use Friendica\Core\Config;
-
-require_once 'library/ASNValue.class.php';
-require_once 'library/asn1.php';
-
-// supported algorithms are 'sha256', 'sha1'
-
-function rsa_sign($data, $key, $alg = 'sha256') {
-       openssl_sign($data, $sig, $key, (($alg == 'sha1') ? OPENSSL_ALGO_SHA1 : $alg));
-       return $sig;
-}
-
-function rsa_verify($data, $sig, $key, $alg = 'sha256') {
-       return openssl_verify($data, $sig, $key, (($alg == 'sha1') ? OPENSSL_ALGO_SHA1 : $alg));
-}
-
-function DerToPem($Der, $Private = false) {
-       //Encode:
-       $Der = base64_encode($Der);
-       //Split lines:
-       $lines = str_split($Der, 65);
-       $body = implode("\n", $lines);
-       //Get title:
-       $title = $Private ? 'RSA PRIVATE KEY' : 'PUBLIC KEY';
-       //Add wrapping:
-       $result = "-----BEGIN {$title}-----\n";
-       $result .= $body . "\n";
-       $result .= "-----END {$title}-----\n";
-
-       return $result;
-}
-
-function DerToRsa($Der) {
-       //Encode:
-       $Der = base64_encode($Der);
-       //Split lines:
-       $lines = str_split($Der, 64);
-       $body = implode("\n", $lines);
-       //Get title:
-       $title = 'RSA PUBLIC KEY';
-       //Add wrapping:
-       $result = "-----BEGIN {$title}-----\n";
-       $result .= $body . "\n";
-       $result .= "-----END {$title}-----\n";
-
-       return $result;
-}
-
-function pkcs8_encode($Modulus, $PublicExponent) {
-       //Encode key sequence
-       $modulus = new ASNValue(ASNValue::TAG_INTEGER);
-       $modulus->SetIntBuffer($Modulus);
-       $publicExponent = new ASNValue(ASNValue::TAG_INTEGER);
-       $publicExponent->SetIntBuffer($PublicExponent);
-       $keySequenceItems = array($modulus, $publicExponent);
-       $keySequence = new ASNValue(ASNValue::TAG_SEQUENCE);
-       $keySequence->SetSequence($keySequenceItems);
-       //Encode bit string
-       $bitStringValue = $keySequence->Encode();
-       $bitStringValue = chr(0x00) . $bitStringValue; //Add unused bits byte
-       $bitString = new ASNValue(ASNValue::TAG_BITSTRING);
-       $bitString->Value = $bitStringValue;
-       //Encode body
-       $bodyValue = "\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01\x05\x00" . $bitString->Encode();
-       $body = new ASNValue(ASNValue::TAG_SEQUENCE);
-       $body->Value = $bodyValue;
-       //Get DER encoded public key:
-       $PublicDER = $body->Encode();
-       return $PublicDER;
-}
-
-function pkcs1_encode($Modulus, $PublicExponent) {
-       //Encode key sequence
-       $modulus = new ASNValue(ASNValue::TAG_INTEGER);
-       $modulus->SetIntBuffer($Modulus);
-       $publicExponent = new ASNValue(ASNValue::TAG_INTEGER);
-       $publicExponent->SetIntBuffer($PublicExponent);
-       $keySequenceItems = array($modulus, $publicExponent);
-       $keySequence = new ASNValue(ASNValue::TAG_SEQUENCE);
-       $keySequence->SetSequence($keySequenceItems);
-       //Encode bit string
-       $bitStringValue = $keySequence->Encode();
-       return $bitStringValue;
-}
-
-function metopem($m, $e) {
-       $der = pkcs8_encode($m, $e);
-       $key = DerToPem($der, false);
-       return $key;
-}
-
-function pubrsatome($key, &$m, &$e)
-{
-       require_once 'library/asn1.php';
-
-       $lines = explode("\n", $key);
-       unset($lines[0]);
-       unset($lines[count($lines)]);
-       $x = base64_decode(implode('', $lines));
-
-       $r = ASN_BASE::parseASNString($x);
-
-       $m = base64url_decode($r[0]->asnData[0]->asnData);
-       $e = base64url_decode($r[0]->asnData[1]->asnData);
-}
-
-
-function rsatopem($key) {
-       pubrsatome($key, $m, $e);
-       return metopem($m, $e);
-}
-
-function pemtorsa($key) {
-       pemtome($key, $m, $e);
-       return metorsa($m, $e);
-}
-
-function pemtome($key, &$m, &$e)
-{
-       $lines = explode("\n", $key);
-       unset($lines[0]);
-       unset($lines[count($lines)]);
-       $x = base64_decode(implode('', $lines));
-
-       $r = ASN_BASE::parseASNString($x);
-
-       $m = base64url_decode($r[0]->asnData[1]->asnData[0]->asnData[0]->asnData);
-       $e = base64url_decode($r[0]->asnData[1]->asnData[0]->asnData[1]->asnData);
-}
-
-function metorsa($m, $e) {
-       $der = pkcs1_encode($m, $e);
-       $key = DerToRsa($der);
-       return $key;
-}
-
-function salmon_key($pubkey) {
-       pemtome($pubkey, $m, $e);
-       return 'RSA' . '.' . base64url_encode($m, true) . '.' . base64url_encode($e, true) ;
-}
-
-function new_keypair($bits) {
-       $openssl_options = array(
-               'digest_alg'       => 'sha1',
-               'private_key_bits' => $bits,
-               'encrypt_key'      => false
-       );
-
-       $conf = Config::get('system', 'openssl_conf_file');
-       if ($conf) {
-               $openssl_options['config'] = $conf;
-       }
-       $result = openssl_pkey_new($openssl_options);
-
-       if (empty($result)) {
-               logger('new_keypair: failed');
-               return false;
-       }
-
-       // Get private key
-       $response = array('prvkey' => '', 'pubkey' => '');
-
-       openssl_pkey_export($result, $response['prvkey']);
-
-       // Get public key
-       $pkey = openssl_pkey_get_details($result);
-       $response['pubkey'] = $pkey["key"];
-
-       return $response;
-}
index bc9467dc80217a1c352277ebaf94ef91c4fe6c3d..584a7076768337537f7f548921e0b6b1cf0f06d2 100644 (file)
@@ -13,7 +13,7 @@ use Friendica\Util\Map;
 
 require_once 'include/bbcode.php';
 require_once 'include/datetime.php';
-require_once "include/conversation.php";
+require_once 'include/conversation.php';
 
 function format_event_html($ev, $simple = false) {
        if (! ((is_array($ev)) && count($ev))) {
@@ -88,7 +88,7 @@ function format_event_html($ev, $simple = false) {
 
 /**
  * @brief Convert an array with event data to bbcode.
- * 
+ *
  * @param array $ev Array which conains the event data.
  * @return string The event as a bbcode formatted string.
  */
@@ -126,7 +126,7 @@ function format_event_bbcode($ev) {
 /**
  * @brief Extract bbcode formatted event data from a string
  *     and convert it to html.
- * 
+ *
  * @params: string $s The string which should be parsed for event data.
  * @return string The html output.
  */
@@ -143,7 +143,7 @@ function bbtovcal($s) {
 
 /**
  * @brief Extract bbcode formatted event data from a string.
- * 
+ *
  * @params: string $s The string which should be parsed for event data.
  * @return array The array with the event information.
  */
@@ -206,10 +206,10 @@ function ev_compare($a,$b) {
 
 /**
  * @brief Delete an event from the event table.
- * 
+ *
  * Note: This function does only delete the event from the event table not its
  * related entry in the item table.
- * 
+ *
  * @param int $event_id Event ID.
  * @return void
  */
@@ -224,9 +224,9 @@ function event_delete($event_id) {
 
 /**
  * @brief Store the event.
- * 
+ *
  * Store the event in the event table and create an event item in the item table.
- * 
+ *
  * @param array $arr Array with event data.
  * @return int The event id.
  */
@@ -433,7 +433,7 @@ function event_store($arr) {
 
 /**
  * @brief Create an array with translation strings used for events.
- * 
+ *
  * @return array Array with translations strings.
  */
 function get_event_strings() {
@@ -564,7 +564,7 @@ function event_by_id($owner_uid = 0, $event_params, $sql_extra = '') {
  *     string 'adjust_start' =>
  *
  * @param string $sql_extra Additional sql conditions (e.g. permission request).
- * 
+ *
  * @return array Query results.
  */
 function events_by_date($owner_uid = 0, $event_params, $sql_extra = '') {
@@ -626,6 +626,9 @@ function process_events($arr) {
 
                        // Show edit and drop actions only if the user is the owner of the event and the event
                        // is a real event (no bithdays).
+                       $edit = null;
+                       $copy = null;
+                       $drop = null;
                        if (local_user() && local_user() == $rr['uid'] && $rr['type'] == 'event') {
                                $edit = ((! $rr['cid']) ? array(System::baseUrl() . '/events/event/' . $rr['id'], t('Edit event'), '', '') : null);
                                $copy = ((! $rr['cid']) ? array(System::baseUrl() . '/events/copy/' . $rr['id'], t('Duplicate event'), '', '') : null);
@@ -768,7 +771,7 @@ function event_format_export ($events, $format = 'ical', $timezone) {
 
 /**
  * @brief Get all events for a user ID.
- * 
+ *
  *    The query for events is done permission sensitive.
  *    If the user is the owner of the calendar he/she
  *    will get all of his/her available events.
@@ -922,7 +925,7 @@ function widget_events() {
 
 /**
  * @brief Format an item array with event data to HTML.
- * 
+ *
  * @param arr $item Array with item and event data.
  * @return string HTML output.
  */
@@ -1013,12 +1016,12 @@ function format_event_item($item) {
 
 /**
  * @brief Format a string with map bbcode to an array with location data.
- * 
+ *
  * Note: The string must only contain location data. A string with no bbcode will be
  * handled as location name.
- * 
+ *
  * @param string $s The string with the bbcode formatted location data.
- * 
+ *
  * @return array The array with the location data.
  *  'name' => The name of the location,<br>
  * 'address' => The address of the location,<br>
index 9c315efbdeaecc6f6998d219057ca8f1a2e9b965..d78935778ae800cf2d4cb2d3ec37f3a3f215803f 100644 (file)
@@ -1,8 +1,8 @@
 <?php
+
 /**
  * @file include/identity.php
  */
-
 use Friendica\App;
 use Friendica\Content\Feature;
 use Friendica\Content\ForumManager;
@@ -50,13 +50,25 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
                dbesc($nickname)
        );
 
-       if (!$user && count($user) && !count($profiledata)) {
+       if (!$user && !count($user) && !count($profiledata)) {
                logger('profile error: ' . $a->query_string, LOGGER_DEBUG);
                notice(t('Requested account is not available.') . EOL);
                $a->error = 404;
                return;
        }
 
+       if (!x($a->page, 'aside')) {
+               $a->page['aside'] = '';
+       }
+
+       if ($profiledata) {
+               $a->page['aside'] .= profile_sidebar($profiledata, true, $show_connect);
+
+               if (!DBM::is_result($user)) {
+                       return;
+               }
+       }
+
        $pdata = get_profiledata_by_nick($nickname, $user[0]['uid'], $profile);
 
        if (empty($pdata) && empty($profiledata)) {
@@ -73,8 +85,9 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
                        "SELECT `pub_keywords` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1",
                        intval($pdata['profile_uid'])
                );
-               if ($x && count($x))
+               if ($x && count($x)) {
                        $pdata['pub_keywords'] = $x[0]['pub_keywords'];
+               }
        }
 
        $a->profile = $pdata;
@@ -83,9 +96,9 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
        $a->profile['mobile-theme'] = PConfig::get($a->profile['profile_uid'], 'system', 'mobile_theme');
        $a->profile['network'] = NETWORK_DFRN;
 
-       $a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename'];
+       $a->page['title'] = $a->profile['name'] . ' @ ' . $a->config['sitename'];
 
-       if (!$profiledata  && !PConfig::get(local_user(), 'system', 'always_my_theme')) {
+       if (!$profiledata && !PConfig::get(local_user(), 'system', 'always_my_theme')) {
                $_SESSION['theme'] = $a->profile['theme'];
        }
 
@@ -97,19 +110,18 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
 
        $a->set_template_engine(); // reset the template engine to the default in case the user's theme doesn't specify one
 
-       $theme_info_file = "view/theme/" . current_theme() . "/theme.php";
+       $theme_info_file = 'view/theme/' . current_theme() . '/theme.php';
        if (file_exists($theme_info_file)) {
                require_once $theme_info_file;
        }
 
-       if (! (x($a->page, 'aside'))) {
+       if (!x($a->page, 'aside')) {
                $a->page['aside'] = '';
        }
 
        if (local_user() && local_user() == $a->profile['uid'] && $profiledata) {
                $a->page['aside'] .= replace_macros(
-                       get_markup_template('profile_edlink.tpl'),
-                       array(
+                       get_markup_template('profile_edlink.tpl'), array(
                                '$editprofile' => t('Edit profile'),
                                '$profid' => $a->profile['id']
                        )
@@ -123,19 +135,13 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
         * By now, the contact block isn't shown, when a different profile is given
         * But: When this profile was on the same server, then we could display the contacts
         */
-       if ($profiledata) {
-               $a->page['aside'] .= profile_sidebar($profiledata, true, $show_connect);
-       } else {
+       if (!$profiledata) {
                $a->page['aside'] .= profile_sidebar($a->profile, $block, $show_connect);
        }
 
-       /*if (! $block)
-        $a->page['aside'] .= contact_block();*/
-
        return;
 }
 
-
 /**
  * @brief Get all profil data of a local user
  *
@@ -144,11 +150,12 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
  * Passing a non-zero profile ID can also allow a preview of a selected profile
  * by the owner
  *
+ * Includes all available profile data
+ *
  * @param string $nickname nick
  * @param int    $uid      uid
  * @param int    $profile  ID of the profile
  * @returns array
- *     Includes all available profile data
  */
 function get_profiledata_by_nick($nickname, $uid = 0, $profile = 0)
 {
@@ -198,7 +205,6 @@ function get_profiledata_by_nick($nickname, $uid = 0, $profile = 0)
        return $r;
 }
 
-
 /**
  * @brief Formats a profile for display in the sidebar.
  *
@@ -225,28 +231,27 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
        $o = '';
        $location = false;
        $address = false;
-       // $pdesc = true;
 
        // This function can also use contact information in $profile
        $is_contact = x($profile, 'cid');
 
-       if ((! is_array($profile)) && (! count($profile))) {
+       if (!is_array($profile) && !count($profile)) {
                return $o;
        }
 
-       $profile['picdate'] = urlencode($profile['picdate']);
+       $profile['picdate'] = urlencode(defaults($profile, 'picdate', ''));
 
-       if (($profile['network'] != "") && ($profile['network'] != NETWORK_DFRN)) {
+       if (($profile['network'] != '') && ($profile['network'] != NETWORK_DFRN)) {
                $profile['network_name'] = format_network_name($profile['network'], $profile['url']);
        } else {
-               $profile['network_name'] = "";
+               $profile['network_name'] = '';
        }
 
        call_hooks('profile_sidebar_enter', $profile);
 
 
        // don't show connect link to yourself
-       $connect = (($profile['uid'] != local_user()) ? t('Connect')  : false);
+       $connect = $profile['uid'] != local_user() ? t('Connect') : false;
 
        // don't show connect link to authenticated visitors either
        if (remote_user() && count($_SESSION['remote'])) {
@@ -264,10 +269,10 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
 
        // Is the local user already connected to that user?
        if ($connect && local_user()) {
-               if (isset($profile["url"])) {
-                       $profile_url = normalise_link($profile["url"]);
+               if (isset($profile['url'])) {
+                       $profile_url = normalise_link($profile['url']);
                } else {
-                       $profile_url = normalise_link(System::baseUrl()."/profile/".$profile["nickname"]);
+                       $profile_url = normalise_link(System::baseUrl() . '/profile/' . $profile['nickname']);
                }
 
                if (dba::exists('contact', array('pending' => false, 'uid' => local_user(), 'nurl' => $profile_url))) {
@@ -275,21 +280,24 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
                }
        }
 
-       if ($connect && ($profile['network'] != NETWORK_DFRN) && !isset($profile['remoteconnect']))
+       if ($connect && ($profile['network'] != NETWORK_DFRN) && !isset($profile['remoteconnect'])) {
                $connect = false;
+       }
 
        $remoteconnect = null;
-       if (isset($profile['remoteconnect']))
+       if (isset($profile['remoteconnect'])) {
                $remoteconnect = $profile['remoteconnect'];
+       }
 
-       if ($connect && ($profile['network'] == NETWORK_DFRN) && !isset($remoteconnect))
-               $subscribe_feed = t("Atom feed");
-       else
+       if ($connect && ($profile['network'] == NETWORK_DFRN) && !isset($remoteconnect)) {
+               $subscribe_feed = t('Atom feed');
+       } else {
                $subscribe_feed = false;
+       }
 
-       if (remote_user() || (get_my_url() && $profile['unkmail'] && ($profile['uid'] != local_user()))) {
+       if (remote_user() || (get_my_url() && x($profile, 'unkmail') && ($profile['uid'] != local_user()))) {
                $wallmessage = t('Message');
-               $wallmessage_link = "wallmessage/".$profile["nickname"];
+               $wallmessage_link = 'wallmessage/' . $profile['nickname'];
 
                if (remote_user()) {
                        $r = q(
@@ -307,9 +315,9 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
                        );
                }
                if ($r) {
-                       $remote_url = $r[0]["url"];
-                       $message_path = preg_replace("=(.*)/profile/(.*)=ism", "$1/message/new/", $remote_url);
-                       $wallmessage_link = $message_path.base64_encode($profile["addr"]);
+                       $remote_url = $r[0]['url'];
+                       $message_path = preg_replace('=(.*)/profile/(.*)=ism', '$1/message/new/', $remote_url);
+                       $wallmessage_link = $message_path . base64_encode($profile['addr']);
                }
        } else {
                $wallmessage = false;
@@ -318,7 +326,7 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
 
        // show edit profile to yourself
        if (!$is_contact && $profile['uid'] == local_user() && Feature::isEnabled(local_user(), 'multi_profiles')) {
-               $profile['edit'] = array(System::baseUrl(). '/profiles', t('Profiles'),"", t('Manage/edit profiles'));
+               $profile['edit'] = array(System::baseUrl() . '/profiles', t('Profiles'), '', t('Manage/edit profiles'));
                $r = q(
                        "SELECT * FROM `profile` WHERE `uid` = %d",
                        local_user()
@@ -338,14 +346,14 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
                                        'alt' => t('Profile Image'),
                                        'profile_name' => $rr['profile-name'],
                                        'isdefault' => $rr['is-default'],
-                                       'visibile_to_everybody' =>  t('visible to everybody'),
+                                       'visibile_to_everybody' => t('visible to everybody'),
                                        'edit_visibility' => t('Edit visibility'),
                                );
                        }
                }
        }
        if (!$is_contact && $profile['uid'] == local_user() && !Feature::isEnabled(local_user(), 'multi_profiles')) {
-               $profile['edit'] = array(System::baseUrl(). '/profiles/'.$profile['id'], t('Edit profile'),"", t('Edit profile'));
+               $profile['edit'] = array(System::baseUrl() . '/profiles/' . $profile['id'], t('Edit profile'), '', t('Edit profile'));
                $profile['menu'] = array(
                        'chg_photo' => t('Change profile photo'),
                        'cr_new' => null,
@@ -356,28 +364,23 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
        // Fetch the account type
        $account_type = Contact::getAccountType($profile);
 
-       if ((x($profile, 'address') == 1)
-               || (x($profile, 'location') == 1)
-               || (x($profile, 'locality') == 1)
-               || (x($profile, 'region') == 1)
-               || (x($profile, 'postal-code') == 1)
-               || (x($profile, 'country-name') == 1)
+       if (x($profile, 'address')
+               || x($profile, 'location')
+               || x($profile, 'locality')
+               || x($profile, 'region')
+               || x($profile, 'postal-code')
+               || x($profile, 'country-name')
        ) {
                $location = t('Location:');
        }
 
-       $gender = ((x($profile, 'gender') == 1) ? t('Gender:') : false);
-
-
-       $marital = ((x($profile, 'marital') == 1) ?  t('Status:') : false);
-
-       $homepage = ((x($profile, 'homepage') == 1) ?  t('Homepage:') : false);
+       $gender   = x($profile, 'gender')   ? t('Gender:')   : false;
+       $marital  = x($profile, 'marital')  ? t('Status:')   : false;
+       $homepage = x($profile, 'homepage') ? t('Homepage:') : false;
+       $about    = x($profile, 'about')    ? t('About:')    : false;
+       $xmpp     = x($profile, 'xmpp')     ? t('XMPP:')     : false;
 
-       $about = ((x($profile, 'about') == 1) ?  t('About:') : false);
-
-       $xmpp = ((x($profile, 'xmpp') == 1) ?  t('XMPP:') : false);
-
-       if (($profile['hidewall'] || $block) && (! local_user()) && (! remote_user())) {
+       if ((x($profile, 'hidewall') || $block) && !local_user() && !remote_user()) {
                $location = $pdesc = $gender = $marital = $homepage = $about = false;
        }
 
@@ -385,7 +388,7 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
        $firstname = $split_name['first'];
        $lastname = $split_name['last'];
 
-       if ($profile['guid'] != "") {
+       if (x($profile, 'guid')) {
                $diaspora = array(
                        'guid' => $profile['guid'],
                        'podloc' => System::baseUrl(),
@@ -402,6 +405,9 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
                $diaspora = false;
        }
 
+       $contact_block = '';
+       $updated = '';
+       $contacts = 0;
        if (!$block) {
                $contact_block = contact_block();
 
@@ -411,7 +417,7 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
                                intval($a->profile['uid'])
                        );
                        if (DBM::is_result($r)) {
-                               $updated =  date("c", strtotime($r[0]['updated']));
+                               $updated = date('c', strtotime($r[0]['updated']));
                        }
 
                        $r = q(
@@ -437,45 +443,41 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
                $p[$k] = $v;
        }
 
-       if (isset($p["about"])) {
-               $p["about"] = bbcode($p["about"]);
+       if (isset($p['about'])) {
+               $p['about'] = bbcode($p['about']);
        }
 
-       if (isset($p["address"])) {
-               $p["address"] = bbcode($p["address"]);
+       if (isset($p['address'])) {
+               $p['address'] = bbcode($p['address']);
        } else {
-               $p["address"] = bbcode($p["location"]);
+               $p['address'] = bbcode($p['location']);
        }
 
-       if (isset($p["photo"])) {
-               $p["photo"] = proxy_url($p["photo"], false, PROXY_SIZE_SMALL);
+       if (isset($p['photo'])) {
+               $p['photo'] = proxy_url($p['photo'], false, PROXY_SIZE_SMALL);
        }
 
        $tpl = get_markup_template('profile_vcard.tpl');
-       $o .= replace_macros(
-               $tpl,
-               array(
+       $o .= replace_macros($tpl, array(
                '$profile' => $p,
                '$xmpp' => $xmpp,
-               '$connect'  => $connect,
-               '$remoteconnect'  => $remoteconnect,
+               '$connect' => $connect,
+               '$remoteconnect' => $remoteconnect,
                '$subscribe_feed' => $subscribe_feed,
                '$wallmessage' => $wallmessage,
                '$wallmessage_link' => $wallmessage_link,
                '$account_type' => $account_type,
                '$location' => $location,
-               '$gender'   => $gender,
-               // '$pdesc'     => $pdesc,
-               '$marital'  => $marital,
+               '$gender' => $gender,
+               '$marital' => $marital,
                '$homepage' => $homepage,
                '$about' => $about,
-               '$network' =>  t('Network:'),
+               '$network' => t('Network:'),
                '$contacts' => $contacts,
                '$updated' => $updated,
                '$diaspora' => $diaspora,
                '$contact_block' => $contact_block,
-               )
-       );
+       ));
 
        $arr = array('profile' => &$profile, 'entry' => &$o);
 
@@ -484,27 +486,26 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
        return $o;
 }
 
-
 function get_birthdays()
 {
        $a = get_app();
        $o = '';
 
-       if (! local_user() || $a->is_mobile || $a->is_tablet) {
+       if (!local_user() || $a->is_mobile || $a->is_tablet) {
                return $o;
        }
 
        /*
         * $mobile_detect = new Mobile_Detect();
         * $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
-        *              if ($is_mobile)
-        *                      return $o;
+        *              if ($is_mobile)
+        *                      return $o;
         */
 
        $bd_format = t('g A l F d'); // 8 AM Friday January 18
        $bd_short = t('F d');
 
-       $cachekey = "get_birthdays:".local_user();
+       $cachekey = 'get_birthdays:' . local_user();
        $r = Cache::get($cachekey);
        if (is_null($r)) {
                $s = dba::p(
@@ -538,7 +539,7 @@ function get_birthdays()
                $classtoday = $istoday ? ' birthday-today ' : '';
                if ($total) {
                        foreach ($r as &$rr) {
-                               if (! strlen($rr['name'])) {
+                               if (!strlen($rr['name'])) {
                                        continue;
                                }
 
@@ -553,54 +554,50 @@ function get_birthdays()
                                $sparkle = '';
                                $url = $rr['url'];
                                if ($rr['network'] === NETWORK_DFRN) {
-                                       $sparkle = " sparkle";
-                                       $url = System::baseUrl() . '/redir/'  . $rr['cid'];
+                                       $sparkle = ' sparkle';
+                                       $url = System::baseUrl() . '/redir/' . $rr['cid'];
                                }
 
                                $rr['link'] = $url;
                                $rr['title'] = $rr['name'];
-                               $rr['date'] = day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ?  ' ' . t('[today]') : '');
+                               $rr['date'] = day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . t('[today]') : '');
                                $rr['startime'] = null;
                                $rr['today'] = $today;
                        }
                }
        }
-       $tpl = get_markup_template("birthdays_reminder.tpl");
-       return replace_macros(
-               $tpl,
-               array(
+       $tpl = get_markup_template('birthdays_reminder.tpl');
+       return replace_macros($tpl, array(
                '$baseurl' => System::baseUrl(),
                '$classtoday' => $classtoday,
                '$count' => $total,
                '$event_reminders' => t('Birthday Reminders'),
                '$event_title' => t('Birthdays this week:'),
                '$events' => $r,
-               '$lbr' => '{',  // raw brackets mess up if/endif macro processing
+               '$lbr' => '{', // raw brackets mess up if/endif macro processing
                '$rbr' => '}'
-               )
-       );
+       ));
 }
 
-
 function get_events()
 {
        require_once 'include/bbcode.php';
 
        $a = get_app();
 
-       if (! local_user() || $a->is_mobile || $a->is_tablet) {
+       if (!local_user() || $a->is_mobile || $a->is_tablet) {
                return $o;
        }
 
        /*
-        *      $mobile_detect = new Mobile_Detect();
-        *              $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
-        *              if ($is_mobile)
-        *                      return $o;
+        *      $mobile_detect = new Mobile_Detect();
+        *              $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
+        *              if ($is_mobile)
+        *                      return $o;
         */
 
        $bd_format = t('g A l F d'); // 8 AM Friday January 18
-       $bd_short = t('F d');
+       $classtoday = '';
 
        $s = dba::p(
                "SELECT `event`.* FROM `event`
@@ -614,7 +611,6 @@ function get_events()
        $r = array();
 
        if (DBM::is_result($s)) {
-               $now = strtotime('now');
                $istoday = false;
 
                while ($rr = dba::fetch($s)) {
@@ -634,7 +630,7 @@ function get_events()
                        }
 
                        $description = substr(strip_tags(bbcode($rr['desc'])), 0, 32) . '... ';
-                       if (! $description) {
+                       if (!$description) {
                                $description = t('[No description]');
                        }
 
@@ -647,8 +643,8 @@ function get_events()
                        $today = ((substr($strt, 0, 10) === datetime_convert('UTC', $a->timezone, 'now', 'Y-m-d')) ? true : false);
 
                        $rr['title'] = $title;
-                       $rr['description'] = $desciption;
-                       $rr['date'] = day_translate(datetime_convert('UTC', $rr['adjust'] ? $a->timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ?  ' ' . t('[today]') : '');
+                       $rr['description'] = $description;
+                       $rr['date'] = day_translate(datetime_convert('UTC', $rr['adjust'] ? $a->timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : '');
                        $rr['startime'] = $strt;
                        $rr['today'] = $today;
 
@@ -657,18 +653,15 @@ function get_events()
                dba::close($s);
                $classtoday = (($istoday) ? 'event-today' : '');
        }
-       $tpl = get_markup_template("events_reminder.tpl");
-       return replace_macros(
-               $tpl,
-               array(
+       $tpl = get_markup_template('events_reminder.tpl');
+       return replace_macros($tpl, array(
                '$baseurl' => System::baseUrl(),
                '$classtoday' => $classtoday,
                '$count' => count($r),
                '$event_reminders' => t('Event Reminders'),
                '$event_title' => t('Events this week:'),
                '$events' => $r,
-               )
-       );
+       ));
 }
 
 function advanced_profile(App $a)
@@ -677,9 +670,8 @@ function advanced_profile(App $a)
        $uid = $a->profile['uid'];
 
        $o .= replace_macros(
-               get_markup_template('section_title.tpl'),
-               array(
-               '$title' => t('Profile')
+               get_markup_template('section_title.tpl'), array(
+                       '$title' => t('Profile')
                )
        );
 
@@ -688,32 +680,32 @@ function advanced_profile(App $a)
 
                $profile = array();
 
-               $profile['fullname'] = array( t('Full Name:'), $a->profile['name'] ) ;
+               $profile['fullname'] = array(t('Full Name:'), $a->profile['name']);
 
                if ($a->profile['gender']) {
-                       $profile['gender'] = array( t('Gender:'),  $a->profile['gender'] );
+                       $profile['gender'] = array(t('Gender:'), $a->profile['gender']);
                }
 
                if (($a->profile['dob']) && ($a->profile['dob'] > '0001-01-01')) {
                        $year_bd_format = t('j F, Y');
                        $short_bd_format = t('j F');
 
+                       $val = intval($a->profile['dob']) ?
+                               day_translate(datetime_convert('UTC', 'UTC', $a->profile['dob'] . ' 00:00 +00:00', $year_bd_format))
+                               : day_translate(datetime_convert('UTC', 'UTC', '2001-' . substr($a->profile['dob'], 5) . ' 00:00 +00:00', $short_bd_format));
 
-                       $val = ((intval($a->profile['dob']))
-                               ? day_translate(datetime_convert('UTC', 'UTC', $a->profile['dob'] . ' 00:00 +00:00', $year_bd_format))
-                               : day_translate(datetime_convert('UTC', 'UTC', '2001-' . substr($a->profile['dob'], 5) . ' 00:00 +00:00', $short_bd_format)));
-
-                       $profile['birthday'] = array( t('Birthday:'), $val);
+                       $profile['birthday'] = array(t('Birthday:'), $val);
                }
+
                if (!empty($a->profile['dob'])
                        && $a->profile['dob'] > '0001-01-01'
                        && $age = age($a->profile['dob'], $a->profile['timezone'], '')
                ) {
-                       $profile['age'] = array( t('Age:'), $age );
+                       $profile['age'] = array(t('Age:'), $age);
                }
 
                if ($a->profile['marital']) {
-                       $profile['marital'] = array( t('Status:'), $a->profile['marital']);
+                       $profile['marital'] = array(t('Status:'), $a->profile['marital']);
                }
 
                /// @TODO Maybe use x() here, plus below?
@@ -726,95 +718,92 @@ function advanced_profile(App $a)
                }
 
                if ($a->profile['sexual']) {
-                       $profile['sexual'] = array( t('Sexual Preference:'), $a->profile['sexual'] );
+                       $profile['sexual'] = array(t('Sexual Preference:'), $a->profile['sexual']);
                }
 
                if ($a->profile['homepage']) {
-                       $profile['homepage'] = array( t('Homepage:'), linkify($a->profile['homepage']) );
+                       $profile['homepage'] = array(t('Homepage:'), linkify($a->profile['homepage']));
                }
 
                if ($a->profile['hometown']) {
-                       $profile['hometown'] = array( t('Hometown:'), linkify($a->profile['hometown']) );
+                       $profile['hometown'] = array(t('Hometown:'), linkify($a->profile['hometown']));
                }
 
                if ($a->profile['pub_keywords']) {
-                       $profile['pub_keywords'] = array( t('Tags:'), $a->profile['pub_keywords']);
+                       $profile['pub_keywords'] = array(t('Tags:'), $a->profile['pub_keywords']);
                }
 
                if ($a->profile['politic']) {
-                       $profile['politic'] = array( t('Political Views:'), $a->profile['politic']);
+                       $profile['politic'] = array(t('Political Views:'), $a->profile['politic']);
                }
 
                if ($a->profile['religion']) {
-                       $profile['religion'] = array( t('Religion:'), $a->profile['religion']);
+                       $profile['religion'] = array(t('Religion:'), $a->profile['religion']);
                }
 
                if ($txt = prepare_text($a->profile['about'])) {
-                       $profile['about'] = array( t('About:'), $txt );
+                       $profile['about'] = array(t('About:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['interest'])) {
-                       $profile['interest'] = array( t('Hobbies/Interests:'), $txt);
+                       $profile['interest'] = array(t('Hobbies/Interests:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['likes'])) {
-                       $profile['likes'] = array( t('Likes:'), $txt);
+                       $profile['likes'] = array(t('Likes:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['dislikes'])) {
-                       $profile['dislikes'] = array( t('Dislikes:'), $txt);
+                       $profile['dislikes'] = array(t('Dislikes:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['contact'])) {
-                       $profile['contact'] = array( t('Contact information and Social Networks:'), $txt);
+                       $profile['contact'] = array(t('Contact information and Social Networks:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['music'])) {
-                       $profile['music'] = array( t('Musical interests:'), $txt);
+                       $profile['music'] = array(t('Musical interests:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['book'])) {
-                       $profile['book'] = array( t('Books, literature:'), $txt);
+                       $profile['book'] = array(t('Books, literature:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['tv'])) {
-                       $profile['tv'] = array( t('Television:'), $txt);
+                       $profile['tv'] = array(t('Television:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['film'])) {
-                       $profile['film'] = array( t('Film/dance/culture/entertainment:'), $txt);
+                       $profile['film'] = array(t('Film/dance/culture/entertainment:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['romance'])) {
-                       $profile['romance'] = array( t('Love/Romance:'), $txt);
+                       $profile['romance'] = array(t('Love/Romance:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['work'])) {
-                       $profile['work'] = array( t('Work/employment:'), $txt);
+                       $profile['work'] = array(t('Work/employment:'), $txt);
                }
 
                if ($txt = prepare_text($a->profile['education'])) {
-                       $profile['education'] = array( t('School/education:'), $txt );
+                       $profile['education'] = array(t('School/education:'), $txt);
                }
 
                //show subcribed forum if it is enabled in the usersettings
                if (Feature::isEnabled($uid, 'forumlist_profile')) {
-                       $profile['forumlist'] = array( t('Forums:'), ForumManager::profileAdvanced($uid));
+                       $profile['forumlist'] = array(t('Forums:'), ForumManager::profileAdvanced($uid));
                }
 
                if ($a->profile['uid'] == local_user()) {
-                       $profile['edit'] = array(System::baseUrl(). '/profiles/'.$a->profile['id'], t('Edit profile'),"", t('Edit profile'));
+                       $profile['edit'] = array(System::baseUrl() . '/profiles/' . $a->profile['id'], t('Edit profile'), '', t('Edit profile'));
                }
 
-               return replace_macros(
-                       $tpl,
-                       array(
+               return replace_macros($tpl, array(
                        '$title' => t('Profile'),
                        '$basic' => t('Basic'),
                        '$advanced' => t('Advanced'),
                        '$profile' => $profile
-                       )
-               );
+               ));
        }
 
        return '';
@@ -822,12 +811,11 @@ function advanced_profile(App $a)
 
 function profile_tabs($a, $is_owner = false, $nickname = null)
 {
-       //echo "<pre>"; var_dump($a->user); killme();
-
        if (is_null($nickname)) {
-               $nickname  = $a->user['nickname'];
+               $nickname = $a->user['nickname'];
        }
 
+       $tab = false;
        if (x($_GET, 'tab')) {
                $tab = notags(trim($_GET['tab']));
        }
@@ -836,85 +824,85 @@ function profile_tabs($a, $is_owner = false, $nickname = null)
 
        $tabs = array(
                array(
-                       'label'=>t('Status'),
-                       'url' => $url,
-                       'sel' => ((!isset($tab) && $a->argv[0]=='profile') ? 'active' : ''),
+                       'label' => t('Status'),
+                       'url'   => $url,
+                       'sel'   => !$tab && $a->argv[0] == 'profile' ? 'active' : '',
                        'title' => t('Status Messages and Posts'),
-                       'id' => 'status-tab',
+                       'id'    => 'status-tab',
                        'accesskey' => 'm',
                ),
                array(
                        'label' => t('Profile'),
-                       'url'   => $url.'/?tab=profile',
-                       'sel'   => ((isset($tab) && $tab=='profile') ? 'active' : ''),
+                       'url'   => $url . '/?tab=profile',
+                       'sel'   => $tab == 'profile' ? 'active' : '',
                        'title' => t('Profile Details'),
-                       'id' => 'profile-tab',
+                       'id'    => 'profile-tab',
                        'accesskey' => 'r',
                ),
                array(
                        'label' => t('Photos'),
-                       'url'   => System::baseUrl() . '/photos/' . $nickname,
-                       'sel'   => ((!isset($tab) && $a->argv[0]=='photos') ? 'active' : ''),
+                       'url'   => System::baseUrl() . '/photos/' . $nickname,
+                       'sel'   => !$tab && $a->argv[0] == 'photos' ? 'active' : '',
                        'title' => t('Photo Albums'),
-                       'id' => 'photo-tab',
+                       'id'    => 'photo-tab',
                        'accesskey' => 'h',
                ),
                array(
                        'label' => t('Videos'),
-                       'url'   => System::baseUrl() . '/videos/' . $nickname,
-                       'sel'   => ((!isset($tab) && $a->argv[0]=='videos') ? 'active' : ''),
+                       'url'   => System::baseUrl() . '/videos/' . $nickname,
+                       'sel'   => !$tab && $a->argv[0] == 'videos' ? 'active' : '',
                        'title' => t('Videos'),
-                       'id' => 'video-tab',
+                       'id'    => 'video-tab',
                        'accesskey' => 'v',
                ),
        );
 
        // the calendar link for the full featured events calendar
        if ($is_owner && $a->theme_events_in_profile) {
-                       $tabs[] = array(
-                               'label' => t('Events'),
-                               'url'   => System::baseUrl() . '/events',
-                               'sel'   =>((!isset($tab) && $a->argv[0]=='events') ? 'active' : ''),
-                               'title' => t('Events and Calendar'),
-                               'id' => 'events-tab',
-                               'accesskey' => 'e',
-                       );
+               $tabs[] = array(
+                       'label' => t('Events'),
+                       'url'   => System::baseUrl() . '/events',
+                       'sel'   => !$tab && $a->argv[0] == 'events' ? 'active' : '',
+                       'title' => t('Events and Calendar'),
+                       'id'    => 'events-tab',
+                       'accesskey' => 'e',
+               );
                // if the user is not the owner of the calendar we only show a calendar
                // with the public events of the calendar owner
-       } elseif (! $is_owner) {
+       } elseif (!$is_owner) {
                $tabs[] = array(
-                               'label' => t('Events'),
-                               'url'   => System::baseUrl() . '/cal/' . $nickname,
-                               'sel'   =>((!isset($tab) && $a->argv[0]=='cal') ? 'active' : ''),
-                               'title' => t('Events and Calendar'),
-                               'id' => 'events-tab',
-                               'accesskey' => 'e',
-                       );
+                       'label' => t('Events'),
+                       'url'   => System::baseUrl() . '/cal/' . $nickname,
+                       'sel'   => !$tab && $a->argv[0] == 'cal' ? 'active' : '',
+                       'title' => t('Events and Calendar'),
+                       'id'    => 'events-tab',
+                       'accesskey' => 'e',
+               );
        }
 
        if ($is_owner) {
                $tabs[] = array(
                        'label' => t('Personal Notes'),
-                       'url'   => System::baseUrl() . '/notes',
-                       'sel'   =>((!isset($tab) && $a->argv[0]=='notes') ? 'active' : ''),
+                       'url'   => System::baseUrl() . '/notes',
+                       'sel'   => !$tab && $a->argv[0] == 'notes' ? 'active' : '',
                        'title' => t('Only You Can See This'),
-                       'id' => 'notes-tab',
+                       'id'    => 'notes-tab',
                        'accesskey' => 't',
                );
        }
 
-       if ((! $is_owner) && ((count($a->profile)) || (! $a->profile['hide-friends']))) {
+       if ((!$is_owner) && ((count($a->profile)) || (!$a->profile['hide-friends']))) {
                $tabs[] = array(
                        'label' => t('Contacts'),
-                       'url'   => System::baseUrl() . '/viewcontacts/' . $nickname,
-                       'sel'   => ((!isset($tab) && $a->argv[0]=='viewcontacts') ? 'active' : ''),
+                       'url'   => System::baseUrl() . '/viewcontacts/' . $nickname,
+                       'sel'   => !$tab && $a->argv[0] == 'viewcontacts' ? 'active' : '',
                        'title' => t('Contacts'),
-                       'id' => 'viewcontacts-tab',
+                       'id'    => 'viewcontacts-tab',
                        'accesskey' => 'k',
                );
        }
 
-       $arr = array('is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => (($tab) ? $tab : false), 'tabs' => $tabs);
+       $arr = array('is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => $tab, 'tabs' => $tabs);
        call_hooks('profile_tabs', $arr);
 
        $tpl = get_markup_template('common_tabs.tpl');
@@ -939,9 +927,9 @@ function zrl_init(App $a)
                // The check fetches the cached value from gprobe to reduce the load for this system
                $urlparts = parse_url($my_url);
 
-               $result = Cache::get("gprobe:" . $urlparts["host"]);
-               if ((!is_null($result)) && (in_array($result["network"], array(NETWORK_FEED, NETWORK_PHANTOM)))) {
-                       logger("DDoS attempt detected for " . $urlparts["host"] . " by " . $_SERVER["REMOTE_ADDR"] . ". server data: " . print_r($_SERVER, true), LOGGER_DEBUG);
+               $result = Cache::get('gprobe:' . $urlparts['host']);
+               if ((!is_null($result)) && (in_array($result['network'], array(NETWORK_FEED, NETWORK_PHANTOM)))) {
+                       logger('DDoS attempt detected for ' . $urlparts['host'] . ' by ' . $_SERVER['REMOTE_ADDR'] . '. server data: ' . print_r($_SERVER, true), LOGGER_DEBUG);
                        return;
                }
 
@@ -953,10 +941,10 @@ function zrl_init(App $a)
 
 function zrl($s, $force = false)
 {
-       if (! strlen($s)) {
+       if (!strlen($s)) {
                return $s;
        }
-       if ((! strpos($s, '/profile/')) && (! $force)) {
+       if ((!strpos($s, '/profile/')) && (!$force)) {
                return $s;
        }
        if ($force && substr($s, -1, 1) !== '/') {
@@ -964,7 +952,7 @@ function zrl($s, $force = false)
        }
        $achar = strpos($s, '?') ? '&' : '?';
        $mine = get_my_url();
-       if ($mine && ! link_compare($mine, $s)) {
+       if ($mine && !link_compare($mine, $s)) {
                return $s . $achar . 'zrl=' . urlencode($mine);
        }
        return $s;
@@ -987,7 +975,7 @@ function zrl($s, $force = false)
 function get_theme_uid()
 {
        $uid = ((!empty($_REQUEST['puid'])) ? intval($_REQUEST['puid']) : 0);
-       if ((local_user()) && ((PConfig::get(local_user(), 'system', 'always_my_theme')) || (! $uid))) {
+       if ((local_user()) && ((PConfig::get(local_user(), 'system', 'always_my_theme')) || (!$uid))) {
                return local_user();
        }
 
index 275052c1fdb73deab8337c78b2b840f8168994ad..8f15f94799be7e9463daf13409a1dc68e740faca 100644 (file)
@@ -20,8 +20,6 @@ use Friendica\Protocol\OStatus;
 use Friendica\Protocol\Feed;
 
 require_once 'include/bbcode.php';
-require_once 'include/oembed.php';
-require_once 'include/crypto.php';
 require_once 'include/tags.php';
 require_once 'include/files.php';
 require_once 'include/text.php';
@@ -423,7 +421,7 @@ function uri_to_guid($uri, $host = "") {
  * @return array Item array with removed conversation data
  */
 function store_conversation($arr) {
-       if (in_array($arr['network'], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS)) && !empty($arr['uri'])) {
+       if (in_array(defaults($arr, 'network', NETWORK_PHANTOM), array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS)) && !empty($arr['uri'])) {
                $conversation = array('item-uri' => $arr['uri'], 'received' => DBM::date());
 
                if (isset($arr['parent-uri']) && ($arr['parent-uri'] != $arr['uri'])) {
@@ -481,8 +479,8 @@ function store_conversation($arr) {
 }
 
 /// @TODO add type-hint array
-function item_store($arr, $force_parent = false, $notify = false, $dontcache = false) {
-
+function item_store($arr, $force_parent = false, $notify = false, $dontcache = false)
+{
        $a = get_app();
 
        // If it is a posting where users should get notifications, then define it as wall posting
@@ -504,6 +502,8 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                                $arr['guid'] = uri_to_guid($arr['uri'], $a->get_hostname());
                        }
                }
+       } else {
+               $arr['network'] = trim(defaults($arr, 'network', NETWORK_PHANTOM));
        }
 
        if ($notify) {
@@ -583,7 +583,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
         * We have to check several networks since Friendica posts could be repeated
         * via OStatus (maybe Diasporsa as well)
         */
-       if (in_array(trim($arr['network']), array(NETWORK_DIASPORA, NETWORK_DFRN, NETWORK_OSTATUS, ""))) {
+       if (in_array($arr['network'], array(NETWORK_DIASPORA, NETWORK_DFRN, NETWORK_OSTATUS, ""))) {
                $r = q("SELECT `id`, `network` FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `network` IN ('%s', '%s', '%s')  LIMIT 1",
                                dbesc(trim($arr['uri'])),
                                intval($uid),
@@ -646,7 +646,6 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
        $arr['attach']        = ((x($arr, 'attach'))        ? notags(trim($arr['attach']))        : '');
        $arr['app']           = ((x($arr, 'app'))           ? notags(trim($arr['app']))           : '');
        $arr['origin']        = ((x($arr, 'origin'))        ? intval($arr['origin'])              : 0 );
-       $arr['network']       = ((x($arr, 'network'))       ? trim($arr['network'])               : '');
        $arr['postopts']      = ((x($arr, 'postopts'))      ? trim($arr['postopts'])              : '');
        $arr['resource-id']   = ((x($arr, 'resource-id'))   ? trim($arr['resource-id'])           : '');
        $arr['event-id']      = ((x($arr, 'event-id'))      ? intval($arr['event-id'])            : 0 );
@@ -676,18 +675,19 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                $arr['plink'] = System::baseUrl() . '/display/' . urlencode($arr['guid']);
        }
 
-       if ($arr['network'] == "") {
+       if ($arr['network'] == NETWORK_PHANTOM) {
                $r = q("SELECT `network` FROM `contact` WHERE `network` IN ('%s', '%s', '%s') AND `nurl` = '%s' AND `uid` = %d LIMIT 1",
                        dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS),
                        dbesc(normalise_link($arr['author-link'])),
                        intval($arr['uid'])
                );
 
-               if (!DBM::is_result($r))
+               if (!DBM::is_result($r)) {
                        $r = q("SELECT `network` FROM `gcontact` WHERE `network` IN ('%s', '%s', '%s') AND `nurl` = '%s' LIMIT 1",
                                dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS),
                                dbesc(normalise_link($arr['author-link']))
                        );
+               }
 
                if (!DBM::is_result($r)) {
                        $r = q("SELECT `network` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
@@ -735,7 +735,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                logger("Contact-id was missing for post ".$arr["guid"]." from user id ".$uid." - now set to ".$arr["contact-id"], LOGGER_DEBUG);
        }
 
-       if ($arr["gcontact-id"] == 0) {
+       if (!x($arr, "gcontact-id")) {
                /*
                 * The gcontact should mostly behave like the contact. But is is supposed to be global for the system.
                 * This means that wall posts, repeated posts, etc. should have the gcontact id of the owner.
diff --git a/include/oembed.php b/include/oembed.php
deleted file mode 100644 (file)
index b7c1616..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
-<?php
-
-/**
- * @file include/oembed.php
- */
-
-use Friendica\App;
-use Friendica\Core\Cache;
-use Friendica\Core\System;
-use Friendica\ParseUrl;
-use Friendica\Core\Config;
-use Friendica\Database\DBM;
-
-function oembed_replacecb($matches){
-       $embedurl=$matches[1];
-       $j = oembed_fetch_url($embedurl);
-       $s =  oembed_format_object($j);
-
-       return $s;
-}
-
-/**
- * @brief Get data from an URL to embed its content.
- *
- * @param string $embedurl The URL from which the data should be fetched.
- * @param bool $no_rich_type If set to true rich type content won't be fetched.
- *
- * @return bool|object Returns object with embed content or false if no embedable
- *      content exists
- */
-function oembed_fetch_url($embedurl, $no_rich_type = false) {
-       $embedurl = trim($embedurl, "'");
-       $embedurl = trim($embedurl, '"');
-
-       $a = get_app();
-
-       $condition = array('url' => normalise_link($embedurl));
-       $r = dba::select('oembed', array('content'), $condition, array('limit' => 1));
-
-       if (DBM::is_result($r)) {
-               $txt = $r["content"];
-       } else {
-               $txt = Cache::get($a->videowidth . $embedurl);
-       }
-       // These media files should now be caught in bbcode.php
-       // left here as a fallback in case this is called from another source
-
-       $noexts = array("mp3", "mp4", "ogg", "ogv", "oga", "ogm", "webm");
-       $ext = pathinfo(strtolower($embedurl), PATHINFO_EXTENSION);
-
-
-       if (is_null($txt)) {
-               $txt = "";
-
-               if (!in_array($ext, $noexts)){
-                       // try oembed autodiscovery
-                       $redirects = 0;
-                       $html_text = fetch_url($embedurl, false, $redirects, 15, "text/*");
-                       if ($html_text) {
-                               $dom = @DOMDocument::loadHTML($html_text);
-                               if ($dom) {
-                                       $xpath = new DOMXPath($dom);
-                                       $attr = "oembed";
-                                       $xattr = oe_build_xpath("class","oembed");
-                                       $entries = $xpath->query("//link[@type='application/json+oembed']");
-                                       foreach ($entries as $e) {
-                                               $href = $e->getAttributeNode("href")->nodeValue;
-                                               $txt = fetch_url($href . '&maxwidth=' . $a->videowidth);
-                                               break;
-                                       }
-                                       $entries = $xpath->query("//link[@type='text/json+oembed']");
-                                       foreach ($entries as $e) {
-                                               $href = $e->getAttributeNode("href")->nodeValue;
-                                               $txt = fetch_url($href . '&maxwidth=' . $a->videowidth);
-                                               break;
-                                       }
-                               }
-                       }
-               }
-
-               $txt = trim($txt);
-
-               if ($txt[0] != "{") {
-                       $txt = '{"type":"error"}';
-               } else {        //save in cache
-                       $j = json_decode($txt);
-                       if ($j->type != "error") {
-                               dba::insert('oembed', array('url' => normalise_link($embedurl),
-                                                       'content' => $txt, 'created' => datetime_convert()), true);
-                       }
-
-                       Cache::set($a->videowidth.$embedurl, $txt, CACHE_DAY);
-               }
-       }
-
-       $j = json_decode($txt);
-
-       if (!is_object($j)) {
-               return false;
-       }
-
-       // Always embed the SSL version
-       if (isset($j->html)) {
-               $j->html = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"),
-                       array("https://www.youtube.com/", "https://player.vimeo.com/"), $j->html);
-       }
-
-       $j->embedurl = $embedurl;
-
-       // If fetching information doesn't work, then improve via internal functions
-       if (($j->type == "error") || ($no_rich_type && ($j->type == "rich"))) {
-               $data = ParseUrl::getSiteinfoCached($embedurl, true, false);
-               $j->type = $data["type"];
-
-               if ($j->type == "photo") {
-                       $j->url = $data["url"];
-                       //$j->width = $data["images"][0]["width"];
-                       //$j->height = $data["images"][0]["height"];
-               }
-
-               if (isset($data["title"])) {
-                       $j->title = $data["title"];
-               }
-
-               if (isset($data["text"])) {
-                       $j->description = $data["text"];
-               }
-
-               if (is_array($data["images"])) {
-                       $j->thumbnail_url = $data["images"][0]["src"];
-                       $j->thumbnail_width = $data["images"][0]["width"];
-                       $j->thumbnail_height = $data["images"][0]["height"];
-               }
-       }
-
-       call_hooks('oembed_fetch_url', $embedurl, $j);
-
-       return $j;
-}
-
-function oembed_format_object($j){
-       require_once("mod/proxy.php");
-
-       $embedurl = $j->embedurl;
-       $jhtml = oembed_iframe($j->embedurl,(isset($j->width) ? $j->width : null), (isset($j->height) ? $j->height : null) );
-       $ret="<span class='oembed ".$j->type."'>";
-       switch ($j->type) {
-               case "video":
-                       if (isset($j->thumbnail_url)) {
-                               $tw = (isset($j->thumbnail_width) && intval($j->thumbnail_width)) ? $j->thumbnail_width:200;
-                               $th = (isset($j->thumbnail_height) && intval($j->thumbnail_height)) ? $j->thumbnail_height:180;
-                               // make sure we don't attempt divide by zero, fallback is a 1:1 ratio
-                               $tr = (($th) ? $tw/$th : 1);
-
-                               $th=120; $tw = $th*$tr;
-                               $tpl=get_markup_template('oembed_video.tpl');
-                               $ret.=replace_macros($tpl, array(
-                                       '$baseurl'     => System::baseUrl(),
-                                       '$embedurl'    => $embedurl,
-                                       '$escapedhtml' => base64_encode($jhtml),
-                                       '$tw'          => $tw,
-                                       '$th'          => $th,
-                                       '$turl'        => $j->thumbnail_url,
-                               ));
-
-                       } else {
-                               $ret=$jhtml;
-                       }
-                       //$ret.="<br>";
-                       break;
-               case "photo":
-                       $ret.= "<img width='".$j->width."' src='".proxy_url($j->url)."'>";
-                       break;
-               case "link":
-                       break;
-               case "rich":
-                       // not so safe..
-                       if (!Config::get("system","no_oembed_rich_content")) {
-                               $ret.= proxy_parse_html($jhtml);
-                       }
-                       break;
-       }
-
-       // add link to source if not present in "rich" type
-       if ($j->type!='rich' || !strpos($j->html,$embedurl) ){
-               $ret .= "<h4>";
-               if (isset($j->title)) {
-                       if (isset($j->provider_name)) {
-                               $ret .= $j->provider_name.": ";
-                       }
-
-                       $embedlink = (isset($j->title))?$j->title:$embedurl;
-                       $ret .= "<a href='$embedurl' rel='oembed'>$embedlink</a>";
-                       if (isset($j->author_name)) {
-                               $ret.=" (".$j->author_name.")";
-                       }
-               } elseif (isset($j->provider_name) || isset($j->author_name)) {
-                       $embedlink = "";
-                       if (isset($j->provider_name)) {
-                               $embedlink .= $j->provider_name;
-                       }
-
-                       if (isset($j->author_name)) {
-                               if ($embedlink != "") {
-                                       $embedlink .= ": ";
-                               }
-
-                               $embedlink .= $j->author_name;
-                       }
-                       if (trim($embedlink) == "") {
-                               $embedlink = $embedurl;
-                       }
-
-                       $ret .= "<a href='$embedurl' rel='oembed'>$embedlink</a>";
-               }
-               //if (isset($j->author_name)) $ret.=" by ".$j->author_name;
-               //if (isset($j->provider_name)) $ret.=" on ".$j->provider_name;
-               $ret .= "</h4>";
-       } else {
-               // add <a> for html2bbcode conversion
-               $ret .= "<a href='$embedurl' rel='oembed'>$embedurl</a>";
-       }
-       $ret.="</span>";
-       $ret = str_replace("\n","",$ret);
-       return mb_convert_encoding($ret, 'HTML-ENTITIES', mb_detect_encoding($ret));
-}
-
-/**
- * @brief Generates the iframe HTML for an oembed attachment.
- *
- * Width and height are given by the remote, and are regularly too small for
- * the generated iframe.
- *
- * The width is entirely discarded for the actual width of the post, while fixed
- * height is used as a starting point before the inevitable resizing.
- *
- * Since the iframe is automatically resized on load, there are no need for ugly
- * and impractical scrollbars.
- *
- * @param string $src Original remote URL to embed
- * @param string $width
- * @param string $height
- * @return string formatted HTML
- *
- * @see oembed_format_object()
- */
-function oembed_iframe($src, $width, $height) {
-       $a = get_app();
-
-       if (!$height || strstr($height,'%')) {
-               $height = '200';
-       }
-       $width = '100%';
-
-       $s = System::baseUrl() . '/oembed/' . base64url_encode($src);
-       return '<iframe onload="resizeIframe(this);" class="embed_rich" height="' . $height . '" width="' . $width . '" src="' . $s . '" allowfullscreen scrolling="no" frameborder="no">' . t('Embedded content') . '</iframe>';
-}
-
-
-
-function oembed_bbcode2html($text){
-       $stopoembed = Config::get("system","no_oembed");
-       if ($stopoembed == true){
-               return preg_replace("/\[embed\](.+?)\[\/embed\]/is", "<!-- oembed $1 --><i>". t('Embedding disabled') ." : $1</i><!-- /oembed $1 -->" ,$text);
-       }
-       return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", 'oembed_replacecb' ,$text);
-}
-
-
-function oe_build_xpath($attr, $value){
-       // http://westhoffswelt.de/blog/0036_xpath_to_select_html_by_class.html
-       return "contains( normalize-space( @$attr ), ' $value ' ) or substring( normalize-space( @$attr ), 1, string-length( '$value' ) + 1 ) = '$value ' or substring( normalize-space( @$attr ), string-length( @$attr ) - string-length( '$value' ) ) = ' $value' or @$attr = '$value'";
-}
-
-function oe_get_inner_html($node) {
-       $innerHTML= '';
-       $children = $node->childNodes;
-       foreach ($children as $child) {
-               $innerHTML .= $child->ownerDocument->saveXML($child);
-       }
-       return $innerHTML;
-}
-
-/**
- * Find <span class='oembed'>..<a href='url' rel='oembed'>..</a></span>
- * and replace it with [embed]url[/embed]
- */
-function oembed_html2bbcode($text) {
-       // start parser only if 'oembed' is in text
-       if (strpos($text, "oembed")) {
-
-               // convert non ascii chars to html entities
-               $html_text = mb_convert_encoding($text, 'HTML-ENTITIES', mb_detect_encoding($text));
-
-               // If it doesn't parse at all, just return the text.
-               $dom = @DOMDocument::loadHTML($html_text);
-               if (! $dom) {
-                       return $text;
-               }
-               $xpath = new DOMXPath($dom);
-               $attr = "oembed";
-
-               $xattr = oe_build_xpath("class","oembed");
-               $entries = $xpath->query("//span[$xattr]");
-
-               $xattr = "@rel='oembed'";//oe_build_xpath("rel","oembed");
-               foreach ($entries as $e) {
-                       $href = $xpath->evaluate("a[$xattr]/@href", $e)->item(0)->nodeValue;
-                       if (!is_null($href)) {
-                               $e->parentNode->replaceChild(new DOMText("[embed]".$href."[/embed]"), $e);
-                       }
-               }
-               return oe_get_inner_html( $dom->getElementsByTagName("body")->item(0) );
-       } else {
-               return $text;
-       }
-}
index 8d8fb765595ddd9f90f84325c94500db2abd0bc2..584ed30e5b09a8239d74d5443c84aec4f2e1c7a9 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @file include/tags.php
  */
@@ -8,11 +9,13 @@ use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 
-function create_tags_from_item($itemid) {
+function create_tags_from_item($itemid)
+{
        $profile_base = System::baseUrl();
        $profile_data = parse_url($profile_base);
-       $profile_base_friendica = $profile_data['host'].$profile_data['path']."/profile/";
-       $profile_base_diaspora = $profile_data['host'].$profile_data['path']."/u/";
+       $profile_path = defaults($profile_data, 'path', '');
+       $profile_base_friendica = $profile_data['host'] . $profile_path . '/profile/';
+       $profile_base_diaspora = $profile_data['host'] . $profile_path . '/u/';
 
        $messages = q("SELECT `guid`, `uid`, `id`, `edited`, `deleted`, `created`, `received`, `title`, `body`, `tag`, `parent` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid));
 
@@ -28,48 +31,53 @@ function create_tags_from_item($itemid) {
                intval(TERM_HASHTAG),
                intval(TERM_MENTION));
 
-       if ($message["deleted"])
+       if ($message['deleted']) {
                return;
+       }
 
-       $taglist = explode(",", $message["tag"]);
+       $taglist = explode(',', $message['tag']);
 
-       $tags = "";
-       foreach ($taglist as $tag)
-               if ((substr(trim($tag), 0, 1) == "#") || (substr(trim($tag), 0, 1) == "@"))
-                       $tags .= " ".trim($tag);
-               else
-                       $tags .= " #".trim($tag);
+       $tags = '';
+       foreach ($taglist as $tag) {
+               if ((substr(trim($tag), 0, 1) == '#') || (substr(trim($tag), 0, 1) == '@')) {
+                       $tags .= ' ' . trim($tag);
+               } else {
+                       $tags .= ' #' . trim($tag);
+               }
+       }
 
-       $data = " ".$message["title"]." ".$message["body"]." ".$tags." ";
+       $data = ' ' . $message['title'] . ' ' . $message['body'] . ' ' . $tags . ' ';
 
        // ignore anything in a code block
-       $data = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$data);
+       $data = preg_replace('/\[code\](.*?)\[\/code\]/sm', '', $data);
 
        $tags = array();
 
-       $pattern = "/\W\#([^\[].*?)[\s'\".,:;\?!\[\]\/]/ism";
-       if (preg_match_all($pattern, $data, $matches))
-               foreach ($matches[1] as $match)
-                       $tags["#".strtolower($match)] = "";
+       $pattern = '/\W\#([^\[].*?)[\s\'".,:;\?!\[\]\/]/ism';
+       if (preg_match_all($pattern, $data, $matches)) {
+               foreach ($matches[1] as $match) {
+                       $tags['#' . strtolower($match)] = '';
+               }
+       }
 
-       $pattern = "/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism";
+       $pattern = '/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism';
        if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) {
-               foreach ($matches as $match)
-                       $tags[$match[1].strtolower(trim($match[3], ',.:;[]/\"?!'))] = $match[2];
+               foreach ($matches as $match) {
+                       $tags[$match[1] . strtolower(trim($match[3], ',.:;[]/\"?!'))] = $match[2];
+               }
        }
 
-       foreach ($tags as $tag=>$link) {
-
-               if (substr(trim($tag), 0, 1) == "#") {
+       foreach ($tags as $tag => $link) {
+               if (substr(trim($tag), 0, 1) == '#') {
                        // try to ignore #039 or #1 or anything like that
-                       if (ctype_digit(substr(trim($tag),1)))
+                       if (ctype_digit(substr(trim($tag), 1)))
                                continue;
                        // try to ignore html hex escapes, e.g. #x2317
-                       if ((substr(trim($tag),1,1) == 'x' || substr(trim($tag),1,1) == 'X') && ctype_digit(substr(trim($tag),2)))
+                       if ((substr(trim($tag), 1, 1) == 'x' || substr(trim($tag), 1, 1) == 'X') && ctype_digit(substr(trim($tag), 2)))
                                continue;
                        $type = TERM_HASHTAG;
                        $term = substr($tag, 1);
-               } elseif (substr(trim($tag), 0, 1) == "@") {
+               } elseif (substr(trim($tag), 0, 1) == '@') {
                        $type = TERM_MENTION;
                        $term = substr($tag, 1);
                } else { // This shouldn't happen
@@ -77,78 +85,78 @@ function create_tags_from_item($itemid) {
                        $term = $tag;
                }
 
-               if ($message["uid"] == 0) {
+               if ($message['uid'] == 0) {
                        $global = true;
 
                        q("UPDATE `term` SET `global` = 1 WHERE `otype` = %d AND `guid` = '%s'",
-                               intval(TERM_OBJ_POST), dbesc($message["guid"]));
+                               intval(TERM_OBJ_POST), dbesc($message['guid']));
                } else {
                        $isglobal = q("SELECT `global` FROM `term` WHERE `uid` = 0 AND `otype` = %d AND `guid` = '%s'",
-                               intval(TERM_OBJ_POST), dbesc($message["guid"]));
+                               intval(TERM_OBJ_POST), dbesc($message['guid']));
 
                        $global = (count($isglobal) > 0);
                }
 
                $r = q("INSERT INTO `term` (`uid`, `oid`, `otype`, `type`, `term`, `url`, `guid`, `created`, `received`, `global`)
                                VALUES (%d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', %d)",
-                       intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval($type), dbesc($term),
-                       dbesc($link), dbesc($message["guid"]), dbesc($message["created"]), dbesc($message["received"]), intval($global));
+                       intval($message['uid']), intval($itemid), intval(TERM_OBJ_POST), intval($type), dbesc($term),
+                       dbesc($link), dbesc($message['guid']), dbesc($message['created']), dbesc($message['received']), intval($global));
 
                // Search for mentions
                if ((substr($tag, 0, 1) == '@') && (strpos($link, $profile_base_friendica) || strpos($link, $profile_base_diaspora))) {
                        $users = q("SELECT `uid` FROM `contact` WHERE self AND (`url` = '%s' OR `nurl` = '%s')", $link, $link);
                        foreach ($users AS $user) {
-                               if ($user["uid"] == $message["uid"]) {
+                               if ($user['uid'] == $message['uid']) {
                                        q("UPDATE `item` SET `mention` = 1 WHERE `id` = %d", intval($itemid));
 
-                                       q("UPDATE `thread` SET `mention` = 1 WHERE `iid` = %d", intval($message["parent"]));
+                                       q("UPDATE `thread` SET `mention` = 1 WHERE `iid` = %d", intval($message['parent']));
                                }
                        }
                }
        }
 }
 
-function create_tags_from_itemuri($itemuri, $uid) {
+function create_tags_from_itemuri($itemuri, $uid)
+{
        $messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid));
 
        if (count($messages)) {
                foreach ($messages as $message) {
-                       create_tags_from_item($message["id"]);
+                       create_tags_from_item($message['id']);
                }
        }
 }
 
-function update_items() {
-
+function update_items()
+{
        $messages = dba::p("SELECT `oid`,`item`.`guid`, `item`.`created`, `item`.`received` FROM `term` INNER JOIN `item` ON `item`.`id`=`term`.`oid` WHERE `term`.`otype` = 1 AND `term`.`guid` = ''");
 
-       logger("fetched messages: ".dba::num_rows($messages));
+       logger('fetched messages: ' . dba::num_rows($messages));
        while ($message = dba::fetch($messages)) {
-
-               if ($message["uid"] == 0) {
+               if ($message['uid'] == 0) {
                        $global = true;
 
                        q("UPDATE `term` SET `global` = 1 WHERE `otype` = %d AND `guid` = '%s'",
-                               intval(TERM_OBJ_POST), dbesc($message["guid"]));
+                               intval(TERM_OBJ_POST), dbesc($message['guid']));
                } else {
                        $isglobal = q("SELECT `global` FROM `term` WHERE `uid` = 0 AND `otype` = %d AND `guid` = '%s'",
-                               intval(TERM_OBJ_POST), dbesc($message["guid"]));
+                               intval(TERM_OBJ_POST), dbesc($message['guid']));
 
                        $global = (count($isglobal) > 0);
                }
 
                q("UPDATE `term` SET `guid` = '%s', `created` = '%s', `received` = '%s', `global` = %d WHERE `otype` = %d AND `oid` = %d",
-                       dbesc($message["guid"]), dbesc($message["created"]), dbesc($message["received"]),
-                       intval($global), intval(TERM_OBJ_POST), intval($message["oid"]));
+                       dbesc($message['guid']), dbesc($message['created']), dbesc($message['received']),
+                       intval($global), intval(TERM_OBJ_POST), intval($message['oid']));
        }
 
        dba::close($messages);
 
        $messages = dba::p("SELECT `guid` FROM `item` WHERE `uid` = 0");
 
-       logger("fetched messages: ".dba::num_rows($messages));
+       logger('fetched messages: ' . dba::num_rows($messages));
        while ($message = dba::fetch(messages)) {
-               q("UPDATE `item` SET `global` = 1 WHERE `guid` = '%s'", dbesc($message["guid"]));
+               q("UPDATE `item` SET `global` = 1 WHERE `guid` = '%s'", dbesc($message['guid']));
        }
 
        dba::close($messages);
@@ -166,21 +174,22 @@ function update_items() {
  *
  * @return arr          Alphabetical sorted array of used tags of an user.
  */
-function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HASHTAG) {
-       require_once('include/security.php');
+function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HASHTAG)
+{
+       require_once 'include/security.php';
 
        $item_condition = item_condition();
        $sql_options = item_permissions_sql($uid);
-       $limit = $count ? sprintf("LIMIT %d", intval($count)) : "";
+       $limit = $count ? sprintf('LIMIT %d', intval($count)) : '';
 
        if ($flags) {
                if ($flags === 'wall') {
-                       $sql_options .= " AND `item`.`wall` ";
+                       $sql_options .= ' AND `item`.`wall` ';
                }
        }
 
        if ($owner_id) {
-               $sql_options .= " AND `item`.`owner-id` = ".intval($owner_id)." ";
+               $sql_options .= ' AND `item`.`owner-id` = ' . intval($owner_id) . ' ';
        }
 
        // Fetch tags
@@ -194,7 +203,7 @@ function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HA
                $type,
                TERM_OBJ_POST
        );
-       if(!DBM::is_result($r)) {
+       if (!DBM::is_result($r)) {
                return array();
        }
 
@@ -212,32 +221,32 @@ function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HA
  *
  * @return string       HTML formatted output.
  */
-function wtagblock($uid, $count = 0,$owner_id = 0, $flags = '', $type = TERM_HASHTAG) {
+function wtagblock($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HASHTAG)
+{
        $o = '';
        $r = tagadelic($uid, $count, $owner_id, $flags, $type);
        if (count($r)) {
                $contact = dba::select(
-                       "contact",
-                       array("url"),
-                       array("id" => $uid),
-                       array("limit" => 1)
+                       'contact',
+                       array('url'),
+                       array('id' => $uid),
+                       array('limit' => 1)
                );
                $url = System::removedBaseUrl($contact['url']);
 
                foreach ($r as $rr) {
                        $tag['level'] = $rr[2];
-                       $tag['url'] = $url."?tag=".urlencode($rr[0]);
+                       $tag['url'] = $url . '?tag=' . urlencode($rr[0]);
                        $tag['name'] = $rr[0];
 
                        $tags[] = $tag;
                }
 
-               $tpl = get_markup_template("tagblock_widget.tpl");
+               $tpl = get_markup_template('tagblock_widget.tpl');
                $o = replace_macros($tpl, array(
                        '$title' => t('Tags'),
-                       '$tags'  => $tags
+                       '$tags' => $tags
                ));
-
        }
        return $o;
 }
@@ -248,7 +257,8 @@ function wtagblock($uid, $count = 0,$owner_id = 0, $flags = '', $type = TERM_HAS
  * @param array $arr Array of tags/terms with tag/term name and total count of use.
  * @return array     Alphabetical sorted array of used tags/terms of an user.
  */
-function tag_calc($arr) {
+function tag_calc($arr)
+{
        $tags = array();
        $min = 1e9;
        $max = -1e9;
@@ -285,7 +295,8 @@ function tag_calc($arr) {
  *
  * @return int
  */
-function tags_sort($a, $b) {
+function tags_sort($a, $b)
+{
        if (strtolower($a[0]) == strtolower($b[0])) {
                return 0;
        }
@@ -298,21 +309,22 @@ function tags_sort($a, $b) {
  * @param int     $limit Max number of displayed tags.
  * @return string HTML formattat output.
  */
-function tagcloud_wall_widget($limit = 50) {
+function tagcloud_wall_widget($limit = 50)
+{
        $a = get_app();
 
-       if(!$a->profile['profile_uid'] || !$a->profile['url']) {
-               return "";
+       if (!$a->profile['profile_uid'] || !$a->profile['url']) {
+               return '';
        }
 
-       if(Feature::isEnabled($a->profile['profile_uid'], 'tagadelic')) {
+       if (Feature::isEnabled($a->profile['profile_uid'], 'tagadelic')) {
                $owner_id = Contact::getIdForURL($a->profile['url']);
 
-               if(!$owner_id) {
-                       return "";
+               if (!$owner_id) {
+                       return '';
                }
                return wtagblock($a->profile['profile_uid'], $limit, $owner_id, 'wall');
        }
 
-       return "";
+       return '';
 }
index cbba8d0c5b501065c3ff451e14706be4ec9704a9..5a24c68ed3b1fe562dae509c4d62a8072135d7d7 100644 (file)
@@ -994,7 +994,7 @@ function contact_block() {
 function micropro($contact, $redirect = false, $class = '', $textmode = false) {
 
        // Use the contact URL if no address is available
-       if ($contact["addr"] == "") {
+       if (!x($contact, "addr")) {
                $contact["addr"] = $contact["url"];
        }
 
@@ -1020,7 +1020,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
        }
 
        return replace_macros(get_markup_template(($textmode)?'micropro_txt.tpl':'micropro_img.tpl'),array(
-               '$click' => (($contact['click']) ? $contact['click'] : ''),
+               '$click' => defaults($contact, 'click', ''),
                '$class' => $class,
                '$url' => $url,
                '$photo' => proxy_url($contact['thumb'], false, PROXY_SIZE_THUMB),
@@ -1202,11 +1202,15 @@ function redir_private_images($a, &$item)
        }
 }
 
-function put_item_in_cache(&$item, $update = false) {
-
-       if (($item["rendered-hash"] != hash("md5", $item["body"])) || ($item["rendered-hash"] == "") ||
-               ($item["rendered-html"] == "") || Config::get("system", "ignore_cache")) {
+function put_item_in_cache(&$item, $update = false)
+{
+       $rendered_hash = defaults($item, 'rendered-hash', '');
 
+       if ($rendered_hash == ''
+               || $item["rendered-html"] == ""
+               || $rendered_hash != hash("md5", $item["body"])
+               || Config::get("system", "ignore_cache")
+       ) {
                // The function "redir_private_images" changes the body.
                // I'm not sure if we should store it permanently, so we save the old value.
                $body = $item["body"];
@@ -2026,7 +2030,7 @@ function deindent($text, $chr = "[\t ]", $count = NULL) {
 }
 
 function formatBytes($bytes, $precision = 2) {
-        $units = array('B', 'KB', 'MB', 'GB', 'TB');
+       $units = array('B', 'KB', 'MB', 'GB', 'TB');
 
        $bytes = max($bytes, 0);
        $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
index 2f58321ae82621d697b101692ec524116e9c760a..711478fe1ed7f3e3974940db564989aa467e4dee 100644 (file)
--- a/index.php
+++ b/index.php
@@ -98,6 +98,7 @@ if (!$a->is_backend()) {
        session_start();
        $a->save_timestamp($stamp1, "parser");
 } else {
+       $_SESSION = [];
        Worker::executeIfIdle();
 }
 
index 3421babf617063c9febaa767571803c78ad2917e..c58dc0fc4f0fdffa059cececf6ee9213ff3a6acc 100644 (file)
@@ -35,8 +35,9 @@ function contacts_init(App $a) {
 
        require_once 'include/contact_widgets.php';
 
-       if ($_GET['nets'] == "all") {
-               $_GET['nets'] = "";
+       $nets = defaults($_GET, 'nets', '');
+       if ($nets == "all") {
+               $nets = "";
        }
 
        if (! x($a->page,'aside')) {
@@ -63,22 +64,22 @@ function contacts_init(App $a) {
                        '$account_type' => Contact::getAccountType($a->data['contact'])
                ));
 
-               $finpeople_widget = '';
+               $findpeople_widget = '';
                $follow_widget = '';
                $networks_widget = '';
        } else {
                $vcard_widget = '';
-               $networks_widget .= networks_widget('contacts',$_GET['nets']);
+               $networks_widget = networks_widget('contacts', $nets);
                if (isset($_GET['add'])) {
                        $follow_widget = follow_widget($_GET['add']);
                } else {
                        $follow_widget = follow_widget();
                }
 
-               $findpeople_widget .= findpeople_widget();
+               $findpeople_widget = findpeople_widget();
        }
 
-       $groups_widget .= Group::sidebarWidget('contacts','group','full',0,$contact_id);
+       $groups_widget = Group::sidebarWidget('contacts','group','full',0,$contact_id);
 
        $a->page['aside'] .= replace_macros(get_markup_template("contacts-widget-sidebar.tpl"),array(
                '$vcard_widget' => $vcard_widget,
@@ -515,8 +516,6 @@ function contacts_content(App $a) {
 
                require_once 'include/contact_selectors.php';
 
-               $tpl = get_markup_template("contact_edit.tpl");
-
                switch($contact['rel']) {
                        case CONTACT_IS_FRIEND:
                                $dir_icon = 'images/lrarrow.gif';
@@ -577,6 +576,7 @@ function contacts_content(App $a) {
 
                $lost_contact = (($contact['archive'] && $contact['term-date'] > NULL_DATE && $contact['term-date'] < datetime_convert('','','now')) ? t('Communications lost with this contact!') : '');
 
+               $fetch_further_information = null;
                if ($contact['network'] == NETWORK_FEED) {
                        $fetch_further_information = array('fetch_further_information',
                                                        t('Fetch further information for feeds'),
@@ -587,12 +587,19 @@ function contacts_content(App $a) {
                                                                        '3' => t('Fetch keywords'),
                                                                        '2' => t('Fetch information and keywords')));
                }
-               if (in_array($contact['network'], array(NETWORK_FEED, NETWORK_MAIL)))
+
+               $poll_interval = null;
+               if (in_array($contact['network'], array(NETWORK_FEED, NETWORK_MAIL))) {
                        $poll_interval = contact_poll_interval($contact['priority'],(! $poll_enabled));
+               }
 
-               if ($contact['network'] == NETWORK_DFRN)
+               $profile_select = null;
+               if ($contact['network'] == NETWORK_DFRN) {
                        $profile_select = contact_profile_assign($contact['profile-id'],(($contact['network'] !== NETWORK_DFRN) ? true : false));
+               }
 
+               $follow = '';
+               $follow_text = '';
                if (in_array($contact['network'], array(NETWORK_DIASPORA, NETWORK_OSTATUS))) {
                        if ($contact['rel'] == CONTACT_IS_FOLLOWER) {
                                $follow = System::baseUrl(true)."/follow?url=".urlencode($contact["url"]);
@@ -606,7 +613,7 @@ function contacts_content(App $a) {
                // Load contactact related actions like hide, suggest, delete and others
                $contact_actions = contact_actions($contact);
 
-
+               $tpl = get_markup_template("contact_edit.tpl");
                $o .= replace_macros($tpl, array(
                        //'$header' => t('Contact Editor'),
                        '$header' => t("Contact"),
@@ -618,9 +625,7 @@ function contacts_content(App $a) {
                        '$lbl_info2' => t('Their personal note'),
                        '$reason' => trim(notags($contact['reason'])),
                        '$infedit' => t('Edit contact notes'),
-                       '$common_text' => $common_text,
                        '$common_link' => 'common/loc/' . local_user() . '/' . $contact['id'],
-                       '$all_friends' => $all_friends,
                        '$relation_text' => $relation_text,
                        '$visit' => sprintf( t('Visit %s\'s profile [%s]'),$contact['name'],$contact['url']),
                        '$blockunblock' => t('Block/Unblock contact'),
@@ -658,7 +663,6 @@ function contacts_content(App $a) {
                        '$photo' => $contact['photo'],
                        '$name' => htmlentities($contact['name']),
                        '$dir_icon' => $dir_icon,
-                       '$alt_text' => $alt_text,
                        '$sparkle' => $sparkle,
                        '$url' => $url,
                        '$profileurllabel' => t('Profile URL'),
@@ -688,36 +692,33 @@ function contacts_content(App $a) {
 
        }
 
-       $blocked = false;
-       $hidden = false;
-       $ignored = false;
-       $all = false;
+       $blocked  = false;
+       $hidden   = false;
+       $ignored  = false;
+       $archived = false;
+       $all      = false;
 
        if(($a->argc == 2) && ($a->argv[1] === 'all')) {
                $sql_extra = '';
                $all = true;
-       }
-       elseif(($a->argc == 2) && ($a->argv[1] === 'blocked')) {
+       } elseif(($a->argc == 2) && ($a->argv[1] === 'blocked')) {
                $sql_extra = " AND `blocked` = 1 ";
                $blocked = true;
-       }
-       elseif(($a->argc == 2) && ($a->argv[1] === 'hidden')) {
+       } elseif(($a->argc == 2) && ($a->argv[1] === 'hidden')) {
                $sql_extra = " AND `hidden` = 1 ";
                $hidden = true;
-       }
-       elseif(($a->argc == 2) && ($a->argv[1] === 'ignored')) {
+       } elseif(($a->argc == 2) && ($a->argv[1] === 'ignored')) {
                $sql_extra = " AND `readonly` = 1 ";
                $ignored = true;
-       }
-       elseif(($a->argc == 2) && ($a->argv[1] === 'archived')) {
+       } elseif(($a->argc == 2) && ($a->argv[1] === 'archived')) {
                $sql_extra = " AND `archive` = 1 ";
                $archived = true;
-       }
-       else
+       } else {
                $sql_extra = " AND `blocked` = 0 ";
+       }
 
-       $search = ((x($_GET,'search')) ? notags(trim($_GET['search'])) : '');
-       $nets = ((x($_GET,'nets')) ? notags(trim($_GET['nets'])) : '');
+       $search = x($_GET, 'search') ? notags(trim($_GET['search'])) : '';
+       $nets = x($_GET, 'nets') ? notags(trim($_GET['nets'])) : '';
 
        $tabs = array(
                array(
@@ -786,25 +787,25 @@ function contacts_content(App $a) {
        $tab_tpl = get_markup_template('common_tabs.tpl');
        $t = replace_macros($tab_tpl, array('$tabs'=>$tabs));
 
-
-
        $searching = false;
-       if($search) {
+       $search_hdr = null;
+       if ($search) {
                $search_hdr = $search;
                $search_txt = dbesc(protect_sprintf(preg_quote($search)));
                $searching = true;
        }
        $sql_extra .= (($searching) ? " AND (name REGEXP '$search_txt' OR url REGEXP '$search_txt'  OR nick REGEXP '$search_txt') " : "");
 
-       if($nets)
+       if ($nets) {
                $sql_extra .= sprintf(" AND network = '%s' ", dbesc($nets));
+       }
 
        $sql_extra2 = ((($sort_type > 0) && ($sort_type <= CONTACT_IS_FRIEND)) ? sprintf(" AND `rel` = %d ",intval($sort_type)) : '');
 
-
        $r = q("SELECT COUNT(*) AS `total` FROM `contact`
                WHERE `uid` = %d AND `self` = 0 AND `pending` = 0 $sql_extra $sql_extra2 ",
-               intval($_SESSION['uid']));
+               intval($_SESSION['uid'])
+       );
        if (DBM::is_result($r)) {
                $a->set_pager_total($r[0]['total']);
                $total = $r[0]['total'];
@@ -834,7 +835,7 @@ function contacts_content(App $a) {
                '$total' => $total,
                '$search' => $search_hdr,
                '$desc' => t('Search your contacts'),
-               '$finding' => (($searching) ? sprintf(t('Results for: %s'),$search) : ""),
+               '$finding' => $searching ? t('Results for: %s', $search) : "",
                '$submit' => t('Find'),
                '$cmd' => $a->cmd,
                '$contacts' => $contacts,
@@ -849,7 +850,6 @@ function contacts_content(App $a) {
                ),
                '$h_batch_actions' => t('Batch Actions'),
                '$paginate' => paginate($a),
-
        ));
 
        return $o;
@@ -927,12 +927,11 @@ function contact_posts($a, $contact_id) {
                $contact = $r[0];
                $a->page['aside'] = "";
                profile_load($a, "", 0, Contact::getDetailsByURL($contact["url"]));
-       } else
-               $profile = "";
+       }
 
        $tab_str = contacts_tab($a, $contact_id, 1);
 
-       $o .= $tab_str;
+       $o = $tab_str;
 
        $o .= Contact::getPostsFromUrl($contact["url"]);
 
index 32db9be92ca6b526735d31afccb1cd2e369427c3..1a135a602f23e3234a09a4c456be6dc0812a6d3e 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @file mod/crepair.php
  */
@@ -10,65 +11,68 @@ use Friendica\Model\Contact;
 require_once 'include/contact_selectors.php';
 require_once 'mod/contacts.php';
 
-function crepair_init(App $a) {
-       if (! local_user()) {
+function crepair_init(App $a)
+{
+       if (!local_user()) {
                return;
        }
 
        $contact_id = 0;
 
-       if(($a->argc == 2) && intval($a->argv[1])) {
+       if (($a->argc == 2) && intval($a->argv[1])) {
                $contact_id = intval($a->argv[1]);
                $r = q("SELECT * FROM `contact` WHERE `uid` = %d and `id` = %d LIMIT 1",
                        intval(local_user()),
                        intval($contact_id)
                );
-               if (! DBM::is_result($r)) {
+               if (!DBM::is_result($r)) {
                        $contact_id = 0;
                }
        }
 
-       if(! x($a->page,'aside'))
+       if (!x($a->page, 'aside')) {
                $a->page['aside'] = '';
+       }
 
-       if($contact_id) {
+       if ($contact_id) {
                $a->data['contact'] = $r[0];
                $contact = $r[0];
                profile_load($a, "", 0, Contact::getDetailsByURL($contact["url"]));
        }
 }
 
-function crepair_post(App $a) {
-       if (! local_user()) {
+function crepair_post(App $a)
+{
+       if (!local_user()) {
                return;
        }
 
        $cid = (($a->argc > 1) ? intval($a->argv[1]) : 0);
 
-       if($cid) {
+       if ($cid) {
                $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
                        intval($cid),
                        intval(local_user())
                );
        }
 
-       if (! DBM::is_result($r)) {
+       if (!DBM::is_result($r)) {
                return;
        }
 
        $contact = $r[0];
 
-       $name    = ((x($_POST,'name')) ? $_POST['name'] : $contact['name']);
-       $nick    = ((x($_POST,'nick')) ? $_POST['nick'] : '');
-       $url     = ((x($_POST,'url')) ? $_POST['url'] : '');
-       $request = ((x($_POST,'request')) ? $_POST['request'] : '');
-       $confirm = ((x($_POST,'confirm')) ? $_POST['confirm'] : '');
-       $notify  = ((x($_POST,'notify')) ? $_POST['notify'] : '');
-       $poll    = ((x($_POST,'poll')) ? $_POST['poll'] : '');
-       $attag   = ((x($_POST,'attag')) ? $_POST['attag'] : '');
-       $photo   = ((x($_POST,'photo')) ? $_POST['photo'] : '');
-       $remote_self = ((x($_POST,'remote_self')) ? $_POST['remote_self'] : false);
-       $nurl    = normalise_link($url);
+       $name        = defaults($_POST, 'name'       , $contact['name']);
+       $nick        = defaults($_POST, 'nick'       , '');
+       $url         = defaults($_POST, 'url'        , '');
+       $request     = defaults($_POST, 'request'    , '');
+       $confirm     = defaults($_POST, 'confirm'    , '');
+       $notify      = defaults($_POST, 'notify'     , '');
+       $poll        = defaults($_POST, 'poll'       , '');
+       $attag       = defaults($_POST, 'attag'      , '');
+       $photo       = defaults($_POST, 'photo'      , '');
+       $remote_self = defaults($_POST, 'remote_self', false);
+       $nurl        = normalise_link($url);
 
        $r = q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `nurl` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s', `attag` = '%s' , `remote_self` = %d
                WHERE `id` = %d AND `uid` = %d",
@@ -101,26 +105,24 @@ function crepair_post(App $a) {
        return;
 }
 
-
-
-function crepair_content(App $a) {
-
-       if (! local_user()) {
-               notice( t('Permission denied.') . EOL);
+function crepair_content(App $a)
+{
+       if (!local_user()) {
+               notice(t('Permission denied.') . EOL);
                return;
        }
 
        $cid = (($a->argc > 1) ? intval($a->argv[1]) : 0);
 
-       if($cid) {
+       if ($cid) {
                $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
                        intval($cid),
                        intval(local_user())
                );
        }
 
-       if (! DBM::is_result($r)) {
-               notice( t('Contact not found.') . EOL);
+       if (!DBM::is_result($r)) {
+               notice(t('Contact not found.') . EOL);
                return;
        }
 
@@ -131,45 +133,44 @@ function crepair_content(App $a) {
 
        $returnaddr = "contacts/$cid";
 
-       $allow_remote_self = Config::get('system','allow_users_remote_self');
+       $allow_remote_self = Config::get('system', 'allow_users_remote_self');
 
        // Disable remote self for everything except feeds.
        // There is an issue when you repeat an item from maybe twitter and you got comments from friendica and twitter
        // Problem is, you couldn't reply to both networks.
-       if (!in_array($contact['network'], array(NETWORK_FEED, NETWORK_DFRN, NETWORK_DIASPORA)))
+       if (!in_array($contact['network'], array(NETWORK_FEED, NETWORK_DFRN, NETWORK_DIASPORA))) {
                $allow_remote_self = false;
+       }
 
-       if ($contact['network'] == NETWORK_FEED)
-               $remote_self_options = array('0'=>t('No mirroring'), '1'=>t('Mirror as forwarded posting'), '2'=>t('Mirror as my own posting'));
-       else
-               $remote_self_options = array('0'=>t('No mirroring'), '2'=>t('Mirror as my own posting'));
+       if ($contact['network'] == NETWORK_FEED) {
+               $remote_self_options = array('0' => t('No mirroring'), '1' => t('Mirror as forwarded posting'), '2' => t('Mirror as my own posting'));
+       } else {
+               $remote_self_options = array('0' => t('No mirroring'), '2' => t('Mirror as my own posting'));
+       }
 
-       $update_profile = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_DSPR, NETWORK_OSTATUS));
+       $update_profile = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS));
 
        $tab_str = contacts_tab($a, $contact['id'], 5);
 
-
        $tpl = get_markup_template('crepair.tpl');
-       $o .= replace_macros($tpl, array(
-               //'$title'      => t('Repair Contact Settings'),
-               '$tab_str'      => $tab_str,
-               '$warning'      => $warning,
-               '$info'         => $info,
-               '$returnaddr'   => $returnaddr,
-               '$return'       => t('Return to contact editor'),
-               '$update_profile' => update_profile,
-               '$udprofilenow' => t('Refetch contact data'),
-               '$contact_id'   => $contact['id'],
-               '$lbl_submit'   => t('Submit'),
-
+       $o = replace_macros($tpl, array(
+               '$tab_str'        => $tab_str,
+               '$warning'        => $warning,
+               '$info'           => $info,
+               '$returnaddr'     => $returnaddr,
+               '$return'         => t('Return to contact editor'),
+               '$update_profile' => $update_profile,
+               '$udprofilenow'   => t('Refetch contact data'),
+               '$contact_id'     => $contact['id'],
+               '$lbl_submit'     => t('Submit'),
                '$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
-                               ),
+                       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
+               ),
 
                '$name'         => array('name', t('Name') , htmlentities($contact['name'])),
                '$nick'         => array('nick', t('Account Nickname'), htmlentities($contact['nick'])),
@@ -183,5 +184,4 @@ function crepair_content(App $a) {
        ));
 
        return $o;
-
 }
index 112ee34ab3195bd906e0bd97cbfd5ff22a4f1b37..a5f5f1bd34b6cc9bea72aad5ea22381c5f08cf7b 100644 (file)
@@ -29,6 +29,7 @@ use Friendica\Model\Group;
 use Friendica\Model\User;
 use Friendica\Network\Probe;
 use Friendica\Protocol\Diaspora;
+use Friendica\Util\Crypto;
 
 require_once 'include/enotify.php';
 
@@ -162,9 +163,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
                         * worried about key leakage than anybody cracking it.
                         *
                         */
-                       require_once 'include/crypto.php';
-
-                       $res = new_keypair(4096);
+                       $res = Crypto::newKeypair(4096);
 
 
                        $private_key = $res['prvkey'];
index d27c7d6214796ca3d689ab8d4fce246faf7e5462..69e86f1bc26341e4bb33d714c8809e453c93549e 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @file mod/dfrn_poll.php
  */
@@ -12,49 +13,50 @@ use Friendica\Protocol\OStatus;
 
 require_once 'include/items.php';
 
-function dfrn_poll_init(App $a) {
+function dfrn_poll_init(App $a)
+{
        Login::sessionAuth();
 
-       $dfrn_id         = ((x($_GET,'dfrn_id'))         ? $_GET['dfrn_id']              : '');
-       $type            = ((x($_GET,'type'))            ? $_GET['type']                 : 'data');
-       $last_update     = ((x($_GET,'last_update'))     ? $_GET['last_update']          : '');
-       $destination_url = ((x($_GET,'destination_url')) ? $_GET['destination_url']      : '');
-       $challenge       = ((x($_GET,'challenge'))       ? $_GET['challenge']            : '');
-       $sec             = ((x($_GET,'sec'))             ? $_GET['sec']                  : '');
-       $dfrn_version    = ((x($_GET,'dfrn_version'))    ? (float) $_GET['dfrn_version'] : 2.0);
-       $perm            = ((x($_GET,'perm'))            ? $_GET['perm']                 : 'r');
-       $quiet                   = ((x($_GET,'quiet'))                   ? true                                                  : false);
+       $dfrn_id         = defaults($_GET, 'dfrn_id'        , '');
+       $type            = defaults($_GET, 'type'           , 'data');
+       $last_update     = defaults($_GET, 'last_update'    , '');
+       $destination_url = defaults($_GET, 'destination_url', '');
+       $challenge       = defaults($_GET, 'challenge'      , '');
+       $sec             = defaults($_GET, 'sec'            , '');
+       $dfrn_version    = defaults($_GET, 'dfrn_version'   , 2.0);
+       $perm            = defaults($_GET, 'perm'           , 'r');
+       $quiet                   = x($_GET, 'quiet');
 
        // Possibly it is an OStatus compatible server that requests a user feed
        if (($a->argc > 1) && ($dfrn_id == '') && !strstr($_SERVER["HTTP_USER_AGENT"], 'Friendica')) {
                $nickname = $a->argv[1];
                header("Content-type: application/atom+xml");
-               echo OStatus::feed($a, $nickname, $last_update, 10);
+               echo OStatus::feed($nickname, $last_update, 10);
                killme();
        }
 
-       $direction = (-1);
-
+       $direction = -1;
 
-       if(strpos($dfrn_id,':') == 1) {
-               $direction = intval(substr($dfrn_id,0,1));
-               $dfrn_id   = substr($dfrn_id,2);
+       if (strpos($dfrn_id, ':') == 1) {
+               $direction = intval(substr($dfrn_id, 0, 1));
+               $dfrn_id = substr($dfrn_id, 2);
        }
 
        $hidewall = false;
 
-       if(($dfrn_id === '') && (! x($_POST,'dfrn_id'))) {
-               if((Config::get('system','block_public')) && (! local_user()) && (! remote_user())) {
+       if (($dfrn_id === '') && (!x($_POST, 'dfrn_id'))) {
+               if (Config::get('system', 'block_public') && !local_user() && !remote_user()) {
                        http_status_exit(403);
                }
 
                $user = '';
-               if($a->argc > 1) {
+               if ($a->argc > 1) {
                        $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);
+                       }
 
                        $hidewall = ($r[0]['hidewall'] && !local_user());
 
@@ -63,16 +65,15 @@ function dfrn_poll_init(App $a) {
 
                logger('dfrn_poll: public feed request from ' . $_SERVER['REMOTE_ADDR'] . ' for ' . $user);
                header("Content-type: application/atom+xml");
-               echo DFRN::feed('', $user,$last_update, 0, $hidewall);
+               echo DFRN::feed('', $user, $last_update, 0, $hidewall);
                killme();
        }
 
-       if(($type === 'profile') && (! strlen($sec))) {
-
+       if (($type === 'profile') && (!strlen($sec))) {
                $sql_extra = '';
-               switch($direction) {
-                       case (-1):
-                               $sql_extra = sprintf(" AND ( `dfrn-id` = '%s' OR `issued-id` = '%s' ) ", dbesc($dfrn_id),dbesc($dfrn_id));
+               switch ($direction) {
+                       case -1:
+                               $sql_extra = sprintf(" AND ( `dfrn-id` = '%s' OR `issued-id` = '%s' ) ", dbesc($dfrn_id), dbesc($dfrn_id));
                                $my_id = $dfrn_id;
                                break;
                        case 0:
@@ -96,28 +97,29 @@ function dfrn_poll_init(App $a) {
                );
 
                if (DBM::is_result($r)) {
-
                        $s = fetch_url($r[0]['poll'] . '?dfrn_id=' . $my_id . '&type=profile-check');
 
                        logger("dfrn_poll: old profile returns " . $s, LOGGER_DATA);
 
-                       if(strlen($s)) {
-
+                       if (strlen($s)) {
                                $xml = parse_xml_string($s);
 
-                               if((int) $xml->status == 1) {
+                               if ((int) $xml->status === 1) {
                                        $_SESSION['authenticated'] = 1;
-                                       if(! x($_SESSION,'remote'))
+                                       if (!x($_SESSION, 'remote')) {
                                                $_SESSION['remote'] = array();
+                                       }
 
-                                       $_SESSION['remote'][] = array('cid' => $r[0]['id'],'uid' => $r[0]['uid'],'url' => $r[0]['url']);
+                                       $_SESSION['remote'][] = array('cid' => $r[0]['id'], 'uid' => $r[0]['uid'], 'url' => $r[0]['url']);
 
                                        $_SESSION['visitor_id'] = $r[0]['id'];
                                        $_SESSION['visitor_home'] = $r[0]['url'];
                                        $_SESSION['visitor_handle'] = $r[0]['addr'];
                                        $_SESSION['visitor_visiting'] = $r[0]['uid'];
-                                       if(!$quiet)
-                                               info( sprintf(t('%1$s welcomes %2$s'), $r[0]['username'] , $r[0]['name']) . EOL);
+                                       if (!$quiet) {
+                                               info(sprintf(t('%1$s welcomes %2$s'), $r[0]['username'], $r[0]['name']) . EOL);
+                                       }
+
                                        // Visitors get 1 day session.
                                        $session_id = session_id();
                                        $expire = time() + 86400;
@@ -131,53 +133,53 @@ function dfrn_poll_init(App $a) {
                        goaway((strlen($destination_url)) ? $destination_url : System::baseUrl() . '/profile/' . $profile);
                }
                goaway(System::baseUrl());
-
        }
 
-       if($type === 'profile-check' && $dfrn_version < 2.2 ) {
-
-               if((strlen($challenge)) && (strlen($sec))) {
-
+       if ($type === 'profile-check' && $dfrn_version < 2.2) {
+               if ((strlen($challenge)) && (strlen($sec))) {
                        q("DELETE FROM `profile_check` WHERE `expire` < " . intval(time()));
                        $r = q("SELECT * FROM `profile_check` WHERE `sec` = '%s' ORDER BY `expire` DESC LIMIT 1",
                                dbesc($sec)
                        );
-                       if (! DBM::is_result($r)) {
+                       if (!DBM::is_result($r)) {
                                xml_status(3, 'No ticket');
                                // NOTREACHED
                        }
+
                        $orig_id = $r[0]['dfrn_id'];
-                       if(strpos($orig_id, ':'))
-                               $orig_id = substr($orig_id,2);
+                       if (strpos($orig_id, ':')) {
+                               $orig_id = substr($orig_id, 2);
+                       }
 
                        $c = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
                                intval($r[0]['cid'])
                        );
-                       if (! DBM::is_result($c)) {
+                       if (!DBM::is_result($c)) {
                                xml_status(3, 'No profile');
                        }
+
                        $contact = $c[0];
 
                        $sent_dfrn_id = hex2bin($dfrn_id);
-                       $challenge    = hex2bin($challenge);
+                       $challenge = hex2bin($challenge);
 
                        $final_dfrn_id = '';
 
-                       if(($contact['duplex']) && strlen($contact['prvkey'])) {
-                               openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
-                               openssl_private_decrypt($challenge,$decoded_challenge,$contact['prvkey']);
-                       }
-                       else {
-                               openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
-                               openssl_public_decrypt($challenge,$decoded_challenge,$contact['pubkey']);
+                       if (($contact['duplex']) && strlen($contact['prvkey'])) {
+                               openssl_private_decrypt($sent_dfrn_id, $final_dfrn_id, $contact['prvkey']);
+                               openssl_private_decrypt($challenge, $decoded_challenge, $contact['prvkey']);
+                       } else {
+                               openssl_public_decrypt($sent_dfrn_id, $final_dfrn_id, $contact['pubkey']);
+                               openssl_public_decrypt($challenge, $decoded_challenge, $contact['pubkey']);
                        }
 
                        $final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
 
-                       if(strpos($final_dfrn_id,':') == 1)
-                               $final_dfrn_id = substr($final_dfrn_id,2);
+                       if (strpos($final_dfrn_id, ':') == 1) {
+                               $final_dfrn_id = substr($final_dfrn_id, 2);
+                       }
 
-                       if($final_dfrn_id != $orig_id) {
+                       if ($final_dfrn_id != $orig_id) {
                                logger('profile_check: ' . $final_dfrn_id . ' != ' . $orig_id, LOGGER_DEBUG);
                                // did not decode properly - cannot trust this site
                                xml_status(3, 'Bad decryption');
@@ -187,11 +189,9 @@ function dfrn_poll_init(App $a) {
                        echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?><dfrn_poll><status>0</status><challenge>$decoded_challenge</challenge><sec>$sec</sec></dfrn_poll>";
                        killme();
                        // NOTREACHED
-               }
-               else {
-                               // old protocol
-
-                       switch($direction) {
+               } else {
+                       // old protocol
+                       switch ($direction) {
                                case 1:
                                        $dfrn_id = '0:' . $dfrn_id;
                                        break;
@@ -202,7 +202,6 @@ function dfrn_poll_init(App $a) {
                                        break;
                        }
 
-
                        q("DELETE FROM `profile_check` WHERE `expire` < " . intval(time()));
                        $r = q("SELECT * FROM `profile_check` WHERE `dfrn_id` = '%s' ORDER BY `expire` DESC",
                                dbesc($dfrn_id));
@@ -214,67 +213,65 @@ function dfrn_poll_init(App $a) {
                        return; // NOTREACHED
                }
        }
-
 }
 
-
-
-function dfrn_poll_post(App $a) {
-
-       $dfrn_id      = ((x($_POST,'dfrn_id'))      ? $_POST['dfrn_id']              : '');
-       $challenge    = ((x($_POST,'challenge'))    ? $_POST['challenge']            : '');
-       $url          = ((x($_POST,'url'))          ? $_POST['url']                  : '');
-       $sec          = ((x($_POST,'sec'))          ? $_POST['sec']                  : '');
-       $ptype        = ((x($_POST,'type'))         ? $_POST['type']                 : '');
-       $dfrn_version = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0);
-       $perm         = ((x($_POST,'perm'))         ? $_POST['perm']                 : 'r');
-
-       if($ptype === 'profile-check') {
-
-               if((strlen($challenge)) && (strlen($sec))) {
-
+function dfrn_poll_post(App $a)
+{
+       $dfrn_id      = x($_POST,'dfrn_id')      ? $_POST['dfrn_id']              : '';
+       $challenge    = x($_POST,'challenge')    ? $_POST['challenge']            : '';
+       $url          = x($_POST,'url')          ? $_POST['url']                  : '';
+       $sec          = x($_POST,'sec')          ? $_POST['sec']                  : '';
+       $ptype        = x($_POST,'type')         ? $_POST['type']                 : '';
+       $dfrn_version = x($_POST,'dfrn_version') ? (float) $_POST['dfrn_version'] : 2.0;
+       $perm         = x($_POST,'perm')         ? $_POST['perm']                 : 'r';
+
+       if ($ptype === 'profile-check') {
+               if (strlen($challenge) && strlen($sec)) {
                        logger('dfrn_poll: POST: profile-check');
 
                        q("DELETE FROM `profile_check` WHERE `expire` < " . intval(time()));
                        $r = q("SELECT * FROM `profile_check` WHERE `sec` = '%s' ORDER BY `expire` DESC LIMIT 1",
                                dbesc($sec)
                        );
-                       if (! DBM::is_result($r)) {
+                       if (!DBM::is_result($r)) {
                                xml_status(3, 'No ticket');
                                // NOTREACHED
                        }
+
                        $orig_id = $r[0]['dfrn_id'];
-                       if(strpos($orig_id, ':'))
-                               $orig_id = substr($orig_id,2);
+                       if (strpos($orig_id, ':')) {
+                               $orig_id = substr($orig_id, 2);
+                       }
 
                        $c = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
                                intval($r[0]['cid'])
                        );
-                       if (! DBM::is_result($c)) {
+                       if (!DBM::is_result($c)) {
                                xml_status(3, 'No profile');
                        }
+
                        $contact = $c[0];
 
                        $sent_dfrn_id = hex2bin($dfrn_id);
-                       $challenge    = hex2bin($challenge);
+                       $challenge = hex2bin($challenge);
 
                        $final_dfrn_id = '';
 
-                       if(($contact['duplex']) && strlen($contact['prvkey'])) {
-                               openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
-                               openssl_private_decrypt($challenge,$decoded_challenge,$contact['prvkey']);
-                       }
-                       else {
-                               openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
-                               openssl_public_decrypt($challenge,$decoded_challenge,$contact['pubkey']);
+                       if ($contact['duplex'] && strlen($contact['prvkey'])) {
+                               openssl_private_decrypt($sent_dfrn_id, $final_dfrn_id, $contact['prvkey']);
+                               openssl_private_decrypt($challenge, $decoded_challenge, $contact['prvkey']);
+                       } else {
+                               openssl_public_decrypt($sent_dfrn_id, $final_dfrn_id, $contact['pubkey']);
+                               openssl_public_decrypt($challenge, $decoded_challenge, $contact['pubkey']);
                        }
 
                        $final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
 
-                       if(strpos($final_dfrn_id,':') == 1)
-                               $final_dfrn_id = substr($final_dfrn_id,2);
+                       if (strpos($final_dfrn_id, ':') == 1) {
+                               $final_dfrn_id = substr($final_dfrn_id, 2);
+                       }
 
-                       if($final_dfrn_id != $orig_id) {
+                       if ($final_dfrn_id != $orig_id) {
                                logger('profile_check: ' . $final_dfrn_id . ' != ' . $orig_id, LOGGER_DEBUG);
                                // did not decode properly - cannot trust this site
                                xml_status(3, 'Bad decryption');
@@ -285,22 +282,20 @@ function dfrn_poll_post(App $a) {
                        killme();
                        // NOTREACHED
                }
-
        }
 
-       $direction    = (-1);
-       if(strpos($dfrn_id,':') == 1) {
-               $direction = intval(substr($dfrn_id,0,1));
-               $dfrn_id   = substr($dfrn_id,2);
+       $direction = -1;
+       if (strpos($dfrn_id, ':') == 1) {
+               $direction = intval(substr($dfrn_id, 0, 1));
+               $dfrn_id = substr($dfrn_id, 2);
        }
 
-
        $r = q("SELECT * FROM `challenge` WHERE `dfrn-id` = '%s' AND `challenge` = '%s' LIMIT 1",
                dbesc($dfrn_id),
                dbesc($challenge)
        );
 
-       if (! DBM::is_result($r)) {
+       if (!DBM::is_result($r)) {
                killme();
        }
 
@@ -314,8 +309,8 @@ function dfrn_poll_post(App $a) {
 
 
        $sql_extra = '';
-       switch($direction) {
-               case (-1):
+       switch ($direction) {
+               case -1:
                        $sql_extra = sprintf(" AND `issued-id` = '%s' ", dbesc($dfrn_id));
                        $my_id = $dfrn_id;
                        break;
@@ -332,11 +327,8 @@ function dfrn_poll_post(App $a) {
                        break; // NOTREACHED
        }
 
-
        $r = q("SELECT * FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 $sql_extra LIMIT 1");
-
-
-       if (! DBM::is_result($r)) {
+       if (!DBM::is_result($r)) {
                killme();
        }
 
@@ -344,8 +336,7 @@ function dfrn_poll_post(App $a) {
        $owner_uid = $r[0]['uid'];
        $contact_id = $r[0]['id'];
 
-
-       if($type === 'reputation' && strlen($url)) {
+       if ($type === 'reputation' && strlen($url)) {
                $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
                        dbesc($url),
                        intval($owner_uid)
@@ -357,7 +348,7 @@ function dfrn_poll_post(App $a) {
                        $reputation = $r[0]['rating'];
                        $text = $r[0]['reason'];
 
-                       if($r[0]['id'] == $contact_id) {        // inquiring about own reputation not allowed
+                       if ($r[0]['id'] == $contact_id) { // inquiring about own reputation not allowed
                                $reputation = 0;
                                $text = '';
                        }
@@ -372,18 +363,17 @@ function dfrn_poll_post(App $a) {
                ";
                killme();
                // NOTREACHED
-       }
-       else {
-
+       } else {
                // Update the writable flag if it changed
-               logger('dfrn_poll: post request feed: ' . print_r($_POST,true),LOGGER_DATA);
-               if($dfrn_version >= 2.21) {
-                       if($perm === 'rw')
+               logger('dfrn_poll: post request feed: ' . print_r($_POST, true), LOGGER_DATA);
+               if ($dfrn_version >= 2.21) {
+                       if ($perm === 'rw') {
                                $writable = 1;
-                       else
+                       } else {
                                $writable = 0;
+                       }
 
-                       if($writable !=  $contact['writable']) {
+                       if ($writable != $contact['writable']) {
                                q("UPDATE `contact` SET `writable` = %d WHERE `id` = %d",
                                        intval($writable),
                                        intval($contact_id)
@@ -395,29 +385,27 @@ function dfrn_poll_post(App $a) {
                $o = DFRN::feed($dfrn_id, $a->argv[1], $last_update, $direction);
                echo $o;
                killme();
-
        }
 }
 
-function dfrn_poll_content(App $a) {
-
-       $dfrn_id         = ((x($_GET,'dfrn_id'))         ? $_GET['dfrn_id']              : '');
-       $type            = ((x($_GET,'type'))            ? $_GET['type']                 : 'data');
-       $last_update     = ((x($_GET,'last_update'))     ? $_GET['last_update']          : '');
-       $destination_url = ((x($_GET,'destination_url')) ? $_GET['destination_url']      : '');
-       $sec             = ((x($_GET,'sec'))             ? $_GET['sec']                  : '');
-       $dfrn_version    = ((x($_GET,'dfrn_version'))    ? (float) $_GET['dfrn_version'] : 2.0);
-       $perm            = ((x($_GET,'perm'))            ? $_GET['perm']                 : 'r');
-       $quiet           = ((x($_GET,'quiet'))           ? true                          : false);
-
-       $direction = (-1);
-       if(strpos($dfrn_id,':') == 1) {
-               $direction = intval(substr($dfrn_id,0,1));
-               $dfrn_id = substr($dfrn_id,2);
+function dfrn_poll_content(App $a)
+{
+       $dfrn_id         = x($_GET,'dfrn_id')         ? $_GET['dfrn_id']              : '';
+       $type            = x($_GET,'type')            ? $_GET['type']                 : 'data';
+       $last_update     = x($_GET,'last_update')     ? $_GET['last_update']          : '';
+       $destination_url = x($_GET,'destination_url') ? $_GET['destination_url']      : '';
+       $sec             = x($_GET,'sec')             ? $_GET['sec']                  : '';
+       $dfrn_version    = x($_GET,'dfrn_version')    ? (float) $_GET['dfrn_version'] : 2.0;
+       $perm            = x($_GET,'perm')            ? $_GET['perm']                 : 'r';
+       $quiet           = x($_GET,'quiet')           ? true                          : false;
+
+       $direction = -1;
+       if (strpos($dfrn_id, ':') == 1) {
+               $direction = intval(substr($dfrn_id, 0, 1));
+               $dfrn_id = substr($dfrn_id, 2);
        }
 
-
-       if($dfrn_id != '') {
+       if ($dfrn_id != '') {
                // initial communication from external contact
                $hash = random_string();
 
@@ -425,7 +413,7 @@ function dfrn_poll_content(App $a) {
 
                $r = q("DELETE FROM `challenge` WHERE `expire` < " . intval(time()));
 
-               if($type !== 'profile') {
+               if ($type !== 'profile') {
                        $r = q("INSERT INTO `challenge` ( `challenge`, `dfrn-id`, `expire` , `type`, `last_update` )
                                VALUES( '%s', '%s', '%s', '%s', '%s' ) ",
                                dbesc($hash),
@@ -435,13 +423,16 @@ function dfrn_poll_content(App $a) {
                                dbesc($last_update)
                        );
                }
+
                $sql_extra = '';
-               switch($direction) {
-                       case (-1):
-                               if($type === 'profile')
-                                       $sql_extra = sprintf(" AND ( `dfrn-id` = '%s' OR `issued-id` = '%s' ) ", dbesc($dfrn_id),dbesc($dfrn_id));
-                               else
+               switch ($direction) {
+                       case -1:
+                               if ($type === 'profile') {
+                                       $sql_extra = sprintf(" AND ( `dfrn-id` = '%s' OR `issued-id` = '%s' ) ", dbesc($dfrn_id), dbesc($dfrn_id));
+                               } else {
                                        $sql_extra = sprintf(" AND `issued-id` = '%s' ", dbesc($dfrn_id));
+                               }
+
                                $my_id = $dfrn_id;
                                break;
                        case 0:
@@ -465,36 +456,30 @@ function dfrn_poll_content(App $a) {
                        AND `user`.`nickname` = '%s' $sql_extra LIMIT 1",
                        dbesc($nickname)
                );
-
                if (DBM::is_result($r)) {
-
                        $challenge = '';
                        $encrypted_id = '';
-                       $id_str = $my_id . '.' . mt_rand(1000,9999);
-
-                       if(($r[0]['duplex'] && strlen($r[0]['pubkey'])) || (! strlen($r[0]['prvkey']))) {
-                               openssl_public_encrypt($hash,$challenge,$r[0]['pubkey']);
-                               openssl_public_encrypt($id_str,$encrypted_id,$r[0]['pubkey']);
-                       }
-                       else {
-                               openssl_private_encrypt($hash,$challenge,$r[0]['prvkey']);
-                               openssl_private_encrypt($id_str,$encrypted_id,$r[0]['prvkey']);
+                       $id_str = $my_id . '.' . mt_rand(1000, 9999);
+
+                       if (($r[0]['duplex'] && strlen($r[0]['pubkey'])) || !strlen($r[0]['prvkey'])) {
+                               openssl_public_encrypt($hash, $challenge, $r[0]['pubkey']);
+                               openssl_public_encrypt($id_str, $encrypted_id, $r[0]['pubkey']);
+                       } else {
+                               openssl_private_encrypt($hash, $challenge, $r[0]['prvkey']);
+                               openssl_private_encrypt($id_str, $encrypted_id, $r[0]['prvkey']);
                        }
 
                        $challenge = bin2hex($challenge);
                        $encrypted_id = bin2hex($encrypted_id);
-               }
-               else {
+               } else {
                        $status = 1;
                        $challenge = '';
                        $encrypted_id = '';
                }
 
-               if(($type === 'profile') && (strlen($sec))) {
-
+               if (($type === 'profile') && (strlen($sec))) {
                        // URL reply
-
-                       if($dfrn_version < 2.2) {
+                       if ($dfrn_version < 2.2) {
                                $s = fetch_url($r[0]['poll']
                                        . '?dfrn_id=' . $encrypted_id
                                        . '&type=profile-check'
@@ -502,8 +487,7 @@ function dfrn_poll_content(App $a) {
                                        . '&challenge=' . $challenge
                                        . '&sec=' . $sec
                                );
-                       }
-                       else {
+                       } else {
                                $s = post_url($r[0]['poll'], array(
                                        'dfrn_id' => $encrypted_id,
                                        'type' => 'profile-check',
@@ -515,7 +499,7 @@ function dfrn_poll_content(App $a) {
 
                        $profile = ((DBM::is_result($r) && $r[0]['nickname']) ? $r[0]['nickname'] : $nickname);
 
-                       switch($destination_url) {
+                       switch ($destination_url) {
                                case 'profile':
                                        $dest = System::baseUrl() . '/profile/' . $profile . '?f=&tab=profile';
                                        break;
@@ -534,26 +518,28 @@ function dfrn_poll_content(App $a) {
 
                        logger("dfrn_poll: sec profile: " . $s, LOGGER_DATA);
 
-                       if(strlen($s) && strstr($s,'<?xml')) {
-
+                       if (strlen($s) && strstr($s, '<?xml')) {
                                $xml = parse_xml_string($s);
 
-                               logger('dfrn_poll: profile: parsed xml: ' . print_r($xml,true), LOGGER_DATA);
+                               logger('dfrn_poll: profile: parsed xml: ' . print_r($xml, true), LOGGER_DATA);
 
                                logger('dfrn_poll: secure profile: challenge: ' . $xml->challenge . ' expecting ' . $hash);
                                logger('dfrn_poll: secure profile: sec: ' . $xml->sec . ' expecting ' . $sec);
 
-
-                               if(((int) $xml->status == 0) && ($xml->challenge == $hash)  && ($xml->sec == $sec)) {
+                               if (((int) $xml->status == 0) && ($xml->challenge == $hash) && ($xml->sec == $sec)) {
                                        $_SESSION['authenticated'] = 1;
-                                       if(! x($_SESSION,'remote'))
+                                       if (!x($_SESSION, 'remote')) {
                                                $_SESSION['remote'] = array();
-                                       $_SESSION['remote'][] = array('cid' => $r[0]['id'],'uid' => $r[0]['uid'],'url' => $r[0]['url']);
+                                       }
+
+                                       $_SESSION['remote'][] = array('cid' => $r[0]['id'], 'uid' => $r[0]['uid'], 'url' => $r[0]['url']);
                                        $_SESSION['visitor_id'] = $r[0]['id'];
                                        $_SESSION['visitor_home'] = $r[0]['url'];
                                        $_SESSION['visitor_visiting'] = $r[0]['uid'];
-                                       if(!$quiet)
-                                               info( sprintf(t('%1$s welcomes %2$s'), $r[0]['username'] , $r[0]['name']) . EOL);
+                                       if (!$quiet) {
+                                               info(sprintf(t('%1$s welcomes %2$s'), $r[0]['username'], $r[0]['name']) . EOL);
+                                       }
+
                                        // Visitors get 1 day session.
                                        $session_id = session_id();
                                        $expire = time() + 86400;
@@ -567,9 +553,7 @@ function dfrn_poll_content(App $a) {
                        }
                        goaway($dest);
                        // NOTREACHED
-
-               }
-               else {
+               } else {
                        // XML reply
                        header("Content-type: text/xml");
                        echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n"
@@ -578,7 +562,7 @@ function dfrn_poll_content(App $a) {
                                . "\t" . '<dfrn_version>' . DFRN_PROTOCOL_VERSION . '</dfrn_version>' . "\r\n"
                                . "\t" . '<dfrn_id>' . $encrypted_id . '</dfrn_id>' . "\r\n"
                                . "\t" . '<challenge>' . $challenge . '</challenge>' . "\r\n"
-                               . '</dfrn_poll>' . "\r\n" ;
+                               . '</dfrn_poll>' . "\r\n";
                        killme();
                        // NOTREACHED
                }
index 67e6f435ec380393d5bd5f2b57901cad51447574..2d91d2d1aed782d8036373ee7292e5bb497eb2bf 100644 (file)
@@ -202,8 +202,9 @@ function display_content(App $a, $update = false, $update_uid = 0) {
 
        if ($update) {
                $item_id = $_REQUEST['item_id'];
-               $item = dba::select('item', ['uid'], ['id' => $item_id], ['limit' => 1]);
+               $item = dba::select('item', ['uid', 'parent'], ['id' => $item_id], ['limit' => 1]);
                $a->profile = array('uid' => intval($item['uid']), 'profile_uid' => intval($item['uid']));
+               $item_parent = $item['parent'];
        } else {
                $item_id = (($a->argc > 2) ? $a->argv[2] : 0);
 
@@ -261,7 +262,7 @@ function display_content(App $a, $update = false, $update_uid = 0) {
 
        $contact_id = 0;
 
-       if (is_array($_SESSION['remote'])) {
+       if (x($_SESSION, 'remote') && is_array($_SESSION['remote'])) {
                foreach ($_SESSION['remote'] as $v) {
                        if ($v['uid'] == $a->profile['uid']) {
                                $contact_id = $v['cid'];
@@ -295,7 +296,7 @@ function display_content(App $a, $update = false, $update_uid = 0) {
        }
        $is_owner = (local_user() && (in_array($a->profile['profile_uid'], [local_user(), 0])) ? true : false);
 
-       if ($a->profile['hidewall'] && !$is_owner && !$remote_contact) {
+       if (x($a->profile, 'hidewall') && !$is_owner && !$remote_contact) {
                notice(t('Access to this profile has been restricted.') . EOL);
                return;
        }
index 7a05274e233d8281f6ff673ddb66a28160fd374c..eb804b5d66c61c98dd0e80380a21e43c130b50ad 100644 (file)
@@ -20,7 +20,7 @@ function events_init(App $a) {
                return;
        }
 
-       if ($a->argc == 1) {
+       if ($a->argc > 1) {
                // If it's a json request abort here because we don't
                // need the widget data
                if ($a->argv[1] === 'json') {
@@ -234,6 +234,7 @@ function events_content(App $a) {
        ));
 
        $o = '';
+       $tabs = '';
        // tabs
        if ($a->theme_events_in_profile) {
                $tabs = profile_tabs($a, true);
@@ -309,10 +310,13 @@ function events_content(App $a) {
                $start  = sprintf('%d-%d-%d %d:%d:%d', $y, $m, 1, 0, 0, 0);
                $finish = sprintf('%d-%d-%d %d:%d:%d', $y, $m, $dim, 23, 59, 59);
 
-
-               if ($a->argv[1] === 'json') {
-                       if (x($_GET, 'start')) {$start  = $_GET['start'];}
-                       if (x($_GET, 'end'))   {$finish = $_GET['end'];}
+               if ($a->argc > 1 && $a->argv[1] === 'json') {
+                       if (x($_GET, 'start')) {
+                               $start  = $_GET['start'];
+                       }
+                       if (x($_GET, 'end'))   {
+                               $finish = $_GET['end'];
+                       }
                }
 
                $start  = datetime_convert('UTC', 'UTC', $start);
@@ -358,7 +362,7 @@ function events_content(App $a) {
                        $events = process_events($r);
                }
 
-               if ($a->argv[1] === 'json'){
+               if ($a->argc > 1 && $a->argv[1] === 'json'){
                        echo json_encode($events);
                        killme();
                }
index 68f6acc917196a4c3ce16c942063309a6a92c3d2..c097ee4c46f02418e1a3be5409d7b6df911dc73e 100644 (file)
@@ -8,8 +8,6 @@ use Friendica\Core\System;
 use Friendica\Protocol\Diaspora;
 use Friendica\Util\XML;
 
-require_once "include/crypto.php";
-
 function fetch_init(App $a)
 {
 
index 0403945efcc0ed7b422889d2426fc4eaf9209f4c..1da8fda998095d9673f8f81d073561245faf778b 100644 (file)
@@ -1,18 +1,21 @@
 <?php
-
+/**
+ * @file mod/hostxrd.php
+ */
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Core\System;
+use Friendica\Protocol\Salmon;
+use Friendica\Util\Crypto;
 
-require_once('include/crypto.php');
-
-function hostxrd_init(App $a) {
+function hostxrd_init(App $a)
+{
        header('Access-Control-Allow-Origin: *');
        header("Content-type: text/xml");
-       $pubkey = Config::get('system','site_pubkey');
+       $pubkey = Config::get('system', 'site_pubkey');
 
-       if(! $pubkey) {
-               $res = new_keypair(1024);
+       if (! $pubkey) {
+               $res = Crypto::newKeypair(1024);
 
                Config::set('system','site_prvkey', $res['prvkey']);
                Config::set('system','site_pubkey', $res['pubkey']);
@@ -23,8 +26,8 @@ function hostxrd_init(App $a) {
                '$zhost' => $a->get_hostname(),
                '$zroot' => System::baseUrl(),
                '$domain' => System::baseUrl(),
-               '$bigkey' => salmon_key(Config::get('system','site_pubkey')),
-       ));
-       exit();
+               '$bigkey' => Salmon::salmonKey(Config::get('system', 'site_pubkey')))
+       );
 
+       exit();
 }
index 8ad5cd0ebe14b404cede665a96b96db0c059f246..29dfd268913eded5834f89877b0c3d3dd4906f3c 100644 (file)
@@ -7,90 +7,87 @@
  * Author: Rabuzarus <https://github.com/rabuzarus>
  * License: GNU AFFERO GENERAL PUBLIC LICENSE (Version 3)
  */
-
 use Friendica\App;
 use Friendica\Core\Config;
 use Friendica\Model\Contact;
 use Friendica\Model\GContact;
 
-function hovercard_init(App $a) {
+function hovercard_init(App $a)
+{
        // Just for testing purposes
-       $_GET["mode"] = "minimal";
+       $_GET['mode'] = 'minimal';
 }
 
-function hovercard_content() {
-       $profileurl     =       (x($_REQUEST,'profileurl')      ? $_REQUEST['profileurl']       : "");
-       $datatype       =       (x($_REQUEST,'datatype')        ?$_REQUEST['datatype']          : "json");
+function hovercard_content()
+{
+       $profileurl = defaults($_REQUEST, 'profileurl', '');
+       $datatype   = defaults($_REQUEST, 'datatype'  , 'json');
 
        // Get out if the system doesn't have public access allowed
-       if(intval(Config::get('system','block_public')))
+       if (intval(Config::get('system', 'block_public'))) {
                http_status_exit(401);
+       }
 
        // Return the raw content of the template. We use this to make templates usable for js functions.
        // Look at hovercard.js (function getHoverCardTemplate()).
-       // This part should be moved in it's own module. Maybe we could make more templates accessabel.
-       // (We need to discuss possible security lacks before doing this)
-       if ($datatype == "tpl") {
-               $templatecontent = get_template_content("hovercard.tpl");
+       // This part should be moved in its own module. Maybe we could make more templates accessible.
+       // (We need to discuss possible security leaks before doing this)
+       if ($datatype == 'tpl') {
+               $templatecontent = get_template_content('hovercard.tpl');
                echo $templatecontent;
                killme();
        }
 
-       // If a contact is connected the url is internally changed to "redir/CID". We need the pure url to search for
+       // If a contact is connected the url is internally changed to 'redir/CID'. We need the pure url to search for
        // the contact. So we strip out the contact id from the internal url and look in the contact table for
        // the real url (nurl)
-       if (local_user() && strpos($profileurl, "redir/") === 0) {
+       $cid = 0;
+       if (local_user() && strpos($profileurl, 'redir/') === 0) {
                $cid = intval(substr($profileurl, 6));
-               $r = dba::select('contact', array('nurl', 'self'), array('id' => $cid), array('limit' => 1));
-               $profileurl = ($r["nurl"] ? $r["nurl"] : "");
-               $self = ($r["self"] ? $r["self"] : "");
+               $r = dba::select('contact', array('nurl'), array('id' => $cid), array('limit' => 1));
+               $profileurl = defaults($r, 'nurl', '');
        }
 
+       $contact = [];
        // if it's the url containing https it should be converted to http
        $nurl = normalise_link(GContact::cleanContactUrl($profileurl));
-       if($nurl) {
+       if ($nurl) {
                // Search for contact data
                $contact = Contact::getDetailsByURL($nurl);
        }
-       if(!is_array($contact))
+       if (!count($contact)) {
                return;
+       }
 
        // Get the photo_menu - the menu if possible contact actions
-       if(local_user())
+       if (local_user()) {
                $actions = Contact::photoMenu($contact);
-
+       }
 
        // Move the contact data to the profile array so we can deliver it to
-       //
        $profile = array(
-               'name' => $contact["name"],
-               'nick'  => $contact["nick"],
-               'addr'  => (($contact["addr"] != "") ? $contact["addr"] : $contact["url"]),
-               'thumb' => proxy_url($contact["thumb"], false, PROXY_SIZE_THUMB),
-               'url' => ($cid ? ("redir/".$cid) : zrl($contact["url"])),
-               'nurl' => $contact["nurl"], // We additionally store the nurl as identifier
-//             'alias' => $contact["alias"],
-               'location' => $contact["location"],
-               'gender' => $contact["gender"],
-               'about' => $contact["about"],
-               'network' => format_network_name($contact["network"], $contact["url"]),
-               'tags' => $contact["keywords"],
-//             'nsfw' => intval($contact["nsfw"]),
-//             'server_url' => $contact["server_url"],
-               'bd' => (($contact["birthday"] <= '0001-01-01') ? "" : $contact["birthday"]),
-//             'generation' => $contact["generation"],
+               'name'     => $contact['name'],
+               'nick'     => $contact['nick'],
+               'addr'     => defaults($contact, 'addr', $contact['url']),
+               'thumb'    => proxy_url($contact['thumb'], false, PROXY_SIZE_THUMB),
+               'url'      => $cid ? ('redir/' . $cid) : zrl($contact['url']),
+               'nurl'     => $contact['nurl'], // We additionally store the nurl as identifier
+               'location' => $contact['location'],
+               'gender'   => $contact['gender'],
+               'about'    => $contact['about'],
+               'network'  => format_network_name($contact['network'], $contact['url']),
+               'tags'     => $contact['keywords'],
+               'bd'       => $contact['birthday'] <= '0001-01-01' ? '' : $contact['birthday'],
                'account_type' => Contact::getAccountType($contact),
-               'actions' => $actions,
+               'actions'  => $actions,
        );
-       if($datatype == "html") {
-               $t = get_markup_template("hovercard.tpl");
-
-               $o = replace_macros($t, array(
+       if ($datatype == 'html') {
+               $tpl = get_markup_template('hovercard.tpl');
+               $o = replace_macros($tpl, array(
                        '$profile' => $profile,
                ));
 
                return $o;
-
        } else {
                json_return_and_die($profile);
        }
@@ -104,15 +101,15 @@ function hovercard_content() {
  *
  * @return string|bool Output the raw content if existent, otherwise false
  */
-function get_template_content($template, $root = "") {
-
+function get_template_content($template, $root = '')
+{
        // We load the whole template system to get the filename.
        // Maybe we can do it a little bit smarter if I get time.
        $t = get_markup_template($template, $root);
        $filename = $t->filename;
 
        // Get the content of the template file
-       if(file_exists($filename)) {
+       if (file_exists($filename)) {
                $content = file_get_contents($filename);
 
                return $content;
index 13877fb356944f1c039aaafe95d45db83a21cfd4..1faef960163c7845bad16b15a814d58a747dd667 100644 (file)
@@ -29,7 +29,6 @@ use Friendica\Protocol\Diaspora;
 use Friendica\Protocol\Email;
 use Friendica\Util\Emailer;
 
-require_once 'include/crypto.php';
 require_once 'include/enotify.php';
 require_once 'include/tags.php';
 require_once 'include/files.php';
index eba1c9a62cd12a4e411bb03886117209d7e63849..9e0cb32c0e1a93b451dbe45ce5e2e7e9da4a5bcd 100644 (file)
@@ -10,107 +10,104 @@ require_once 'include/acl_selectors.php';
 require_once 'include/message.php';
 require_once 'include/conversation.php';
 
-function message_init(App $a) {
-
+function message_init(App $a)
+{
        $tabs = '';
 
-       if ($a->argc >1 && is_numeric($a->argv[1])) {
-               $tabs = render_messages(get_messages(local_user(),0,5), 'mail_list.tpl');
+       if ($a->argc > 1 && is_numeric($a->argv[1])) {
+               $tabs = render_messages(get_messages(local_user(), 0, 5), 'mail_list.tpl');
        }
 
        $new = array(
                'label' => t('New Message'),
                'url' => 'message/new',
-               'sel'=> ($a->argv[1] == 'new'),
+               'sel' => $a->argc > 1 && $a->argv[1] == 'new',
                'accesskey' => 'm',
        );
 
        $tpl = get_markup_template('message_side.tpl');
        $a->page['aside'] = replace_macros($tpl, array(
-               '$tabs'=>$tabs,
-               '$new'=>$new,
+               '$tabs' => $tabs,
+               '$new' => $new,
        ));
        $base = System::baseUrl();
 
        $head_tpl = get_markup_template('message-head.tpl');
-       $a->page['htmlhead'] .= replace_macros($head_tpl,array(
+       $a->page['htmlhead'] .= replace_macros($head_tpl, array(
                '$baseurl' => System::baseUrl(true),
                '$base' => $base
        ));
 
        $end_tpl = get_markup_template('message-end.tpl');
-       $a->page['end'] .= replace_macros($end_tpl,array(
+       $a->page['end'] .= replace_macros($end_tpl, array(
                '$baseurl' => System::baseUrl(true),
                '$base' => $base
        ));
-
 }
 
-function message_post(App $a) {
-
-       if (! local_user()) {
-               notice( t('Permission denied.') . EOL);
+function message_post(App $a)
+{
+       if (!local_user()) {
+               notice(t('Permission denied.') . EOL);
                return;
        }
 
-       $replyto   = ((x($_REQUEST,'replyto'))   ? notags(trim($_REQUEST['replyto']))   : '');
-       $subject   = ((x($_REQUEST,'subject'))   ? notags(trim($_REQUEST['subject']))   : '');
-       $body      = ((x($_REQUEST,'body'))      ? escape_tags(trim($_REQUEST['body'])) : '');
-       $recipient = ((x($_REQUEST,'messageto')) ? intval($_REQUEST['messageto'])       : 0 );
+       $replyto   = x($_REQUEST, 'replyto')   ? notags(trim($_REQUEST['replyto']))   : '';
+       $subject   = x($_REQUEST, 'subject')   ? notags(trim($_REQUEST['subject']))   : '';
+       $body      = x($_REQUEST, 'body')      ? escape_tags(trim($_REQUEST['body'])) : '';
+       $recipient = x($_REQUEST, 'messageto') ? intval($_REQUEST['messageto'])       : 0;
 
        $ret = send_message($recipient, $body, $subject, $replyto);
        $norecip = false;
 
-       switch($ret){
+       switch ($ret) {
                case -1:
-                       notice( t('No recipient selected.') . EOL );
+                       notice(t('No recipient selected.') . EOL);
                        $norecip = true;
                        break;
                case -2:
-                       notice( t('Unable to locate contact information.') . EOL );
+                       notice(t('Unable to locate contact information.') . EOL);
                        break;
                case -3:
-                       notice( t('Message could not be sent.') . EOL );
+                       notice(t('Message could not be sent.') . EOL);
                        break;
                case -4:
-                       notice( t('Message collection failure.') . EOL );
+                       notice(t('Message collection failure.') . EOL);
                        break;
                default:
-                       info( t('Message sent.') . EOL );
+                       info(t('Message sent.') . EOL);
        }
 
        // fake it to go back to the input form if no recipient listed
-
        if ($norecip) {
                $a->argc = 2;
                $a->argv[1] = 'new';
-       } else
+       } else {
                goaway($_SESSION['return_url']);
-
+       }
 }
 
-function message_content(App $a) {
-
+function message_content(App $a)
+{
        $o = '';
        nav_set_selected('messages');
 
-       if (! local_user()) {
-               notice( t('Permission denied.') . EOL);
+       if (!local_user()) {
+               notice(t('Permission denied.') . EOL);
                return;
        }
 
-       $myprofile = System::baseUrl().'/profile/' . $a->user['nickname'];
+       $myprofile = System::baseUrl() . '/profile/' . $a->user['nickname'];
 
        $tpl = get_markup_template('mail_head.tpl');
        $header = replace_macros($tpl, array(
                '$messages' => t('Messages'),
-               '$tab_content' => $tab_content
        ));
 
-
        if (($a->argc == 3) && ($a->argv[1] === 'drop' || $a->argv[1] === 'dropconv')) {
-               if (! intval($a->argv[2]))
+               if (!intval($a->argv[2])) {
                        return;
+               }
 
                // Check if we should do HTML-based delete confirmation
                if ($_REQUEST['confirm']) {
@@ -118,7 +115,7 @@ function message_content(App $a) {
                        // so add any arguments as hidden inputs
                        $query = explode_querystring($a->query_string);
                        $inputs = array();
-                       foreach($query['args'] as $arg) {
+                       foreach ($query['args'] as $arg) {
                                if (strpos($arg, 'confirm=') === false) {
                                        $arg_parts = explode('=', $arg);
                                        $inputs[] = array('name' => $arg_parts[0], 'value' => $arg_parts[1]);
@@ -148,7 +145,7 @@ function message_content(App $a) {
                                intval(local_user())
                        );
                        if ($r) {
-                               info( t('Message deleted.') . EOL );
+                               info(t('Message deleted.') . EOL);
                        }
                        //goaway(System::baseUrl(true) . '/message' );
                        goaway($_SESSION['return_url']);
@@ -170,24 +167,22 @@ function message_content(App $a) {
                                // Actually if we do this, we can never receive another reply to that conversation,
                                // as we will never again have the info we need to re-create it.
                                // We'll just have to orphan it.
-
                                //if ($convid) {
                                //      q("delete from conv where id = %d limit 1",
                                //              intval($convid)
                                //      );
                                //}
 
-                               if ($r)
-                                       info( t('Conversation removed.') . EOL );
+                               if ($r) {
+                                       info(t('Conversation removed.') . EOL);
+                               }
                        }
                        //goaway(System::baseUrl(true) . '/message' );
                        goaway($_SESSION['return_url']);
                }
-
        }
 
        if (($a->argc > 1) && ($a->argv[1] === 'new')) {
-
                $o .= $header;
 
                $tpl = get_markup_template('msg-header.tpl');
@@ -204,8 +199,7 @@ function message_content(App $a) {
                        '$linkurl' => t('Please enter a link URL:')
                ));
 
-               $preselect = (isset($a->argv[2])?array($a->argv[2]):false);
-
+               $preselect = isset($a->argv[2]) ? array($a->argv[2]) : false;
 
                $prename = $preurl = $preid = '';
 
@@ -233,18 +227,18 @@ function message_content(App $a) {
                                $preurl = $r[0]['url'];
                                $preid = $r[0]['id'];
                                $preselect = array($preid);
-                       } else
+                       } else {
                                $preselect = false;
+                       }
                }
 
-               $prefill = (($preselect) ? $prename  : '');
+               $prefill = $preselect ? $prename : '';
 
                // the ugly select box
-
-               $select = contact_select('messageto','message-to-select', $preselect, 4, true, false, false, 10);
+               $select = contact_select('messageto', 'message-to-select', $preselect, 4, true, false, false, 10);
 
                $tpl = get_markup_template('prv_message.tpl');
-               $o .= replace_macros($tpl,array(
+               $o .= replace_macros($tpl, array(
                        '$header' => t('Send Private Message'),
                        '$to' => t('To:'),
                        '$showinputs' => 'true',
@@ -252,8 +246,8 @@ function message_content(App $a) {
                        '$autocomp' => $autocomp,
                        '$preid' => $preid,
                        '$subject' => t('Subject:'),
-                       '$subjtxt' => ((x($_REQUEST,'subject')) ? strip_tags($_REQUEST['subject']) : ''),
-                       '$text' => ((x($_REQUEST,'body')) ? escape_tags(htmlspecialchars($_REQUEST['body'])) : ''),
+                       '$subjtxt' => x($_REQUEST, 'subject') ? strip_tags($_REQUEST['subject']) : '',
+                       '$text' => x($_REQUEST, 'body') ? escape_tags(htmlspecialchars($_REQUEST['body'])) : '',
                        '$readonly' => '',
                        '$yourmessage' => t('Your message:'),
                        '$select' => $select,
@@ -286,8 +280,8 @@ function message_content(App $a) {
 
                $r = get_messages(local_user(), $a->pager['start'], $a->pager['itemspage']);
 
-               if (! DBM::is_result($r)) {
-                       info( t('No messages.') . EOL);
+               if (!DBM::is_result($r)) {
+                       info(t('No messages.') . EOL);
                        return $o;
                }
 
@@ -325,8 +319,8 @@ function message_content(App $a) {
                                intval(local_user())
                        );
                }
-               if (! count($messages)) {
-                       notice( t('Message not available.') . EOL );
+               if (!count($messages)) {
+                       notice(t('Message not available.') . EOL);
                        return $o;
                }
 
@@ -355,24 +349,24 @@ function message_content(App $a) {
                $seen = 0;
                $unknown = false;
 
-               foreach($messages as $message) {
+               foreach ($messages as $message) {
                        if ($message['unknown'])
                                $unknown = true;
                        if ($message['from-url'] == $myprofile) {
                                $from_url = $myprofile;
                                $sparkle = '';
                        } elseif ($message['contact-id'] != 0) {
-                               $from_url = 'redir/'.$message['contact-id'];
+                               $from_url = 'redir/' . $message['contact-id'];
                                $sparkle = ' sparkle';
                        } else {
-                               $from_url = $message['from-url']."?zrl=".urlencode($myprofile);
+                               $from_url = $message['from-url'] . "?zrl=" . urlencode($myprofile);
                                $sparkle = ' sparkle';
                        }
 
-
                        $extracted = item_extract_images($message['body']);
-                       if ($extracted['images'])
+                       if ($extracted['images']) {
                                $message['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $message['contact-id']);
+                       }
 
                        $from_name_e = $message['from-name'];
                        $subject_e = $message['title'];
@@ -380,10 +374,11 @@ function message_content(App $a) {
                        $to_name_e = $message['name'];
 
                        $contact = Contact::getDetailsByURL($message['from-url']);
-                       if (isset($contact["thumb"]))
+                       if (isset($contact["thumb"])) {
                                $from_photo = $contact["thumb"];
-                       else
+                       } else {
                                $from_photo = $message['from-photo'];
+                       }
 
                        $mails[] = array(
                                'id' => $message['id'],
@@ -396,26 +391,22 @@ function message_content(App $a) {
                                'body' => $body_e,
                                'delete' => t('Delete message'),
                                'to_name' => $to_name_e,
-                               'date' => datetime_convert('UTC',date_default_timezone_get(),$message['created'],'D, d M Y - g:i A'),
-                                'ago' => relative_date($message['created']),
+                               'date' => datetime_convert('UTC', date_default_timezone_get(), $message['created'], 'D, d M Y - g:i A'),
+                               'ago' => relative_date($message['created']),
                        );
 
                        $seen = $message['seen'];
                }
 
-
                $select = $message['name'] . '<input type="hidden" name="messageto" value="' . $contact_id . '" />';
                $parent = '<input type="hidden" name="replyto" value="' . $message['parent-uri'] . '" />';
 
                $tpl = get_markup_template('mail_display.tpl');
-
-               $subjtxt_e = $message['title'];
-
                $o = replace_macros($tpl, array(
                        '$thread_id' => $a->argv[1],
                        '$thread_subject' => $message['title'],
                        '$thread_seen' => $seen,
-                       '$delete' =>  t('Delete conversation'),
+                       '$delete' => t('Delete conversation'),
                        '$canreply' => (($unknown) ? false : '1'),
                        '$unknown_text' => t("No secure communications available. You <strong>may</strong> be able to respond from the sender's profile page."),
                        '$mails' => $mails,
@@ -425,7 +416,7 @@ function message_content(App $a) {
                        '$to' => t('To:'),
                        '$showinputs' => '',
                        '$subject' => t('Subject:'),
-                       '$subjtxt' => $subjtxt_e,
+                       '$subjtxt' => $message['title'],
                        '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ',
                        '$yourmessage' => t('Your message:'),
                        '$text' => '',
@@ -435,14 +426,14 @@ function message_content(App $a) {
                        '$insert' => t('Insert web link'),
                        '$submit' => t('Submit'),
                        '$wait' => t('Please wait')
-
                ));
 
                return $o;
        }
 }
 
-function get_messages($user, $lstart, $lend) {
+function get_messages($user, $lstart, $lend)
+{
        //TODO: rewritte with a sub-query to get the first message of each private thread with certainty
        return q("SELECT max(`mail`.`created`) AS `mailcreated`, min(`mail`.`seen`) AS `mailseen`,
                ANY_VALUE(`mail`.`id`) AS `id`, ANY_VALUE(`mail`.`uid`) AS `uid`, ANY_VALUE(`mail`.`guid`) AS `guid`,
@@ -461,33 +452,34 @@ function get_messages($user, $lstart, $lend) {
        );
 }
 
-function render_messages(array $msg, $t) {
-
+function render_messages(array $msg, $t)
+{
        $a = get_app();
 
        $tpl = get_markup_template($t);
        $rslt = '';
 
-       $myprofile = System::baseUrl().'/profile/' . $a->user['nickname'];
-
-       foreach($msg as $rr) {
+       $myprofile = System::baseUrl() . '/profile/' . $a->user['nickname'];
 
-               if ($rr['unknown'])
-                       $participants = sprintf( t("Unknown sender - %s"),$rr['from-name']);
-               elseif (link_compare($rr['from-url'], $myprofile))
-                       $participants = sprintf( t("You and %s"), $rr['name']);
-               else
-                       $participants = sprintf(t("%s and You"), $rr['from-name']);
+       foreach ($msg as $rr) {
+               if ($rr['unknown']) {
+                       $participants = t("Unknown sender - %s", $rr['from-name']);
+               } elseif (link_compare($rr['from-url'], $myprofile)) {
+                       $participants = t("You and %s", $rr['name']);
+               } else {
+                       $participants = t("%s and You", $rr['from-name']);
+               }
 
                $subject_e = (($rr['mailseen']) ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>');
                $body_e = $rr['body'];
                $to_name_e = $rr['name'];
 
                $contact = Contact::getDetailsByURL($rr['url']);
-               if (isset($contact["thumb"]))
+               if (isset($contact["thumb"])) {
                        $from_photo = $contact["thumb"];
-               else
+               } else {
                        $from_photo = (($rr['thumb']) ? $rr['thumb'] : $rr['from-photo']);
+               }
 
                $rslt .= replace_macros($tpl, array(
                        '$id' => $rr['id'],
@@ -500,10 +492,10 @@ function render_messages(array $msg, $t) {
                        '$delete' => t('Delete conversation'),
                        '$body' => $body_e,
                        '$to_name' => $to_name_e,
-                       '$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'], t('D, d M Y - g:i A')),
-                                                                                                                       '$ago' => relative_date($rr['mailcreated']),
+                       '$date' => datetime_convert('UTC', date_default_timezone_get(), $rr['mailcreated'], t('D, d M Y - g:i A')),
+                       '$ago' => relative_date($rr['mailcreated']),
                        '$seen' => $rr['mailseen'],
-                       '$count' => sprintf( tt('%d message', '%d messages', $rr['count']), $rr['count']),
+                       '$count' => tt('%d message', '%d messages', $rr['count']),
                ));
        }
 
index 1933c3d1e6dba3e9f42796756d0a5fe219d1c2bc..65b15cb03a5506f309b117b172649d8f614dd16e 100644 (file)
@@ -366,7 +366,7 @@ function networkConversation($a, $items, $mode, $update) {
        // Set this so that the conversation function can find out contact info for our wall-wall items
        $a->page_contact = $a->contact;
 
-       $o .= conversation($a, $items, $mode, $update);
+       $o = conversation($a, $items, $mode, $update);
 
        if (!$update) {
                if (PConfig::get(local_user(), 'system', 'infinite_scroll')) {
@@ -568,9 +568,9 @@ function networkThreadedView(App $a, $update = 0) {
 
                if ($group) {
                        if (($t = Contact::getOStatusCountByGroupId($group)) && !PConfig::get(local_user(), 'system', 'nowarn_insecure')) {
-                               notice(sprintf(tt("Warning: This group contains %s member from a network that doesn't allow non public messages.",
+                               notice(tt("Warning: This group contains %s member from a network that doesn't allow non public messages.",
                                                "Warning: This group contains %s members from a network that doesn't allow non public messages.",
-                                               $t), $t).EOL);
+                                               $t) . EOL);
                                notice(t("Messages in this group won't be send to these receivers.").EOL);
                        }
                }
@@ -664,7 +664,7 @@ function networkThreadedView(App $a, $update = 0) {
                }
 
                $o = replace_macros(get_markup_template("section_title.tpl"),array(
-                       '$title' => sprintf(t('Group: %s'), $r['name'])
+                       '$title' => t('Group: %s', $r['name'])
                )) . $o;
 
        } elseif ($cid) {
@@ -716,13 +716,6 @@ function networkThreadedView(App $a, $update = 0) {
        $sql_order = "";
        $order_mode = "received";
 
-       if (strlen($file)) {
-               $sql_post_table .= sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ",
-                               dbesc(protect_sprintf($file)), intval(TERM_OBJ_POST), intval(TERM_FILE), intval(local_user()));
-               $sql_order = "`item`.`id`";
-               $order_mode = "id";
-       }
-
        if ($conv) {
                $sql_extra3 .= " AND $sql_table.`mention`";
        }
@@ -744,7 +737,7 @@ function networkThreadedView(App $a, $update = 0) {
                $sql_order = "$sql_table.$ordering";
        }
 
-       if (($_GET["offset"] != "")) {
+       if (x($_GET, 'offset')) {
                $sql_extra3 .= sprintf(" AND $sql_order <= '%s'", dbesc($_GET["offset"]));
        }
 
@@ -816,9 +809,10 @@ function networkThreadedView(App $a, $update = 0) {
        $parents_str = '';
        $date_offset = "";
 
+       $items = array();
        if (DBM::is_result($r)) {
                foreach ($r as $rr) {
-                       if (!in_array($rr['item_id'],$parents_arr)) {
+                       if (!in_array($rr['item_id'], $parents_arr)) {
                                $parents_arr[] = $rr['item_id'];
                        }
                }
@@ -833,12 +827,10 @@ function networkThreadedView(App $a, $update = 0) {
                        $max_comments = 100;
                }
 
-               $items = array();
-
                foreach ($parents_arr AS $parents) {
-                       $thread_items = dba::p(item_query()." AND `item`.`uid` = ?
+                       $thread_items = dba::p(item_query() . " AND `item`.`uid` = ?
                                AND `item`.`parent` = ?
-                               ORDER BY `item`.`commented` DESC LIMIT ".intval($max_comments + 1),
+                               ORDER BY `item`.`commented` DESC LIMIT " . intval($max_comments + 1),
                                local_user(),
                                $parents
                        );
@@ -847,15 +839,15 @@ function networkThreadedView(App $a, $update = 0) {
                                $items = array_merge($items, dba::inArray($thread_items));
                        }
                }
-               $items = conv_sort($items,$ordering);
-       } else {
-               $items = array();
+               $items = conv_sort($items, $ordering);
        }
 
-       if ($_GET["offset"] == "") {
+       if (x($_GET, 'offset')) {
+               $date_offset = $_GET["offset"];
+       } elseif(count($items)) {
                $date_offset = $items[0][$order_mode];
        } else {
-               $date_offset = $_GET["offset"];
+               $date_offset = '';
        }
 
        $a->page_offset = $date_offset;
index d80b6d3dbd3a9584681d4bf15da81a7e0e110579..9f5425d9eb7c36604432d2106b895cd8ef75b723 100644 (file)
@@ -41,28 +41,25 @@ function nogroup_content(App $a)
                        $contact_details = Contact::getDetailsByURL($rr['url'], local_user(), $rr);
 
                        $contacts[] = array(
-                               'img_hover' => sprintf(t('Visit %s\'s profile [%s]'), $contact_details['name'], $rr['url']),
+                               'img_hover' => t('Visit %s\'s profile [%s]', $contact_details['name'], $rr['url']),
                                'edit_hover' => t('Edit contact'),
                                'photo_menu' => Contact::photoMenu($rr),
                                'id' => $rr['id'],
-                               'alt_text' => $alt_text,
-                               'dir_icon' => $dir_icon,
                                'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB),
                                'name' => $contact_details['name'],
                                'username' => $contact_details['name'],
                                'details'       => $contact_details['location'],
                                'tags'          => $contact_details['keywords'],
                                'about'         => $contact_details['about'],
-                               'sparkle' => $sparkle,
                                'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']),
                                'url' => $rr['url'],
-                               'network' => network_to_name($rr['network'], $url),
+                               'network' => network_to_name($rr['network'], $rr['url']),
                        );
                }
        }
 
        $tpl = get_markup_template("nogroup-template.tpl");
-       $o .= replace_macros(
+       $o = replace_macros(
                $tpl,
                array(
                '$header' => t('Contacts who are not members of a group'),
diff --git a/mod/oembed.php b/mod/oembed.php
deleted file mode 100644 (file)
index 3266ad9..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-use Friendica\App;
-
-require_once("include/oembed.php");
-
-function oembed_content(App $a) {
-       // logger('mod_oembed ' . $a->query_string, LOGGER_ALL);
-
-       if ($a->argv[1]=='b2h'){
-               $url = array( "", trim(hex2bin($_REQUEST['url'])));
-               echo oembed_replacecb($url);
-               killme();
-       }
-
-       if ($a->argv[1]=='h2b'){
-               $text = trim(hex2bin($_REQUEST['text']));
-               echo oembed_html2bbcode($text);
-               killme();
-       }
-
-       if ($a->argc == 2){
-               echo "<html><body>";
-               $url = base64url_decode($a->argv[1]);
-               $j = oembed_fetch_url($url);
-
-               // workaround for media.ccc.de (and any other endpoint that return size 0)
-               if (substr($j->html, 0, 7) == "<iframe" && strstr($j->html, 'width="0"')) {
-                       $j->html = '<style>html,body{margin:0;padding:0;} iframe{width:100%;height:100%;}</style>'. $j->html;
-                       $j->html = str_replace('width="0"', '', $j->html);
-                       $j->html = str_replace('height="0"', '', $j->html);
-               }
-               echo $j->html;
-//             logger('mod-oembed ' . $j->html, LOGGER_ALL);
-               echo "</body></html>";
-       }
-       killme();
-}
index 243dfda029b03b47ff350fece6cf0091e70096e0..dc7d8567833086377dfa4dce5bcc390e58850ec7 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @file mod/photo.php
  */
@@ -8,7 +9,8 @@ use Friendica\Object\Image;
 
 require_once 'include/security.php';
 
-function photo_init(App $a) {
+function photo_init(App $a)
+{
        global $_SERVER;
 
        $prvcachecontrol = false;
@@ -37,8 +39,8 @@ function photo_init(App $a) {
        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
                header('HTTP/1.1 304 Not Modified');
                header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
-               header('Etag: '.$_SERVER['HTTP_IF_NONE_MATCH']);
-               header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
+               header('Etag: ' . $_SERVER['HTTP_IF_NONE_MATCH']);
+               header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
                header("Cache-Control: max-age=31536000");
                if (function_exists('header_remove')) {
                        header_remove('Last-Modified');
@@ -49,15 +51,11 @@ function photo_init(App $a) {
        }
 
        $default = 'images/person-175.jpg';
+       $public = true;
 
        if (isset($type)) {
-
-               /**
-                * Profile photos
-                */
-
+               // Profile photos
                switch ($type) {
-
                        case 'profile':
                        case 'custom':
                                $resolution = 4;
@@ -76,7 +74,7 @@ function photo_init(App $a) {
                $uid = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $person);
 
                foreach (Image::supportedTypes() AS $m => $e) {
-                       $uid = str_replace('.'.$e, '', $uid);
+                       $uid = str_replace('.' . $e, '', $uid);
                }
 
                $r = q("SELECT * FROM `photo` WHERE `scale` = %d AND `uid` = %d AND `profile` = 1 LIMIT 1",
@@ -92,16 +90,12 @@ function photo_init(App $a) {
                        $mimetype = 'image/jpeg';
                }
        } else {
-
-               /**
-                * Other photos
-                */
-
+               // Other photos
                $resolution = 0;
                $photo = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $photo);
 
                foreach (Image::supportedTypes() AS $m => $e) {
-                       $photo = str_replace('.'.$e, '', $photo);
+                       $photo = str_replace('.' . $e, '', $photo);
                }
 
                if (substr($photo, -2, 1) == '-') {
@@ -115,22 +109,18 @@ function photo_init(App $a) {
                        intval($resolution)
                );
                if (DBM::is_result($r)) {
-
                        $sql_extra = permissions_sql($r[0]['uid']);
 
                        // Now we'll see if we can access the photo
-
                        $r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `scale` <= %d $sql_extra ORDER BY scale DESC LIMIT 1",
                                dbesc($photo),
                                intval($resolution)
                        );
-
-                       $public = (DBM::is_result($r)) && ($r[0]['allow_cid'] == '') && ($r[0]['allow_gid'] == '') && ($r[0]['deny_cid']  == '') && ($r[0]['deny_gid']  == '');
-
                        if (DBM::is_result($r)) {
                                $resolution = $r[0]['scale'];
                                $data = $r[0]['data'];
                                $mimetype = $r[0]['type'];
+                               $public = $r[0]['allow_cid'] == '' && $r[0]['allow_gid'] == '' && $r[0]['deny_cid'] == '' && $r[0]['deny_gid'] == '';
                        } else {
                                // The picure exists. We already checked with the first query.
                                // obviously, this is not an authorized viev!
@@ -145,7 +135,6 @@ function photo_init(App $a) {
        if (empty($data)) {
                if (isset($resolution)) {
                        switch ($resolution) {
-
                                case 4:
                                        $data = file_get_contents('images/person-175.jpg');
                                        $mimetype = 'image/jpeg';
@@ -167,7 +156,7 @@ function photo_init(App $a) {
        }
 
        // Resize only if its not a GIF and it is supported by the library
-       if (($mimetype != "image/gif") && in_array($mimetype, Image::supportedTypes())) {
+       if ($mimetype != "image/gif" && in_array($mimetype, Image::supportedTypes())) {
                $Image = new Image($data, $mimetype);
                if ($Image->isValid()) {
                        if (isset($customres) && $customres > 0 && $customres < 500) {
@@ -183,36 +172,33 @@ function photo_init(App $a) {
                header_remove('pragma');
        }
 
-       header("Content-type: ".$mimetype);
+       header("Content-type: " . $mimetype);
 
        if ($prvcachecontrol) {
-
                // it is a private photo that they have no permission to view.
                // tell the browser not to cache it, in case they authenticate
                // and subsequently have permission to see it
-
                header("Cache-Control: no-store, no-cache, must-revalidate");
-
        } else {
                header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
-               header('Etag: "'.md5($data).'"');
-               header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
+               header('Etag: "' . md5($data) . '"');
+               header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
                header("Cache-Control: max-age=31536000");
        }
        echo $data;
 
        // If the photo is public and there is an existing photo directory store the photo there
-       if ($public and ($file != "")) {
+       if ($public and $file != '') {
                // If the photo path isn't there, try to create it
                $basepath = $a->get_basepath();
-               if (!is_dir($basepath."/photo")) {
+               if (!is_dir($basepath . "/photo")) {
                        if (is_writable($basepath)) {
-                               mkdir($basepath."/photo");
+                               mkdir($basepath . "/photo");
                        }
                }
 
-               if (is_dir($basepath."/photo")) {
-                       file_put_contents($basepath."/photo/".$file, $data);
+               if (is_dir($basepath . "/photo")) {
+                       file_put_contents($basepath . "/photo/" . $file, $data);
                }
        }
 
index 68b9752b5eb53c35f6d62c03395a8fae67c642b4..460deba25d44bdbe751bb7eeac18674e0823d602 100644 (file)
@@ -55,12 +55,12 @@ function photos_init(App $a) {
 
                $tpl = get_markup_template("vcard-widget.tpl");
 
-               $vcard_widget .= replace_macros($tpl, array(
+               $vcard_widget = replace_macros($tpl, array(
                        '$name' => $profile['name'],
                        '$photo' => $profile['photo'],
-                       '$addr' => (($profile['addr'] != "") ? $profile['addr'] : ""),
+                       '$addr' => defaults($profile, 'addr', ''),
                        '$account_type' => $account_type,
-                       '$pdesc' => (($profile['pdesc'] != "") ? $profile['pdesc'] : ""),
+                       '$pdesc' => defaults($profile, 'pdesc', ''),
                ));
 
                $albums = photo_albums($a->data['user']['uid']);
@@ -92,18 +92,16 @@ function photos_init(App $a) {
                        }
                }
 
-               $albums = $ret;
-
                if (local_user() && $a->data['user']['uid'] == local_user()) {
                        $can_post = true;
                }
 
-               if ($albums['success']) {
+               if ($ret['success']) {
                        $photo_albums_widget = replace_macros(get_markup_template('photo_albums.tpl'), array(
                                '$nick'     => $a->data['user']['nickname'],
                                '$title'    => t('Photo Albums'),
                                '$recent'   => t('Recent Photos'),
-                               '$albums'   => $albums['albums'],
+                               '$albums'   => $ret['albums'],
                                '$baseurl'  => System::baseUrl(),
                                '$upload'   => array(t('Upload New Photos'), 'photos/' . $a->data['user']['nickname'] . '/upload'),
                                '$can_post' => $can_post
@@ -117,26 +115,20 @@ function photos_init(App $a) {
                $a->page['aside'] .= $vcard_widget;
                $a->page['aside'] .= $photo_albums_widget;
 
-
                $tpl = get_markup_template("photos_head.tpl");
                $a->page['htmlhead'] .= replace_macros($tpl,array(
                        '$ispublic' => t('everybody')
                ));
-
        }
 
        return;
 }
 
-
-
-function photos_post(App $a) {
-
+function photos_post(App $a)
+{
        logger('mod-photos: photos_post: begin' , LOGGER_DEBUG);
-
-
-       logger('mod_photos: REQUEST ' . print_r($_REQUEST,true), LOGGER_DATA);
-       logger('mod_photos: FILES '   . print_r($_FILES,true), LOGGER_DATA);
+       logger('mod_photos: REQUEST ' . print_r($_REQUEST, true), LOGGER_DATA);
+       logger('mod_photos: FILES '   . print_r($_FILES, true), LOGGER_DATA);
 
        $phototypes = Image::supportedTypes();
 
@@ -144,14 +136,14 @@ function photos_post(App $a) {
        $visitor   = 0;
 
        $page_owner_uid = $a->data['user']['uid'];
-       $community_page = (($a->data['user']['page-flags'] == PAGE_COMMUNITY) ? true : false);
+       $community_page = $a->data['user']['page-flags'] == PAGE_COMMUNITY;
 
        if (local_user() && (local_user() == $page_owner_uid)) {
                $can_post = true;
        } else {
                if ($community_page && remote_user()) {
                        $contact_id = 0;
-                       if (is_array($_SESSION['remote'])) {
+                       if (x($_SESSION, 'remote') && is_array($_SESSION['remote'])) {
                                foreach ($_SESSION['remote'] as $v) {
                                        if ($v['uid'] == $page_owner_uid) {
                                                $contact_id = $v['cid'];
@@ -160,7 +152,6 @@ function photos_post(App $a) {
                                }
                        }
                        if ($contact_id) {
-
                                $r = q("SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1",
                                        intval($contact_id),
                                        intval($page_owner_uid)
@@ -191,8 +182,7 @@ function photos_post(App $a) {
 
        $owner_record = $r[0];
 
-
-       if (($a->argc > 3) && ($a->argv[2] === 'album')) {
+       if ($a->argc > 3 && $a->argv[2] === 'album') {
                $album = hex2bin($a->argv[3]);
 
                if ($album === t('Profile Photos') || $album === 'Contact Photos' || $album === t('Contact Photos')) {
@@ -215,10 +205,7 @@ function photos_post(App $a) {
                        goaway($_SESSION['photo_return']);
                }
 
-               /*
-                * RENAME photo album
-                */
-
+               // RENAME photo album
                $newalbum = notags(trim($_POST['albumname']));
                if ($newalbum != $album) {
                        q("UPDATE `photo` SET `album` = '%s' WHERE `album` = '%s' AND `uid` = %d",
@@ -229,7 +216,7 @@ function photos_post(App $a) {
                        // Update the photo albums cache
                        photo_albums($page_owner_uid, true);
 
-                       $newurl = str_replace(bin2hex($album),bin2hex($newalbum),$_SESSION['photo_return']);
+                       $newurl = str_replace(bin2hex($album), bin2hex($newalbum), $_SESSION['photo_return']);
                        goaway($newurl);
                        return; // NOTREACHED
                }
@@ -239,9 +226,8 @@ function photos_post(App $a) {
                 */
 
                if ($_POST['dropalbum'] == t('Delete Album')) {
-
                        // Check if we should do HTML-based delete confirmation
-                       if ($_REQUEST['confirm']) {
+                       if (x($_REQUEST, 'confirm')) {
                                $drop_url = $a->query_string;
                                $extra_inputs = array(
                                        array('name' => 'albumname', 'value' => $_POST['albumname']),
@@ -287,14 +273,12 @@ function photos_post(App $a) {
                        $str_res = implode(',', $res);
 
                        // remove the associated photos
-
                        q("DELETE FROM `photo` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d",
                                intval($page_owner_uid)
                        );
 
                        // find and delete the corresponding item with all the comments and likes/dislikes
-
-                       $r = q("SELECT `parent-uri` FROM `item` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d",
+                       $r = q("SELECT `id`, `parent-uri`, `visible` FROM `item` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d",
                                intval($page_owner_uid)
                        );
                        if (DBM::is_result($r)) {
@@ -310,7 +294,6 @@ function photos_post(App $a) {
                                        $drop_id = intval($rr['id']);
 
                                        // send the notification upstream/downstream as the case may be
-
                                        if ($rr['visible']) {
                                                Worker::add(PRIORITY_HIGH, "Notifier", "drop", $drop_id);
                                        }
@@ -327,16 +310,16 @@ function photos_post(App $a) {
 
 
        // Check if the user has responded to a delete confirmation query for a single photo
-       if (($a->argc > 2) && $_REQUEST['canceled']) {
+       if ($a->argc > 2 && x($_REQUEST, 'canceled')) {
                goaway($_SESSION['photo_return']);
        }
 
-       if (($a->argc > 2) && (x($_POST,'delete')) && ($_POST['delete'] == t('Delete Photo'))) {
+       if ($a->argc > 2 && defaults($_POST, 'delete', '') === t('Delete Photo')) {
 
                // same as above but remove single photo
 
                // Check if we should do HTML-based delete confirmation
-               if ($_REQUEST['confirm']) {
+               if (x($_REQUEST, 'confirm')) {
                        $drop_url = $a->query_string;
                        $a->page['content'] = replace_macros(get_markup_template('confirm.tpl'), array(
                                '$method' => 'post',
@@ -368,7 +351,7 @@ function photos_post(App $a) {
                                intval($page_owner_uid),
                                dbesc($r[0]['resource-id'])
                        );
-                       $i = q("SELECT * FROM `item` WHERE `resource-id` = '%s' AND `uid` = %d LIMIT 1",
+                       $i = q("SELECT `id`, `uri`, `visible` FROM `item` WHERE `resource-id` = '%s' AND `uid` = %d LIMIT 1",
                                dbesc($r[0]['resource-id']),
                                intval($page_owner_uid)
                        );
@@ -398,13 +381,12 @@ function photos_post(App $a) {
                return; // NOTREACHED
        }
 
-       if (($a->argc > 2) && ((x($_POST,'desc') !== false) || (x($_POST,'newtag') !== false)) || (x($_POST,'albname') !== false)) {
-
-               $desc        = (x($_POST,'desc')      ? notags(trim($_POST['desc']))    : '');
-               $rawtags     = (x($_POST,'newtag')    ? notags(trim($_POST['newtag']))  : '');
-               $item_id     = (x($_POST,'item_id')   ? intval($_POST['item_id'])       : 0);
-               $albname     = (x($_POST,'albname')   ? notags(trim($_POST['albname'])) : '');
-               $origaname   = (x($_POST,'origaname') ? notags(trim($_POST['origaname'])) : '');
+       if ($a->argc > 2 && (x($_POST, 'desc') !== false || x($_POST, 'newtag') !== false || x($_POST, 'albname') !== false)) {
+               $desc        = x($_POST, 'desc')      ? notags(trim($_POST['desc']))      : '';
+               $rawtags     = x($_POST, 'newtag')    ? notags(trim($_POST['newtag']))    : '';
+               $item_id     = x($_POST, 'item_id')   ? intval($_POST['item_id'])         : 0;
+               $albname     = x($_POST, 'albname')   ? notags(trim($_POST['albname']))   : '';
+               $origaname   = x($_POST, 'origaname') ? notags(trim($_POST['origaname'])) : '';
                $str_group_allow   = perms2str($_POST['group_allow']);
                $str_contact_allow = perms2str($_POST['contact_allow']);
                $str_group_deny    = perms2str($_POST['group_deny']);
@@ -416,9 +398,8 @@ function photos_post(App $a) {
                        $albname = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y');
                }
 
-
-               if ((x($_POST,'rotate') !== false) &&
-                  ( (intval($_POST['rotate']) == 1) || (intval($_POST['rotate']) == 2) )) {
+               if (x($_POST,'rotate') !== false &&
+                  (intval($_POST['rotate']) == 1 || intval($_POST['rotate']) == 2)) {
                        logger('rotate');
 
                        $r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 0 LIMIT 1",
@@ -504,9 +485,7 @@ function photos_post(App $a) {
                }
 
                if (!$item_id) {
-
                        // Create item container
-
                        $title = '';
                        $uri = item_new_uri($a->get_hostname(),$page_owner_uid);
 
@@ -539,7 +518,6 @@ function photos_post(App $a) {
                                                . '[/url]';
 
                        $item_id = item_store($arr);
-
                }
 
                if ($item_id) {
@@ -554,13 +532,11 @@ function photos_post(App $a) {
                }
 
                if (strlen($rawtags)) {
-
                        $str_tags = '';
                        $inform   = '';
 
                        // if the new tag doesn't have a namespace specifier (@foo or #foo) give it a hashtag
-
-                       $x = substr($rawtags,0,1);
+                       $x = substr($rawtags, 0, 1);
                        if ($x !== '@' && $x !== '#') {
                                $rawtags = '#' . $rawtags;
                        }
@@ -570,10 +546,8 @@ function photos_post(App $a) {
 
                        if (count($tags)) {
                                foreach ($tags as $tag) {
-                                       if (isset($profile)) {
-                                               unset($profile);
-                                       }
                                        if (strpos($tag, '@') === 0) {
+                                               $profile = '';
                                                $name = substr($tag,1);
                                                if ((strpos($name, '@')) || (strpos($name, 'http://'))) {
                                                        $newname = $name;
@@ -691,8 +665,7 @@ function photos_post(App $a) {
 
                        if (count($taginfo)) {
                                foreach ($taginfo as $tagged) {
-
-                                       $uri = item_new_uri($a->get_hostname(),$page_owner_uid);
+                                       $uri = item_new_uri($a->get_hostname(), $page_owner_uid);
 
                                        $arr = array();
                                        $arr['guid']          = get_guid(32);
@@ -747,18 +720,12 @@ function photos_post(App $a) {
        }
 
 
-       /**
-        * default post action - upload a photo
-        */
-
+       // default post action - upload a photo
        call_hooks('photo_post_init', $_POST);
 
-       /**
-        * Determine the album to use
-        */
-
-       $album    = notags(trim($_REQUEST['album']));
-       $newalbum = notags(trim($_REQUEST['newalbum']));
+       // Determine the album to use
+       $album    = x($_REQUEST, 'album') ? notags(trim($_REQUEST['album'])) : '';
+       $newalbum = x($_REQUEST, 'newalbum') ? notags(trim($_REQUEST['newalbum'])) : '';
 
        logger('mod/photos.php: photos_post(): album= ' . $album . ' newalbum= ' . $newalbum , LOGGER_DEBUG);
 
@@ -788,51 +755,85 @@ function photos_post(App $a) {
                $visible = 0;
        }
 
-       if (intval($_REQUEST['not_visible']) || $_REQUEST['not_visible'] === 'true') {
+       if (x($_REQUEST, 'not_visible') && $_REQUEST['not_visible'] !== 'false') {
                $visible = 0;
        }
 
-       $str_group_allow   = perms2str((is_array($_REQUEST['group_allow'])   ? $_REQUEST['group_allow']   : explode(',', $_REQUEST['group_allow'])));
-       $str_contact_allow = perms2str((is_array($_REQUEST['contact_allow']) ? $_REQUEST['contact_allow'] : explode(',', $_REQUEST['contact_allow'])));
-       $str_group_deny    = perms2str((is_array($_REQUEST['group_deny'])    ? $_REQUEST['group_deny']    : explode(',', $_REQUEST['group_deny'])));
-       $str_contact_deny  = perms2str((is_array($_REQUEST['contact_deny'])  ? $_REQUEST['contact_deny']  : explode(',', $_REQUEST['contact_deny'])));
+       $group_allow   = defaults($_REQUEST, 'group_allow'  , []);
+       $contact_allow = defaults($_REQUEST, 'contact_allow', []);
+       $group_deny    = defaults($_REQUEST, 'group_deny'   , []);
+       $contact_deny  = defaults($_REQUEST, 'contact_deny' , []);
+
+       $str_group_allow   = perms2str(is_array($group_allow)   ? $group_allow   : explode(',', $group_allow));
+       $str_contact_allow = perms2str(is_array($contact_allow) ? $contact_allow : explode(',', $contact_allow));
+       $str_group_deny    = perms2str(is_array($group_deny)    ? $group_deny    : explode(',', $group_deny));
+       $str_contact_deny  = perms2str(is_array($contact_deny)  ? $contact_deny  : explode(',', $contact_deny));
 
        $ret = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => '');
 
-       call_hooks('photo_post_file',$ret);
+       call_hooks('photo_post_file', $ret);
 
-       if (x($ret,'src') && x($ret,'filesize')) {
+       if (x($ret, 'src') && x($ret, 'filesize')) {
                $src      = $ret['src'];
                $filename = $ret['filename'];
                $filesize = $ret['filesize'];
                $type     = $ret['type'];
+               $error    = UPLOAD_ERR_OK;
        } else {
-               $src        = $_FILES['userfile']['tmp_name'];
-               $filename   = basename($_FILES['userfile']['name']);
-               $filesize   = intval($_FILES['userfile']['size']);
-               $type       = $_FILES['userfile']['type'];
+               $src      = $_FILES['userfile']['tmp_name'];
+               $filename = basename($_FILES['userfile']['name']);
+               $filesize = intval($_FILES['userfile']['size']);
+               $type     = $_FILES['userfile']['type'];
+               $error    = $_FILES['userfile']['error'];
        }
+
+       if ($error !== UPLOAD_ERR_OK) {
+               switch ($error) {
+                       case UPLOAD_ERR_INI_SIZE:
+                               notice(t('Image exceeds size limit of %s', ini_get('upload_max_filesize')) . EOL);
+                               break;
+                       case UPLOAD_ERR_FORM_SIZE:
+                               notice(t('Image exceeds size limit of %s', formatBytes(defaults($_REQUEST, 'MAX_FILE_SIZE', 0))) . EOL);
+                               break;
+                       case UPLOAD_ERR_PARTIAL:
+                               notice(t('Image upload didn\'t complete, please try again') . EOL);
+                               break;
+                       case UPLOAD_ERR_NO_FILE:
+                               notice(t('Image file is missing') . EOL);
+                               break;
+                       case UPLOAD_ERR_NO_TMP_DIR:
+                       case UPLOAD_ERR_CANT_WRITE:
+                       case UPLOAD_ERR_EXTENSION:
+                               notice(t('Server can\'t accept new file upload at this time, please contact your administrator') . EOL);
+                               break;
+               }
+               @unlink($src);
+               $foo = 0;
+               call_hooks('photo_post_end', $foo);
+               return;
+       }
+
        if ($type == "") {
                $type = Image::guessType($filename);
        }
 
        logger('photos: upload: received file: ' . $filename . ' as ' . $src . ' ('. $type . ') ' . $filesize . ' bytes', LOGGER_DEBUG);
 
-       $maximagesize = Config::get('system','maximagesize');
+       $maximagesize = Config::get('system', 'maximagesize');
 
        if ($maximagesize && ($filesize > $maximagesize)) {
-               notice( sprintf(t('Image exceeds size limit of %s'), formatBytes($maximagesize)) . EOL);
+               notice(t('Image exceeds size limit of %s', formatBytes($maximagesize)) . EOL);
                @unlink($src);
                $foo = 0;
-               call_hooks('photo_post_end',$foo);
+               call_hooks('photo_post_end', $foo);
                return;
        }
 
        if (!$filesize) {
-               notice( t('Image file is empty.') . EOL);
+               notice(t('Image file is empty.') . EOL);
                @unlink($src);
                $foo = 0;
-               call_hooks('photo_post_end',$foo);
+               call_hooks('photo_post_end', $foo);
                return;
        }
 
@@ -844,7 +845,7 @@ function photos_post(App $a) {
 
        if (!$Image->isValid()) {
                logger('mod/photos.php: photos_post(): unable to process image' , LOGGER_DEBUG);
-               notice( t('Unable to process image.') . EOL );
+               notice(t('Unable to process image.') . EOL);
                @unlink($src);
                $foo = 0;
                call_hooks('photo_post_end',$foo);
@@ -873,7 +874,7 @@ function photos_post(App $a) {
 
        if (!$r) {
                logger('mod/photos.php: photos_post(): image store failed' , LOGGER_DEBUG);
-               notice( t('Image upload failed.') . EOL );
+               notice(t('Image upload failed.') . EOL);
                killme();
        }
 
@@ -889,23 +890,16 @@ function photos_post(App $a) {
                $smallest = 2;
        }
 
-       $basename = basename($filename);
        $uri = item_new_uri($a->get_hostname(), $page_owner_uid);
 
        // Create item container
-
        $lat = $lon = null;
-
-       /// @TODO merge these 2 if() into one?
-       if ($exif && $exif['GPS']) {
-               if (Feature::isEnabled($channel_id,'photo_location')) {
-                       $lat = getGps($exif['GPS']['GPSLatitude'], $exif['GPS']['GPSLatitudeRef']);
-                       $lon = getGps($exif['GPS']['GPSLongitude'], $exif['GPS']['GPSLongitudeRef']);
-               }
+       if ($exif && $exif['GPS'] && Feature::isEnabled($channel_id, 'photo_location')) {
+               $lat = getGps($exif['GPS']['GPSLatitude'], $exif['GPS']['GPSLatitudeRef']);
+               $lon = getGps($exif['GPS']['GPSLongitude'], $exif['GPS']['GPSLongitudeRef']);
        }
 
        $arr = array();
-
        if ($lat && $lon) {
                $arr['coord'] = $lat . ' ' . $lon;
        }
@@ -947,17 +941,15 @@ function photos_post(App $a) {
 
        call_hooks('photo_post_end',intval($item_id));
 
-       /*
-        * addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook
-        * if they do not wish to be redirected
-        */
+       // addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook
+       // if they do not wish to be redirected
 
        goaway($_SESSION['photo_return']);
        // NOTREACHED
 }
 
-function photos_content(App $a) {
-
+function photos_content(App $a)
+{
        // URLs:
        // photos/name
        // photos/name/upload
@@ -967,7 +959,6 @@ function photos_content(App $a) {
        // photos/name/image/xxxxx
        // photos/name/image/xxxxx/edit
 
-
        if (Config::get('system', 'block_public') && !local_user() && !remote_user()) {
                notice( t('Public access denied.') . EOL);
                return;
@@ -986,10 +977,8 @@ function photos_content(App $a) {
 
        $_SESSION['photo_return'] = $a->cmd;
 
-       //
        // Parse arguments
-       //
-
+       $datum = null;
        if ($a->argc > 3) {
                $datatype = $a->argv[2];
                $datum = $a->argv[3];
@@ -1005,10 +994,7 @@ function photos_content(App $a) {
                $cmd = 'view';
        }
 
-       //
        // Setup permissions structures
-       //
-
        $can_post       = false;
        $visitor        = 0;
        $contact        = null;
@@ -1047,8 +1033,9 @@ function photos_content(App $a) {
                }
        }
 
-       // perhaps they're visiting - but not a community page, so they wouldn't have write access
+       $groups = [];
 
+       // perhaps they're visiting - but not a community page, so they wouldn't have write access
        if (remote_user() && !$visitor) {
                $contact_id = 0;
                if (is_array($_SESSION['remote'])) {
@@ -1072,12 +1059,9 @@ function photos_content(App $a) {
                }
        }
 
-       /// @TODO merge these 2 if() into one?
-       if (!$remote_contact) {
-               if (local_user()) {
-                       $contact_id = $_SESSION['cid'];
-                       $contact = $a->contact;
-               }
+       if (!$remote_contact && local_user()) {
+               $contact_id = $_SESSION['cid'];
+               $contact = $a->contact;
        }
 
        if ($a->data['user']['hidewall'] && (local_user() != $owner_uid) && !$remote_contact) {
@@ -1085,7 +1069,7 @@ function photos_content(App $a) {
                return;
        }
 
-       $sql_extra = permissions_sql($owner_uid,$remote_contact,$groups);
+       $sql_extra = permissions_sql($owner_uid, $remote_contact, $groups);
 
        $o = "";
 
@@ -1093,23 +1077,17 @@ function photos_content(App $a) {
        $is_owner = (local_user() && (local_user() == $owner_uid));
        $o .= profile_tabs($a, $is_owner, $a->data['user']['nickname']);
 
-       /**
-        * Display upload form
-        */
-
+       // Display upload form
        if ($datatype === 'upload') {
                if (!$can_post) {
                        notice(t('Permission denied.'));
                        return;
                }
 
-
-               $selname = ($datum ? hex2bin($datum) : '');
-
+               $selname = $datum ? hex2bin($datum) : '';
 
                $albumselect = '';
 
-
                $albumselect .= '<option value="" ' . (!$selname ? ' selected="selected" ' : '') . '>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>';
                if (count($a->data['albums'])) {
                        foreach ($a->data['albums'] as $album) {
@@ -1136,31 +1114,8 @@ function photos_content(App $a) {
 
                $usage_message = '';
 
-               // Private/public post links for the non-JS ACL form
-               $private_post = 1;
-               if ($_REQUEST['public']) {
-                       $private_post = 0;
-               }
-
-               $query_str = $a->query_string;
-               if (strpos($query_str, 'public=1') !== false) {
-                       $query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
-               }
-
-               /*
-                * I think $a->query_string may never have ? in it, but I could be wrong
-                * It looks like it's from the index.php?q=[etc] rewrite that the web
-                * server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
-                */
-               if (strpos($query_str, '?') === false) {
-                       $public_post_link = '?public=1';
-               } else {
-                       $public_post_link = '&public=1';
-               }
-
                $tpl = get_markup_template('photos_upload.tpl');
 
-               $albumselect_e = $albumselect;
                $aclselect_e = ($visitor ? '' : populate_acl($a->user));
 
                $o .= replace_macros($tpl,array(
@@ -1171,7 +1126,7 @@ function photos_content(App $a) {
                        '$newalbum' => t('New album name: '),
                        '$existalbumtext' => t('or existing album name: '),
                        '$nosharetext' => t('Do not show a status post for this upload'),
-                       '$albumselect' => $albumselect_e,
+                       '$albumselect' => $albumselect,
                        '$permissions' => t('Permissions'),
                        '$aclselect' => $aclselect_e,
                        '$alt_uploader' => $ret['addon_text'],
@@ -1183,23 +1138,14 @@ function photos_content(App $a) {
                        '$acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
                        '$group_perms' => t('Show to Groups'),
                        '$contact_perms' => t('Show to Contacts'),
-                       '$private' => t('Private Photo'),
-                       '$public' => t('Public Photo'),
-                       '$is_private' => $private_post,
-                       '$return_path' => $query_str,
-                       '$public_link' => $public_post_link,
-
+                       '$return_path' => $a->query_string,
                ));
 
                return $o;
        }
 
-       /*
-        * Display a single photo album
-        */
-
+       // Display a single photo album
        if ($datatype === 'album') {
-
                $album = hex2bin($datum);
 
                $r = q("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` = '%s'
@@ -1213,7 +1159,8 @@ function photos_content(App $a) {
                }
 
                /// @TODO I have seen this many times, maybe generalize it script-wide and encapsulate it?
-               if ($_GET['order'] === 'posted') {
+               $order_field = defaults($_GET, 'order', '');
+               if ($order_field === 'posted') {
                        $order = 'ASC';
                } else {
                        $order = 'DESC';
@@ -1254,7 +1201,7 @@ function photos_content(App $a) {
                        }
                }
 
-               if ($_GET['order'] === 'posted') {
+               if ($order_field === 'posted') {
                        $order =  array(t('Show Newest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album));
                } else {
                        $order = array(t('Show Oldest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '?f=&order=posted');
@@ -1262,7 +1209,7 @@ function photos_content(App $a) {
 
                $photos = array();
 
-               if (DBM::is_result($r))
+               if (DBM::is_result($r)) {
                        // "Twist" is only used for the duepunto theme with style "slackr"
                        $twist = false;
                        foreach ($r as $rr) {
@@ -1277,14 +1224,15 @@ function photos_content(App $a) {
                                        'id' => $rr['id'],
                                        'twist' => ' ' . ($twist ? 'rotleft' : 'rotright') . rand(2,4),
                                        'link' => 'photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id']
-                                               . (($_GET['order'] === 'posted') ? '?f=&order=posted' : ''),
+                                               . ($order_field === 'posted' ? '?f=&order=posted' : ''),
                                        'title' => t('View Photo'),
                                        'src' => 'photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.' .$ext,
                                        'alt' => $imgalt_e,
                                        'desc'=> $desc_e,
                                        'ext' => $ext,
-                                       'hash'=> $rr['resource_id'],
+                                       'hash'=> $rr['resource-id'],
                                );
+                       }
                }
 
                $tpl = get_markup_template('photo_album.tpl');
@@ -1302,14 +1250,9 @@ function photos_content(App $a) {
 
        }
 
-       /*
-        * Display one photo
-        */
+       // Display one photo
        if ($datatype === 'image') {
-
-               //$o = '';
                // fetch image, item containing image, then comments
-
                $ph = q("SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
                        $sql_extra ORDER BY `scale` ASC ",
                        intval($owner_uid),
@@ -1337,7 +1280,8 @@ function photos_content(App $a) {
                // The query leads to a really intense used index.
                // By now we hide it if someone wants to.
                if (!Config::get('system', 'no_count', false)) {
-                       if ($_GET['order'] === 'posted') {
+                       $order_field = defaults($_GET, 'order', '');
+                       if ($order_field === 'posted') {
                                $order = 'ASC';
                        } else {
                                $order = 'DESC';
@@ -1364,8 +1308,8 @@ function photos_content(App $a) {
                                        }
                                }
                                $edit_suffix = ((($cmd === 'edit') && $can_post) ? '/edit' : '');
-                               $prevlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . $edit_suffix . (($_GET['order'] === 'posted') ? '?f=&order=posted' : '');
-                               $nextlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . $edit_suffix . (($_GET['order'] === 'posted') ? '?f=&order=posted' : '');
+                               $prevlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . $edit_suffix . ($order_field === 'posted' ? '?f=&order=posted' : '');
+                               $nextlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . $edit_suffix . ($order_field === 'posted' ? '?f=&order=posted' : '');
                        }
                }
 
@@ -1439,6 +1383,7 @@ function photos_content(App $a) {
                );
 
                $map = null;
+               $link_item = [];
 
                if (DBM::is_result($linked_items)) {
                        $link_item = $linked_items[0];
@@ -1512,31 +1457,9 @@ function photos_content(App $a) {
 
 
                $edit = Null;
-               if (($cmd === 'edit') && $can_post) {
+               if ($cmd === 'edit' && $can_post) {
                        $edit_tpl = get_markup_template('photo_edit.tpl');
 
-                       // Private/public post links for the non-JS ACL form
-                       $private_post = 1;
-                       if ($_REQUEST['public']) {
-                               $private_post = 0;
-                       }
-
-                       $query_str = $a->query_string;
-                       if (strpos($query_str, 'public=1') !== false) {
-                               $query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
-                       }
-
-                       /*
-                        * I think $a->query_string may never have ? in it, but I could be wrong
-                        * It looks like it's from the index.php?q=[etc] rewrite that the web
-                        * server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
-                        */
-                       if (strpos($query_str, '?') === false) {
-                               $public_post_link = '?public=1';
-                       } else {
-                               $public_post_link = '&public=1';
-                       }
-
                        $album_e = $ph[0]['album'];
                        $caption_e = $ph[0]['desc'];
                        $aclselect_e = populate_acl($ph[0]);
@@ -1555,7 +1478,7 @@ function photos_content(App $a) {
                                '$permissions' => t('Permissions'),
                                '$aclselect' => $aclselect_e,
 
-                               '$item_id' => (count($linked_items) ? $link_item['id'] : 0),
+                               '$item_id' => defaults($link_item, 'id', 0),
                                '$submit' => t('Submit'),
                                '$delete' => t('Delete Photo'),
 
@@ -1563,25 +1486,24 @@ function photos_content(App $a) {
                                '$acl_data' => construct_acl_data($a, $ph[0]), // For non-Javascript ACL selector
                                '$group_perms' => t('Show to Groups'),
                                '$contact_perms' => t('Show to Contacts'),
-                               '$private' => t('Private photo'),
-                               '$public' => t('Public photo'),
-                               '$is_private' => $private_post,
-                               '$return_path' => $query_str,
-                               '$public_link' => $public_post_link,
+                               '$return_path' => $a->query_string,
                        ));
                }
 
-               if (count($linked_items)) {
+               $like = '';
+               $dislike = '';
+               $likebuttons = '';
+               $comments = '';
+               $paginate = '';
+               $responses = '';
 
+               if (count($linked_items)) {
                        $cmnt_tpl = get_markup_template('comment_item.tpl');
                        $tpl = get_markup_template('photo_item.tpl');
                        $return_url = $a->cmd;
 
-                       $like_tpl = get_markup_template('like_noshare.tpl');
-
-                       $likebuttons = '';
-
                        if ($can_post || can_write_wall($a, $owner_uid)) {
+                               $like_tpl = get_markup_template('like_noshare.tpl');
                                $likebuttons = replace_macros($like_tpl, array(
                                        '$id' => $link_item['id'],
                                        '$likethis' => t("I like this \x28toggle\x29"),
@@ -1591,7 +1513,6 @@ function photos_content(App $a) {
                                ));
                        }
 
-                       $comments = '';
                        if (!DBM::is_result($r)) {
                                if (($can_post || can_write_wall($a, $owner_uid)) && $link_item['last-child']) {
                                        $comments .= replace_macros($cmnt_tpl, array(
@@ -1614,12 +1535,6 @@ function photos_content(App $a) {
                                }
                        }
 
-                       $alike = array();
-                       $dlike = array();
-
-                       $like = '';
-                       $dislike = '';
-
                        $conv_responses = array(
                                'like' => array('title' => t('Likes','title')),'dislike' => array('title' => t('Dislikes','title')),
                                'attendyes' => array('title' => t('Attending','title')), 'attendno' => array('title' => t('Not attending','title')), 'attendmaybe' => array('title' => t('Might attend','title'))
@@ -1627,13 +1542,16 @@ function photos_content(App $a) {
 
                        // display comments
                        if (DBM::is_result($r)) {
-
                                foreach ($r as $item) {
                                        builtin_activity_puller($item, $conv_responses);
                                }
 
-                               $like    = (x($conv_responses['like'], $link_item['uri']) ? format_like($conv_responses['like'][$link_item['uri']], $conv_responses['like'][$link_item['uri'] . '-l'], 'like',$link_item['id']) : '');
-                               $dislike = (x($conv_responses['dislike'], $link_item['uri']) ? format_like($conv_responses['dislike'][$link_item['uri']], $conv_responses['dislike'][$link_item['uri'] . '-l'], 'dislike',$link_item['id']) : '');
+                               if (x($conv_responses['like'], $link_item['uri'])) {
+                                       $like = format_like($conv_responses['like'][$link_item['uri']], $conv_responses['like'][$link_item['uri'] . '-l'], 'like', $link_item['id']);
+                               }
+                               if (x($conv_responses['dislike'], $link_item['uri'])) {
+                                       $dislike = format_like($conv_responses['dislike'][$link_item['uri']], $conv_responses['dislike'][$link_item['uri'] . '-l'], 'dislike', $link_item['id']);
+                               }
 
                                if (($can_post || can_write_wall($a, $owner_uid)) && $link_item['last-child']) {
                                        $comments .= replace_macros($cmnt_tpl,array(
@@ -1655,18 +1573,17 @@ function photos_content(App $a) {
                                        ));
                                }
 
-
                                foreach ($r as $item) {
                                        $comment = '';
                                        $template = $tpl;
                                        $sparkle = '';
 
-                                       if ((activity_match($item['verb'], ACTIVITY_LIKE) || activity_match($item['verb'], ACTIVITY_DISLIKE)) && ($item['id'] != $item['parent']))
+                                       if ((activity_match($item['verb'], ACTIVITY_LIKE) || activity_match($item['verb'], ACTIVITY_DISLIKE)) && ($item['id'] != $item['parent'])) {
                                                continue;
+                                       }
 
                                        $redirect_url = 'redir/' . $item['cid'];
 
-
                                        if (local_user() && ($item['contact-uid'] == local_user())
                                                && ($item['network'] == NETWORK_DFRN) && !$item['self']) {
                                                $profile_url = $redirect_url;
@@ -1730,40 +1647,32 @@ function photos_content(App $a) {
                                        }
                                }
                        }
+                       $response_verbs = array('like');
+                       if (Feature::isEnabled($owner_uid, 'dislike')) {
+                               $response_verbs[] = 'dislike';
+                       }
+                       $responses = get_responses($conv_responses, $response_verbs, '', $link_item);
 
                        $paginate = paginate($a);
                }
 
-
-               $response_verbs = array('like');
-               if (Feature::isEnabled($owner_uid, 'dislike')) {
-                       $response_verbs[] = 'dislike';
-               }
-               $responses = get_responses($conv_responses,$response_verbs, '', $link_item);
-
                $photo_tpl = get_markup_template('photo_view.tpl');
-
-               $album_e = array($album_link, $ph[0]['album']);
-               $tags_e = $tags;
-               $like_e = $like;
-               $dislike_e = $dislike;
-
                $o .= replace_macros($photo_tpl, array(
                        '$id' => $ph[0]['id'],
-                       '$album' => $album_e,
+                       '$album' => [$album_link, $ph[0]['album']],
                        '$tools' => $tools,
                        '$lock' => $lock,
                        '$photo' => $photo,
                        '$prevlink' => $prevlink,
                        '$nextlink' => $nextlink,
                        '$desc' => $ph[0]['desc'],
-                       '$tags' => $tags_e,
+                       '$tags' => $tags,
                        '$edit' => $edit,
                        '$map' => $map,
                        '$map_text' => t('Map'),
                        '$likebuttons' => $likebuttons,
-                       '$like' => $like_e,
-                       '$dislike' => $dikslike_e,
+                       '$like' => $like,
+                       '$dislike' => $dislike,
                        'responses' => $responses,
                        '$comments' => $comments,
                        '$paginate' => $paginate,
index 930ed54ff9de977e046755044fd71f127bb7828e..d8eaa8126fd03f0aad9b5a079db905dab216b2c5 100644 (file)
@@ -164,8 +164,8 @@ function ping_init(App $a)
 
                        if (intval(Feature::isEnabled(local_user(), 'forumlist_widget'))) {
                                $forum_counts = ForumManager::countUnseenItems();
-                               if (DBM::is_result($forums_counts)) {
-                                       foreach ($forums_counts as $forum_count) {
+                               if (DBM::is_result($forum_counts)) {
+                                       foreach ($forum_counts as $forum_count) {
                                                if ($forum_count['count'] > 0) {
                                                        $forums_unseen[] = $forum_count;
                                                }
@@ -490,8 +490,10 @@ function ping_get_notifications($uid)
 
                        $notification["href"] = System::baseUrl() . "/notify/view/" . $notification["id"];
 
-                       if ($notification["visible"] && !$notification["spam"]
-                               && !$notification["deleted"] && !is_array($result[$notification["parent"]])
+                       if ($notification["visible"]
+                               && !$notification["spam"]
+                               && !$notification["deleted"]
+                               && !(x($result, $notification["parent"]) && is_array($result[$notification["parent"]]))
                        ) {
                                // Should we condense the notifications or show them all?
                                if (PConfig::get(local_user(), 'system', 'detailed_notif')) {
index 9d4bd57c89159d8c6d647a170e3d9cd461461a8d..f439f754c0746a362874a38b14638dd0c74f0262 100644 (file)
@@ -8,78 +8,80 @@ use Friendica\Database\DBM;
 use Friendica\Model\Group;
 use Friendica\Module\Login;
 
-require_once('include/contact_widgets.php');
-require_once('include/redir.php');
+require_once 'include/contact_widgets.php';
+require_once 'include/redir.php';
 
-function profile_init(App $a) {
-
-       if(! x($a->page,'aside'))
+function profile_init(App $a)
+{
+       if (!x($a->page, 'aside')) {
                $a->page['aside'] = '';
+       }
 
-       if($a->argc > 1)
+       if ($a->argc > 1) {
                $which = htmlspecialchars($a->argv[1]);
-       else {
-               $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");
+       else {
+               $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 (DBM::is_result($r)) {
                        goaway(System::baseUrl() . '/profile/' . $r[0]['nickname']);
-               }
-               else {
+               } else {
                        logger('profile error: mod_profile ' . $a->query_string, LOGGER_DEBUG);
-                       notice( t('Requested profile is not available.') . EOL );
+                       notice(t('Requested profile is not available.') . EOL);
                        $a->error = 404;
                        return;
                }
        }
 
        $profile = 0;
-       if((local_user()) && ($a->argc > 2) && ($a->argv[2] === 'view')) {
+       if (local_user() && $a->argc > 2 && $a->argv[2] === 'view') {
                $which = $a->user['nickname'];
                $profile = htmlspecialchars($a->argv[1]);
-       }
-       else {
+       } else {
                auto_redir($a, $which);
        }
 
-       profile_load($a,$which,$profile);
+       profile_load($a, $which, $profile);
 
-       $blocked = (((Config::get('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
-       $userblock = (($a->profile['hidewall'] && (! local_user()) && (! remote_user())) ? true : false);
+       $blocked   = !local_user() && !remote_user() && Config::get('system', 'block_public');
+       $userblock = !local_user() && !remote_user() && $a->profile['hidewall'];
 
-       if((x($a->profile,'page-flags')) && ($a->profile['page-flags'] == PAGE_COMMUNITY)) {
+       if (x($a->profile, 'page-flags') && $a->profile['page-flags'] == PAGE_COMMUNITY) {
                $a->page['htmlhead'] .= '<meta name="friendica.community" content="true" />';
        }
-       if (x($a->profile,'openidserver')) {
+
+       if (x($a->profile, 'openidserver')) {
                $a->page['htmlhead'] .= '<link rel="openid.server" href="' . $a->profile['openidserver'] . '" />' . "\r\n";
        }
-       if (x($a->profile,'openid')) {
-               $delegate = ((strstr($a->profile['openid'],'://')) ? $a->profile['openid'] : 'https://' . $a->profile['openid']);
+
+       if (x($a->profile, 'openid')) {
+               $delegate = strstr($a->profile['openid'], '://') ? $a->profile['openid'] : 'https://' . $a->profile['openid'];
                $a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n";
        }
+
        // site block
-       if ((! $blocked) && (! $userblock)) {
-               $keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : '');
-               $keywords = str_replace(array('#',',',' ',',,'),array('',' ',',',','),$keywords);
-               if(strlen($keywords))
-                       $a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ;
+       if (!$blocked && !$userblock) {
+               $keywords = str_replace(array('#', ',', ' ', ',,'), array('', ' ', ',', ','), defaults($a->profile, 'pub_keywords', ''));
+               if (strlen($keywords)) {
+                       $a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n";
+               }
        }
 
-       $a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . (($a->profile['net-publish']) ? 'true' : 'false') . '" />' . "\r\n" ;
-       $a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . System::baseUrl() . '/dfrn_poll/' . $which .'" />' . "\r\n" ;
-       $uri = urlencode('acct:' . $a->profile['nickname'] . '@' . $a->get_hostname() . (($a->path) ? '/' . $a->path : ''));
+       $a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . ($a->profile['net-publish'] ? 'true' : 'false') . '" />' . "\r\n";
+       $a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . System::baseUrl() . '/feed/' . $which . '/" title="' . t('%s\'s posts', $a->profile['username']) . '"/>' . "\r\n";
+       $a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . System::baseUrl() . '/feed/' . $which . '/comments" title="' . t('%s\'s comments', $a->profile['username']) . '"/>' . "\r\n";
+       $a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . System::baseUrl() . '/feed/' . $which . '/activity" title="' . t('%s\'s timeline', $a->profile['username']) . '"/>' . "\r\n";
+       $uri = urlencode('acct:' . $a->profile['nickname'] . '@' . $a->get_hostname() . ($a->path ? '/' . $a->path : ''));
        $a->page['htmlhead'] .= '<link rel="lrdd" type="application/xrd+xml" href="' . System::baseUrl() . '/xrd/?uri=' . $uri . '" />' . "\r\n";
        header('Link: <' . System::baseUrl() . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false);
 
        $dfrn_pages = array('request', 'confirm', 'notify', 'poll');
        foreach ($dfrn_pages as $dfrn) {
-               $a->page['htmlhead'] .= "<link rel=\"dfrn-{$dfrn}\" href=\"".System::baseUrl()."/dfrn_{$dfrn}/{$which}\" />\r\n";
+               $a->page['htmlhead'] .= "<link rel=\"dfrn-{$dfrn}\" href=\"" . System::baseUrl() . "/dfrn_{$dfrn}/{$which}\" />\r\n";
        }
-       $a->page['htmlhead'] .= "<link rel=\"dfrn-poco\" href=\"".System::baseUrl()."/poco/{$which}\" />\r\n";
-
+       $a->page['htmlhead'] .= '<link rel="dfrn-poco" href="' . System::baseUrl() . "/poco/{$which}\" />\r\n";
 }
 
-
-function profile_content(App $a, $update = 0) {
-
+function profile_content(App $a, $update = 0)
+{
        $category = $datequery = $datequery2 = '';
 
        if ($a->argc > 2) {
@@ -96,21 +98,21 @@ function profile_content(App $a, $update = 0) {
                }
        }
 
-       if (! x($category)) {
-               $category = ((x($_GET,'category')) ? $_GET['category'] : '');
+       if (!x($category)) {
+               $category = defaults($_GET, 'category', '');
        }
 
-       $hashtags = (x($_GET, 'tag') ? $_GET['tag'] : '');
+       $hashtags = defaults($_GET, 'tag', '');
 
-       if (Config::get('system','block_public') && (! local_user()) && (! remote_user())) {
+       if (Config::get('system', 'block_public') && !local_user() && !remote_user()) {
                return Login::form();
        }
 
-       require_once("include/bbcode.php");
-       require_once('include/security.php');
-       require_once('include/conversation.php');
-       require_once('include/acl_selectors.php');
-       require_once('include/items.php');
+       require_once 'include/bbcode.php';
+       require_once 'include/security.php';
+       require_once 'include/conversation.php';
+       require_once 'include/acl_selectors.php';
+       require_once 'include/items.php';
 
        $groups = array();
 
@@ -129,7 +131,7 @@ function profile_content(App $a, $update = 0) {
 
        $contact_id = 0;
 
-       if (is_array($_SESSION['remote'])) {
+       if (x($_SESSION, 'remote') && is_array($_SESSION['remote'])) {
                foreach ($_SESSION['remote'] as $v) {
                        if ($v['uid'] == $a->profile['profile_uid']) {
                                $contact_id = $v['cid'];
@@ -150,74 +152,75 @@ function profile_content(App $a, $update = 0) {
                }
        }
 
-       if (! $remote_contact) {
+       if (!$remote_contact) {
                if (local_user()) {
                        $contact_id = $_SESSION['cid'];
                        $contact = $a->contact;
                }
        }
 
-       $is_owner = ((local_user()) && (local_user() == $a->profile['profile_uid']) ? true : false);
+       $is_owner = local_user() == $a->profile['profile_uid'];
        $last_updated_key = "profile:" . $a->profile['profile_uid'] . ":" . local_user() . ":" . remote_user();
 
-       if ($a->profile['hidewall'] && (! $is_owner) && (! $remote_contact)) {
-               notice( t('Access to this profile has been restricted.') . EOL);
+       if (x($a->profile, 'hidewall') && !$is_owner && !$remote_contact) {
+               notice(t('Access to this profile has been restricted.') . EOL);
                return;
        }
 
-       if (! $update) {
-               if (x($_GET,'tab')) {
+       if (!$update) {
+               $tab = false;
+               if (x($_GET, 'tab')) {
                        $tab = notags(trim($_GET['tab']));
                }
 
-               $o.=profile_tabs($a, $is_owner, $a->profile['nickname']);
+               $o .= profile_tabs($a, $is_owner, $a->profile['nickname']);
 
                if ($tab === 'profile') {
                        $o .= advanced_profile($a);
-                       call_hooks('profile_advanced',$o);
+                       call_hooks('profile_advanced', $o);
                        return $o;
                }
 
                $o .= common_friends_visitor_widget($a->profile['profile_uid']);
 
-               if (x($_SESSION,'new_member') && $_SESSION['new_member'] && $is_owner) {
+               if (x($_SESSION, 'new_member') && $is_owner) {
                        $o .= '<a href="newmember" id="newmember-tips" style="font-size: 1.2em;"><b>' . t('Tips for New Members') . '</b></a>' . EOL;
                }
 
-               $commpage = (($a->profile['page-flags'] == PAGE_COMMUNITY) ? true : false);
-               $commvisitor = (($commpage && $remote_contact == true) ? true : false);
+               $commpage = $a->profile['page-flags'] == PAGE_COMMUNITY;
+               $commvisitor = $commpage && $remote_contact;
 
-               $a->page['aside'] .= posted_date_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'],$a->profile['profile_uid'],true);
-               $a->page['aside'] .= categories_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'],(x($category) ? xmlify($category) : ''));
+               $a->page['aside'] .= posted_date_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], $a->profile['profile_uid'], true);
+               $a->page['aside'] .= categories_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], (x($category) ? xmlify($category) : ''));
                $a->page['aside'] .= tagcloud_wall_widget();
 
-               if (can_write_wall($a,$a->profile['profile_uid'])) {
-
+               if (can_write_wall($a, $a->profile['profile_uid'])) {
                        $x = array(
                                'is_owner' => $is_owner,
-                               'allow_location' => ((($is_owner || $commvisitor) && $a->profile['allow_location']) ? true : false),
-                               'default_location' => (($is_owner) ? $a->user['default-location'] : ''),
+                               'allow_location' => ($is_owner || $commvisitor) && $a->profile['allow_location'],
+                               'default_location' => $is_owner ? $a->user['default-location'] : '',
                                'nickname' => $a->profile['nickname'],
-                               'lockstate' => (((is_array($a->user) && ((strlen($a->user['allow_cid'])) ||
-                                               (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) ||
-                                               (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'),
-                               'acl' => (($is_owner) ? populate_acl($a->user, true) : ''),
+                               'lockstate' => is_array($a->user)
+                                       && (strlen($a->user['allow_cid'])
+                                               || strlen($a->user['allow_gid'])
+                                               || strlen($a->user['deny_cid'])
+                                               || strlen($a->user['deny_gid'])
+                                       ) ? 'lock' : 'unlock',
+                               'acl' => $is_owner ? populate_acl($a->user, true) : '',
                                'bang' => '',
-                               'visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
+                               'visitor' => $is_owner || $commvisitor ? 'block' : 'none',
                                'profile_uid' => $a->profile['profile_uid'],
-                               'acl_data' => ( $is_owner ? construct_acl_data($a, $a->user) : '' ), // For non-Javascript ACL selector
+                               'acl_data' => $is_owner ? construct_acl_data($a, $a->user) : '', // For non-Javascript ACL selector
                        );
 
-                       $o .= status_editor($a,$x);
+                       $o .= status_editor($a, $x);
                }
        }
 
 
-       /**
-        * Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups
-        */
-       $sql_extra = item_permissions_sql($a->profile['profile_uid'],$remote_contact,$groups);
-
+       // Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups
+       $sql_extra = item_permissions_sql($a->profile['profile_uid'], $remote_contact, $groups);
+       $sql_extra2 = '';
 
        if ($update) {
                $last_updated = (x($_SESSION['last_updated'], $last_updated_key) ? $_SESSION['last_updated'][$last_updated_key] : 0);
@@ -235,7 +238,7 @@ function profile_content(App $a, $update = 0) {
                        FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
                        AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
                        WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND
-                       (`item`.`deleted` = 0 OR item.verb = '" . ACTIVITY_LIKE ."'
+                       (`item`.`deleted` = 0 OR item.verb = '" . ACTIVITY_LIKE . "'
                        OR item.verb = '" . ACTIVITY_DISLIKE . "' OR item.verb = '" . ACTIVITY_ATTEND . "'
                        OR item.verb = '" . ACTIVITY_ATTENDNO . "' OR item.verb = '" . ACTIVITY_ATTENDMAYBE . "')
                        AND `item`.`moderated` = 0
@@ -249,14 +252,12 @@ function profile_content(App $a, $update = 0) {
                if (!DBM::is_result($r)) {
                        return '';
                }
-
        } else {
                $sql_post_table = "";
 
                if (x($category)) {
                        $sql_post_table = sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ",
                                dbesc(protect_sprintf($category)), intval(TERM_OBJ_POST), intval(TERM_CATEGORY), intval($a->profile['profile_uid']));
-                       //$sql_extra .= protect_sprintf(file_tag_file_query('item',$category,'category'));
                }
 
                if (x($hashtags)) {
@@ -265,10 +266,10 @@ function profile_content(App $a, $update = 0) {
                }
 
                if ($datequery) {
-                       $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery))));
+                       $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(), '', $datequery))));
                }
                if ($datequery2) {
-                       $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2))));
+                       $sql_extra2 .= protect_sprintf(sprintf(" AND `thread`.`created` >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(), '', $datequery2))));
                }
 
                // Belongs the profile page to a forum?
@@ -276,7 +277,8 @@ function profile_content(App $a, $update = 0) {
                $r = q("SELECT `uid` FROM `user` WHERE `uid` = %d AND `page-flags` IN (%d, %d)",
                        intval($a->profile['profile_uid']),
                        intval(PAGE_COMMUNITY),
-                       intval(PAGE_PRVGROUP));
+                       intval(PAGE_PRVGROUP)
+               );
 
                if (!DBM::is_result($r)) {
                        $sql_extra3 = sprintf(" AND `thread`.`contact-id` = %d ", intval(intval($a->profile['contact_id'])));
@@ -285,20 +287,20 @@ function profile_content(App $a, $update = 0) {
                //  check if we serve a mobile device and get the user settings
                //  accordingly
                if ($a->is_mobile) {
-                       $itemspage_network = PConfig::get(local_user(),'system','itemspage_mobile_network');
-                       $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 10);
+                       $itemspage_network = PConfig::get(local_user(), 'system', 'itemspage_mobile_network', 10);
                } else {
-                       $itemspage_network = PConfig::get(local_user(),'system','itemspage_network');
-                       $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 20);
+                       $itemspage_network = PConfig::get(local_user(), 'system', 'itemspage_network', 20);
                }
+
                //  now that we have the user settings, see if the theme forces
                //  a maximum item number which is lower then the user choice
-               if(($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network))
+               if (($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network)) {
                        $itemspage_network = $a->force_max_items;
+               }
 
                $a->set_pager_itemspage($itemspage_network);
 
-               $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
+               $pager_sql = sprintf(" LIMIT %d, %d ", intval($a->pager['start']), intval($a->pager['itemspage']));
 
                $r = q("SELECT `thread`.`iid` AS `item_id`, `thread`.`network` AS `item_network`
                        FROM `thread`
@@ -314,7 +316,6 @@ function profile_content(App $a, $update = 0) {
                        ORDER BY `thread`.`created` DESC $pager_sql",
                        intval($a->profile['profile_uid'])
                );
-
        }
 
        $parents_arr = array();
@@ -325,23 +326,25 @@ function profile_content(App $a, $update = 0) {
        $_SESSION['last_updated'][$last_updated_key] = time();
 
        if (DBM::is_result($r)) {
-               foreach($r as $rr)
+               foreach ($r as $rr) {
                        $parents_arr[] = $rr['item_id'];
+               }
+
                $parents_str = implode(', ', $parents_arr);
 
-               $items = q(item_query()." AND `item`.`uid` = %d
+               $items = q(item_query() . " AND `item`.`uid` = %d
                        AND `item`.`parent` IN (%s)
                        $sql_extra ",
                        intval($a->profile['profile_uid']),
                        dbesc($parents_str)
                );
 
-               $items = conv_sort($items,'created');
+               $items = conv_sort($items, 'created');
        } else {
                $items = array();
        }
 
-       if($is_owner && (! $update) && (! Config::get('theme','hide_eventlist'))) {
+       if ($is_owner && !$update && !Config::get('theme', 'hide_eventlist')) {
                $o .= get_birthdays();
                $o .= get_events();
        }
index 467a0d00a5982a3622c45b8bef04b3fda2bca7d9..fcc898a0c0375a0d97065c71f5162078cb18b621 100644 (file)
@@ -9,8 +9,6 @@ use Friendica\Core\Config;
 use Friendica\Database\DBM;
 use Friendica\Protocol\Diaspora;
 
-require_once 'include/crypto.php';
-
 /**
  * @param object $a App
  * @return void
index 4d8b130f94cca342700f343a58299b8a7b8651b8..bd08431a4cfeea8f5a878c5845b6656647f6ad32 100644 (file)
@@ -7,8 +7,8 @@ use Friendica\Core\PConfig;
 use Friendica\Database\DBM;
 use Friendica\Protocol\OStatus;
 use Friendica\Protocol\Salmon;
+use Friendica\Util\Crypto;
 
-require_once 'include/crypto.php';
 require_once 'include/items.php';
 require_once 'include/follow.php';
 
@@ -117,23 +117,23 @@ function salmon_post(App $a) {
 
        logger('mod-salmon: key details: ' . print_r($key_info,true), LOGGER_DEBUG);
 
-       $pubkey = metopem($m,$e);
+       $pubkey = Crypto::meToPem($m, $e);
 
        // We should have everything we need now. Let's see if it verifies.
 
        // Try GNU Social format
-       $verify = rsa_verify($signed_data, $signature, $pubkey);
+       $verify = Crypto::rsaVerify($signed_data, $signature, $pubkey);
        $mode = 1;
 
        if (! $verify) {
                logger('mod-salmon: message did not verify using protocol. Trying compliant format.');
-               $verify = rsa_verify($compliant_format, $signature, $pubkey);
+               $verify = Crypto::rsaVerify($compliant_format, $signature, $pubkey);
                $mode = 2;
        }
 
        if (! $verify) {
                logger('mod-salmon: message did not verify using padding. Trying old statusnet format.');
-               $verify = rsa_verify($stnet_signed_data, $signature, $pubkey);
+               $verify = Crypto::rsaVerify($stnet_signed_data, $signature, $pubkey);
                $mode = 3;
        }
 
index 11b7e21be76ab84823a8367e66832c0525f5dd79..a7759f7419eb288a0ff8a1ae498ac091bb843e54 100644 (file)
@@ -8,11 +8,11 @@ use Friendica\Database\DBM;
 use Friendica\Model\Contact;
 use Friendica\Model\Group;
 
-require_once('include/items.php');
-require_once('include/acl_selectors.php');
-require_once('include/bbcode.php');
-require_once('include/security.php');
-require_once('include/redir.php');
+require_once 'include/items.php';
+require_once 'include/acl_selectors.php';
+require_once 'include/bbcode.php';
+require_once 'include/security.php';
+require_once 'include/redir.php';
 
 function videos_init(App $a) {
 
@@ -45,12 +45,12 @@ function videos_init(App $a) {
 
                $tpl = get_markup_template("vcard-widget.tpl");
 
-               $vcard_widget .= replace_macros($tpl, array(
+               $vcard_widget = replace_macros($tpl, array(
                        '$name' => $profile['name'],
                        '$photo' => $profile['photo'],
-                       '$addr' => (($profile['addr'] != "") ? $profile['addr'] : ""),
+                       '$addr' => defaults($profile, 'addr', ''),
                        '$account_type' => $account_type,
-                       '$pdesc' => (($profile['pdesc'] != "") ? $profile['pdesc'] : ""),
+                       '$pdesc' => defaults($profile, 'pdesc', ''),
                ));
 
 
@@ -281,8 +281,9 @@ function videos_content(App $a) {
                }
        }
 
-       // perhaps they're visiting - but not a community page, so they wouldn't have write access
+       $groups = [];
 
+       // perhaps they're visiting - but not a community page, so they wouldn't have write access
        if(remote_user() && (! $visitor)) {
                $contact_id = 0;
                if(is_array($_SESSION['remote'])) {
@@ -318,7 +319,7 @@ function videos_content(App $a) {
                return;
        }
 
-       $sql_extra = permissions_sql($owner_uid,$remote_contact,$groups);
+       $sql_extra = permissions_sql($owner_uid, $remote_contact, $groups);
 
        $o = "";
 
index 49fdde25448a215881883802971c00d64dc529ca..363994a8d42e22eae7177fd14a36c92fc1e42cf6 100644 (file)
@@ -1,12 +1,14 @@
 <?php
-
+/**
+ * @file mod/xrd.php
+ */
 use Friendica\App;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
+use Friendica\Protocol\Salmon;
 
-require_once('include/crypto.php');
-
-function xrd_init(App $a) {
+function xrd_init(App $a)
+{
        if ($a->argv[0] == 'xrd') {
                $uri = urldecode(notags(trim($_GET['uri'])));
                if ($_SERVER['HTTP_ACCEPT'] == 'application/jrd+json') {
@@ -54,8 +56,9 @@ function xrd_init(App $a) {
        }
 }
 
-function xrd_json($a, $uri, $alias, $profile_url, $r) {
-       $salmon_key = salmon_key($r['spubkey']);
+function xrd_json($a, $uri, $alias, $profile_url, $r)
+{
+       $salmon_key = Salmon::salmonKey($r['spubkey']);
 
        header('Access-Control-Allow-Origin: *');
        header("Content-type: application/json; charset=utf-8");
@@ -79,8 +82,9 @@ function xrd_json($a, $uri, $alias, $profile_url, $r) {
        killme();
 }
 
-function xrd_xml($a, $uri, $alias, $profile_url, $r) {
-       $salmon_key = salmon_key($r['spubkey']);
+function xrd_xml($a, $uri, $alias, $profile_url, $r)
+{
+       $salmon_key = Salmon::salmonKey($r['spubkey']);
 
        header('Access-Control-Allow-Origin: *');
        header("Content-type: text/xml");
@@ -100,8 +104,8 @@ function xrd_xml($a, $uri, $alias, $profile_url, $r) {
                '$salmon'      => System::baseUrl() . '/salmon/'        . $r['nickname'],
                '$salmen'      => System::baseUrl() . '/salmon/'        . $r['nickname'] . '/mention',
                '$subscribe'   => System::baseUrl() . '/follow?url={uri}',
-               '$modexp'      => 'data:application/magic-public-key,'  . $salmon_key,
-       ));
+               '$modexp'      => 'data:application/magic-public-key,'  . $salmon_key)
+       );
 
        $arr = array('user' => $r, 'xml' => $o);
        call_hooks('personal_xrd', $arr);
index c32cf79d98e4363860c3d194719263fac9271158..f9f443449032588b45a8d73c68f276d4f93e0f05 100644 (file)
@@ -37,6 +37,7 @@ class App {
        public $query_string;
        public $config;
        public $page;
+       public $page_offset;
        public $profile;
        public $profile_uid;
        public $user;
diff --git a/src/Content/OEmbed.php b/src/Content/OEmbed.php
new file mode 100644 (file)
index 0000000..70be8fd
--- /dev/null
@@ -0,0 +1,355 @@
+<?php\r
+\r
+/**\r
+ * @file src/Content/OEmbed.php\r
+ */\r
+\r
+namespace Friendica\Content;\r
+\r
+use Friendica\Core\Cache;\r
+use Friendica\Core\System;\r
+use Friendica\ParseUrl;\r
+use Friendica\Core\Config;\r
+use Friendica\Database\DBM;\r
+use dba;\r
+use DOMDocument;\r
+use DOMXPath;\r
+use DOMNode;\r
+\r
+require_once 'include/dba.php';\r
+require_once 'mod/proxy.php';\r
+\r
+/**\r
+ * Handles all OEmbed content fetching and replacement\r
+ *\r
+ * OEmbed is a standard used to allow an embedded representation of a URL on\r
+ * third party sites\r
+ *\r
+ * @see https://oembed.com\r
+ *\r
+ * @author Hypolite Petovan <mrpetovan@gmail.com>\r
+ */\r
+class OEmbed\r
+{\r
+       public static function replaceCallback($matches)\r
+       {\r
+               $embedurl = $matches[1];\r
+               $j = self::fetchURL($embedurl);\r
+               $s = self::formatObject($j);\r
+\r
+               return $s;\r
+       }\r
+\r
+       /**\r
+        * @brief Get data from an URL to embed its content.\r
+        *\r
+        * @param string $embedurl The URL from which the data should be fetched.\r
+        * @param bool $no_rich_type If set to true rich type content won't be fetched.\r
+        *\r
+        * @return bool|object Returns object with embed content or false if no embedable\r
+        *       content exists\r
+        */\r
+       public static function fetchURL($embedurl, $no_rich_type = false)\r
+       {\r
+               $embedurl = trim($embedurl, "'");\r
+               $embedurl = trim($embedurl, '"');\r
+\r
+               $a = get_app();\r
+\r
+               $condition = array('url' => normalise_link($embedurl));\r
+               $r = dba::select('oembed', array('content'), $condition, array('limit' => 1));\r
+\r
+               if (DBM::is_result($r)) {\r
+                       $txt = $r["content"];\r
+               } else {\r
+                       $txt = Cache::get($a->videowidth . $embedurl);\r
+               }\r
+               // These media files should now be caught in bbcode.php\r
+               // left here as a fallback in case this is called from another source\r
+\r
+               $noexts = array("mp3", "mp4", "ogg", "ogv", "oga", "ogm", "webm");\r
+               $ext = pathinfo(strtolower($embedurl), PATHINFO_EXTENSION);\r
+\r
+\r
+               if (is_null($txt)) {\r
+                       $txt = "";\r
+\r
+                       if (!in_array($ext, $noexts)) {\r
+                               // try oembed autodiscovery\r
+                               $redirects = 0;\r
+                               $html_text = fetch_url($embedurl, false, $redirects, 15, "text/*");\r
+                               if ($html_text) {\r
+                                       $dom = @DOMDocument::loadHTML($html_text);\r
+                                       if ($dom) {\r
+                                               $xpath = new DOMXPath($dom);\r
+                                               $entries = $xpath->query("//link[@type='application/json+oembed']");\r
+                                               foreach ($entries as $e) {\r
+                                                       $href = $e->getAttributeNode("href")->nodeValue;\r
+                                                       $txt = fetch_url($href . '&maxwidth=' . $a->videowidth);\r
+                                                       break;\r
+                                               }\r
+                                               $entries = $xpath->query("//link[@type='text/json+oembed']");\r
+                                               foreach ($entries as $e) {\r
+                                                       $href = $e->getAttributeNode("href")->nodeValue;\r
+                                                       $txt = fetch_url($href . '&maxwidth=' . $a->videowidth);\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       $txt = trim($txt);\r
+\r
+                       if (!$txt || $txt[0] != "{") {\r
+                               $txt = '{"type":"error"}';\r
+                       } else { //save in cache\r
+                               $j = json_decode($txt);\r
+                               if ($j->type != "error") {\r
+                                       dba::insert('oembed', array('url' => normalise_link($embedurl),\r
+                                               'content' => $txt, 'created' => datetime_convert()), true);\r
+                               }\r
+\r
+                               Cache::set($a->videowidth . $embedurl, $txt, CACHE_DAY);\r
+                       }\r
+               }\r
+\r
+               $j = json_decode($txt);\r
+\r
+               if (!is_object($j)) {\r
+                       return false;\r
+               }\r
+\r
+               // Always embed the SSL version\r
+               if (isset($j->html)) {\r
+                       $j->html = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"), array("https://www.youtube.com/", "https://player.vimeo.com/"), $j->html);\r
+               }\r
+\r
+               $j->embedurl = $embedurl;\r
+\r
+               // If fetching information doesn't work, then improve via internal functions\r
+               if (($j->type == "error") || ($no_rich_type && ($j->type == "rich"))) {\r
+                       $data = ParseUrl::getSiteinfoCached($embedurl, true, false);\r
+                       $j->type = $data["type"];\r
+\r
+                       if ($j->type == "photo") {\r
+                               $j->url = $data["url"];\r
+                               //$j->width = $data["images"][0]["width"];\r
+                               //$j->height = $data["images"][0]["height"];\r
+                       }\r
+\r
+                       if (isset($data["title"])) {\r
+                               $j->title = $data["title"];\r
+                       }\r
+\r
+                       if (isset($data["text"])) {\r
+                               $j->description = $data["text"];\r
+                       }\r
+\r
+                       if (is_array($data["images"])) {\r
+                               $j->thumbnail_url = $data["images"][0]["src"];\r
+                               $j->thumbnail_width = $data["images"][0]["width"];\r
+                               $j->thumbnail_height = $data["images"][0]["height"];\r
+                       }\r
+               }\r
+\r
+               call_hooks('oembed_fetch_url', $embedurl, $j);\r
+\r
+               return $j;\r
+       }\r
+\r
+       public static function formatObject($j)\r
+       {\r
+               $embedurl = $j->embedurl;\r
+               $jhtml = self::iframe($j->embedurl, (isset($j->width) ? $j->width : null), (isset($j->height) ? $j->height : null));\r
+               $ret = "<span class='oembed " . $j->type . "'>";\r
+               switch ($j->type) {\r
+                       case "video":\r
+                               if (isset($j->thumbnail_url)) {\r
+                                       $tw = (isset($j->thumbnail_width) && intval($j->thumbnail_width)) ? $j->thumbnail_width : 200;\r
+                                       $th = (isset($j->thumbnail_height) && intval($j->thumbnail_height)) ? $j->thumbnail_height : 180;\r
+                                       // make sure we don't attempt divide by zero, fallback is a 1:1 ratio\r
+                                       $tr = (($th) ? $tw / $th : 1);\r
+\r
+                                       $th = 120;\r
+                                       $tw = $th * $tr;\r
+                                       $tpl = get_markup_template('oembed_video.tpl');\r
+                                       $ret.=replace_macros($tpl, array(\r
+                                               '$baseurl' => System::baseUrl(),\r
+                                               '$embedurl' => $embedurl,\r
+                                               '$escapedhtml' => base64_encode($jhtml),\r
+                                               '$tw' => $tw,\r
+                                               '$th' => $th,\r
+                                               '$turl' => $j->thumbnail_url,\r
+                                       ));\r
+                               } else {\r
+                                       $ret = $jhtml;\r
+                               }\r
+                               //$ret.="<br>";\r
+                               break;\r
+                       case "photo":\r
+                               $ret.= "<img width='" . $j->width . "' src='" . proxy_url($j->url) . "'>";\r
+                               break;\r
+                       case "link":\r
+                               break;\r
+                       case "rich":\r
+                               // not so safe..\r
+                               if (!Config::get("system", "no_oembed_rich_content")) {\r
+                                       $ret.= proxy_parse_html($jhtml);\r
+                               }\r
+                               break;\r
+               }\r
+\r
+               // add link to source if not present in "rich" type\r
+               if ($j->type != 'rich' || !strpos($j->html, $embedurl)) {\r
+                       $ret .= "<h4>";\r
+                       if (isset($j->title)) {\r
+                               if (isset($j->provider_name)) {\r
+                                       $ret .= $j->provider_name . ": ";\r
+                               }\r
+\r
+                               $embedlink = (isset($j->title)) ? $j->title : $embedurl;\r
+                               $ret .= "<a href='$embedurl' rel='oembed'>$embedlink</a>";\r
+                               if (isset($j->author_name)) {\r
+                                       $ret.=" (" . $j->author_name . ")";\r
+                               }\r
+                       } elseif (isset($j->provider_name) || isset($j->author_name)) {\r
+                               $embedlink = "";\r
+                               if (isset($j->provider_name)) {\r
+                                       $embedlink .= $j->provider_name;\r
+                               }\r
+\r
+                               if (isset($j->author_name)) {\r
+                                       if ($embedlink != "") {\r
+                                               $embedlink .= ": ";\r
+                                       }\r
+\r
+                                       $embedlink .= $j->author_name;\r
+                               }\r
+                               if (trim($embedlink) == "") {\r
+                                       $embedlink = $embedurl;\r
+                               }\r
+\r
+                               $ret .= "<a href='$embedurl' rel='oembed'>$embedlink</a>";\r
+                       }\r
+                       //if (isset($j->author_name)) $ret.=" by ".$j->author_name;\r
+                       //if (isset($j->provider_name)) $ret.=" on ".$j->provider_name;\r
+                       $ret .= "</h4>";\r
+               } else {\r
+                       // add <a> for html2bbcode conversion\r
+                       $ret .= "<a href='$embedurl' rel='oembed'>$embedurl</a>";\r
+               }\r
+               $ret.="</span>";\r
+               $ret = str_replace("\n", "", $ret);\r
+               return mb_convert_encoding($ret, 'HTML-ENTITIES', mb_detect_encoding($ret));\r
+       }\r
+\r
+       public static function BBCode2HTML($text)\r
+       {\r
+               $stopoembed = Config::get("system", "no_oembed");\r
+               if ($stopoembed == true) {\r
+                       return preg_replace("/\[embed\](.+?)\[\/embed\]/is", "<!-- oembed $1 --><i>" . t('Embedding disabled') . " : $1</i><!-- /oembed $1 -->", $text);\r
+               }\r
+               return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", ['self', 'replaceCallback'], $text);\r
+       }\r
+\r
+       /**\r
+        * Find <span class='oembed'>..<a href='url' rel='oembed'>..</a></span>\r
+        * and replace it with [embed]url[/embed]\r
+        */\r
+       public static function HTML2BBCode($text)\r
+       {\r
+               // start parser only if 'oembed' is in text\r
+               if (strpos($text, "oembed")) {\r
+\r
+                       // convert non ascii chars to html entities\r
+                       $html_text = mb_convert_encoding($text, 'HTML-ENTITIES', mb_detect_encoding($text));\r
+\r
+                       // If it doesn't parse at all, just return the text.\r
+                       $dom = @DOMDocument::loadHTML($html_text);\r
+                       if (!$dom) {\r
+                               return $text;\r
+                       }\r
+                       $xpath = new DOMXPath($dom);\r
+\r
+                       $xattr = self::buildXPath("class", "oembed");\r
+                       $entries = $xpath->query("//span[$xattr]");\r
+\r
+                       $xattr = "@rel='oembed'"; //oe_build_xpath("rel","oembed");\r
+                       foreach ($entries as $e) {\r
+                               $href = $xpath->evaluate("a[$xattr]/@href", $e)->item(0)->nodeValue;\r
+                               if (!is_null($href)) {\r
+                                       $e->parentNode->replaceChild(new DOMText("[embed]" . $href . "[/embed]"), $e);\r
+                               }\r
+                       }\r
+                       return self::getInnerHTML($dom->getElementsByTagName("body")->item(0));\r
+               } else {\r
+                       return $text;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @brief Generates the iframe HTML for an oembed attachment.\r
+        *\r
+        * Width and height are given by the remote, and are regularly too small for\r
+        * the generated iframe.\r
+        *\r
+        * The width is entirely discarded for the actual width of the post, while fixed\r
+        * height is used as a starting point before the inevitable resizing.\r
+        *\r
+        * Since the iframe is automatically resized on load, there are no need for ugly\r
+        * and impractical scrollbars.\r
+        *\r
+        * @param string $src Original remote URL to embed\r
+        * @param string $width\r
+        * @param string $height\r
+        * @return string formatted HTML\r
+        *\r
+        * @see oembed_format_object()\r
+        */\r
+       private static function iframe($src, $width, $height)\r
+       {\r
+               $a = get_app();\r
+\r
+               if (!$height || strstr($height, '%')) {\r
+                       $height = '200';\r
+               }\r
+               $width = '100%';\r
+\r
+               $s = System::baseUrl() . '/oembed/' . base64url_encode($src);\r
+               return '<iframe onload="resizeIframe(this);" class="embed_rich" height="' . $height . '" width="' . $width . '" src="' . $s . '" allowfullscreen scrolling="no" frameborder="no">' . t('Embedded content') . '</iframe>';\r
+       }\r
+\r
+       /**\r
+        * Generates an XPath query to select elements whose provided attribute contains\r
+        * the provided value in a space-separated list.\r
+        *\r
+        * @brief Generates attribute search XPath string\r
+        *\r
+        * @param string $attr Name of the attribute to seach\r
+        * @param string $value Value to search in a space-separated list\r
+        * @return string\r
+        */\r
+       private static function buildXPath($attr, $value)\r
+       {\r
+               // https://www.westhoffswelt.de/blog/2009/6/9/select-html-elements-with-more-than-one-css-class-using-xpath\r
+               return "contains(normalize-space(@$attr), ' $value ') or substring(normalize-space(@$attr), 1, string-length('$value') + 1) = '$value ' or substring(normalize-space(@$attr), string-length(@$attr) - string-length('$value')) = ' $value' or @$attr = '$value'";\r
+       }\r
+\r
+       /**\r
+        * Returns the inner XML string of a provided DOMNode\r
+        *\r
+        * @brief Returns the inner XML string of a provided DOMNode\r
+        *\r
+        * @param DOMNode $node\r
+        * @return string\r
+        */\r
+       private static function getInnerHTML(DOMNode $node)\r
+       {\r
+               $innerHTML = '';\r
+               $children = $node->childNodes;\r
+               foreach ($children as $child) {\r
+                       $innerHTML .= $child->ownerDocument->saveXML($child);\r
+               }\r
+               return $innerHTML;\r
+       }\r
+}\r
index 760b40b1d30eb19adb742d85b8077fe385d5e730..55e2b33a047ee9c9a52c5fce5dcc0f0e0f9ba5fe 100644 (file)
@@ -606,6 +606,7 @@ class Worker
                        $exponent = 3;
                        $slope = $maxworkers / pow($maxsysload, $exponent);
                        $queues = ceil($slope * pow(max(0, $maxsysload - $load), $exponent));
+                       $processlist = '';
 
                        if (Config::get('system', 'worker_debug')) {
                                // Create a list of queue entries grouped by their priority
index 1b15f1c76d89faafa38bae7187a7184552962ecd..067a2fda7f104e44680937d287696b04d1c2100a 100644 (file)
@@ -662,7 +662,7 @@ class Contact extends BaseObject
                if (!DBM::is_result($contact)) {
                        // The link could be provided as http although we stored it as https
                        $ssl_url = str_replace('http://', 'https://', $url);
-                       $r = dba::select('contact', array('id', 'avatar-date'), array('`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid), array('limit' => 1));
+                       $r = dba::select('contact', array('id', 'avatar', 'avatar-date'), array('`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid), array('limit' => 1));
                        $contact = dba::fetch($r);
                        dba::close($r);
                }
@@ -674,7 +674,7 @@ class Contact extends BaseObject
                        $update_contact = ($contact['avatar-date'] < datetime_convert('', '', 'now -7 days'));
 
                        // We force the update if the avatar is empty
-                       if ($contact['avatar'] == '') {
+                       if (!x($contact, 'avatar')) {
                                $update_contact = true;
                        }
 
index 99222f52292e3a910b5a79d0b1bc10afbf0ff1c5..c6d6c044d5ca65ccbb0dfb85d26cd52ccb0f9e21 100644 (file)
@@ -16,11 +16,11 @@ use Friendica\Model\Contact;
 use Friendica\Model\Group;
 use Friendica\Model\Photo;
 use Friendica\Object\Image;
+use Friendica\Util\Crypto;
 use dba;
 use Exception;
 
 require_once 'boot.php';
-require_once 'include/crypto.php';
 require_once 'include/dba.php';
 require_once 'include/enotify.php';
 require_once 'include/network.php';
@@ -297,7 +297,7 @@ class User
 
                $return['password'] = $new_password;
 
-               $keys = new_keypair(4096);
+               $keys = Crypto::newKeypair(4096);
                if ($keys === false) {
                        throw new Exception(t('SERIOUS ERROR: Generation of security keys failed.'));
                }
@@ -306,7 +306,7 @@ class User
                $pubkey = $keys['pubkey'];
 
                // Create another keypair for signing/verifying salmon protocol messages.
-               $sres = new_keypair(512);
+               $sres = Crypto::newKeypair(512);
                $sprvkey = $sres['prvkey'];
                $spubkey = $sres['pubkey'];
 
diff --git a/src/Module/Feed.php b/src/Module/Feed.php
new file mode 100644 (file)
index 0000000..678e77e
--- /dev/null
@@ -0,0 +1,59 @@
+<?php\r
+\r
+namespace Friendica\Module;\r
+\r
+use Friendica\BaseModule;\r
+use Friendica\Protocol\OStatus;\r
+\r
+/**\r
+ * Provides public Atom feeds\r
+ *\r
+ * Currently supported:\r
+ * - /feed/[nickname]/ => posts\r
+ * - /feed/[nickname]/posts => posts\r
+ * - /feed/[nickname]/comments => comments\r
+ * - /feed/[nickname]/replies => comments\r
+ * - /feed/[nickname]/activity => activity\r
+ *\r
+ * The nocache GET parameter is provided mainly for debug purposes, requires auth\r
+ *\r
+ * @brief Provides public Atom feeds\r
+ *\r
+ * @author Hypolite Petovan <mrpetovan@gmail.com>\r
+ */\r
+class Feed extends BaseModule\r
+{\r
+       public static function content()\r
+       {\r
+               $a = self::getApp();\r
+\r
+               $last_update = x($_GET, 'last_update') ? $_GET['last_update'] : '';\r
+               $nocache     = x($_GET, 'nocache') && local_user();\r
+\r
+               if ($a->argc < 2) {\r
+                       http_status_exit(400);\r
+               }\r
+\r
+               $type = null;\r
+               if ($a->argc > 2) {\r
+                       $type = $a->argv[2];\r
+               }\r
+\r
+               switch ($type) {\r
+                       case 'posts':\r
+                       case 'comments':\r
+                       case 'activity':\r
+                               break;\r
+                       case 'replies':\r
+                               $type = 'comments';\r
+                               break;\r
+                       default:\r
+                               $type = 'posts';\r
+               }\r
+\r
+               $nickname = $a->argv[1];\r
+               header("Content-type: application/atom+xml");\r
+               echo OStatus::feed($nickname, $last_update, 10, $type, $nocache);\r
+               killme();\r
+       }\r
+}\r
diff --git a/src/Module/Oembed.php b/src/Module/Oembed.php
new file mode 100644 (file)
index 0000000..f30fb86
--- /dev/null
@@ -0,0 +1,53 @@
+<?php\r
+\r
+namespace Friendica\Module;\r
+\r
+use Friendica\BaseModule;\r
+use Friendica\Content;\r
+\r
+/**\r
+ * Oembed module\r
+ *\r
+ * Displays stored embed content based on a base64 hash of a remote URL\r
+ *\r
+ * Example: /oembed/aHR0cHM6Ly9...\r
+ *\r
+ * @author Hypolite Petovan <mrpetovan@gmail.com>\r
+ */\r
+class Oembed extends BaseModule\r
+{\r
+       public static function content()\r
+       {\r
+               $a = self::getApp();\r
+\r
+               // Unused form: /oembed/b2h?url=...\r
+               if ($a->argv[1] == 'b2h') {\r
+                       $url = array("", trim(hex2bin($_REQUEST['url'])));\r
+                       echo Content\OEmbed::replaceCallback($url);\r
+                       killme();\r
+               }\r
+\r
+               // Unused form: /oembed/h2b?text=...\r
+               if ($a->argv[1] == 'h2b') {\r
+                       $text = trim(hex2bin($_REQUEST['text']));\r
+                       echo Content\OEmbed::HTML2BBCode($text);\r
+                       killme();\r
+               }\r
+\r
+               if ($a->argc == 2) {\r
+                       echo '<html><body>';\r
+                       $url = base64url_decode($a->argv[1]);\r
+                       $j = Content\OEmbed::fetchURL($url);\r
+\r
+                       // workaround for media.ccc.de (and any other endpoint that return size 0)\r
+                       if (substr($j->html, 0, 7) == "<iframe" && strstr($j->html, 'width="0"')) {\r
+                               $j->html = '<style>html,body{margin:0;padding:0;} iframe{width:100%;height:100%;}</style>' . $j->html;\r
+                               $j->html = str_replace('width="0"', '', $j->html);\r
+                               $j->html = str_replace('height="0"', '', $j->html);\r
+                       }\r
+                       echo $j->html;\r
+                       echo '</body></html>';\r
+               }\r
+               killme();\r
+       }\r
+}\r
index 56abbb7fdc3905d8edbeb96b828bd92fd2426c75..8912088cbb003a967b771da5988d53eddd38d04d 100644 (file)
@@ -17,6 +17,7 @@ use Friendica\Database\DBM;
 use Friendica\Model\Profile;
 use Friendica\Protocol\Email;
 use Friendica\Protocol\Feed;
+use Friendica\Util\Crypto;
 use Friendica\Util\XML;
 
 use dba;
@@ -25,7 +26,6 @@ use DOMDocument;
 
 require_once 'include/dba.php';
 require_once 'include/network.php';
-require_once "include/crypto.php";
 
 /**
  * @brief This class contain functions for probing URL
@@ -330,7 +330,7 @@ class Probe
                        $data["url"] = $uri;
                }
 
-               if ($data["photo"] != "") {
+               if (x($data, "photo")) {
                        $data["baseurl"] = matching_url(normalise_link($data["baseurl"]), normalise_link($data["photo"]));
                } else {
                        $data["photo"] = System::baseUrl().'/images/person-175.jpg';
@@ -341,7 +341,7 @@ class Probe
                                $data["name"] = $data["nick"];
                        }
 
-                       if ($data["name"] == "") {
+                       if (!x($data, "name")) {
                                $data["name"] = $data["url"];
                        }
                }
@@ -944,7 +944,7 @@ class Probe
 
                                //if (strstr($data["pubkey"], 'RSA ') || ($link["type"] == "RSA"))
                                if (strstr($data["pubkey"], 'RSA ')) {
-                                       $data["pubkey"] = rsatopem($data["pubkey"]);
+                                       $data["pubkey"] = Crypto::rsaToPem($data["pubkey"]);
                                }
                        }
                }
@@ -1043,7 +1043,7 @@ class Probe
                        if ($search->length > 0) {
                                $data["pubkey"] = $search->item(0)->nodeValue;
                                if (strstr($data["pubkey"], 'RSA ')) {
-                                       $data["pubkey"] = rsatopem($data["pubkey"]);
+                                       $data["pubkey"] = Crypto::rsaToPem($data["pubkey"]);
                                }
                        }
 
@@ -1133,7 +1133,7 @@ class Probe
 
                                //if (strstr($data["pubkey"], 'RSA ') || ($link["type"] == "RSA"))
                                if (strstr($data["pubkey"], 'RSA ')) {
-                                       $data["pubkey"] = rsatopem($data["pubkey"]);
+                                       $data["pubkey"] = Crypto::rsaToPem($data["pubkey"]);
                                }
                        }
                }
@@ -1244,7 +1244,7 @@ class Probe
                                        if (sizeof($key) >= 3) {
                                                $m = base64url_decode($key[1]);
                                                $e = base64url_decode($key[2]);
-                                               $data["pubkey"] = metopem($m, $e);
+                                               $data["pubkey"] = Crypto::meToPem($m, $e);
                                        }
                                }
                        }
index 08e7548b9fc49f73cceca6a979d900e238bf49ed..dd32fc3e3ee18ccff7d41573a611f9fb3f7b1fa6 100644 (file)
@@ -1,7 +1,9 @@
 <?php
+
 /**
  * @file src/Object/Post.php
  */
+
 namespace Friendica\Object;
 
 use Friendica\BaseObject;
@@ -52,9 +54,9 @@ class Post extends BaseObject
 
                $this->data = $data;
                $this->setTemplate('wall');
-               $this->toplevel = ($this->getId() == $this->getDataValue('parent'));
+               $this->toplevel = $this->getId() == $this->getDataValue('parent');
 
-               if (is_array($_SESSION['remote'])) {
+               if (x($_SESSION, 'remote') && is_array($_SESSION['remote'])) {
                        foreach ($_SESSION['remote'] as $visitor) {
                                if ($visitor['cid'] == $this->getDataValue('contact-id')) {
                                        $this->visiting = true;
@@ -63,9 +65,7 @@ class Post extends BaseObject
                        }
                }
 
-               $this->writable = ($this->getDataValue('writable') || $this->getDataValue('self'));
-
-               $ssl_state = ((local_user()) ? true : false);
+               $this->writable = $this->getDataValue('writable') || $this->getDataValue('self');
                $this->redirect_url = 'redir/' . $this->getDataValue('cid');
 
                if (!$this->isToplevel()) {
@@ -75,12 +75,10 @@ class Post extends BaseObject
                // Prepare the children
                if (count($data['children'])) {
                        foreach ($data['children'] as $item) {
-                               /*
-                                * Only add will be displayed
-                                */
+                               // Only add will be displayed
                                if ($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) {
                                        continue;
-                               } elseif (! visible_activity($item)) {
+                               } elseif (!visible_activity($item)) {
                                        continue;
                                }
 
@@ -145,13 +143,13 @@ class Post extends BaseObject
                        || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
                        ? t('Private Message')
                        : false);
-               $shareable = ((in_array($conv->getProfileOwner(), [0, local_user()]) && ($item['private'] != 1)) ? true : false);
+               $shareable = in_array($conv->getProfileOwner(), [0, local_user()]) && $item['private'] != 1;
 
                if (local_user() && link_compare($a->contact['url'], $item['author-link'])) {
                        if ($item["event-id"] != 0) {
-                               $edpost = array("events/event/".$item['event-id'], t("Edit"));
+                               $edpost = array("events/event/" . $item['event-id'], t("Edit"));
                        } else {
-                               $edpost = array("editpost/".$item['id'], t("Edit"));
+                               $edpost = array("editpost/" . $item['id'], t("Edit"));
                        }
                } else {
                        $edpost = false;
@@ -170,9 +168,9 @@ class Post extends BaseObject
 
                $filer = (($conv->getProfileOwner() == local_user()) ? t("save to folder") : false);
 
-               $diff_author    = ((link_compare($item['url'], $item['author-link'])) ? false : true);
-               $profile_name   = htmlentities(((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
-               if ($item['author-link'] && (! $item['author-name'])) {
+               $diff_author = !link_compare($item['url'], $item['author-link']);
+               $profile_name = htmlentities(((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
+               if ($item['author-link'] && (!$item['author-name'])) {
                        $profile_name = $item['author-link'];
                }
 
@@ -210,39 +208,25 @@ class Post extends BaseObject
                call_hooks('render_location', $locate);
                $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate));
 
-               $tags=array();
-               $hashtags = array();
-               $mentions = array();
-
-               /*foreach(explode(',',$item['tag']) as $tag){
-                       $tag = trim($tag);
-                       if ($tag!="") {
-                               $t = bbcode($tag);
-                               $tags[] = $t;
-                               if($t[0] == '#')
-                                       $hashtags[] = $t;
-                               elseif($t[0] == '@')
-                                       $mentions[] = $t;
-                       }
-               }*/
-
                // process action responses - e.g. like/dislike/attend/agree/whatever
                $response_verbs = array('like', 'dislike');
 
+               $isevent = false;
+               $attend = [];
                if ($item['object-type'] === ACTIVITY_OBJ_EVENT) {
                        $response_verbs[] = 'attendyes';
                        $response_verbs[] = 'attendno';
                        $response_verbs[] = 'attendmaybe';
                        if ($conv->isWritable()) {
                                $isevent = true;
-                               $attend = array( t('I will attend'), t('I will not attend'), t('I might attend'));
+                               $attend = array(t('I will attend'), t('I will not attend'), t('I might attend'));
                        }
                }
 
                $responses = get_responses($conv_responses, $response_verbs, $this, $item);
 
                foreach ($response_verbs as $value => $verbs) {
-                       $responses[$verbs]['output']  = ((x($conv_responses[$verbs], $item['uri'])) ? format_like($conv_responses[$verbs][$item['uri']], $conv_responses[$verbs][$item['uri'] . '-l'], $verbs, $item['uri']) : '');
+                       $responses[$verbs]['output'] = x($conv_responses[$verbs], $item['uri']) ? format_like($conv_responses[$verbs][$item['uri']], $conv_responses[$verbs][$item['uri'] . '-l'], $verbs, $item['uri']) : '';
                }
 
                /*
@@ -256,6 +240,8 @@ class Post extends BaseObject
                        $osparkle = ' sparkle';
                }
 
+               $tagger = '';
+
                if ($this->isToplevel()) {
                        if ($conv->getProfileOwner() == local_user()) {
                                $isstarred = (($item['starred']) ? "starred" : "unstarred");
@@ -264,9 +250,9 @@ class Post extends BaseObject
                                        'do'        => t("add star"),
                                        'undo'      => t("remove star"),
                                        'toggle'    => t("toggle star status"),
-                                       'classdo'   => (($item['starred']) ? "hidden" : ""),
-                                       'classundo' => (($item['starred']) ? "" : "hidden"),
-                                       'starred'   =>  t('starred'),
+                                       'classdo'   => $item['starred'] ? "hidden" : "",
+                                       'classundo' => $item['starred'] ? "" : "hidden",
+                                       'starred'   => t('starred'),
                                );
                                $r = dba::select('thread', array('ignored'), array('uid' => $item['uid'], 'iid' => $item['id']), array('limit' => 1));
                                if (DBM::is_result($r)) {
@@ -274,13 +260,12 @@ class Post extends BaseObject
                                                'do'        => t("ignore thread"),
                                                'undo'      => t("unignore thread"),
                                                'toggle'    => t("toggle ignore status"),
-                                               'classdo'   => (($r['ignored']) ? "hidden" : ""),
-                                               'classundo' => (($r['ignored']) ? "" : "hidden"),
-                                               'ignored'   =>  t('ignored'),
+                                               'classdo'   => $r['ignored'] ? "hidden" : "",
+                                               'classundo' => $r['ignored'] ? "" : "hidden",
+                                               'ignored'   => t('ignored'),
                                        );
                                }
 
-                               $tagger = '';
                                if (Feature::isEnabled($conv->getProfileOwner(), 'commtag')) {
                                        $tagger = array(
                                                'add'   => t("add tag"),
@@ -294,11 +279,11 @@ class Post extends BaseObject
 
                if ($conv->isWritable()) {
                        $buttons = array(
-                               'like' => array( t("I like this \x28toggle\x29"), t("like")),
-                               'dislike' => ((Feature::isEnabled($conv->getProfileOwner(), 'dislike')) ? array( t("I don't like this \x28toggle\x29"), t("dislike")) : ''),
+                               'like'    => array(t("I like this \x28toggle\x29"), t("like")),
+                               'dislike' => Feature::isEnabled($conv->getProfileOwner(), 'dislike') ? array(t("I don't like this \x28toggle\x29"), t("dislike")) : '',
                        );
                        if ($shareable) {
-                               $buttons['share'] = array( t('Share this'), t('share'));
+                               $buttons['share'] = array(t('Share this'), t('share'));
                        }
                }
 
@@ -322,10 +307,10 @@ class Post extends BaseObject
                $owner_name_e = $this->getOwnerName();
 
                // Disable features that aren't available in several networks
-
                /// @todo Add NETWORK_DIASPORA when it will pass this information
                if (!in_array($item["item_network"], array(NETWORK_DFRN)) && isset($buttons["dislike"])) {
-                       unset($buttons["dislike"], $isevent);
+                       unset($buttons["dislike"]);
+                       $isevent = false;
                        $tagger = '';
                }
 
@@ -355,8 +340,8 @@ class Post extends BaseObject
                        'guid'            => urlencode($item['guid']),
                        'isevent'         => $isevent,
                        'attend'          => $attend,
-                       'linktitle'       => sprintf(t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])),
-                       'olinktitle'      => sprintf(t('View %s\'s profile @ %s'), htmlentities($this->getOwnerName()), ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])),
+                       'linktitle'       => t('View %s\'s profile @ %s', $profile_name, defaults($item, 'author-link', $item['url'])),
+                       'olinktitle'      => t('View %s\'s profile @ %s', htmlentities($this->getOwnerName()), defaults($item, 'owner-link', $item['url'])),
                        'to'              => t('to'),
                        'via'             => t('via'),
                        'wall'            => t('Wall-to-Wall'),
@@ -369,7 +354,7 @@ class Post extends BaseObject
                        'sparkle'         => $sparkle,
                        'title'           => $title_e,
                        'localtime'       => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
-                       'ago'             => (($item['app']) ? sprintf(t('%s from %s'), relative_date($item['created']), $item['app']) : relative_date($item['created'])),
+                       'ago'             => $item['app'] ? t('%s from %s', relative_date($item['created']), $item['app']) : relative_date($item['created']),
                        'app'             => $item['app'],
                        'created'         => relative_date($item['created']),
                        'lock'            => $lock,
@@ -380,12 +365,12 @@ class Post extends BaseObject
                        'owner_photo'     => $a->remove_baseurl(proxy_url($item['owner-thumb'], false, PROXY_SIZE_THUMB)),
                        'owner_name'      => htmlentities($owner_name_e),
                        'plink'           => get_plink($item),
-                       'edpost'          => ((Feature::isEnabled($conv->getProfileOwner(), 'edit_posts')) ? $edpost : ''),
+                       'edpost'          => Feature::isEnabled($conv->getProfileOwner(), 'edit_posts') ? $edpost : '',
                        'isstarred'       => $isstarred,
-                       'star'            => ((Feature::isEnabled($conv->getProfileOwner(), 'star_posts')) ? $star : ''),
-                       'ignore'          => ((Feature::isEnabled($conv->getProfileOwner(), 'ignore_posts')) ? $ignore : ''),
+                       'star'            => Feature::isEnabled($conv->getProfileOwner(), 'star_posts') ? $star : '',
+                       'ignore'          => Feature::isEnabled($conv->getProfileOwner(), 'ignore_posts') ? $ignore : '',
                        'tagger'          => $tagger,
-                       'filer'           => ((Feature::isEnabled($conv->getProfileOwner(), 'filing')) ? $filer : ''),
+                       'filer'           => Feature::isEnabled($conv->getProfileOwner(), 'filing') ? $filer : '',
                        'drop'            => $drop,
                        'vote'            => $buttons,
                        'like'            => $responses['like']['output'],
@@ -393,7 +378,7 @@ class Post extends BaseObject
                        'responses'       => $responses,
                        'switchcomment'   => t('Comment'),
                        'comment'         => $comment,
-                       'previewing'      => ($conv->isPreview() ? ' preview ' : ''),
+                       'previewing'      => $conv->isPreview() ? ' preview ' : '',
                        'wait'            => t('Please wait'),
                        'thread_level'    => $thread_level,
                        'edited'          => $edited,
@@ -419,7 +404,7 @@ class Post extends BaseObject
                        // Collapse
                        if (($nb_children > 2) || ($thread_level > 1)) {
                                $result['children'][0]['comment_firstcollapsed'] = true;
-                               $result['children'][0]['num_comments'] = sprintf(tt('%d comment', '%d comments', $total_children), $total_children);
+                               $result['children'][0]['num_comments'] = tt('%d comment', '%d comments', $total_children);
                                $result['children'][0]['hidden_comments_num'] = $total_children;
                                $result['children'][0]['hidden_comments_text'] = tt('comment', 'comments', $total_children);
                                $result['children'][0]['hide_text'] = t('show more');
@@ -480,7 +465,7 @@ class Post extends BaseObject
                        logger('[ERROR] Post::addChild : Item has no ID!!', LOGGER_DEBUG);
                        return false;
                } elseif ($this->getChild($item->getId())) {
-                       logger('[WARN] Post::addChild : Item already exists ('. $item->getId() .').', LOGGER_DEBUG);
+                       logger('[WARN] Post::addChild : Item already exists (' . $item->getId() . ').', LOGGER_DEBUG);
                        return false;
                }
                /*
@@ -574,7 +559,7 @@ class Post extends BaseObject
                                return true;
                        }
                }
-               logger('[WARN] Item::removeChild : Item is not a child ('. $id .').', LOGGER_DEBUG);
+               logger('[WARN] Item::removeChild : Item is not a child (' . $id . ').', LOGGER_DEBUG);
                return false;
        }
 
@@ -657,7 +642,7 @@ class Post extends BaseObject
        private function setTemplate($name)
        {
                if (!x($this->available_templates, $name)) {
-                       logger('[ERROR] Item::setTemplate : Template not available ("'. $name .'").', LOGGER_DEBUG);
+                       logger('[ERROR] Item::setTemplate : Template not available ("' . $name . '").', LOGGER_DEBUG);
                        return false;
                }
 
@@ -696,7 +681,6 @@ class Post extends BaseObject
                if ($conv) {
                        // This will allow us to comment on wall-to-wall items owned by our friends
                        // and community forums even if somebody else wrote the post.
-
                        // bug #517 - this fixes for conversation owner
                        if ($conv->getMode() == 'profile' && $conv->getProfileOwner() == local_user()) {
                                return true;
@@ -750,14 +734,13 @@ class Post extends BaseObject
 
                $comment_box = '';
                $conv = $this->getThread();
-               $template = get_markup_template($this->getCommentBoxTemplate());
                $ww = '';
                if (($conv->getMode() === 'network') && $this->isWallToWall()) {
                        $ww = 'ww';
                }
 
                if ($conv->isWritable() && $this->isWritable()) {
-                       $qc = $qcomment =  null;
+                       $qc = $qcomment = null;
 
                        /*
                         * Hmmm, code depending on the presence of a particular plugin?
@@ -768,18 +751,16 @@ class Post extends BaseObject
                                $qcomment = (($qc) ? explode("\n", $qc) : null);
                        }
 
-                       $comment_box = replace_macros(
-                               $template,
-                               array(
+                       $template = get_markup_template($this->getCommentBoxTemplate());
+                       $comment_box = replace_macros($template, array(
                                '$return_path' => $a->query_string,
                                '$threaded'    => $this->isThreaded(),
-                               // '$jsreload'    => (($conv->getMode() === 'display') ? $_SESSION['return_url'] : ''),
                                '$jsreload'    => '',
-                               '$type'        => (($conv->getMode() === 'profile') ? 'wall-comment' : 'net-comment'),
+                               '$type'        => $conv->getMode() === 'profile' ? 'wall-comment' : 'net-comment',
                                '$id'          => $this->getId(),
                                '$parent'      => $this->getId(),
                                '$qcomment'    => $qcomment,
-                               '$profile_uid' =>  $conv->getProfileOwner(),
+                               '$profile_uid' => $conv->getProfileOwner(),
                                '$mylink'      => $a->remove_baseurl($a->contact['url']),
                                '$mytitle'     => t('This is you'),
                                '$myphoto'     => $a->remove_baseurl($a->contact['thumb']),
@@ -796,9 +777,9 @@ class Post extends BaseObject
                                '$preview'     => ((Feature::isEnabled($conv->getProfileOwner(), 'preview')) ? t('Preview') : ''),
                                '$indent'      => $indent,
                                '$sourceapp'   => t($a->sourcename),
-                               '$ww'          => (($conv->getMode() === 'network') ? $ww : ''),
-                               '$rand_num'    => random_digits(12))
-                       );
+                               '$ww'          => $conv->getMode() === 'network' ? $ww : '',
+                               '$rand_num'    => random_digits(12)
+                       ));
                }
 
                return $comment_box;
@@ -839,14 +820,13 @@ class Post extends BaseObject
                                        $alias_linkmatch = (($this->getDataValue('alias')) && link_compare($this->getDataValue('alias'), $this->getDataValue('author-link')));
                                        $owner_namematch = (($this->getDataValue('owner-name')) && $this->getDataValue('owner-name') == $this->getDataValue('author-name'));
 
-                                       if ((! $owner_linkmatch) && (! $alias_linkmatch) && (! $owner_namematch)) {
+                                       if ((!$owner_linkmatch) && (!$alias_linkmatch) && (!$owner_namematch)) {
                                                // The author url doesn't match the owner (typically the contact)
                                                // and also doesn't match the contact alias.
                                                // The name match is a hack to catch several weird cases where URLs are
                                                // all over the park. It can be tricked, but this prevents you from
                                                // seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn
                                                // well that it's the same Bob Smith.
-
                                                // But it could be somebody else with the same name. It just isn't highly likely.
 
 
@@ -854,8 +834,8 @@ class Post extends BaseObject
                                                $this->owner_name = $this->getDataValue('owner-name');
                                                $this->wall_to_wall = true;
                                                // If it is our contact, use a friendly redirect link
-                                               if ((link_compare($this->getDataValue('owner-link'), $this->getDataValue('url')))
-                                                       && ($this->getDataValue('network') === NETWORK_DFRN)
+                                               if ($this->getDataValue('network') === NETWORK_DFRN
+                                                       && link_compare($this->getDataValue('owner-link'), $this->getDataValue('url'))
                                                ) {
                                                        $this->owner_url = $this->getRedirectUrl();
                                                } else {
index 9e46281ec91a73ec6d159be72dc84068c91aaeb1..0c67589ddf9a59ecfb1a85cfae00ead3fcfa874c 100644 (file)
@@ -5,7 +5,7 @@
  */
 namespace Friendica;
 
-use Friendica\Core\Config;
+use Friendica\Content\OEmbed;
 use Friendica\Object\Image;
 use Friendica\Util\XML;
 
@@ -15,7 +15,6 @@ use DOMDocument;
 
 require_once 'include/dba.php';
 require_once "include/network.php";
-require_once "include/oembed.php";
 
 /**
  * @brief Class with methods for extracting certain content from an url
@@ -164,7 +163,7 @@ class ParseUrl
                $body = $data["body"];
 
                if ($do_oembed) {
-                       $oembed_data = oembed_fetch_url($url);
+                       $oembed_data = OEmbed::fetchURL($url);
 
                        if (!in_array($oembed_data->type, array("error", "rich", ""))) {
                                $siteinfo["type"] = $oembed_data->type;
index 070cf598acbed34f3f0146716cd632a9ddb3814c..4d63f2b0bb531ff343d7bc21a666117b5d4ea399 100644 (file)
@@ -8,6 +8,7 @@
  */
 namespace Friendica\Protocol;
 
+use Friendica\Content\OEmbed;
 use Friendica\Core\Config;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
@@ -34,7 +35,6 @@ require_once "include/tags.php";
 require_once "include/files.php";
 require_once "include/event.php";
 require_once "include/text.php";
-require_once "include/oembed.php";
 require_once "include/html2bbcode.php";
 require_once "include/bbcode.php";
 
@@ -464,7 +464,7 @@ class DFRN
                /* get site pubkey. this could be a new installation with no site keys*/
                $pubkey = Config::get('system', 'site_pubkey');
                if (! $pubkey) {
-                       $res = new_keypair(1024);
+                       $res = Crypto::newKeypair(1024);
                        Config::set('system', 'site_prvkey', $res['prvkey']);
                        Config::set('system', 'site_pubkey', $res['pubkey']);
                }
@@ -2503,7 +2503,7 @@ class DFRN
 
                        $item['body'] = html2bb_video($item['body']);
 
-                       $item['body'] = oembed_html2bbcode($item['body']);
+                       $item['body'] = OEmbed::HTML2BBCode($item['body']);
 
                        $config = \HTMLPurifier_Config::createDefault();
                        $config->set('Cache.DefinitionImpl', null);
index 15a30f532e30f433ae7a9ff114a309e2c6675652..59ca2757f367ddfae9235bd954f11060304454a1 100644 (file)
@@ -22,6 +22,7 @@ use Friendica\Model\Group;
 use Friendica\Model\Profile;
 use Friendica\Model\User;
 use Friendica\Network\Probe;
+use Friendica\Util\Crypto;
 use Friendica\Util\XML;
 
 use dba;
@@ -173,7 +174,7 @@ class Diaspora
 
                $key = self::key($handle);
 
-               $verify = rsa_verify($signable_data, $sig, $key);
+               $verify = Crypto::rsaVerify($signable_data, $sig, $key);
                if (!$verify) {
                        logger('Message did not verify. Discarding.');
                        return false;
@@ -273,7 +274,7 @@ class Diaspora
                $author_addr = base64_decode($key_id);
                $key = self::key($author_addr);
 
-               $verify = rsa_verify($signed_data, $signature, $key);
+               $verify = Crypto::rsaVerify($signed_data, $signature, $key);
                if (!$verify) {
                        logger('Message did not verify. Discarding.');
                        http_status_exit(400);
@@ -406,7 +407,7 @@ class Diaspora
                        http_status_exit(400);
                }
 
-               $verify = rsa_verify($signed_data, $signature, $key);
+               $verify = Crypto::rsaVerify($signed_data, $signature, $key);
 
                if (!$verify) {
                        logger('Message did not verify. Discarding.');
@@ -699,7 +700,7 @@ class Diaspora
 
                        $key = self::key($msg["author"]);
 
-                       if (!rsa_verify($signed_data, $parent_author_signature, $key, "sha256")) {
+                       if (!Crypto::rsaVerify($signed_data, $parent_author_signature, $key, "sha256")) {
                                logger("No valid parent author signature for parent author ".$msg["author"]. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$parent_author_signature, LOGGER_DEBUG);
                                return false;
                        }
@@ -709,7 +710,7 @@ class Diaspora
 
                $key = self::key($fields->author);
 
-               if (!rsa_verify($signed_data, $author_signature, $key, "sha256")) {
+               if (!Crypto::rsaVerify($signed_data, $author_signature, $key, "sha256")) {
                        logger("No valid author signature for author ".$fields->author. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$author_signature, LOGGER_DEBUG);
                        return false;
                } else {
@@ -1432,7 +1433,7 @@ class Diaspora
                // Check signature
                $signed_text = 'AccountMigration:'.$old_handle.':'.$new_handle;
                $key = self::key($old_handle);
-               if (!rsa_verify($signed_text, $signature, $key, "sha256")) {
+               if (!Crypto::rsaVerify($signed_text, $signature, $key, "sha256")) {
                        logger('No valid signature for migration.');
                        return false;
                }
@@ -3032,7 +3033,7 @@ class Diaspora
                        $user['uprvkey'] = $user['prvkey'];
                }
 
-               $signature = rsa_sign($signable_data, $user["uprvkey"]);
+               $signature = Crypto::rsaSign($signable_data, $user["uprvkey"]);
                $sig = base64url_encode($signature);
 
                $xmldata = array("me:env" => array("me:data" => $data,
@@ -3088,7 +3089,7 @@ class Diaspora
 
                $signed_text = implode(";", $sigmsg);
 
-               return base64_encode(rsa_sign($signed_text, $owner["uprvkey"], "sha256"));
+               return base64_encode(Crypto::rsaSign($signed_text, $owner["uprvkey"], "sha256"));
        }
 
        /**
@@ -3282,7 +3283,7 @@ class Diaspora
                $profile = self::createProfileData($uid);
 
                $signed_text = 'AccountMigration:'.$old_handle.':'.$profile['author'];
-               $signature = base64_encode(rsa_sign($signed_text, $owner["uprvkey"], "sha256"));
+               $signature = base64_encode(Crypto::rsaSign($signed_text, $owner["uprvkey"], "sha256"));
 
                $message = array("author" => $old_handle,
                                "profile" => $profile,
index 757c525f96b81c1c7a8fe3d264fb69f25325a6ca..3c284b29f51d3e5c5b2dd3d92c3f5d8db7983643 100644 (file)
@@ -1235,12 +1235,13 @@ class OStatus
        /**
         * @brief Adds the header elements to the XML document
         *
-        * @param object $doc   XML document
-        * @param array  $owner Contact data of the poster
+        * @param object $doc    XML document
+        * @param array  $owner  Contact data of the poster
+        * @param string $filter The related feed filter (activity, posts or comments)
         *
         * @return object header root element
         */
-       private static function addHeader($doc, $owner)
+       private static function addHeader($doc, $owner, $filter)
        {
                $a = get_app();
 
@@ -1256,10 +1257,16 @@ class OStatus
                $root->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET);
                $root->setAttribute("xmlns:mastodon", NAMESPACE_MASTODON);
 
-               $attributes = array("uri" => "https://friendi.ca", "version" => FRIENDICA_VERSION."-".DB_UPDATE_VERSION);
+               switch ($filter) {
+                       case 'activity': $title = t('%s\'s timeline', $owner['name']); break;
+                       case 'posts'   : $title = t('%s\'s posts'   , $owner['name']); break;
+                       case 'comments': $title = t('%s\'s comments', $owner['name']); break;
+               }
+
+               $attributes = array("uri" => "https://friendi.ca", "version" => FRIENDICA_VERSION . "-" . DB_UPDATE_VERSION);
                XML::addElement($doc, $root, "generator", FRIENDICA_PLATFORM, $attributes);
-               XML::addElement($doc, $root, "id", System::baseUrl()."/profile/".$owner["nick"]);
-               XML::addElement($doc, $root, "title", sprintf("%s timeline", $owner["name"]));
+               XML::addElement($doc, $root, "id", System::baseUrl() . "/profile/" . $owner["nick"]);
+               XML::addElement($doc, $root, "title", $title);
                XML::addElement($doc, $root, "subtitle", sprintf("Updates from %s on %s", $owner["name"], $a->config["sitename"]));
                XML::addElement($doc, $root, "logo", $owner["photo"]);
                XML::addElement($doc, $root, "updated", datetime_convert("UTC", "UTC", "now", ATOM_TIME));
@@ -1278,17 +1285,17 @@ class OStatus
 
                self::hublinks($doc, $root, $owner["nick"]);
 
-               $attributes = array("href" => System::baseUrl()."/salmon/".$owner["nick"], "rel" => "salmon");
+               $attributes = array("href" => System::baseUrl() . "/salmon/" . $owner["nick"], "rel" => "salmon");
                XML::addElement($doc, $root, "link", "", $attributes);
 
-               $attributes = array("href" => System::baseUrl()."/salmon/".$owner["nick"], "rel" => "http://salmon-protocol.org/ns/salmon-replies");
+               $attributes = array("href" => System::baseUrl() . "/salmon/" . $owner["nick"], "rel" => "http://salmon-protocol.org/ns/salmon-replies");
                XML::addElement($doc, $root, "link", "", $attributes);
 
-               $attributes = array("href" => System::baseUrl()."/salmon/".$owner["nick"], "rel" => "http://salmon-protocol.org/ns/salmon-mention");
+               $attributes = array("href" => System::baseUrl() . "/salmon/" . $owner["nick"], "rel" => "http://salmon-protocol.org/ns/salmon-mention");
                XML::addElement($doc, $root, "link", "", $attributes);
 
-               $attributes = array("href" => System::baseUrl()."/api/statuses/user_timeline/".$owner["nick"].".atom",
-                               "rel" => "self", "type" => "application/atom+xml");
+               $attributes = array("href" => System::baseUrl() . "/api/statuses/user_timeline/" . $owner["nick"] . ".atom",
+                       "rel" => "self", "type" => "application/atom+xml");
                XML::addElement($doc, $root, "link", "", $attributes);
 
                return $root;
@@ -2067,42 +2074,51 @@ class OStatus
        }
 
        /**
+        * Creates the XML feed for a given nickname
+        *
+        * Supported filters:
+        * - activity (default): all the public posts
+        * - posts: all the public top-level posts
+        * - comments: all the public replies
+        *
+        * Updates the provided last_update parameter if the result comes from the
+        * cache or it is empty
+        *
         * @brief Creates the XML feed for a given nickname
         *
-        * @param object  $a           The application class
         * @param string  $owner_nick  Nickname of the feed owner
         * @param string  $last_update Date of the last update
         * @param integer $max_items   Number of maximum items to fetch
+        * @param string  $filter      Feed items filter (activity, posts or comments)
+        * @param boolean $nocache     Wether to bypass caching
         *
         * @return string XML feed
         */
-       public static function feed(App $a, $owner_nick, &$last_update, $max_items = 300)
+       public static function feed($owner_nick, &$last_update, $max_items = 300, $filter = 'activity', $nocache = false)
        {
                $stamp = microtime(true);
 
-               $cachekey = "ostatus:feed:".$owner_nick.":".$last_update;
+               $cachekey = "ostatus:feed:" . $owner_nick . ":" . $filter . ":" . $last_update;
 
                $previous_created = $last_update;
 
                $result = Cache::get($cachekey);
-               if (!is_null($result)) {
-                       logger('Feed duration: '.number_format(microtime(true) - $stamp, 3).' - '.$owner_nick.' - '.$previous_created.' (cached)', LOGGER_DEBUG);
+               if (!$nocache && !is_null($result)) {
+                       logger('Feed duration: ' . number_format(microtime(true) - $stamp, 3) . ' - ' . $owner_nick . ' - ' . $filter . ' - ' . $previous_created . ' (cached)', LOGGER_DEBUG);
                        $last_update = $result['last_update'];
                        return $result['feed'];
                }
 
-               $r = q(
+               $owner = dba::fetch_first(
                        "SELECT `contact`.*, `user`.`nickname`, `user`.`timezone`, `user`.`page-flags`
                                FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`
-                               WHERE `contact`.`self` AND `user`.`nickname` = '%s' LIMIT 1",
-                       dbesc($owner_nick)
+                               WHERE `contact`.`self` AND `user`.`nickname` = ? LIMIT 1",
+                       $owner_nick
                );
-               if (!DBM::is_result($r)) {
+               if (!DBM::is_result($owner)) {
                        return;
                }
 
-               $owner = $r[0];
-
                if (!strlen($last_update)) {
                        $last_update = 'now -30 days';
                }
@@ -2110,23 +2126,40 @@ class OStatus
                $check_date = datetime_convert('UTC', 'UTC', $last_update, 'Y-m-d H:i:s');
                $authorid = Contact::getIdForURL($owner["url"], 0);
 
+               $sql_extra = '';
+               if ($filter === 'posts') {
+                       $sql_extra .= ' AND `item`.`id` = `item`.`parent` ';
+               }
+
+               if ($filter === 'comments') {
+                       $sql_extra .= sprintf(" AND `item`.`object-type` = '%s' ", dbesc(ACTIVITY_OBJ_COMMENT));
+               }
+
                $items = q(
                        "SELECT `item`.*, `item`.`id` AS `item_id` FROM `item` USE INDEX (`uid_contactid_created`)
                                STRAIGHT_JOIN `thread` ON `thread`.`iid` = `item`.`parent`
-                               WHERE `item`.`uid` = %d AND `item`.`contact-id` = %d AND
-                                       `item`.`author-id` = %d AND `item`.`created` > '%s' AND
-                                       NOT `item`.`deleted` AND NOT `item`.`private` AND
-                                       `thread`.`network` IN ('%s', '%s')
+                               WHERE `item`.`uid` = %d
+                               AND `item`.`contact-id` = %d
+                               AND `item`.`author-id` = %d
+                               AND `item`.`created` > '%s'
+                               AND NOT `item`.`deleted`
+                               AND NOT `item`.`private`
+                               AND `thread`.`network` IN ('%s', '%s')
+                               $sql_extra
                                ORDER BY `item`.`created` DESC LIMIT %d",
-                       intval($owner["uid"]), intval($owner["id"]),
-                       intval($authorid), dbesc($check_date),
-                       dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN), intval($max_items)
+                       intval($owner["uid"]),
+                       intval($owner["id"]),
+                       intval($authorid),
+                       dbesc($check_date),
+                       dbesc(NETWORK_OSTATUS),
+                       dbesc(NETWORK_DFRN),
+                       intval($max_items)
                );
 
                $doc = new DOMDocument('1.0', 'utf-8');
                $doc->formatOutput = true;
 
-               $root = self::addHeader($doc, $owner);
+               $root = self::addHeader($doc, $owner, $filter);
 
                foreach ($items as $item) {
                        if (Config::get('system', 'ostatus_debug')) {
@@ -2145,7 +2178,7 @@ class OStatus
                $msg = array('feed' => $feeddata, 'last_update' => $last_update);
                Cache::set($cachekey, $msg, CACHE_QUARTER_HOUR);
 
-               logger('Feed duration: '.number_format(microtime(true) - $stamp, 3).' - '.$owner_nick.' - '.$previous_created, LOGGER_DEBUG);
+               logger('Feed duration: ' . number_format(microtime(true) - $stamp, 3) . ' - ' . $owner_nick . ' - ' . $filter . ' - ' . $previous_created, LOGGER_DEBUG);
 
                return $feeddata;
        }
index d26a3229d11433e8d98df245b3174fd7d2f560b4..2bf86f0e36317714ccfbc110de9efc0d0809207e 100644 (file)
@@ -5,10 +5,9 @@
 namespace Friendica\Protocol;
 
 use Friendica\Network\Probe;
+use Friendica\Util\Crypto;
 use Friendica\Util\XML;
 
-require_once 'include/crypto.php';
-
 /**
  * @brief Salmon Protocol class
  * The Salmon Protocol is a message exchange protocol running over HTTP designed to decentralize commentary
@@ -107,18 +106,18 @@ class Salmon
                $data_type = 'application/atom+xml';
                $encoding  = 'base64url';
                $algorithm = 'RSA-SHA256';
-               $keyhash   = base64url_encode(hash('sha256', salmon_key($owner['spubkey'])), true);
+               $keyhash   = base64url_encode(hash('sha256', self::salmonKey($owner['spubkey'])), true);
 
                $precomputed = '.' . base64url_encode($data_type) . '.' . base64url_encode($encoding) . '.' . base64url_encode($algorithm);
 
                // GNU Social format
-               $signature   = base64url_encode(rsa_sign($data . $precomputed, $owner['sprvkey']));
+               $signature   = base64url_encode(Crypto::rsaSign($data . $precomputed, $owner['sprvkey']));
 
                // Compliant format
-               $signature2  = base64url_encode(rsa_sign(str_replace('=', '', $data . $precomputed), $owner['sprvkey']));
+               $signature2  = base64url_encode(Crypto::rsaSign(str_replace('=', '', $data . $precomputed), $owner['sprvkey']));
 
                // Old Status.net format
-               $signature3  = base64url_encode(rsa_sign($data, $owner['sprvkey']));
+               $signature3  = base64url_encode(Crypto::rsaSign($data, $owner['sprvkey']));
 
                // At first try the non compliant method that works for GNU Social
                $xmldata = array("me:env" => array("me:data" => $data,
@@ -201,4 +200,14 @@ class Salmon
 
                return (($return_code >= 200) && ($return_code < 300)) ? 0 : 1;
        }
+
+       /**
+        * @param string $pubkey public key
+        * @return string
+        */
+       public static function salmonKey($pubkey)
+       {
+               Crypto::pemToMe($pubkey, $m, $e);
+               return 'RSA' . '.' . base64url_encode($m, true) . '.' . base64url_encode($e, true);
+       }
 }
diff --git a/src/Util/Crypto.php b/src/Util/Crypto.php
new file mode 100644 (file)
index 0000000..adee8cd
--- /dev/null
@@ -0,0 +1,252 @@
+<?php
+/**
+ * @file src/Util/Crypto.php
+ */
+namespace Friendica\Util;
+
+use Friendica\Core\Config;
+use ASN_BASE;
+use ASNValue;
+
+require_once 'library/ASNValue.class.php';
+require_once 'library/asn1.php';
+
+/**
+ * @brief Crypto class
+ */
+class Crypto
+{
+       // supported algorithms are 'sha256', 'sha1'
+       /**
+        * @param string $data data
+        * @param string $key  key
+        * @param string $alg  algorithm
+        * @return string
+        */
+       public static function rsaSign($data, $key, $alg = 'sha256')
+       {
+               openssl_sign($data, $sig, $key, (($alg == 'sha1') ? OPENSSL_ALGO_SHA1 : $alg));
+               return $sig;
+       }
+
+       /**
+        * @param string $data data
+        * @param string $sig  signature
+        * @param string $key  key
+        * @param string $alg  algorithm
+        * @return boolean
+        */
+       public static function rsaVerify($data, $sig, $key, $alg = 'sha256')
+       {
+               return openssl_verify($data, $sig, $key, (($alg == 'sha1') ? OPENSSL_ALGO_SHA1 : $alg));
+       }
+
+       /**
+        * @param string $Der     der formatted string
+        * @param string $Private key type optional, default false
+        * @return string
+        */
+       private static function DerToPem($Der, $Private = false)
+       {
+               //Encode:
+               $Der = base64_encode($Der);
+               //Split lines:
+               $lines = str_split($Der, 65);
+               $body = implode("\n", $lines);
+               //Get title:
+               $title = $Private ? 'RSA PRIVATE KEY' : 'PUBLIC KEY';
+               //Add wrapping:
+               $result = "-----BEGIN {$title}-----\n";
+               $result .= $body . "\n";
+               $result .= "-----END {$title}-----\n";
+
+               return $result;
+       }
+
+       /**
+        * @param string $Der der formatted string
+        * @return string
+        */
+       private static function DerToRsa($Der)
+       {
+               //Encode:
+               $Der = base64_encode($Der);
+               //Split lines:
+               $lines = str_split($Der, 64);
+               $body = implode("\n", $lines);
+               //Get title:
+               $title = 'RSA PUBLIC KEY';
+               //Add wrapping:
+               $result = "-----BEGIN {$title}-----\n";
+               $result .= $body . "\n";
+               $result .= "-----END {$title}-----\n";
+
+               return $result;
+       }
+
+       /**
+        * @param string $Modulus        modulo
+        * @param string $PublicExponent exponent
+        * @return string
+        */
+       private static function pkcs8Encode($Modulus, $PublicExponent)
+       {
+               //Encode key sequence
+               $modulus = new ASNValue(ASNValue::TAG_INTEGER);
+               $modulus->SetIntBuffer($Modulus);
+               $publicExponent = new ASNValue(ASNValue::TAG_INTEGER);
+               $publicExponent->SetIntBuffer($PublicExponent);
+               $keySequenceItems = array($modulus, $publicExponent);
+               $keySequence = new ASNValue(ASNValue::TAG_SEQUENCE);
+               $keySequence->SetSequence($keySequenceItems);
+               //Encode bit string
+               $bitStringValue = $keySequence->Encode();
+               $bitStringValue = chr(0x00) . $bitStringValue; //Add unused bits byte
+               $bitString = new ASNValue(ASNValue::TAG_BITSTRING);
+               $bitString->Value = $bitStringValue;
+               //Encode body
+               $bodyValue = "\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01\x05\x00" . $bitString->Encode();
+               $body = new ASNValue(ASNValue::TAG_SEQUENCE);
+               $body->Value = $bodyValue;
+               //Get DER encoded public key:
+               $PublicDER = $body->Encode();
+               return $PublicDER;
+       }
+
+       /**
+        * @param string $Modulus        modulo
+        * @param string $PublicExponent exponent
+        * @return string
+        */
+       private static function pkcs1Encode($Modulus, $PublicExponent)
+       {
+               //Encode key sequence
+               $modulus = new ASNValue(ASNValue::TAG_INTEGER);
+               $modulus->SetIntBuffer($Modulus);
+               $publicExponent = new ASNValue(ASNValue::TAG_INTEGER);
+               $publicExponent->SetIntBuffer($PublicExponent);
+               $keySequenceItems = array($modulus, $publicExponent);
+               $keySequence = new ASNValue(ASNValue::TAG_SEQUENCE);
+               $keySequence->SetSequence($keySequenceItems);
+               //Encode bit string
+               $bitStringValue = $keySequence->Encode();
+               return $bitStringValue;
+       }
+
+       /**
+        * @param string $m modulo
+        * @param string $e exponent
+        * @return string
+        */
+       public static function meToPem($m, $e)
+       {
+               $der = self::pkcs8Encode($m, $e);
+               $key = self::DerToPem($der, false);
+               return $key;
+       }
+
+       /**
+        * @param string $key key
+        * @param string $m   modulo reference
+        * @param object $e   exponent reference
+        * @return void
+        */
+       private static function pubRsaToMe($key, &$m, &$e)
+       {
+               $lines = explode("\n", $key);
+               unset($lines[0]);
+               unset($lines[count($lines)]);
+               $x = base64_decode(implode('', $lines));
+
+               $r = ASN_BASE::parseASNString($x);
+
+               $m = base64url_decode($r[0]->asnData[0]->asnData);
+               $e = base64url_decode($r[0]->asnData[1]->asnData);
+       }
+
+       /**
+        * @param string $key key
+        * @return string
+        */
+       public static function rsaToPem($key)
+       {
+               self::pubRsaToMe($key, $m, $e);
+               return self::meToPem($m, $e);
+       }
+
+       /**
+        * @param string $key key
+        * @return string
+        */
+       private static function pemToRsa($key)
+       {
+               self::pemToMe($key, $m, $e);
+               return self::meToRsa($m, $e);
+       }
+
+       /**
+        * @param string $key key
+        * @param string $m   modulo reference
+        * @param string $e   exponent reference
+        * @return void
+        */
+       public static function pemToMe($key, &$m, &$e)
+       {
+               $lines = explode("\n", $key);
+               unset($lines[0]);
+               unset($lines[count($lines)]);
+               $x = base64_decode(implode('', $lines));
+
+               $r = ASN_BASE::parseASNString($x);
+
+               $m = base64url_decode($r[0]->asnData[1]->asnData[0]->asnData[0]->asnData);
+               $e = base64url_decode($r[0]->asnData[1]->asnData[0]->asnData[1]->asnData);
+       }
+
+       /**
+        * @param string $m modulo
+        * @param string $e exponent
+        * @return string
+        */
+       private static function meToRsa($m, $e)
+       {
+               $der = self::pkcs1Encode($m, $e);
+               $key = self::DerToRsa($der);
+               return $key;
+       }
+
+       /**
+        * @param integer $bits number of bits
+        * @return mixed
+        */
+       public static function newKeypair($bits)
+       {
+               $openssl_options = array(
+                       'digest_alg'       => 'sha1',
+                       'private_key_bits' => $bits,
+                       'encrypt_key'      => false
+               );
+
+               $conf = Config::get('system', 'openssl_conf_file');
+               if ($conf) {
+                       $openssl_options['config'] = $conf;
+               }
+               $result = openssl_pkey_new($openssl_options);
+
+               if (empty($result)) {
+                       logger('new_keypair: failed');
+                       return false;
+               }
+
+               // Get private key
+               $response = array('prvkey' => '', 'pubkey' => '');
+
+               openssl_pkey_export($result, $response['prvkey']);
+
+               // Get public key
+               $pkey = openssl_pkey_get_details($result);
+               $response['pubkey'] = $pkey["key"];
+
+               return $response;
+       }
+}
index e2ecedbdf0f0189c4b25a432405c4e5c9f32fca6..3af206e80d86ae2335013759d85a740877cccc22 100644 (file)
@@ -52,7 +52,7 @@ class PubSubPublish {
                logger("Generate feed of user ".$rr['nickname']." to ".$rr['callback_url']." - last updated ".$rr['last_update'], LOGGER_DEBUG);
 
                $last_update = $rr['last_update'];
-               $params = OStatus::feed($a, $rr['nickname'], $last_update);
+               $params = OStatus::feed($rr['nickname'], $last_update);
 
                if (!$params) {
                        return;
index d3df6321abf85eb29fec6debfbaa0258e8ba6942..ee78f842c0559ffa60dd7ff53a989e4ed66ee563 100644 (file)
@@ -5,7 +5,6 @@
                        <img src="{{$avatar}}" height="32" width="32">
                        </a>
                {{/if}}
-               {{*<span><a href="{{$profile}}" target="_blank" class="shared-wall-item-name">{{$author}}</a> wrote the following <a href="{{$link}}" target="_blank">post</a>{{$reldate}}:</span>*}}
                <div><a href="{{$profile}}" target="_blank" class="shared-wall-item-name"><span class="shared-author">{{$author}}</span></a></div>
                <div class="shared-wall-item-ago"><small><a href="{{$link}}" target="_blank"><span class="shared-time">{{$posted}}</a></a></small></div>
        </div>
index 04379b244ee14316f6bf127e4b0404ee02061a44..a7b8c8a9d8fe56eb3aa754b323cf4a40ebed76da 100644 (file)
@@ -8,7 +8,7 @@ $schemecss = "";
 $schemecssfile = false;
 $scheme_modified = 0;
 
-if (! $a->install) {
+if ($a->module !== 'install') {
        // Get the UID of the profile owner.
        $uid = get_theme_uid();
        if ($uid) {
@@ -57,7 +57,7 @@ if (! $a->install) {
 // Setting $schema to '' wasn't working for some reason, so we'll check it's
 // not --- like the mobile theme does instead.
 // Allow layouts to over-ride the schema.
-if ($_REQUEST['schema']) {
+if (x($_REQUEST, 'schema')) {
        $schema = $_REQUEST['schema'];
 }
 
@@ -103,7 +103,7 @@ $contentbg_transp = ((isset($contentbg_transp) && $contentbg_transp != "") ? $co
 // Calculate some colors in dependance of existing colors.
 // Some colors are calculated to don't have too many selection
 // fields in the theme settings.
-if (! $menu_background_hover_color) {
+if (!isset($menu_background_hover_color)) {
        $mbhc = new Color($nav_bg);
        $mcolor = $mbhc->getHex();
 
@@ -115,7 +115,7 @@ if (! $menu_background_hover_color) {
                $menu_background_hover_color = '#' . $mbhc->lighten(5);
        }
 }
-if (! $nav_icon_hover_color) {
+if (!isset($nav_icon_hover_color)) {
        $nihc = new Color($nav_bg);
 
        if ($nihc->isLight()) {
@@ -124,7 +124,7 @@ if (! $nav_icon_hover_color) {
                $nav_icon_hover_color = '#' . $nihc->lighten(10);
        }
 }
-if (! $link_hover_color) {
+if (!isset($link_hover_color)) {
        $lhc = new Color($link_color);
        $lcolor = $lhc->getHex();
 
@@ -137,6 +137,9 @@ if (! $link_hover_color) {
 }
 
 // Convert $bg_image_options into css.
+if (!isset($bg_image_option)) {
+       $bg_image_option = null;
+}
 switch ($bg_image_option) {
        case "stretch":
                $background_size_img = "100%";
index 7d6fbef65427e45941f9faab8a172faa8cdb9b62..d95d1a4114315d7ae45fa1217cf45c4ebbf10457 100644 (file)
@@ -47,8 +47,10 @@ Some parts of this template will be moved by js to other places (see theme.js) -
                </form>
        </div>
        {{* This form is inserted as experiment to move the search-save button to the second navbar with js *}}
+       {{if $savedsearch}}
        <form id="search-save-form" action="{{$action_url}}" method="get" >
                <input type="hidden" name="search" value="{{$s}}" />
                <button class="btn btn-primary btn-sm btn-main pull-right" type="submit" name="save" id="search-save" value="{{$save_label}}"><i class="fa fa-floppy-o fa-2x" aria-hidden="true"></i></button>
        </form>
+       {{/if}}
 </div>
index 8b1713026970604ccd1aad323b92b777bd321626..c529b1f98efdf2fad5b6e27d437a6e71a92f3a2d 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /*
  * Name: frio
  * Description: Bootstrap V3 theme. The theme is currently under construction, so it is far from finished. For further information have a look at the <a href="https://github.com/friendica/friendica/tree/develop/view/theme/frio/README.md">ReadMe</a>.
@@ -18,8 +19,8 @@ $frio = "view/theme/frio";
 
 global $frio;
 
-function frio_init(App $a) {
-
+function frio_init(App $a)
+{
        // disable the events module link in the profile tab
        $a->theme_events_in_profile = false;
 
@@ -35,19 +36,21 @@ function frio_init(App $a) {
 
        // if the device is a mobile device set js is_mobile
        // variable so the js scripts can use this information
-       if($a->is_mobile || $a->is_tablet) {
+       if ($a->is_mobile || $a->is_tablet) {
                $a->page["htmlhead"] .= <<< EOT
                        <script type="text/javascript">
                                var is_mobile = 1;
                        </script>
 EOT;
-}
+       }
 
-       if ($style == "")
+       if ($style == "") {
                $style = Config::get('frio', 'style');
+       }
 }
 
-function frio_install() {
+function frio_install()
+{
        register_hook('prepare_body_final', 'view/theme/frio/theme.php', 'frio_item_photo_links');
        register_hook('item_photo_menu', 'view/theme/frio/theme.php', 'frio_item_photo_menu');
        register_hook('contact_photo_menu', 'view/theme/frio/theme.php', 'frio_contact_photo_menu');
@@ -58,7 +61,8 @@ function frio_install() {
        logger("installed theme frio");
 }
 
-function frio_uninstall() {
+function frio_uninstall()
+{
        unregister_hook('prepare_body_final', 'view/theme/frio/theme.php', 'frio_item_photo_links');
        unregister_hook('item_photo_menu', 'view/theme/frio/theme.php', 'frio_item_photo_menu');
        unregister_hook('contact_photo_menu', 'view/theme/frio/theme.php', 'frio_contact_photo_menu');
@@ -68,6 +72,7 @@ function frio_uninstall() {
 
        logger("uninstalled theme frio");
 }
+
 /**
  * @brief Replace friendica photo links hook
  *
@@ -86,19 +91,19 @@ function frio_item_photo_links(App $a, &$body_info)
        $occurence = 1;
        $p = bb_find_open_close($body_info['html'], "<a", ">");
 
-       while($p !== false && ($occurence++ < 500)) {
+       while ($p !== false && ($occurence++ < 500)) {
                $link = substr($body_info['html'], $p['start'], $p['end'] - $p['start']);
                $matches = array();
 
                preg_match("/\/photos\/[\w]+\/image\/([\w]+)/", $link, $matches);
-               if($matches) {
+               if ($matches) {
                        // Replace the link for the photo's page with a direct link to the photo itself
                        $newlink = str_replace($matches[0], "/photo/{$matches[1]}", $link);
 
                        // Add a "quiet" parameter to any redir links to prevent the "XX welcomes YY" info boxes
                        $newlink = preg_replace("/href=\"([^\"]+)\/redir\/([^\"]+)&url=([^\"]+)\"/", 'href="$1/redir/$2&quiet=1&url=$3"', $newlink);
 
-                        // Having any arguments to the link for Colorbox causes it to fetch base64 code instead of the image
+                       // Having any arguments to the link for Colorbox causes it to fetch base64 code instead of the image
                        $newlink = preg_replace("/\/[?&]zrl=([^&\"]+)/", '', $newlink);
 
                        $body_info['html'] = str_replace($link, $newlink, $body_info['html']);
@@ -118,15 +123,14 @@ function frio_item_photo_links(App $a, &$body_info)
  * @param App $a Unused but required by the hook definition
  * @param array $arr Contains item data and the original photo_menu
  */
-function frio_item_photo_menu(App $a, &$arr) {
-
-       foreach($arr["menu"] as $k =>$v) {
-               if(strpos($v,'poke/?f=&c=') === 0 || strpos($v,'message/new/') === 0) {
+function frio_item_photo_menu(App $a, &$arr)
+{
+       foreach ($arr["menu"] as $k => $v) {
+               if (strpos($v, 'poke/?f=&c=') === 0 || strpos($v, 'message/new/') === 0) {
                        $v = "javascript:addToModal('" . $v . "'); return false;";
                        $arr["menu"][$k] = $v;
                }
        }
-       $args = array('item' => $item, 'menu' => $menu);
 }
 
 /**
@@ -141,12 +145,8 @@ function frio_item_photo_menu(App $a, &$arr) {
  * @param App $a The app data
  * @param array $args Contains contact data and the original photo_menu
  */
-function frio_contact_photo_menu(App $a, &$args){
-
-       $pokelink = "";
-       $pmlink = "";
-       $cid = "";
-
+function frio_contact_photo_menu(App $a, &$args)
+{
        $cid = $args["contact"]["id"];
        $pokelink = $args["menu"]["poke"][1];
        $pmlink = $args["menu"]["pm"][1];
@@ -160,8 +160,8 @@ function frio_contact_photo_menu(App $a, &$args){
        // The value for opening in a new tab is e.g. when
        // $args["menu"]["status"][2] is true. If the value of the [2] key is true
        // and if it's a friendica contact we set it to false
-       foreach($args["menu"] as $k =>$v) {
-               if($k === "status" || $k === "profile" || $k === "photos") {
+       foreach ($args["menu"] as $k => $v) {
+               if ($k === "status" || $k === "profile" || $k === "photos") {
                        $v[2] = (($args["contact"]["network"] === "dfrn") ? false : true);
                        $args["menu"][$k][2] = $v[2];
                }
@@ -170,13 +170,13 @@ function frio_contact_photo_menu(App $a, &$args){
        // Add to pm and poke links a new key with the value 'modal'.
        // Later we can make conditions in the corresponing templates (e.g.
        // contact_template.tpl)
-       if(strpos($pokelink,'poke/?f=&c='. $cid) !== false)
+       if (strpos($pokelink, 'poke/?f=&c=' . $cid) !== false) {
                $args["menu"]["poke"][3] = "modal";
+       }
 
-       if(strpos($pmlink,'message/new/' . $cid) !== false)
+       if (strpos($pmlink, 'message/new/' . $cid) !== false) {
                $args["menu"]["pm"][3] = "modal";
-
-       $args = array('contact' => $contact, 'menu' => &$menu);
+       }
 }
 
 /**
@@ -193,11 +193,13 @@ function frio_contact_photo_menu(App $a, &$args){
  * @param App $a The App class
  * @param array $nav The original nav menu
  */
-function frio_remote_nav($a,&$nav) {
+function frio_remote_nav($a, &$nav)
+{
        // get the homelink from $_XSESSION
        $homelink = get_my_url();
-       if(! $homelink)
-               $homelink = ((x($_SESSION,'visitor_home')) ? $_SESSION['visitor_home'] : '');
+       if (!$homelink) {
+               $homelink = defaults($_SESSION, 'visitor_home', '');
+       }
 
        // split up the url in it's parts (protocol,domain/directory, /profile/, nickname
        // I'm not familiar with regex, so someone might find a better solutionen
@@ -213,7 +215,7 @@ function frio_remote_nav($a,&$nav) {
        // And construct a webbie (e.g. mickey@friendica.domain.com for the search in gcontact
        // We use the webbie for search in gcontact because we don't know if gcontact table stores
        // the right value if its http or https protocol
-       if(count($url_parts)) {
+       if (count($url_parts)) {
                $server_url = $url_parts[1] . $url_parts[2];
                $webbie = $url_parts[4] . '@' . $url_parts[2];
        }
@@ -228,11 +230,9 @@ function frio_remote_nav($a,&$nav) {
 
                $r[0]['photo'] = (DBM::is_result($r) ? $a->remove_baseurl($r[0]['micro']) : "images/person-48.jpg");
                $r[0]['name'] = $a->user['username'];
-
        } elseif (!local_user() && remote_user()) {
                $r = q("SELECT `name`, `nick`, `micro` AS `photo` FROM `contact` WHERE `id` = %d", intval(remote_user()));
                $nav['remote'] = t("Guest");
-
        } elseif (get_my_url()) {
                $r = q("SELECT `name`, `nick`, `photo` FROM `gcontact`
                                WHERE `addr` = '%s' AND `network` = 'dfrn'",
@@ -243,18 +243,18 @@ function frio_remote_nav($a,&$nav) {
        }
 
        if (DBM::is_result($r)) {
-                       $nav['userinfo'] = array(
-                               'icon' => (DBM::is_result($r) ? $r[0]['photo'] : "images/person-48.jpg"),
-                               'name' => $r[0]['name'],
-                       );
-               }
+               $nav['userinfo'] = array(
+                       'icon' => (DBM::is_result($r) ? $r[0]['photo'] : "images/person-48.jpg"),
+                       'name' => $r[0]['name'],
+               );
+       }
 
        if (!local_user() && !empty($server_url)) {
                $nav['logout'] = Array($server_url . '/logout', t('Logout'), "", t('End this session'));
 
                // user menu
                $nav['usermenu'][] = Array($server_url . '/profile/' . $a->user['nickname'], t('Status'), "", t('Your posts and conversations'));
-               $nav['usermenu'][] = Array($server_url . '/profile/' . $a->user['nickname']. '?tab=profile', t('Profile'), "", t('Your profile page'));
+               $nav['usermenu'][] = Array($server_url . '/profile/' . $a->user['nickname'] . '?tab=profile', t('Profile'), "", t('Your profile page'));
                $nav['usermenu'][] = Array($server_url . '/photos/' . $a->user['nickname'], t('Photos'), "", t('Your photos'));
                $nav['usermenu'][] = Array($server_url . '/videos/' . $a->user['nickname'], t('Videos'), "", t('Your videos'));
                $nav['usermenu'][] = Array($server_url . '/events/', t('Events'), "", t('Your events'));
@@ -263,11 +263,12 @@ function frio_remote_nav($a,&$nav) {
                $nav['network'] = array($server_url . '/network', t('Network'), "", t('Conversations from your friends'));
                $nav['events'] = Array($server_url . '/events', t('Events'), "", t('Events and Calendar'));
                $nav['messages'] = array($server_url . '/message', t('Messages'), "", t('Private mail'));
-               $nav['settings'] = array($server_url . '/settings', t('Settings'),"", t('Account settings'));
-               $nav['contacts'] = array($server_url . '/contacts', t('Contacts'),"", t('Manage/edit friends and contacts'));
+               $nav['settings'] = array($server_url . '/settings', t('Settings'), "", t('Account settings'));
+               $nav['contacts'] = array($server_url . '/contacts', t('Contacts'), "", t('Manage/edit friends and contacts'));
                $nav['sitename'] = $a->config['sitename'];
        }
 }
+
 /**
  * @brief: Search for contacts
  *
@@ -281,10 +282,11 @@ function frio_remote_nav($a,&$nav) {
  * @param App $a The app data @TODO Unused
  * @param array $results The array with the originals from acl_lookup()
  */
-function frio_acl_lookup(App $a, &$results) {
-       require_once("mod/contacts.php");
+function frio_acl_lookup(App $a, &$results)
+{
+       require_once 'mod/contacts.php';
 
-       $nets = ((x($_GET,"nets")) ? notags(trim($_GET["nets"])) : "");
+       $nets = x($_GET, "nets") ? notags(trim($_GET["nets"])) : "";
 
        // we introduce a new search type, r should do the same query like it's
        // done in /mod/contacts for connections
@@ -295,17 +297,17 @@ function frio_acl_lookup(App $a, &$results) {
                        $search_txt = dbesc(protect_sprintf(preg_quote($search)));
                        $searching = true;
                }
-               $sql_extra .= (($searching) ? " AND (`attag` LIKE '%%".dbesc($search_txt)."%%' OR `name` LIKE '%%".dbesc($search_txt)."%%' OR `nick` LIKE '%%".dbesc($search_txt)."%%') " : "");
+               $sql_extra = '';
+               if ($searching) {
+                       $sql_extra .= " AND (`attag` LIKE '%%" . dbesc($search_txt) . "%%' OR `name` LIKE '%%" . dbesc($search_txt) . "%%' OR `nick` LIKE '%%" . dbesc($search_txt) . "%%') ";
+               }
 
                if ($nets) {
                        $sql_extra .= sprintf(" AND network = '%s' ", dbesc($nets));
                }
 
-               $sql_extra2 = ((($sort_type > 0) && ($sort_type <= CONTACT_IS_FRIEND)) ? sprintf(" AND `rel` = %d ",intval($sort_type)) : '');
-
-
                $r = q("SELECT COUNT(*) AS `total` FROM `contact`
-                       WHERE `uid` = %d AND NOT `self` AND NOT `pending` $sql_extra $sql_extra2 ",
+                       WHERE `uid` = %d AND NOT `self` AND NOT `pending` $sql_extra ",
                        intval($_SESSION['uid']));
                if (DBM::is_result($r)) {
                        $total = $r[0]["total"];
@@ -313,7 +315,7 @@ function frio_acl_lookup(App $a, &$results) {
 
                $sql_extra3 = unavailable_networks();
 
-               $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `self` AND NOT `pending` $sql_extra $sql_extra2 $sql_extra3 ORDER BY `name` ASC LIMIT 100 ",
+               $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `self` AND NOT `pending` $sql_extra $sql_extra3 ORDER BY `name` ASC LIMIT 100 ",
                        intval($_SESSION['uid'])
                );
 
@@ -332,19 +334,19 @@ function frio_acl_lookup(App $a, &$results) {
 
 /**
  * @brief Manipulate the data of the item
- * 
+ *
  * At the moment we use this function to add some own stuff to the item menu
- * 
+ *
  * @param App $a App $a The app data
  * @param array $arr Array with the item and the item actions<br>
  *     'item' => Array with item data<br>
  *     'output' => Array with item actions<br>
  */
-function frio_display_item(App $a,&$arr) {
-
+function frio_display_item(App $a, &$arr)
+{
        // Add subthread to the item menu
        $subthread = array();
-       if ((local_user()) && local_user() == $arr['item']['uid'] && $arr['item']['parent'] == $arr['item']['id'] && (! $arr['item']['self'])) {
+       if (local_user() == $arr['item']['uid'] && $arr['item']['parent'] == $arr['item']['id'] && !$arr['item']['self']) {
                $subthread = array(
                        'menu'   => 'follow_thread',
                        'title'  => t('Follow Thread'),