27 #require_once 'Zend/Mail/Storage/Folder/Maildir.php'; 32 #require_once 'Zend/Mail/Storage/Writable/Interface.php'; 64 if (file_exists($dir)) {
69 #require_once 'Zend/Mail/Storage/Exception.php'; 77 #require_once 'Zend/Mail/Storage/Exception.php'; 79 if (!file_exists($dir)) {
81 }
else if (!
is_dir($dir)) {
89 foreach (array(
'cur',
'tmp',
'new') as $subdir) {
90 if (!@
mkdir($dir . DIRECTORY_SEPARATOR . $subdir)) {
92 if (!file_exists($dir . DIRECTORY_SEPARATOR . $subdir)) {
96 #require_once 'Zend/Mail/Storage/Exception.php'; 116 if (!empty(
$params->create) && isset(
$params->dirname) && !file_exists(
$params->dirname . DIRECTORY_SEPARATOR .
'cur')) {
137 $folder = $parentFolder->getGlobalName() . $this->_delim .
$name;
138 }
else if ($parentFolder !=
null) {
139 $folder = rtrim($parentFolder, $this->_delim) . $this->_delim .
$name;
144 $folder = trim($folder, $this->_delim);
157 #require_once 'Zend/Mail/Storage/Exception.php'; 161 if (strpos($folder, $this->_delim . $this->_delim) !==
false) {
165 #require_once 'Zend/Mail/Storage/Exception.php'; 169 if (strpos($folder,
'INBOX' . $this->_delim) === 0) {
170 $folder = substr($folder, 6);
173 $fulldir = $this->_rootdir .
'.' . $folder;
176 if (strpos($folder, DIRECTORY_SEPARATOR) !==
false || strpos($folder,
'/') !==
false 177 || dirname($fulldir) . DIRECTORY_SEPARATOR != $this->_rootdir) {
181 #require_once 'Zend/Mail/Storage/Exception.php'; 187 if (strpos($folder, $this->_delim)) {
189 $parent = substr($folder, 0, strrpos($folder, $this->_delim));
198 if (!@
mkdir($fulldir) || !@
mkdir($fulldir . DIRECTORY_SEPARATOR .
'cur')) {
202 #require_once 'Zend/Mail/Storage/Exception.php'; 206 mkdir($fulldir . DIRECTORY_SEPARATOR .
'new');
207 mkdir($fulldir . DIRECTORY_SEPARATOR .
'tmp');
209 $localName = $parent ? substr($folder, strlen($parent) + 1) : $folder;
235 if (strpos(
$name,
'INBOX' . $this->_delim) === 0) {
244 #require_once 'Zend/Mail/Storage/Exception.php'; 248 if (
$name ==
'INBOX' ||
$name == DIRECTORY_SEPARATOR ||
$name ==
'/') {
252 #require_once 'Zend/Mail/Storage/Exception.php'; 260 #require_once 'Zend/Mail/Storage/Exception.php'; 264 foreach (array(
'tmp',
'new',
'cur',
'.') as $subdir) {
265 $dir = $this->_rootdir .
'.' .
$name . DIRECTORY_SEPARATOR . $subdir;
266 if (!file_exists($dir)) {
274 #require_once 'Zend/Mail/Storage/Exception.php'; 277 while (($entry = readdir($dh)) !==
false) {
278 if ($entry ==
'.' || $entry ==
'..') {
281 if (!
unlink($dir . DIRECTORY_SEPARATOR . $entry)) {
285 #require_once 'Zend/Mail/Storage/Exception.php'; 290 if ($subdir !==
'.') {
295 #require_once 'Zend/Mail/Storage/Exception.php'; 303 mkdir($this->_rootdir .
'.' .
$name . DIRECTORY_SEPARATOR .
'cur');
307 #require_once 'Zend/Mail/Storage/Exception.php'; 311 $parent = strpos(
$name, $this->_delim) ? substr(
$name, 0, strrpos(
$name, $this->_delim)) :
null;
312 $localName = $parent ? substr(
$name, strlen($parent) + 1) :
$name;
313 unset($this->
getFolders($parent)->$localName);
331 $oldName = $oldName->getGlobalName();
334 $oldName = trim($oldName, $this->_delim);
335 if (strpos($oldName,
'INBOX' . $this->_delim) === 0) {
336 $oldName = substr($oldName, 6);
339 $newName = trim($newName, $this->_delim);
340 if (strpos($newName,
'INBOX' . $this->_delim) === 0) {
341 $newName = substr($newName, 6);
344 if (strpos($newName, $oldName . $this->_delim) === 0) {
348 #require_once 'Zend/Mail/Storage/Exception.php'; 355 if ($oldName ==
'INBOX' || $oldName == DIRECTORY_SEPARATOR || $oldName ==
'/') {
359 #require_once 'Zend/Mail/Storage/Exception.php'; 367 #require_once 'Zend/Mail/Storage/Exception.php'; 373 if (!$folder->isLeaf()) {
374 foreach ($folder as $k => $v) {
375 $this->
renameFolder($v->getGlobalName(), $newName . $this->_delim . $k);
379 $olddir = $this->_rootdir .
'.' . $folder;
380 foreach (array(
'tmp',
'new',
'cur') as $subdir) {
381 $subdir = DIRECTORY_SEPARATOR . $subdir;
382 if (!file_exists($olddir . $subdir)) {
386 if (!rename($olddir . $subdir, $newdir . $subdir)) {
390 #require_once 'Zend/Mail/Storage/Exception.php'; 395 mkdir($olddir . DIRECTORY_SEPARATOR .
'cur');
417 $id .=
'.' . php_uname(
'n');
435 if ($folder ==
'INBOX') {
436 $tmpdir = $this->_rootdir . DIRECTORY_SEPARATOR .
'tmp' . DIRECTORY_SEPARATOR;
438 $tmpdir = $this->_rootdir .
'.' . $folder . DIRECTORY_SEPARATOR .
'tmp' . DIRECTORY_SEPARATOR;
440 if (!file_exists($tmpdir)) {
441 if (!
mkdir($tmpdir)) {
445 #require_once 'Zend/Mail/Storage/Exception.php'; 456 for (
$i = 0;
$i < $max_tries; ++
$i) {
458 if (!file_exists($tmpdir . $uniq)) {
462 $fh =
fopen($tmpdir . $uniq,
'w');
467 #require_once 'Zend/Mail/Storage/Exception.php'; 479 #require_once 'Zend/Mail/Storage/Exception.php'; 484 return array(
'dirname' => $this->_rootdir .
'.' . $folder,
'uniq' => $uniq,
'filename' => $tmpdir . $uniq,
498 $wanted_flags = array_flip($flags);
503 #require_once 'Zend/Mail/Storage/Exception.php'; 510 if (!isset($wanted_flags[$flag])) {
514 $flags[$char] = $flag;
515 unset($wanted_flags[$flag]);
518 if (!empty($wanted_flags)) {
519 $wanted_flags = implode(
', ', array_keys($wanted_flags));
523 #require_once 'Zend/Mail/Storage/Exception.php'; 548 #require_once 'Zend/Mail/Storage/Exception.php'; 552 if ($folder ===
null) {
560 if ($flags ===
null) {
568 stream_copy_to_stream(
$message, $temp_file[
'handle']);
570 fputs($temp_file[
'handle'],
$message);
572 fclose($temp_file[
'handle']);
575 $size =
filesize($temp_file[
'filename']);
576 if ($size !==
false) {
579 $new_filename = $temp_file[
'dirname'] . DIRECTORY_SEPARATOR;
580 $new_filename .= $recent ?
'new' :
'cur';
581 $new_filename .= DIRECTORY_SEPARATOR . $temp_file[
'uniq'] .
$info;
586 if (!link($temp_file[
'filename'], $new_filename)) {
590 #require_once 'Zend/Mail/Storage/Exception.php'; 593 @
unlink($temp_file[
'filename']);
599 $this->_files[] = array(
'uniq' => $temp_file[
'uniq'],
601 'filename' => $new_filename);
621 #require_once 'Zend/Mail/Storage/Exception.php'; 630 $old_file = $filedata[
'filename'];
631 $flags = $filedata[
'flags'];
642 fclose($temp_file[
'handle']);
646 if ($size !==
false) {
650 $new_file = $temp_file[
'dirname'] . DIRECTORY_SEPARATOR .
'cur' . DIRECTORY_SEPARATOR . $temp_file[
'uniq'] .
$info;
655 if (!copy($old_file, $temp_file[
'filename'])) {
659 #require_once 'Zend/Mail/Storage/Exception.php'; 661 }
else if (!link($temp_file[
'filename'], $new_file)) {
665 #require_once 'Zend/Mail/Storage/Exception.php'; 668 @
unlink($temp_file[
'filename']);
674 if ($folder->getGlobalName() == $this->_currentFolder
675 || ($this->_currentFolder ==
'INBOX' && $folder->getGlobalName() ==
'/')) {
676 $this->_files[] = array(
'uniq' => $temp_file[
'uniq'],
678 'filename' => $new_file);
699 if ($folder->getGlobalName() == $this->_currentFolder
700 || ($this->_currentFolder ==
'INBOX' && $folder->getGlobalName() ==
'/')) {
704 #require_once 'Zend/Mail/Storage/Exception.php'; 709 $old_file = $filedata[
'filename'];
710 $flags = $filedata[
'flags'];
720 fclose($temp_file[
'handle']);
724 if ($size !==
false) {
728 $new_file = $temp_file[
'dirname'] . DIRECTORY_SEPARATOR .
'cur' . DIRECTORY_SEPARATOR . $temp_file[
'uniq'] .
$info;
733 if (!rename($old_file, $new_file)) {
737 #require_once 'Zend/Mail/Storage/Exception.php'; 740 @
unlink($temp_file[
'filename']);
746 unset($this->_files[
$id - 1]);
748 $this->_files = array_values($this->_files);
767 $new_filename = dirname(dirname($filedata[
'filename'])) . DIRECTORY_SEPARATOR .
'cur' . DIRECTORY_SEPARATOR .
"$filedata[uniq]$info";
769 if (!@rename($filedata[
'filename'], $new_filename)) {
773 #require_once 'Zend/Mail/Storage/Exception.php'; 777 $filedata[
'flags'] = $flags;
778 $filedata[
'filename'] = $new_filename;
780 $this->_files[
$id - 1] = $filedata;
798 if (!@
unlink($filename)) {
802 #require_once 'Zend/Mail/Storage/Exception.php'; 805 unset($this->_files[
$id - 1]);
807 $this->_files = array_values($this->_files);
837 $fh = @
fopen($this->_rootdir .
'maildirsize',
'r');
842 #require_once 'Zend/Mail/Storage/Exception.php'; 845 $definition = fgets($fh);
847 $definition = explode(
',', trim($definition));
849 foreach ($definition as $member) {
850 $key = $member[strlen($member) - 1];
851 if ($key ==
'S' || $key ==
'C') {
852 $key = $key ==
'C' ?
'count' :
'size';
854 $quota[$key] = substr($member, 0, -1);
866 $timestamps = array();
870 if (is_array($this->_quota)) {
880 $folders =
new RecursiveIteratorIterator($this->
getFolders(), RecursiveIteratorIterator::SELF_FIRST);
881 foreach ($folders as $folder) {
882 $subdir = $folder->getGlobalName();
883 if ($subdir ==
'INBOX') {
886 $subdir =
'.' . $subdir;
888 if ($subdir ==
'Trash') {
892 foreach (array(
'cur',
'new') as $subsubdir) {
893 $dirname = $this->_rootdir . $subdir . DIRECTORY_SEPARATOR . $subsubdir . DIRECTORY_SEPARATOR;
894 if (!file_exists($dirname)) {
899 $timestamps[$dirname] = filemtime($dirname);
901 $dh = opendir($dirname);
909 while (($entry = readdir()) !==
false) {
910 if ($entry[0] ==
'.' || !
is_file($dirname . $entry)) {
914 if (strpos($entry,
',S=')) {
916 $filesize = strtok(
':');
917 if (is_numeric($filesize)) {
918 $total_size += $filesize;
923 $size =
filesize($dirname . $entry);
924 if ($size ===
false) {
928 $total_size += $size;
935 $fh = $tmp[
'handle'];
936 $definition = array();
943 $definition = implode(
',', $definition);
944 fputs($fh,
"$definition\n");
945 fputs($fh,
"$total_size $messages\n");
947 rename($tmp[
'filename'], $this->_rootdir .
'maildirsize');
948 foreach ($timestamps as $dir => $timestamp) {
949 if ($timestamp < filemtime($dir)) {
950 unlink($this->_rootdir .
'maildirsize');
955 return array(
'size' => $total_size,
'count' => $messages,
'quota' => $quota);
966 if (!$forceRecalc && file_exists($this->_rootdir .
'maildirsize') &&
filesize($this->_rootdir .
'maildirsize') < 5120) {
967 $fh =
fopen($this->_rootdir .
'maildirsize',
'r');
970 $maildirsize = fread($fh, 5120);
971 if (strlen($maildirsize) >= 5120) {
983 $maildirsize = explode(
"\n", $maildirsize);
984 if (is_array($this->_quota)) {
987 $definition = explode(
',', $maildirsize[0]);
989 foreach ($definition as $member) {
990 $key = $member[strlen($member) - 1];
991 if ($key ==
'S' || $key ==
'C') {
992 $key = $key ==
'C' ?
'count' :
'size';
994 $quota[$key] = substr($member, 0, -1);
997 unset($maildirsize[0]);
998 foreach ($maildirsize as $line) {
999 list($size,
$count) = explode(
' ', trim($line));
1000 $total_size += $size;
1005 $over_quota =
false;
1006 $over_quota = $over_quota || (isset($quota[
'size']) && $total_size > $quota[
'size']);
1007 $over_quota = $over_quota || (isset($quota[
'count']) && $messages > $quota[
'count']);
1012 if ($over_quota && ($maildirsize || filemtime($this->_rootdir .
'maildirsize') >
time() - 900)) {
1014 $total_size =
$result[
'size'];
1017 $over_quota =
false;
1018 $over_quota = $over_quota || (isset($quota[
'size']) && $total_size > $quota[
'size']);
1019 $over_quota = $over_quota || (isset($quota[
'count']) && $messages > $quota[
'count']);
1027 return array(
'size' => $total_size,
'count' => $messages,
'quota' => $quota,
'over_quota' => $over_quota);
1031 if (!file_exists($this->_rootdir .
'maildirsize')) {
1036 file_put_contents($this->_rootdir .
'maildirsize',
"$size $count\n", FILE_APPEND);
1045 public function checkQuota($detailedResponse =
false, $forceRecalc =
false) {
checkQuota($detailedResponse=false, $forceRecalc=false)
_createTmpFile($folder='INBOX')
copyMessage($id, $folder)
createFolder($name, $parentFolder=null)
getQuota($fromStorage=false)
_getFileData($id, $field=null)
getFolders($rootFolder=null)
_addQuotaEntry($size, $count=1)
renameFolder($oldName, $newName)
appendMessage($message, $folder=null, $flags=null, $recent=false)
moveMessage($id, $folder)
mkdir($pathname, $mode=0777, $recursive=false, $context=null)
foreach( $_productCollection as $_product)() ?>" class $info
_calculateQuota($forceRecalc=false)
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
if(!isset($_GET['name'])) $name