public function walkParts(ezcMailPartWalkContext $context, ezcMailPart $mail)
{
$className = get_class($mail);
$context->level++;
switch ($className) {
case 'ezcMail':
case 'ezcMailComposer':
if ($mail->body !== null) {
$this->walkParts($context, $mail->body);
}
break;
case 'ezcMailMultipartMixed':
case 'ezcMailMultipartAlternative':
case 'ezcMailMultipartDigest':
case 'ezcMailMultipartReport':
foreach ($mail->getParts() as $part) {
$this->walkParts($context, $part);
}
break;
case 'ezcMailMultipartRelated':
$this->walkParts($context, $mail->getMainPart());
foreach ($mail->getRelatedParts() as $part) {
$this->walkParts($context, $part);
}
break;
case 'ezcMailRfc822Digest':
if ($context->includeDigests) {
$this->walkParts($context, $mail->mail);
} elseif (empty($context->filter) || in_array($className, $context->filter)) {
call_user_func($context->callbackFunction, $context, $mail);
}
break;
case 'ezcMailText':
case 'ezcMailFile':
case 'ezcMailVirtualFile':
case 'ezcMailStreamFile':
case 'ezcMailDeliveryStatus':
if (empty($context->filter) || in_array($className, $context->filter)) {
call_user_func($context->callbackFunction, $context, $mail);
}
break;
default:
// for cases where a custom mail class has been specified with $parser->options->mailClass
if (in_array('ezcMail', class_parents($className))) {
if ($mail->body !== null) {
$this->walkParts($context, $mail->body);
}
}
// for cases where a custom file class has been specified with $parser->options->fileClass
if (in_array('ezcMailFile', class_parents($className))) {
if (empty($context->filter) || in_array($className, $context->filter)) {
call_user_func($context->callbackFunction, $context, $mail);
}
}
}
$context->level--;
}