static function fetch($options) { if ($mbox = imap_open(sprintf('{%1$s:%2$s/%3$s}INBOX', $options['server'], $options['port'], implode('/', $options['settings'])), $options['user'], $options['pass'])) { $ret = array(); if (($messages = imap_num_msg($mbox)) > 0) { for ($message = 1; $message < $messages + 1; $message++) { $eml = imap_fetchheader($mbox, $message) . imap_body($mbox, $message); $data = array('Task' => array()); $email_data = LilTasksParseEmail::__parseEmailHeader($mbox, $message); $data['Task']['title'] = $email_data['subject']; $data['Task']['happened'] = strftime('%Y-%m-%d', strtotime($email_data['date'])); list($sender, $domain) = explode('@', $email_data['from']); if ($sender == 'today') { $data['Task']['deadline'] = strftime('%Y-%m-%d'); } else { if ($sender == 'tomorrow') { $data['Task']['deadline'] = strftime('%Y-%m-%d', time() + 24 * 60 * 60); } else { if (in_array(strtolower($sender), array('monday', 'tuesday', 'wednesday', 'thursday', 'saturday', 'sunday'))) { $data['Task']['deadline'] = strftime('%Y-%m-%d', strtotime('next ' . ucfirst($sender))); } } } $hash = sha1($data['Task']['happened'] . '_' . $email_data['subject']); $parts = array(); $data['Task']['descript'] = LilTasksParseEmail::__parseEmailBody($mbox, $message, $hash, $parts); file_put_contents(TMP . $hash . '.eml', $eml); $data['Attachment'][0] = array('model' => 'Task', 'filename' => array('name' => $hash . '.eml', 'tmp_name' => TMP . $hash . '.eml'), 'title' => 'SOURCE: ' . $data['Task']['title']); App::uses('Sanitize', 'Utility'); foreach ($parts as $part) { if (!empty($part['attachment'])) { $data['Attachment'][] = array('model' => 'Task', 'filename' => array('name' => Sanitize::paranoid($part['attachment']['filename']), 'tmp_name' => $part['attachment']['tmp']), 'title' => $part['attachment']['filename']); } } $ret[$message] = $data; imap_delete($mbox, $message); } } return $ret; imap_close($mbox, CL_EXPUNGE); } else { var_dump(imap_errors()); } }