diff --git a/include/items.php b/include/items.php index e786eafd98..a413800cc4 100644 --- a/include/items.php +++ b/include/items.php @@ -1431,56 +1431,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']), @@ -1530,7 +1486,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') ", @@ -1561,16 +1516,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) { @@ -1580,9 +1526,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); @@ -4722,8 +4727,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 } diff --git a/include/onepoll.php b/include/onepoll.php index ba31c4d402..7b93a9a2f0 100644 --- a/include/onepoll.php +++ b/include/onepoll.php @@ -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); } } diff --git a/include/tags.php b/include/tags.php index 05e11b47ed..489ca47d2b 100644 --- a/include/tags.php +++ b/include/tags.php @@ -1,5 +1,5 @@ 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 = ""; diff --git a/include/text.php b/include/text.php index 535c36d235..c33dd79952 100644 --- a/include/text.php +++ b/include/text.php @@ -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 diff --git a/mod/item.php b/mod/item.php index a66535d7de..a3a8dd938e 100644 --- a/mod/item.php +++ b/mod/item.php @@ -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