]> git.mxchange.org Git - friendica.git/commitdiff
Merge remote-tracking branch 'upstream/develop' into 1502-poco-generation-counter
authorMichael Vogel <icarus@dabo.de>
Sun, 15 Feb 2015 09:54:41 +0000 (10:54 +0100)
committerMichael Vogel <icarus@dabo.de>
Sun, 15 Feb 2015 09:54:41 +0000 (10:54 +0100)
1  2 
include/items.php

diff --combined include/items.php
index e786eafd983a7f17feb90b44365b069c3a780783,d6ca2008544bcb1f4eabacf4689f304363ece821..a413800cc451457f8db5985baa6b8c99b13409a1
@@@ -1377,51 -1377,15 +1377,51 @@@ function item_store($arr,$force_parent 
                logger('item_store: created item ' . $current_post);
  
                // Add every contact to the global contact table
 -              // Contacts from the statusnet connector are also added since you could add them in OStatus as well.
 -              if (!$arr['private'] AND in_array($arr["network"],
 -                      array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, ""))) {
 -                      poco_check($arr["author-link"], $arr["author-name"], $arr["network"], $arr["author-avatar"], "", "", "", "", "", $arr["received"], $arr["contact-id"], $arr["uid"]);
 +              poco_store($arr);
 +
 +/*
 +              // Is it a global copy?
 +              $store_gcontact = ($arr["uid"] == 0);
 +
 +              // Is it a comment on a global copy?
 +              if (!$store_gcontact AND ($arr["uri"] != $arr["parent-uri"])) {
 +                      $q = q("SELECT `id` FROM `item` WHERE `uri`='%s' AND `uid` = 0",
 +                              $arr["parent-uri"]);
 +                      $store_gcontact = count($q);
 +              }
 +
 +              // This check for private and network is maybe superflous
 +              if ($store_gcontact AND !$arr['private'] AND in_array($arr["network"],
 +                      array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, ""))) {
 +
 +                      // "3" means: We don't know this contact directly (Maybe a reshared item)
 +                      $generation = 3;
 +                      $network = "";
 +
 +                      // Is it a user from our server?
 +                      $q = q("SELECT `id` FROM `contact` WHERE `self` AND `nurl` = '%s' LIMIT 1",
 +                                      dbesc(normalise_link($arr["author-link"])));
 +                      if (count($q)) {
 +                              $generation = 1;
 +                              $network = NETWORK_DFRN;
 +                      } else { // Is it a contact from a user on our server?
 +                              $q = q("SELECT `network` FROM `contact` WHERE `uid` != 0 AND `network` != ''
 +                                      AND (`nurl` = '%s' OR `alias` IN ('%s', '%s')) LIMIT 1",
 +                                              dbesc(normalise_link($arr["author-link"])),
 +                                              dbesc(normalise_link($arr["author-link"])),
 +                                              dbesc($arr["author-link"]));
 +                              if (count($q)) {
 +                                      $generation = 2;
 +                                      $network = $q[0]["network"];
 +                              }
 +                      }
 +
 +                      poco_check($arr["author-link"], $arr["author-name"], $network, $arr["author-avatar"], "", "", "", "", "", $arr["received"], $generation, $arr["contact-id"], $arr["uid"]);
  
                        // Maybe its a body with a shared item? Then extract a global contact from it.
                        poco_contact_from_body($arr["body"], $arr["received"], $arr["contact-id"], $arr["uid"]);
                }
 -
 +*/
                // Set "success_update" to the date of the last time we heard from this contact
                // This can be used to filter for inactive contacts and poco.
                // Only do this for public postings to avoid privacy problems, since poco data is public.
                                dbesc($arr['received']),
                                intval($arr['contact-id'])
                        );
