%PDF- %PDF-
| Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/mail/classes/ |
| Current File : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/mail/classes/folder.php |
<?php
/*
* Copyright 2004-2014, AfterLogic Corp.
* Licensed under AGPLv3 license or AfterLogic license
* if commercial version of the product was purchased.
* See the LICENSE file for a full license statement.
*/
use MailSo\Base\Utils as BaseUtils;
class CApiMailFolder
{
/**
* @var string
*/
protected $sParentFullNameRaw;
/**
* @var array
*/
protected $aNamesRaw;
/**
* @var string
*/
protected $sFullNameSorted;
/**
* @var int
*/
protected $iNestingLevel;
/**
* @var int
*/
protected $iType;
/**
* @var bool
*/
protected $bExisten;
/**
* @var bool
*/
protected $bSubscribed;
/**
* @var bool
*/
protected $bNamespaceFolder;
/**
* @var bool
*/
protected $bGmailFolder;
/**
* @var \MailSo\Imap\Folder
*/
protected $oImapFolder;
/**
* @var CApiMailFolderCollection
*/
protected $oSubFolders;
/**
* @param \MailSo\Imap\Folder $oImapFolder
* @param bool $bSubscribed = true
* @param bool $bExisten = true
* @return void
*
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
*/
protected function __construct($oImapFolder, $bSubscribed = true, $bExisten = true)
{
if ($oImapFolder instanceof \MailSo\Imap\Folder)
{
$this->oImapFolder = $oImapFolder;
$this->oSubFolders = null;
$this->iType = EFolderType::Custom;
$this->iDeep = 0;
$this->sFullNameSorted = '';
$this->bNamespaceFolder = false;
$this->bGmailFolder = false;
$this->aNamesRaw = explode($this->oImapFolder->Delimiter(), $this->oImapFolder->FullNameRaw());
$this->iNestingLevel = count($this->aNamesRaw);
if (1 === $this->iNestingLevel && 'INBOX' === strtoupper($this->oImapFolder->FullNameRaw()))
{
$this->iType = EFolderType::Inbox;
}
$this->sParentFullNameRaw = '';
if (1 < $this->iNestingLevel)
{
$aNames = $this->aNamesRaw;
array_pop($aNames);
$this->sParentFullNameRaw = implode($this->oImapFolder->Delimiter(), $aNames);
}
$this->bSubscribed = $bSubscribed;
$this->bExisten = $bExisten;
}
else
{
throw new \MailSo\Base\Exceptions\InvalidArgumentException();
}
}
/**
* @param \MailSo\Imap\Folder $oImapFolder
* @param bool $bSubscribed = true
* @param bool $bExisten = true
*
* @return CApiMailFolder
*
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
*/
public static function NewInstance($oImapFolder, $bSubscribed = true, $bExisten = true)
{
return new self($oImapFolder, $bSubscribed, $bExisten);
}
/**
* @param string $sFullNameRaw
* @param string $sDelimiter
*
* @return CApiMailFolder
*
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
*/
public static function NewNonExistenInstance($sFullNameRaw, $sDelimiter)
{
return self::NewInstance(
\MailSo\Imap\Folder::NewInstance($sFullNameRaw, $sDelimiter, array('/Noselect')), true, false);
}
/**
* @return int
*/
public function Type()
{
return $this->iType;
}
/**
* @return int
*/
public function NestingLevel()
{
return $this->iNestingLevel;
}
/**
* @param int $iType
*
* @return CApiMailFolder
*/
public function SetType($iType)
{
$this->iType = $iType;
return $this;
}
/**
* @return string
*/
public function Name()
{
return BaseUtils::ConvertEncoding($this->NameRaw(),
\MailSo\Base\Enumerations\Charset::UTF_7_IMAP,
\MailSo\Base\Enumerations\Charset::UTF_8);
}
/**
* @return string
*/
public function FullName()
{
return BaseUtils::ConvertEncoding($this->FullNameRaw(),
\MailSo\Base\Enumerations\Charset::UTF_7_IMAP,
\MailSo\Base\Enumerations\Charset::UTF_8);
}
/**
* @return bool
*/
public function HasSortedName()
{
return 0 < \strlen($this->sFullNameSorted);
}
/**
* @return string
*/
public function FullNameSorted()
{
return 0 === \strlen($this->sFullNameSorted) ?
$this->FullName() : $this->sFullNameSorted;
}
/**
* @return string
*/
public function SetFullNameSorted($sFullNameSorted)
{
$this->sFullNameSorted = $sFullNameSorted;
}
/**
* @return string
*/
public function NameRaw()
{
return $this->oImapFolder->NameRaw();
}
/**
* @return string
*/
public function FullNameRaw()
{
return $this->oImapFolder->FullNameRaw();
}
/**
* @return bool
*/
public function NamespaceFolder()
{
return $this->bNamespaceFolder;
}
/**
* @return bool
*/
public function GmailFolder()
{
return $this->bGmailFolder;
}
/**
* @param bool $bNamespaceFolder
*/
public function SetNamespaceFolder($bNamespaceFolder)
{
$this->bNamespaceFolder = !!$bNamespaceFolder;
}
/**
* @param bool $bGmailFolder
*/
public function SetGmailFolder($bGmailFolder)
{
$this->bGmailFolder = !!$bGmailFolder;
}
/**
* @return string
*/
public function ParentFullName()
{
return BaseUtils::ConvertEncoding($this->sParentFullNameRaw,
\MailSo\Base\Enumerations\Charset::UTF_7_IMAP,
\MailSo\Base\Enumerations\Charset::UTF_8);
}
/**
* @return string
*/
public function ParentFullNameRaw()
{
return $this->sParentFullNameRaw;
}
/**
* @return string
*/
public function Delimiter()
{
return $this->oImapFolder->Delimiter();
}
/**
* @return array
*/
public function Flags()
{
return $this->oImapFolder->Flags();
}
/**
* @return array
*/
public function FlagsLowerCase()
{
return $this->oImapFolder->FlagsLowerCase();
}
/**
* @return array
*/
public function NamesRaw()
{
return $this->aNamesRaw;
}
/**
* @param bool $bCreateIfNull = false
*
* @return CApiMailFolderCollection
*/
public function SubFolders($bCreateIfNull = false)
{
if ($bCreateIfNull && !$this->oSubFolders)
{
$this->oSubFolders = CApiMailFolderCollection::NewInstance();
}
return $this->oSubFolders;
}
/**
* @return bool
*/
public function HasSubFolders()
{
return $this->oSubFolders && 0 < $this->oSubFolders->Count();
}
/**
* @return bool
*/
public function HasVisibleSubFolders()
{
$sList = array();
if ($this->oSubFolders)
{
$sList = $this->oSubFolders->FilterList(function (CApiMailFolder $oFolder) {
return $oFolder->IsSubscribed();
});
}
return 0 < count($sList);
}
/**
* @return mixed
*/
public function Status()
{
return $this->oImapFolder->GetExtended('STATUS');
}
/**
* @return bool
*/
public function IsSubscribed()
{
return $this->bSubscribed;
}
/**
* @return bool
*/
public function IsExists()
{
return $this->bExisten;
}
/**
* @return bool
*/
public function IsSelectable()
{
return $this->oImapFolder->IsSelectable() && $this->IsExists();
}
/**
* @return bool
*/
public function IsInbox()
{
return $this->oImapFolder->IsInbox();
}
/**
* @return int
*/
public function GetFolderXListType()
{
$aFlags = $this->oImapFolder->FlagsLowerCase();
$iXListType = EFolderType::Custom;
if (is_array($aFlags))
{
switch (true)
{
case in_array('\inbox', $aFlags):
$iXListType = EFolderType::Inbox;
break;
case in_array('\sent', $aFlags):
$iXListType = EFolderType::Sent;
break;
case in_array('\drafts', $aFlags):
$iXListType = EFolderType::Drafts;
break;
case in_array('\junk', $aFlags):
case in_array('\spam', $aFlags):
$iXListType = EFolderType::Spam;
break;
case in_array('\bin', $aFlags):
case in_array('\trash', $aFlags):
$iXListType = EFolderType::Trash;
break;
// case in_array('\important', $aFlags):
// case in_array('\starred', $aFlags):
// case in_array('\all', $aFlags):
// case in_array('\archive', $aFlags):
// case in_array('\allmail', $aFlags):
// break;
}
}
return $iXListType;
}
}