]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #1393 from annando/1502-cleaned-item-storage-code
authorTobias Diekershoff <tobias.diekershoff@gmx.net>
Sat, 14 Feb 2015 14:40:35 +0000 (15:40 +0100)
committerTobias Diekershoff <tobias.diekershoff@gmx.net>
Sat, 14 Feb 2015 14:40:35 +0000 (15:40 +0100)
Additional check for notifications

include/items.php
include/onepoll.php
include/tags.php
include/text.php
mod/item.php

index e8fc739cd0852839c5011cb4ec7a34de2ea25824..d6ca2008544bcb1f4eabacf4689f304363ece821 100644 (file)
@@ -1395,56 +1395,12 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
                                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']),
@@ -1494,7 +1450,6 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
                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') ",
@@ -1525,16 +1480,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
        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) {
@@ -1544,9 +1490,68 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
                }
        }
 
-       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);
 
@@ -4669,8 +4674,8 @@ function drop_item($id,$interactive = true) {
                                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
                }
index ba31c4d4024faee77f3d84731854d54c56eb4440..7b93a9a2f0d0a63e7ee422f0919b2b08c28597cf 100644 (file)
@@ -284,13 +284,13 @@ function onepoll_run(&$argv, &$argc){
        }
        elseif($contact['network'] === NETWORK_MAIL || $contact['network'] === NETWORK_MAIL2) {
 
-               logger("onepoll: mail: Fetching", LOGGER_DEBUG);
+               logger("Mail: Fetching", LOGGER_DEBUG);
 
                $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
                if($mail_disabled)
                        return;
 
-               logger("onepoll: Mail: Enabled", LOGGER_DEBUG);
+               logger("Mail: Enabled", LOGGER_DEBUG);
 
                $mbox = null;
                $x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1",
@@ -312,7 +312,9 @@ function onepoll_run(&$argv, &$argc){
                                        intval($mailconf[0]['id']),
                                        intval($importer_uid)
                                );
-                       }
+                               logger("Mail: Connected to " . $mailconf[0]['user']);
+                       } else
+                               logger("Mail: Connection error ".$mailconf[0]['user']." ".print_r(imap_errors()));
                }
                if($mbox) {
 
@@ -523,7 +525,10 @@ function onepoll_run(&$argv, &$argc){
                                                }
                                        }
                                }
-                       }
+                       } else
+                               logger("Mail: no mails for ".$mailconf[0]['user']);
+
+                       logger("Mail: closing connection for ".$mailconf[0]['user']);
                        imap_close($mbox);
                }
        }
index 05e11b47edfce2a21bf2b5b66e8c5c4d73371dd5..489ca47d2bd89df8651dbb808014abb70dc08d71 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-function create_tags_from_item($itemid, $dontcache = false) {
+function create_tags_from_item($itemid) {
        global $a;
 
        $profile_base = $a->get_baseurl();
@@ -26,18 +26,6 @@ function create_tags_from_item($itemid, $dontcache = false) {
        if ($message["deleted"])
                return;
 
-       if (!$dontcache) {
-               $cachefile = get_cachefile(urlencode($message["guid"])."-".hash("md5", $message['body']));
-
-               if (($cachefile != '') AND !file_exists($cachefile)) {
-                       $s = prepare_text($message['body']);
-                       $stamp1 = microtime(true);
-                       file_put_contents($cachefile, $s);
-                       $a->save_timestamp($stamp1, "file");
-                       logger('create_tags_from_item: put item '.$message["id"].' into cachefile '.$cachefile);
-               }
-       }
-
        $taglist = explode(",", $message["tag"]);
 
        $tags = "";
index 535c36d235f0fe81ac87c03def37bf9b937df46d..c33dd79952d8015dc38583e495ef93c9a89583de 100644 (file)
@@ -1293,6 +1293,18 @@ function redir_private_images($a, &$item) {
 
 }}
 
+function put_item_in_cache($item) {
+       $cachefile = get_cachefile(urlencode($item["guid"])."-".hash("md5", $item['body']));
+
+       if (($cachefile != '') AND !file_exists($cachefile)) {
+               $s = prepare_text($item['body']);
+               $a = get_app();
+               $stamp1 = microtime(true);
+               file_put_contents($cachefile, $s);
+               $a->save_timestamp($stamp1, "file");
+               logger('put item '.$item["guid"].' into cachefile '.$cachefile);
+       }
+}
 
 // Given an item array, convert the body element from bbcode to html and add smilie icons.
 // If attach is true, also add icons for item attachments
index a66535d7ded21bb0061690f92d573a6dd9234375..a3a8dd938e88ed1ece2315d7003ab3bdf3e9c223 100644 (file)
@@ -22,6 +22,7 @@ require_once('library/langdet/Text/LanguageDetect.php');
 require_once('include/tags.php');
 require_once('include/files.php');
 require_once('include/threads.php');
+require_once('include/text.php');
 
 function item_post(&$a) {
 
@@ -824,21 +825,12 @@ function item_post(&$a) {
        if(count($r)) {
                $post_id = $r[0]['id'];
                logger('mod_item: saved item ' . $post_id);
-               add_thread($post_id);
 
                // update filetags in pconfig
                file_tag_update_pconfig($uid,$categories_old,$categories_new,'category');
 
                // Store the fresh generated item into the cache
-               $cachefile = get_cachefile(urlencode($datarray["guid"])."-".hash("md5", $datarray['body']));
-
-               if (($cachefile != '') AND !file_exists($cachefile)) {
-                       $s = prepare_text($datarray['body']);
-                       $stamp1 = microtime(true);
-                       file_put_contents($cachefile, $s);
-                       $a->save_timestamp($stamp1, "file");
-                       logger('mod_item: put item '.$r[0]['id'].' into cachefile '.$cachefile);
-               }
+               put_item_in_cache($datarray);
 
                if($parent) {
 
@@ -947,7 +939,8 @@ function item_post(&$a) {
                dbesc(datetime_convert()),
                intval($parent)
        );
-       update_thread($parent);
+       if ($post_id != $parent)
+               update_thread($parent);
 
        $datarray['id']    = $post_id;
        $datarray['plink'] = $a->get_baseurl().'/display/'.urlencode($datarray['guid']);
@@ -990,7 +983,9 @@ function item_post(&$a) {
 
        create_tags_from_item($post_id);
        create_files_from_item($post_id);
-       update_thread($post_id);
+
+       if ($post_id == $parent)
+               add_thread($post_id);
 
        // This is a real juggling act on shared hosting services which kill your processes
        // e.g. dreamhost. We used to start delivery to our native delivery agents in the background