]> git.mxchange.org Git - friendica.git/blobdiff - include/poller.php
improved UI for checked items to be deleted
[friendica.git] / include / poller.php
index b8bd0b7081b5a7a6a8193ea57cd743d27b9ac054..7490bfa819adcc561dd8f80b3962a263576fef9a 100644 (file)
@@ -16,7 +16,6 @@ function poller_run($argv, $argc){
        unset($db_host, $db_user, $db_pass, $db_data);
        };
 
-       $mbox = null;
 
        require_once('session.php');
        require_once('datetime.php');
@@ -27,6 +26,8 @@ function poller_run($argv, $argc){
 
        $a->set_baseurl(get_config('system','url'));
 
+       load_hooks();
+
        logger('poller: start');
        
        // run queue delivery process in the background
@@ -62,10 +63,12 @@ function poller_run($argv, $argc){
 
        $sql_extra = (($manual_id) ? " AND `id` = $manual_id " : "");
 
+       reload_plugins();
+
        $d = datetime_convert();
+
        call_hooks('cron', $d);
 
-       reload_plugins();
 
        $contacts = q("SELECT `id` FROM `contact` 
                WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != ''
@@ -288,38 +291,74 @@ function poller_run($argv, $argc){
                                $xml = fetch_url($contact['poll']);
                        }
                        elseif($contact['network'] === NETWORK_MAIL) {
-                               if(! $mbox) {
-                                       $x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1",
-                                               intval($importer_uid)
-                                       );
-                                       $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
-                                               intval($importer_uid)
-                                       );
-                                       if(count($x) && count($r)) {
-                                           $mailbox = construct_mailbox_name($r[0]);
-                                               $password = '';
-                                               openssl_private_decrypt(hex2bin($r[0]['pass']),$password,$x[0]['prvkey']);
-                                               $mbox = email_connect($mailbox,$r[0]['user'],$password);
-                                               unset($password);
+
+                               $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
+                               if($mail_disabled)
+                                       continue;
+
+                               $mbox = null;
+                               $x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1",
+                                       intval($importer_uid)
+                               );
+                               $mailconf = q("SELECT * FROM `mailacct` WHERE `server` != '' AND `uid` = %d LIMIT 1",
+                                       intval($importer_uid)
+                               );
+                               if(count($x) && count($mailconf)) {
+                                   $mailbox = construct_mailbox_name($mailconf[0]);
+                                       $password = '';
+                                       openssl_private_decrypt(hex2bin($mailconf[0]['pass']),$password,$x[0]['prvkey']);
+                                       $mbox = email_connect($mailbox,$mailconf[0]['user'],$password);
+                                       unset($password);
+                                       if($mbox) {
+                                               q("UPDATE `mailacct` SET `last_check` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1",
+                                                       dbesc(datetime_convert()),
+                                                       intval($mailconf[0]['id']),
+                                                       intval($importer_uid)
+                                               );
                                        }
                                }
                                if($mbox) {
+
                                        $msgs = email_poll($mbox,$contact['addr']);
+
                                        if(count($msgs)) {
                                                foreach($msgs as $msg_uid) {
                                                        $datarray = array();
                                                        $meta = email_msg_meta($mbox,$msg_uid);
+                                                       $headers = email_msg_headers($mbox,$msg_uid);
+
+                                                       // look for a 'references' header and try and match with a parent item we have locally.
+
+                                                       $raw_refs = ((x($headers,'references')) ? str_replace("\t",'',$headers['references']) : '');
                                                        $datarray['uri'] = trim($meta->message_id,'<>');
-//FIXME
-                                                       $datarray['parent-uri'] = $datarray['uri'];
+
+                                                       if($raw_refs) {
+                                                               $refs_arr = explode(' ', $raw_refs);
+                                                               if(count($refs_arr)) {
+                                                                       for($x = 0; $x < count($refs_arr); $x ++)
+                                                                               $refs_arr[$x] = "'" . str_replace(array('<','>',' '),array('','',''),dbesc($refs_arr[$x])) . "'";
+                                                               }
+                                                               $qstr = implode(',',$refs_arr);
+                                                               $r = q("SELECT `uri` , `parent-uri` FROM `item` WHERE `uri` IN ( $qstr ) AND `uid` = %d LIMIT 1",
+                                                                       intval($importer_uid)
+                                                               );
+                                                               if(count($r))
+                                                                       $datarray['parent-uri'] = $r[0]['uri'];
+                                                       }
+
+
+                                                       if(! x($datarray,'parent-uri'))
+                                                               $datarray['parent-uri'] = $datarray['uri'];
+
                                                        // Have we seen it before?
                                                        $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
                                                                intval($importer_uid),
                                                                dbesc($datarray['uri'])
                                                        );
+
                                                        if(count($r)) {
                                                                if($meta->deleted && ! $r[0]['deleted']) {
-                                                                       q("UPDATE `item` SET `deleted` = `, `changed` = '%s' WHERE `id` = %d LIMIT 1",
+                                                                       q("UPDATE `item` SET `deleted` = 1, `changed` = '%s' WHERE `id` = %d LIMIT 1",
                                                                                dbesc(datetime_convert()),
                                                                                intval($r[0]['id'])
                                                                        );
@@ -333,16 +372,33 @@ function poller_run($argv, $argc){
                                                        if(! $r)
                                                                continue;
                                                        $datarray['body'] = escape_tags($r['body']);
+
+                                                       // some mailing lists have the original author as 'from' - add this sender info to msg body. 
+                                                       // todo: adding a gravatar for the original author would be cool
+
+                                                       if(! stristr($meta->from,$contact['addr']))
+                                                               $datarray['body'] = t('From: ') . escape_tags($meta->from) . "\n\n" . $datarray['body'];
+
                                                        $datarray['uid'] = $importer_uid;
                                                        $datarray['contact-id'] = $contact['id'];
-                                                       $datarray['private'] = 1;
+                                                       if($datarray['parent-uri'] === $datarray['uri'])
+                                                               $datarray['private'] = 1;
                                                        $datarray['author-name'] = $contact['name'];
                                                        $datarray['author-link'] = 'mailbox';
                                                        $datarray['author-avatar'] = $contact['photo'];
                                                
-                                                       item_store($datarray);
+                                                       $stored_item = item_store($datarray);
+                                                       q("UPDATE `item` SET `last-child` = 0 WHERE `parent-uri` = '%s' AND `uid` = %d",
+                                                               dbesc($datarray['parent-uri']),
+                                                               intval($importer_uid)
+                                                       );
+                                                       q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1",
+                                                               intval($stored_item)
+                                                       );
                                                }
                                        }
+
+                                       imap_close($mbox);
                                }
                        }
                        elseif($contact['network'] === NETWORK_FACEBOOK) {
@@ -395,8 +451,6 @@ function poller_run($argv, $argc){
                }
        }
 
-       if($mbox && function_exists('imap_close'))
-               imap_close($mbox);
                
        return;
 }