]> git.mxchange.org Git - friendica.git/blobdiff - mod/item.php
Merge remote-tracking branch 'upstream/develop' into 1608-performance
[friendica.git] / mod / item.php
index 14c8203c98e26f30d1e461f509c5954424b721b6..6f5f8fc1eab2e144f2c009489f834241b946655a 100644 (file)
@@ -25,6 +25,7 @@ require_once('include/text.php');
 require_once('include/items.php');
 require_once('include/Scrape.php');
 require_once('include/diaspora.php');
+require_once('include/Contact.php');
 
 function item_post(&$a) {
 
@@ -505,10 +506,11 @@ function item_post(&$a) {
                }
        }
 
-       // embedded bookmark in post? set bookmark flag
+       // embedded bookmark or attachment in post? set bookmark flag
 
        $bookmark = 0;
-       if(preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$body,$match,PREG_SET_ORDER)) {
+       $data = get_attachment_data($body);
+        if (preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism", $body, $match, PREG_SET_ORDER) OR isset($data["type"])) {
                $objecttype = ACTIVITY_OBJ_BOOKMARK;
                $bookmark = 1;
        }
@@ -675,9 +677,11 @@ function item_post(&$a) {
        $datarray['owner-name']    = $contact_record['name'];
        $datarray['owner-link']    = $contact_record['url'];
        $datarray['owner-avatar']  = $contact_record['thumb'];
+       $datarray["owner-id"]      = get_contact($datarray["owner-link"], 0);
        $datarray['author-name']   = $author['name'];
        $datarray['author-link']   = $author['url'];
        $datarray['author-avatar'] = $author['thumb'];
+       $datarray["author-id"]     = get_contact($datarray["author-link"], 0);
        $datarray['created']       = datetime_convert();
        $datarray['edited']        = datetime_convert();
        $datarray['commented']     = datetime_convert();
@@ -710,6 +714,7 @@ function item_post(&$a) {
        $datarray['moderated']     = $allow_moderated;
        $datarray['gcontact-id']   = get_gcontact_id(array("url" => $datarray['author-link'], "network" => $datarray['network'],
                                                        "photo" => $datarray['author-avatar'], "name" => $datarray['author-name']));
+
        /**
         * These fields are for the convenience of plugins...
         * 'self' if true indicates the owner is posting on their own wall
@@ -789,10 +794,24 @@ function item_post(&$a) {
                $post_id = 0;
 
 
-       $r = q("INSERT INTO `item` (`guid`, `extid`, `uid`,`type`,`wall`,`gravity`, `network`, `contact-id`,`owner-name`,`owner-link`,`owner-avatar`, `author-name`, `author-link`, `author-avatar`,
-               `created`, `edited`, `commented`, `received`, `changed`, `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`, `tag`, `inform`, `verb`, `object-type`, `postopts`,
-               `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach`, `bookmark`,`origin`, `moderated`, `file`, `rendered-html`, `rendered-hash`)
-               VALUES( '%s', '%s', %d, '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, '%s', '%s', '%s')",
+       $r = q("INSERT INTO `item` (`guid`, `extid`, `uid`,`type`,`wall`,`gravity`, `network`, `contact-id`,
+                                       `owner-name`,`owner-link`,`owner-avatar`, `owner-id`,
+                                       `author-name`, `author-link`, `author-avatar`, `author-id`,
+                                       `created`, `edited`, `commented`, `received`, `changed`,
+                                       `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`,
+                                       `tag`, `inform`, `verb`, `object-type`, `postopts`,
+                                       `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`,
+                                       `pubmail`, `attach`, `bookmark`,`origin`, `moderated`, `file`,
+                                       `rendered-html`, `rendered-hash`)
+               VALUES('%s', '%s', %d, '%s', %d, %d, '%s', %d,
+                       '%s', '%s', '%s', %d,
+                       '%s', '%s', '%s', %d,
+                       '%s', '%s', '%s', '%s', '%s',
+                       '%s', '%s', '%s', '%s', '%s', '%s', '%s',
+                       '%s', '%s', '%s', '%s', '%s',
+                       '%s', '%s', '%s', '%s', %d,
+                       %d, '%s', %d, %d, %d, '%s',
+                       '%s', '%s')",
                dbesc($datarray['guid']),
                dbesc($datarray['extid']),
                intval($datarray['uid']),
@@ -804,9 +823,11 @@ function item_post(&$a) {
                dbesc($datarray['owner-name']),
                dbesc($datarray['owner-link']),
                dbesc($datarray['owner-avatar']),
+               intval($datarray['owner-id']),
                dbesc($datarray['author-name']),
                dbesc($datarray['author-link']),
                dbesc($datarray['author-avatar']),
+               intval($datarray['author-id']),
                dbesc($datarray['created']),
                dbesc($datarray['edited']),
                dbesc($datarray['commented']),
@@ -1065,10 +1086,11 @@ function item_content(&$a) {
  * the appropiate link.
  *
  * @param unknown_type $body the text to replace the tag in
- * @param unknown_type $inform a comma-seperated string containing everybody to inform
- * @param unknown_type $str_tags string to add the tag to
- * @param unknown_type $profile_uid
- * @param unknown_type $tag the tag to replace
+ * @param string $inform a comma-seperated string containing everybody to inform
+ * @param string $str_tags string to add the tag to
+ * @param integer $profile_uid
+ * @param string $tag the tag to replace
+ * @param string $network The network of the post
  *
  * @return boolean true if replaced, false if not replaced
  */
@@ -1093,7 +1115,17 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                        // Checking for the alias that is used for OStatus
                        $pattern = "/@\[url\=(.*?)\](.*?)\[\/url\]/ism";
                        if (preg_match($pattern, $tag, $matches)) {
-                               $data = probe_url($matches[1]);
+
+                               $r = q("SELECT `alias`, `name` FROM `contact` WHERE `nurl` = '%s' AND `alias` != '' AND `uid` = 0",
+                                       normalise_link($matches[1]));
+                               if (!$r)
+                                       $r = q("SELECT `alias`, `name` FROM `gcontact` WHERE `nurl` = '%s' AND `alias` != ''",
+                                               normalise_link($matches[1]));
+                               if ($r)
+                                       $data = $r[0];
+                               else
+                                       $data = probe_url($matches[1]);
+
                                if ($data["alias"] != "") {
                                        $newtag = '@[url='.$data["alias"].']'.$data["name"].'[/url]';
                                        if(!stristr($str_tags,$newtag)) {
@@ -1120,33 +1152,47 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                        // Is it in format @user@domain.tld or @http://domain.tld/...?
 
                        // First check the contact table for the address
-                       $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `contact` WHERE `addr` = '%s' AND `uid` = %d LIMIT 1",
+                       $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `contact`
+                               WHERE `addr` = '%s' AND `uid` = %d AND
+                                       (`network` != '%s' OR (`notify` != '' AND `alias` != ''))
+                               LIMIT 1",
                                        dbesc($name),
-                                       intval($profile_uid)
+                                       intval($profile_uid),
+                                       dbesc(NETWORK_OSTATUS)
                        );
 
                        // Then check in the contact table for the url
                        if (!$r)
-                               $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `notify`, `network` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1",
+                               $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `contact`
+                                       WHERE `nurl` = '%s' AND `uid` = %d AND
+                                               (`network` != '%s' OR (`notify` != '' AND `alias` != ''))
+                                       LIMIT 1",
                                                dbesc(normalise_link($name)),
-                                               intval($profile_uid)
+                                               intval($profile_uid),
+                                               dbesc(NETWORK_OSTATUS)
                                );
 
                        // Then check in the global contacts for the address
                        if (!$r)
-                               $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `addr` = '%s' LIMIT 1", dbesc($name));
+                               $r = q("SELECT `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `gcontact`
+                                       WHERE `addr` = '%s' AND (`network` != '%s' OR (`notify` != '' AND `alias` != ''))
+                                       LIMIT 1",
+                                               dbesc($name),
+                                               dbesc(NETWORK_OSTATUS)
+                               );
 
                        // Then check in the global contacts for the url
                        if (!$r)
-                               $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", dbesc(normalise_link($name)));
-
-                       // If the data isn't complete then refetch the data
-                       if ($r AND ($r[0]["network"] == NETWORK_OSTATUS) AND (($r[0]["notify"] == "") OR ($r[0]["alias"] == "")))
-                               $r = false;
+                               $r = q("SELECT `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `gcontact`
+                                       WHERE `nurl` = '%s' AND (`network` != '%s' OR (`notify` != '' AND `alias` != ''))
+                                       LIMIT 1",
+                                               dbesc(normalise_link($name)),
+                                               dbesc(NETWORK_OSTATUS)
+                               );
 
                        if (!$r) {
                                $probed = probe_url($name);
-                               if (isset($probed["url"])) {
+                               if ($result['network'] != NETWORK_PHANTOM) {
                                        update_gcontact($probed);
                                        $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
                                                dbesc(normalise_link($probed["url"])));
@@ -1176,7 +1222,7 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                        //select someone from this user's contacts by name in the current network
                        if (!$r AND ($network != ""))
                                $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `name` = '%s' AND `network` = '%s' AND `uid` = %d LIMIT 1",
-                                               dbesc($newname),
+                                               dbesc($name),
                                                dbesc($network),
                                                intval($profile_uid)
                                );
@@ -1193,7 +1239,7 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                        //select someone from this user's contacts by name
                        if(!$r)
                                $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1",
-                                               dbesc($newname),
+                                               dbesc($name),
                                                intval($profile_uid)
                                );
                }
@@ -1216,13 +1262,13 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                }
 
                //if there is an url for this persons profile
-               if(isset($profile)) {
+               if (isset($profile) AND ($newname != "")) {
 
                        $replaced = true;
                        //create profile link
                        $profile = str_replace(',','%2c',$profile);
-                       $newtag = '@[url=' . $profile . ']' . $newname  . '[/url]';
-                       $body = str_replace('@' . $name, $newtag, $body);
+                       $newtag = '@[url='.$profile.']'.$newname.'[/url]';
+                       $body = str_replace('@'.$name, $newtag, $body);
                        //append tag to str_tags
                        if(! stristr($str_tags,$newtag)) {
                                if(strlen($str_tags))
@@ -1234,7 +1280,7 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
                        // subscribed to you. But the nickname URL is OK if they are. Grrr. We'll tag both.
 
                        if(strlen($alias)) {
-                               $newtag = '@[url=' . $alias . ']' . $newname    . '[/url]';
+                               $newtag = '@[url='.$alias.']'.$newname.'[/url]';
                                if(! stristr($str_tags,$newtag)) {
                                        if(strlen($str_tags))
                                                $str_tags .= ',';