X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fitems.php;h=3832b80b318f30f51a0f8b716d87c752f65ac855;hb=26eceaacbe883b7ece20c0cfb5c724c8ba1a7d99;hp=3a9d850d48df56344adba579a8ae9dd8e6cb5217;hpb=d4b092cec6f1a80d578981d80996ccec81d2d9a7;p=friendica.git diff --git a/include/items.php b/include/items.php index 3a9d850d48..3832b80b31 100644 --- a/include/items.php +++ b/include/items.php @@ -12,6 +12,7 @@ require_once('include/email.php'); require_once('include/ostatus_conversation.php'); require_once('include/threads.php'); require_once('include/socgraph.php'); +require_once('mod/share.php'); function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) { @@ -838,10 +839,7 @@ function get_atom_elements($feed, $item, $contact = array()) { logger('get_atom_elements: fixing sender of repeated message.'); if (!intval(get_config('system','wall-to-wall_share'))) { - $prefix = "[share author='".str_replace("'", "'",$name). - "' profile='".$uri. - "' avatar='".$avatar. - "' link='".$orig_uri."']"; + $prefix = share_header($name, $uri, $avatar, "", "", $orig_uri); $res["body"] = $prefix.html2bbcode($message)."[/share]"; } else { @@ -1183,9 +1181,9 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa $arr['owner-avatar'] = ((x($arr,'owner-avatar')) ? notags(trim($arr['owner-avatar'])) : ''); $arr['created'] = ((x($arr,'created') !== false) ? datetime_convert('UTC','UTC',$arr['created']) : datetime_convert()); $arr['edited'] = ((x($arr,'edited') !== false) ? datetime_convert('UTC','UTC',$arr['edited']) : datetime_convert()); - $arr['commented'] = datetime_convert(); - $arr['received'] = datetime_convert(); - $arr['changed'] = datetime_convert(); + $arr['commented'] = ((x($arr,'commented') !== false) ? datetime_convert('UTC','UTC',$arr['commented']) : datetime_convert()); + $arr['received'] = ((x($arr,'received') !== false) ? datetime_convert('UTC','UTC',$arr['received']) : datetime_convert()); + $arr['changed'] = ((x($arr,'changed') !== false) ? datetime_convert('UTC','UTC',$arr['changed']) : datetime_convert()); $arr['title'] = ((x($arr,'title')) ? notags(trim($arr['title'])) : ''); $arr['location'] = ((x($arr,'location')) ? notags(trim($arr['location'])) : ''); $arr['coord'] = ((x($arr,'coord')) ? notags(trim($arr['coord'])) : ''); @@ -1210,8 +1208,8 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa $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['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid(30)); $arr['network'] = ((x($arr,'network')) ? trim($arr['network']) : ''); + $arr['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid(32, $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 ); @@ -1239,6 +1237,9 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa logger("item_store: Set network to ".$arr["network"]." for ".$arr["uri"], LOGGER_DEBUG); } + // Check for hashtags in the body and repair or add hashtag links + item_body_set_hashtags($arr); + $arr['thr-parent'] = $arr['parent-uri']; if($arr['parent-uri'] === $arr['uri']) { $parent_id = 0; @@ -1343,6 +1344,20 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa return 0; } + // Is this item available in the global items (with uid=0)? + if ($arr["uid"] == 0) { + $arr["global"] = true; + + q("UPDATE `item` SET `global` = 1 WHERE `guid` = '%s'", dbesc($arr["guid"])); + } else { + $isglobal = q("SELECT `global` FROM `item` WHERE `uid` = 0 AND `guid` = '%s'", dbesc($arr["guid"])); + + $arr["global"] = (count($isglobal) > 0); + } + + // Fill the cache field + put_item_in_cache($arr); + call_hooks('post_remote',$arr); if(x($arr,'cancel')) { @@ -1434,12 +1449,18 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa $arr['deleted'] = $parent_deleted; // update the commented timestamp on the parent - - q("UPDATE `item` set `commented` = '%s', `changed` = '%s' WHERE `id` = %d", - dbesc(datetime_convert()), - dbesc(datetime_convert()), - intval($parent_id) - ); + // Only update "commented" if it is really a comment + if (($arr['verb'] == ACTIVITY_POST) OR !get_config("system", "like_no_comment")) + q("UPDATE `item` SET `commented` = '%s', `changed` = '%s' WHERE `id` = %d", + dbesc(datetime_convert()), + dbesc(datetime_convert()), + intval($parent_id) + ); + else + q("UPDATE `item` SET `changed` = '%s' WHERE `id` = %d", + dbesc(datetime_convert()), + intval($parent_id) + ); if($dsprsig) { q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ", @@ -1469,9 +1490,6 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa // in it. if (!$deleted AND !$dontcache) { - // Store the fresh generated item into the cache - put_item_in_cache($arr); - $r = q('SELECT * FROM `item` WHERE id = %d', intval($current_post)); if (count($r) == 1) { call_hooks('post_remote_end', $r[0]); @@ -1541,8 +1559,10 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa )); logger('item_store: Notification sent for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG); } - } else + } else { update_thread($parent_id); + add_shadow_entry($arr); + } if ($notify) proc_run('php', "include/notifier.php", $notify_type, $current_post); @@ -1550,6 +1570,73 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa return $current_post; } +function item_body_set_hashtags(&$item) { + + $tags = get_tags($item["body"]); + + // No hashtags? + if(!count($tags)) + return(false); + + // This sorting is important when there are hashtags that are part of other hashtags + // Otherwise there could be problems with hashtags like #test and #test2 + rsort($tags); + + $a = get_app(); + + $URLSearchString = "^\[\]"; + + // All hashtags should point to the home server + //$item["body"] = preg_replace("/#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", + // "#[url=".$a->get_baseurl()."/search?tag=$2]$2[/url]", $item["body"]); + + //$item["tag"] = preg_replace("/#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", + // "#[url=".$a->get_baseurl()."/search?tag=$2]$2[/url]", $item["tag"]); + + // mask hashtags inside of url, bookmarks and attachments to avoid urls in urls + $item["body"] = preg_replace_callback("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", + function ($match){ + return("[url=".$match[1]."]".str_replace("#", "#", $match[2])."[/url]"); + },$item["body"]); + + $item["body"] = preg_replace_callback("/\[bookmark\=([$URLSearchString]*)\](.*?)\[\/bookmark\]/ism", + function ($match){ + return("[bookmark=".$match[1]."]".str_replace("#", "#", $match[2])."[/bookmark]"); + },$item["body"]); + + $item["body"] = preg_replace_callback("/\[attachment (.*)\](.*?)\[\/attachment\]/ism", + function ($match){ + return("[attachment ".str_replace("#", "#", $match[1])."]".$match[2]."[/attachment]"); + },$item["body"]); + + // Repair recursive urls + $item["body"] = preg_replace("/#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", + "#$2", $item["body"]); + + foreach($tags as $tag) { + if(strpos($tag,'#') !== 0) + continue; + + if(strpos($tag,'[url=')) + continue; + + $basetag = str_replace('_',' ',substr($tag,1)); + + $newtag = '#[url='.$a->get_baseurl().'/search?tag='.rawurlencode($basetag).']'.$basetag.'[/url]'; + + $item["body"] = str_replace($tag, $newtag, $item["body"]); + + if(!stristr($item["tag"],"/search?tag=".$basetag."]".$basetag."[/url]")) { + if(strlen($item["tag"])) + $item["tag"] = ','.$item["tag"]; + $item["tag"] = $newtag.$item["tag"]; + } + } + + // Convert back the masked hashtags + $item["body"] = str_replace("#", "#", $item["body"]); +} + function get_item_guid($id) { $r = q("SELECT `guid` FROM `item` WHERE `id` = %d LIMIT 1", intval($id)); if (count($r))