コード例 #1
0
$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']));
コード例 #2
0
 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();
         }
     }
 }