-               // Only check for notifications on start posts
-               if ($arr['parent-uri'] === $arr['uri']) {
-                       add_thread($r[0]['id']);
-                       logger('item_store: Check notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
-                       // Send a notification for every new post?
-                       $r = q("SELECT `notify_new_posts` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `notify_new_posts` LIMIT 1",
-                               intval($arr['contact-id']),
-                               intval($arr['uid'])
-                       );
-                       if(count($r)) {
-                               logger('item_store: Send notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
-                               $u = q("SELECT * FROM user WHERE uid = %d LIMIT 1",
-                                       intval($arr['uid']));
-                               $item = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d",
-                                       intval($current_post),
-                                       intval($arr['uid'])
-                               );
-                               $a = get_app();
-                               require_once('include/enotify.php');
-                               notification(array(
-                                       'type'         => NOTIFY_SHARE,
-                                       'notify_flags' => $u[0]['notify-flags'],
-                                       'language'     => $u[0]['language'],
-                                       'to_name'      => $u[0]['username'],
-                                       'to_email'     => $u[0]['email'],
-                                       'uid'          => $u[0]['uid'],
-                                       'item'         => $item[0],
-                                       'link'         => $a->get_baseurl().'/display/'.urlencode($arr['guid']),
-                                       'source_name'  => $item[0]['author-name'],
-                                       'source_link'  => $item[0]['author-link'],
-                                       'source_photo' => $item[0]['author-avatar'],
-                                       'verb'         => ACTIVITY_TAG,
-                                       'otype'        => 'item'
-                               ));
-                               logger('item_store: Notification sent for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
-                       }
-               }
        } else {
                logger('item_store: could not locate created item');
                return 0;
        }
        if(count($r) > 1) {
-               logger('item_store: duplicated post occurred. Removing duplicates.');
+               logger('item_store: duplicated post occurred. Removing duplicates. uri = '.$arr['uri'].' uid = '.$arr['uid']);
                q("DELETE FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `id` != %d ",
                        dbesc($arr['uri']),
                        intval($arr['uid']),
                dbesc(datetime_convert()),
                intval($parent_id)
        );
-       update_thread($parent_id);
  
        if($dsprsig) {
                q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
        if (!$deleted AND !$dontcache) {
  
                // Store the fresh generated item into the cache
-               $cachefile = get_cachefile(urlencode($arr["guid"])."-".hash("md5", $arr['body']));
-               if (($cachefile != '') AND !file_exists($cachefile)) {
-                       $s = prepare_text($arr['body']);
-                       $a = get_app();
-                       $stamp1 = microtime(true);
-                       file_put_contents($cachefile, $s);
-                       $a->save_timestamp($stamp1, "file");
-                       logger('item_store: put item '.$current_post.' into cachefile '.$cachefile);
-               }
+               put_item_in_cache($arr);
  
                $r = q('SELECT * FROM `item` WHERE id = %d', intval($current_post));
                if (count($r) == 1) {
                }
        }
  
-       create_tags_from_item($current_post, $dontcache);
+       create_tags_from_item($current_post);
        create_files_from_item($current_post);
  
+       // Only check for notifications on start posts
+       if ($arr['parent-uri'] === $arr['uri']) {
+               add_thread($current_post);
+               logger('item_store: Check notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
+               // Send a notification for every new post?
+               $r = q("SELECT `notify_new_posts` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `notify_new_posts` LIMIT 1",
+                       intval($arr['contact-id']),
+                       intval($arr['uid'])
+               );
+               $send_notification = count($r);
+               if (!$send_notification) {
+                       $tags = q("SELECT `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` = %d AND `uid` = %d",
+                               intval(TERM_OBJ_POST), intval($current_post), intval(TERM_MENTION), intval($arr['uid']));
+                       if (count($tags)) {
+                               foreach ($tags AS $tag) {
+                                       $r = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d AND `notify_new_posts`",
+                                               normalise_link($tag["url"]), intval($arr['uid']));
+                                       if (count($r))
+                                               $send_notification = true;
+                               }
+                       }
+               }
+               if ($send_notification) {
+                       logger('item_store: Send notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
+                       $u = q("SELECT * FROM user WHERE uid = %d LIMIT 1",
+                               intval($arr['uid']));
+                       $item = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d",
+                               intval($current_post),
+                               intval($arr['uid'])
+                       );
+                       $a = get_app();
+                       require_once('include/enotify.php');
+                       notification(array(
+                               'type'         => NOTIFY_SHARE,
+                               'notify_flags' => $u[0]['notify-flags'],
+                               'language'     => $u[0]['language'],
+                               'to_name'      => $u[0]['username'],
+                               'to_email'     => $u[0]['email'],
+                               'uid'          => $u[0]['uid'],
+                               'item'         => $item[0],
+                               'link'         => $a->get_baseurl().'/display/'.urlencode($arr['guid']),
+                               'source_name'  => $item[0]['author-name'],
+                               'source_link'  => $item[0]['author-link'],
+                               'source_photo' => $item[0]['author-avatar'],
+                               'verb'         => ACTIVITY_TAG,
+                               'otype'        => 'item'
+                       ));
+                       logger('item_store: Notification sent for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
+               }
+       } else
+               update_thread($parent_id);
        if ($notify)
                proc_run('php', "include/notifier.php", $notify_type, $current_post);
  
@@@ -2114,7 -2083,6 +2119,7 @@@ function consume_feed($xml,$importer,&$
        $photo_timestamp = '';
        $photo_url = '';
        $birthday = '';
 +      $contact_updated = '';
  
        $hubs = $feed->get_links('hub');
        logger('consume_feed: hubs: ' . print_r($hubs,true), LOGGER_DATA);
  
        if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $contact['avatar-date'])) {
                logger('consume_feed: Updating photo for '.$contact['name'].' from '.$photo_url.' uid: '.$contact['uid']);
 +
 +              $contact_updated = $photo_timestamp;
 +
                require_once("include/Photo.php");
                $photo_failure = false;
                $have_photo = false;
        }
  
        if((is_array($contact)) && ($name_updated) && (strlen($new_name)) && ($name_updated > $contact['name-date'])) {
 +              if ($name_updated > $contact_updated)
 +                      $contact_updated = $name_updated;
 +
                $r = q("select * from contact where uid = %d and id = %d limit 1",
                        intval($contact['uid']),
                        intval($contact['id'])
                }
        }
  
 +      if ($contact_updated AND $new_name AND $photo_url)
 +              poco_check($contact['url'], $new_name, NETWORK_DFRN, $photo_url, "", "", "", "", "", $contact_updated, 2, $contact['id'], $contact['uid']);
 +
        if(strlen($birthday)) {
                if(substr($birthday,0,4) != $contact['bdyear']) {
                        logger('consume_feed: updating birthday: ' . $birthday);
  
                        $contact['bdyear'] = substr($birthday,0,4);
                }
 -
        }
  
        $community_page = 0;
@@@ -2851,7 -2811,6 +2856,7 @@@ function local_delivery($importer,$data
        $new_name = '';
        $photo_timestamp = '';
        $photo_url = '';
 +      $contact_updated = '';
  
  
        $rawtags = $feed->get_feed_tags( NAMESPACE_DFRN, 'owner');
        }
  
        if(($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $importer['avatar-date'])) {
 +
 +              $contact_updated = $photo_timestamp;
 +
                logger('local_delivery: Updating photo for ' . $importer['name']);
                require_once("include/Photo.php");
                $photo_failure = false;
        }
  
        if(($name_updated) && (strlen($new_name)) && ($name_updated > $importer['name-date'])) {
 +              if ($name_updated > $contact_updated)
 +                      $contact_updated = $name_updated;
 +
                $r = q("select * from contact where uid = %d and id = %d limit 1",
                        intval($importer['importer_uid']),
                        intval($importer['id'])
                }
        }
  
 -
 +      if ($contact_updated AND $new_name AND $photo_url)
 +              poco_check($importer['url'], $new_name, NETWORK_DFRN, $photo_url, "", "", "", "", "", $contact_updated, 2, $importer['id'], $importer['importer_uid']);
  
        // Currently unsupported - needs a lot of work
        $reloc = $feed->get_feed_tags( NAMESPACE_DFRN, 'relocate' );
@@@ -4722,8 -4674,8 +4727,8 @@@ function drop_item($id,$interactive = t
                                dbesc($item['parent-uri']),
                                intval($item['uid'])
                        );
-                       create_tags_from_item($item['parent-uri'], $item['uid']);
-                       create_files_from_item($item['parent-uri'], $item['uid']);
+                       create_tags_from_itemuri($item['parent-uri'], $item['uid']);
+                       create_files_from_itemuri($item['parent-uri'], $item['uid']);
                        delete_thread_uri($item['parent-uri'], $item['uid']);
                        // ignore the result
                }