You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hey there I want only to list subscribed Folders. I do this by manipulation of the Package but maybe you can add the code anywhere.
My solution is:
Goto ProtocolInterface.php and add after folders function:
/**
* Get a list of available subscribed folders
* @param string $reference mailbox reference for list
* @param string $folder mailbox / folder name match with wildcards
*
* @return Response containing mailboxes that matched $folder as array(globalName => array('delim' => .., 'flags' => ..))
* @throws RuntimeException
*/
public function foldersSubscribed(string $reference = '', string $folder = '*'): Response;
after that goto: ImapProtocol.php and add after folders Function:
/**
* Get a list of available subscribed folders
*
* @param string $reference mailbox reference for list
* @param string $folder mailbox name match with wildcards
*
* @return Response folders that matched $folder as array(name => array('delimiter' => .., 'flags' => ..))
*
* @throws ImapBadRequestException
* @throws ImapServerErrorException
* @throws RuntimeException
*/
public function foldersSubscribed(string $reference = '', string $folder = '*'): Response {
$response = $this->requestAndResponse('LSUB', $this->escapeString($reference, $folder))->setCanBeEmpty(true);
$list = $response->data();
$result = [];
if ($list[0] !== true) {
foreach ($list as $item) {
if (count($item) != 4 || $item[0] != 'LSUB') {
continue;
}
$item[3] = str_replace("\\\\", "\\", str_replace("\\\"", "\"", $item[3]));
$result[$item[3]] = ['delimiter' => $item[2], 'flags' => $item[1]];
}
}
return $response->setResult($result);
}
finaly goto Client.php and add after getFolders function:
/**
* Get folders list.
* If hierarchical order is set to true, it will make a tree of folders, otherwise it will return flat array.
*
* @param boolean $hierarchical
* @param string|null $parent_folder
* @param bool $soft_fail If true, it will return an empty collection instead of throwing an exception
*
* @return FolderCollection
* @throws AuthFailedException
* @throws ConnectionFailedException
* @throws FolderFetchingException
* @throws ImapBadRequestException
* @throws ImapServerErrorException
* @throws ResponseException
* @throws RuntimeException
*/
public function getFoldersSubscribed(bool $hierarchical = true, string $parent_folder = null, bool $soft_fail = false): FolderCollection {
$this->checkConnection();
$folders = FolderCollection::make([]);
$pattern = $parent_folder.($hierarchical ? '%' : '*');
$sub = $this->connection->foldersSubscribed('', $pattern)->validatedData();
$items = $this->connection->folders('', $pattern)->validatedData();
if(!empty($items)){
foreach ($items as $folder_name => $item) {
if(!isset($sub[$folder_name]))continue;
$folder = new Folder($this, $folder_name, $item["delimiter"], $item["flags"]);
if ($hierarchical && $folder->hasChildren()) {
$pattern = $folder->full_name.$folder->delimiter.'%';
$children = $this->getFoldersSubscribed(true, $pattern, $soft_fail);
$folder->setChildren($children);
}
$folders->push($folder);
}
return $folders;
}else if (!$soft_fail){
throw new FolderFetchingException("failed to fetch any folders");
}
return $folders;
}
From now on you can get the subscribed Folders by:
Hey there I want only to list subscribed Folders. I do this by manipulation of the Package but maybe you can add the code anywhere.
My solution is:
Goto ProtocolInterface.php and add after folders function:
after that goto: ImapProtocol.php and add after folders Function:
finaly goto Client.php and add after getFolders function:
From now on you can get the subscribed Folders by:
Have a nice Day
Florian
The text was updated successfully, but these errors were encountered: