/** * Marks emails with the passed flag type. This will be applied to local * cache files as well as remote emails. * @param string $type Flag type * @param string $ieId * @param string $folder IMAP folder structure or SugarFolder GUID * @param string $uids Comma sep list of UIDs or GUIDs */ function markEmails($type, $ieId, $folder, $uids) { global $app_strings; $uids = $this->_cleanUIDList($uids); $exUids = explode($app_strings['LBL_EMAIL_DELIMITER'], $uids); if (strpos($folder, 'sugar::') !== false) { // dealing with a sugar email object, uids are GUIDs foreach ($exUids as $id) { $email = new Email(); $email->retrieve($id); // BUG FIX BEGIN // Bug 50973 - marking unread in group inbox removes message if (empty($email->assigned_user_id)) { $email->setFieldNullable('assigned_user_id'); } // BUG FIX END switch ($type) { case "unread": $email->status = 'unread'; $email->save(); break; case "read": $email->status = 'read'; $email->save(); break; case "deleted": $email->delete(); break; case "flagged": $email->flagged = 1; $email->save(); break; case "unflagged": $email->flagged = 0; $email->save(); break; } // BUG FIX BEGIN // Bug 50973 - reset assigned_user_id field defs if (empty($email->assigned_user_id)) { $email->revertFieldNullable('assigned_user_id'); } // BUG FIX END } } else { /* dealing with IMAP email, uids are IMAP uids */ global $ie; // provided by EmailUIAjax.php if (empty($ie)) { $ie = new InboundEmail(); } $ie->retrieve($ieId); $ie->mailbox = $folder; $ie->connectMailserver(); // mark cache files if ($type == 'deleted') { $ie->deleteMessageOnMailServer($uids); $ie->deleteMessageFromCache($uids); } else { $overviews = $ie->getCacheValueForUIDs($ie->mailbox, $exUids); $manipulated = array(); foreach ($overviews['retArr'] as $k => $overview) { if (in_array($overview->uid, $exUids)) { switch ($type) { case "unread": $overview->seen = 0; break; case "read": $overview->seen = 1; break; case "flagged": $overview->flagged = 1; break; case "unflagged": $overview->flagged = 0; break; } $manipulated[] = $overview; } } if (!empty($manipulated)) { $ie->setCacheValue($ie->mailbox, array(), $manipulated); /* now mark emails on email server */ $ie->markEmails(implode(",", explode($app_strings['LBL_EMAIL_DELIMITER'], $uids)), $type); } } // end not type == deleted } }
public function testgetCacheValueForUIDs() { $inboundEmail = new InboundEmail(); //test wih default protocol $result = $inboundEmail->getCacheValueForUIDs('INBOX', array(1, 2, 3, 4, 5)); $this->assertTrue(is_array($result)); $this->assertTrue(is_array($result['uids'])); $this->assertTrue(is_array($result['retArr'])); //test wih pop3 protocol $inboundEmail->protocol = 'pop3'; $result = $inboundEmail->getCacheValueForUIDs('INBOX', array(1, 2, 3, 4, 5)); $this->assertTrue(is_array($result)); $this->assertTrue(is_array($result['uids'])); $this->assertTrue(is_array($result['retArr'])); }