]> git.mxchange.org Git - friendica.git/blobdiff - include/items.php
Add basepath to App
[friendica.git] / include / items.php
index 6456fa2cba6ffa7ecbbbc5ca70a74098dbef167e..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,6 +411,12 @@ function uri_to_guid($uri, $host = "") {
        return $guid_prefix.$host_hash;
 }
 
+/**
+ * @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());
@@ -437,18 +444,22 @@ function store_conversation($arr) {
                        $conversation['source'] = $arr['source'];
                }
 
-               $conv = dba::fetch_first("SELECT `protocol` FROM `conversation` WHERE `item-uri` = ?", $conversation['item-uri']);
-               if (dbm::is_result($conv)) {
-                       if (($conv['protocol'] < $conversation['protocol']) AND ($conv['protocol'] != 0)) {
+               $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']);
                        }
-                       // Replace the conversation entry when the new one is better
-                       //if ((($conv['protocol'] == 0) OR ($conv['protocol'] >= $conversation['protocol'])) AND ($conversation['protocol'] > 0)) {
-                               if (!dba::update('conversation', $conversation, array('item-uri' => $conversation['item-uri']))) {
-                                       logger('Conversation: update for '.$conversation['item-uri'].' from '.$conv['protocol'].' to '.$conversation['protocol'].' failed', LOGGER_DEBUG);
-                               }
-                       //}
+                       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);
@@ -476,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.