]> git.mxchange.org Git - friendica.git/blobdiff - include/items.php
Add basepath to App
[friendica.git] / include / items.php
index aed25f11ef5f561010f7f9e68a3c25f924121258..3c5e88a38ac8cff30a7ad8e85de6b4990515b322 100644 (file)
@@ -4,7 +4,8 @@
  * @file include/items.php
  */
 
-use \Friendica\ParseUrl;
+use Friendica\App;
+use Friendica\ParseUrl;
 
 require_once 'include/bbcode.php';
 require_once 'include/oembed.php';
@@ -339,7 +340,7 @@ function add_page_info_to_body($body, $texturl = false, $no_photos = false) {
  * Adds a "lang" specification in a "postopts" element of given $arr,
  * if possible and not already present.
  * Expects "body" element to exist in $arr.
- * 
+ *
  * @todo Add a parameter to request forcing override
  */
 function item_add_language_opt(&$arr) {
@@ -410,7 +411,70 @@ function uri_to_guid($uri, $host = "") {
        return $guid_prefix.$host_hash;
 }
 
-/// @TODO Maybe $arr must be called-by-reference? This function modifies it
+/**
+ * @brief Store the conversation data
+ *
+ * @param array $arr Item array with conversation data
+ * @return array Item array with removed conversation data
+ */
+function store_conversation($arr) {
+       if (in_array($arr['network'], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) {
+               $conversation = array('item-uri' => $arr['uri'], 'received' => dbm::date());
+
+               if (isset($arr['parent-uri']) AND ($arr['parent-uri'] != $arr['uri'])) {
+                       $conversation['reply-to-uri'] = $arr['parent-uri'];
+               }
+               if (isset($arr['thr-parent']) AND ($arr['thr-parent'] != $arr['uri'])) {
+                       $conversation['reply-to-uri'] = $arr['thr-parent'];
+               }
+
+               if (isset($arr['conversation-uri'])) {
+                       $conversation['conversation-uri'] = $arr['conversation-uri'];
+               }
+
+               if (isset($arr['conversation-href'])) {
+                       $conversation['conversation-href'] = $arr['conversation-href'];
+               }
+
+               if (isset($arr['protocol'])) {
+                       $conversation['protocol'] = $arr['protocol'];
+               }
+
+               if (isset($arr['source'])) {
+                       $conversation['source'] = $arr['source'];
+               }
+
+               $old_conv = dba::fetch_first("SELECT `item-uri`, `reply-to-uri`, `conversation-uri`, `conversation-href`, `protocol`, `source`
+                               FROM `conversation` WHERE `item-uri` = ?", $conversation['item-uri']);
+               if (dbm::is_result($old_conv)) {
+                       // Don't update when only the source has changed.
+                       // Only do this when there had been no source before.
+                       if ($old_conv['source'] != '') {
+                               unset($old_conv['source']);
+                       }
+                       // Update structure data all the time but the source only when its from a better protocol.
+                       if (($old_conv['protocol'] < $conversation['protocol']) AND ($old_conv['protocol'] != 0)) {
+                               unset($conversation['protocol']);
+                               unset($conversation['source']);
+                       }
+                       if (!dba::update('conversation', $conversation, array('item-uri' => $conversation['item-uri']), $old_conv)) {
+                               logger('Conversation: update for '.$conversation['item-uri'].' from '.$conv['protocol'].' to '.$conversation['protocol'].' failed', LOGGER_DEBUG);
+                       }
+               } else {
+                       if (!dba::insert('conversation', $conversation)) {
+                               logger('Conversation: insert for '.$conversation['item-uri'].' (protocol '.$conversation['protocol'].') failed', LOGGER_DEBUG);
+                       }
+               }
+       }
+
+       unset($arr['conversation-uri']);
+       unset($arr['conversation-href']);
+       unset($arr['protocol']);
+       unset($arr['source']);
+
+       return $arr;
+}
+
 /// @TODO add type-hint array
 function item_store($arr, $force_parent = false, $notify = false, $dontcache = false) {
 
@@ -423,6 +487,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                $arr['origin'] = 1;
                $arr['last-child'] = 1;
                $arr['network'] = NETWORK_DFRN;
+               $arr['protocol'] = PROTOCOL_DFRN;
 
                // We have to avoid duplicates. So we create the GUID in form of a hash of the plink or uri.
                // In difference to the call to "uri_to_guid" several lines below we add the hash of our own host.
@@ -436,6 +501,9 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                }
        }
 
+       // Store conversation data
+       $arr = store_conversation($arr);
+
        /*
         * If a Diaspora signature structure was passed in, pull it out of the
         * item array and set it aside for later storage.
@@ -690,6 +758,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
        item_body_set_hashtags($arr);
 
        $arr['thr-parent'] = $arr['parent-uri'];
+
        if ($arr['parent-uri'] === $arr['uri']) {
                $parent_id = 0;
                $parent_deleted = 0;
@@ -1169,7 +1238,7 @@ function item_body_set_hashtags(&$item) {
                        "&num;$2", $item["body"]);
 
        foreach ($tags as $tag) {
-               if ((strpos($tag, '#') !== 0) || (strpos($tag, '[url=')) {
+               if ((strpos($tag, '#') !== 0) || (strpos($tag, '[url='))) {
                        continue;
                }
 
@@ -1293,7 +1362,7 @@ function tag_deliver($uid, $item_id) {
         */
        $dlink = normalise_link(App::get_baseurl() . '/u/' . $u[0]['nickname']);
 
-       $cnt = preg_match_all('/[\@\!]\[url\=(.*?)\](.*?)\[\/url\]/ism', $item['body'], $matches,PREG_SET_ORDER);
+       $cnt = preg_match_all('/[\@\!]\[url\=(.*?)\](.*?)\[\/url\]/ism', $item['body'], $matches, PREG_SET_ORDER);
        if ($cnt) {
                foreach ($matches as $mtch) {
                        if (link_compare($link, $mtch[1]) || link_compare($dlink, $mtch[1])) {
@@ -1399,7 +1468,7 @@ function tgroup_check($uid, $item) {
         */
        $dlink = normalise_link(App::get_baseurl() . '/u/' . $u[0]['nickname']);
 
-       $cnt = preg_match_all('/[\@\!]\[url\=(.*?)\](.*?)\[\/url\]/ism', $item['body'], $matches,PREG_SET_ORDER);
+       $cnt = preg_match_all('/[\@\!]\[url\=(.*?)\](.*?)\[\/url\]/ism', $item['body'], $matches, PREG_SET_ORDER);
        if ($cnt) {
                foreach ($matches as $mtch) {
                        if (link_compare($link, $mtch[1]) || link_compare($dlink, $mtch[1])) {
@@ -1785,8 +1854,8 @@ function fix_private_photos($s, $uid, $item = null, $cid = 0) {
                        $x = strpos($i, '-');
 
                        if ($x) {
-                               $res = substr($i, $x+1);
-                               $i = substr($i,0, $x);
+                               $res = substr($i, $x + 1);
+                               $i = substr($i, 0, $x);
                                $r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `scale` = %d AND `uid` = %d",
                                        dbesc($i),
                                        intval($res),
@@ -2119,7 +2188,7 @@ function drop_item($id, $interactive = true) {
                // clean up categories and tags so they don't end up as orphans
 
                $matches = false;
-               $cnt = preg_match_all('/<(.*?)>/', $item['file'], $matches,PREG_SET_ORDER);
+               $cnt = preg_match_all('/<(.*?)>/', $item['file'], $matches, PREG_SET_ORDER);
                if ($cnt) {
                        foreach ($matches as $mtch) {
                                file_tag_unsave_file($item['uid'], $item['id'], $mtch[1],true);
@@ -2128,7 +2197,7 @@ function drop_item($id, $interactive = true) {
 
                $matches = false;
 
-               $cnt = preg_match_all('/\[(.*?)\]/', $item['file'], $matches,PREG_SET_ORDER);
+               $cnt = preg_match_all('/\[(.*?)\]/', $item['file'], $matches, PREG_SET_ORDER);
                if ($cnt) {
                        foreach ($matches as $mtch) {
                                file_tag_unsave_file($item['uid'], $item['id'], $mtch[1],false);
@@ -2198,7 +2267,7 @@ function drop_item($id, $interactive = true) {
                foreach ($r as $row) {
                        if ($parentid != "") {
                                $parentid .= ", ";
-                       ]
+                       }
 
                        $parentid .= $row["id"];
                }
@@ -2323,8 +2392,8 @@ function posted_dates($uid, $wall) {
        }
 
        // Set the start and end date to the beginning of the month
-       $dnow = substr($dnow, 0, 8).'01';
-       $dthen = substr($dthen, 0, 8).'01';
+       $dnow = substr($dnow, 0, 8) . '01';
+       $dthen = substr($dthen, 0, 8) . '01';
 
        $ret = array();
        /*
@@ -2333,7 +2402,7 @@ function posted_dates($uid, $wall) {
         */
        while (substr($dnow, 0, 7) >= substr($dthen, 0, 7)) {
                $dstart = substr($dnow, 0, 8) . '01';
-               $dend = substr($dnow, 0, 8) . get_dim(intval($dnow),intval(substr($dnow,5)));
+               $dend = substr($dnow, 0, 8) . get_dim(intval($dnow), intval(substr($dnow, 5)));
                $start_month = datetime_convert('', '', $dstart, 'Y-m-d');
                $end_month = datetime_convert('', '', $dend, 'Y-m-d');
                $str = day_translate(datetime_convert('', '', $dnow, 'F Y'));