]> git.mxchange.org Git - friendica.git/blobdiff - include/poller.php
lots of facebook fixes
[friendica.git] / include / poller.php
index 37109f17d4dcfc016ba20f03262e55d865043298..dd2efcb76c4c5d2d29bfb30c762e488584bdfc42 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,26 +291,107 @@ 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($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)) {
-                                                       // TODO: loop through, fetch, check duplicates, and import
+                                               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,'<>');
+
+                                                       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",
+                                                                               dbesc(datetime_convert()),
+                                                                               intval($r[0]['id'])
+                                                                       );
+                                                               }               
+                                                               continue;
+                                                       }
+                                                       $datarray['title'] = notags(trim($meta->subject));
+                                                       $datarray['created'] = datetime_convert('UTC','UTC',$meta->date);
+       
+                                                       $r = email_get_msg($mbox,$msg_uid);
+                                                       if(! $r)
+                                                               continue;
+                                                       $datarray['body'] = escape_tags($r['body']);
+                                                       $datarray['uid'] = $importer_uid;
+                                                       $datarray['contact-id'] = $contact['id'];
+                                                       if($datarray['parent-uri'] === $datarray['uri'])
+                                                               $datarray['private'] = 1;
+                                                       $datarray['author-name'] = $contact['name'];
+                                                       $datarray['author-link'] = 'mailbox';
+                                                       $datarray['author-avatar'] = $contact['photo'];
+                                               
+                                                       $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) {
@@ -359,6 +443,7 @@ function poller_run($argv, $argc){
                        // loop - next contact
                }
        }
+
                
        return;
 }