$errors = array(); foreach ($cfields as $cfield) { if (isset($_GET[$cfield]) && $_GET[$cfield] != "") { $cdata[$cfield] = $_GET[$cfield]; } else { if (!isset($cdata[$cfield]) || $cdata[$cfield] == "") { $errors[] = "Field '" . $cfield . "' is not set"; } } } $RESPONSE = array("success" => false, "errors" => array()); if (sizeof($errors)) { $RESPONSE["errors"] = $errors; die(json_encode($RESPONSE)); } $imap = new \OCA\fc_mail_attachments\lib\imap($cdata['mail_host'], $cdata['mail_port'], $cdata['mail_security'], $cdata['mail_user'], $cdata['mail_password']); try { $imap->open(); } catch (\Exception $e) { array_push($errors, $e->getMessage()); } if (sizeof($errors)) { $RESPONSE["errors"] = $errors; die(json_encode($RESPONSE)); } if ($cid) { $query = \OCP\DB::prepare('UPDATE `*PREFIX*fc_mail_attachments` SET dir = ?, mail_host = ?, mail_port = ?, mail_security = ?, mail_user = ?, mail_password = ? WHERE user = ?'); $results = $query->execute(array($cdata['dir'], $cdata['mail_host'], $cdata['mail_port'], $cdata['mail_security'], $cdata['mail_user'], $cdata['mail_password'], $user)); } else { $query = \OCP\DB::prepare('INSERT INTO `*PREFIX*fc_mail_attachments` (user, dir, mail_host, mail_port, mail_security, mail_user, mail_password) VALUES (?, ?, ?, ?, ?, ?, ?)'); $results = $query->execute(array($user, $cdata['dir'], $cdata['mail_host'], $cdata['mail_port'], $cdata['mail_security'], $cdata['mail_user'], $cdata['mail_password']));
function run() { $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*fc_mail_attachments`'); $results = $query->execute()->fetchAll(); foreach ($results as $entry) { $fs = new \OC\Files\View('/' . $entry['user']); $udir = $this->sanitizeFSName($entry["dir"]); $path = array('files', $this->dir_mail, $udir); for ($i = 1; $i < sizeof($path); $i++) { $ppath = array(); for ($y = 0; $y <= $i; $y++) { $ppath[] = $path[$y]; } $ppath = implode(DIRECTORY_SEPARATOR, $ppath); if (!$fs->is_dir($ppath)) { $fs->mkdir($ppath); } } $maildir = implode(DIRECTORY_SEPARATOR, $path) . DIRECTORY_SEPARATOR; $mstats = array('folders' => array()); if (isset($entry["stats"]) && $entry["stats"] != "") { $mstats = \OCA\fc_mail_attachments\lib\Utils::array_merge_recursive_distinct($mstats, json_decode($entry["stats"], true)); } $imap = new \OCA\fc_mail_attachments\lib\imap($entry['mail_host'], $entry['mail_port'], $entry['mail_security'], $entry['mail_user'], $entry['mail_password']); try { $imap->open(); $mailboxes = $imap->listMailboxes(); foreach ($mailboxes as $mbname) { if ($this->skipMailbox($entry, $mbname)) { continue; } $imap->open($mbname); $mboxLastMsgNo = $imap->countMessages(); if (!$mboxLastMsgNo) { continue; } $mboxdir = $maildir . DIRECTORY_SEPARATOR . $this->sanitizeFSName($mbname) . DIRECTORY_SEPARATOR; if (!$fs->is_dir($mboxdir)) { $fs->mkdir($mboxdir); } $mboxLastMsgUid = $imap->getLastMessageUid(); $mboxStatus = $imap->status($mbname); $curMboxInfo = array("fcmaVersion" => 0, "lastSeenUid" => -1, "historyUid" => -1, "uidValidity" => -1); if ($fs->file_exists($mboxdir . '.info')) { $savedMboxInfo = json_decode($fs->file_get_contents($mboxdir . '.info'), true); $curMboxInfo = \OCA\fc_mail_attachments\lib\Utils::array_merge_recursive_distinct($curMboxInfo, $savedMboxInfo); } if ($mboxStatus->uidvalidity != $curMboxInfo["uidValidity"]) { $curMboxInfo["lastSeenUid"] = $curMboxInfo["historyUid"] = -1; $curMboxInfo["uidValidity"] = $mboxStatus->uidvalidity; } if ($curMboxInfo["lastSeenUid"] == -1) { $curMboxInfo["lastSeenUid"] = $mboxLastMsgUid; } if ($curMboxInfo["historyUid"] == -1) { $curMboxInfo["historyUid"] = $mboxLastMsgUid; } if ($mboxLastMsgUid != $curMboxInfo["lastSeenUid"]) { $mboxCurMsgNo = $imap->getMessageNumber($curMboxInfo["lastSeenUid"]); for ($mboxCurMsgNo, $i = 0; $mboxCurMsgNo <= $mboxLastMsgNo && $i < $this->IMAP_BATCH_LIMIT; $mboxCurMsgNo++, $i++) { $mboxCurMsgUid = $imap->getMessageUid($mboxCurMsgNo); if (!$mboxCurMsgUid) { break; } $this->saveAttachments($imap, $fs, $mboxdir, $mboxCurMsgUid); $curMboxInfo["lastSeenUid"] = $mboxCurMsgUid; } } $historyMsgNo = $imap->getMessageNumber($curMboxInfo["historyUid"]); if ($historyMsgNo > 1) { for ($i = 0; $historyMsgNo > 0 && $i < $this->IMAP_BATCH_LIMIT; $historyMsgNo--, $i++) { $historyMsgUid = $imap->getMessageUid($historyMsgNo); if (!$historyMsgUid) { break; } $this->saveAttachments($imap, $fs, $mboxdir, $historyMsgUid); $curMboxInfo["historyUid"] = $historyMsgUid; } } $fs->file_put_contents($mboxdir . '.info', json_encode($curMboxInfo)); } $imap->close(); } catch (\Exception $e) { echo "FCMA ERROR [" . $entry["user"] . "]: " . $e->getMessage(); } } }