Jyxo\Mail\Parser::getMultipartPid PHP Method

getMultipartPid() private method

Returns a part Id.
private getMultipartPid ( string $pid, string $mimeType, string $lookFor ) : string
$pid string Parent Id
$mimeType string Requested mime-type
$lookFor string What to look for
return string
    private function getMultipartPid(string $pid, string $mimeType, string $lookFor) : string
    {
        $partLevel = count(explode('.', $pid));
        $pidLength = strlen($pid);
        $pidAdd = 1;
        foreach ($this->structure['pid'] as $partNo => $id) {
            $level = count(explode('.', $this->structure['pid'][$partNo]));
            switch ($lookFor) {
                case 'subparts':
                    $condition = $level == $partLevel + 1 && $pid == substr($this->structure['pid'][$partNo], 0, $pidLength);
                    break;
                case 'multipart':
                    $condition = $level == $partLevel + 1 && $pid == $this->structure['pid'][$partNo];
                    break;
                default:
                    $condition = false;
                    break;
            }
            if ($condition) {
                if ($this->isPartMultipart($partNo, 'alternative') || $this->isPartMultipart($partNo, 'report') || $this->isPartMultipart($partNo, 'mixed')) {
                    foreach ($this->structure['pid'] as $multipartNo => $multipartPid) {
                        // Part has to begin with the last tested Id and has to be in the next level
                        $subLevel = count(explode('.', $this->structure['pid'][$partNo]));
                        if ($this->structure['ftype'][$multipartNo] == $mimeType && $subLevel == $partLevel + $pidAdd && $pid == substr($multipartPid, 0, strlen($this->structure['pid'][$partNo]))) {
                            if (empty($this->structure['fname'][$multipartNo])) {
                                return $this->structure['pid'][$multipartNo];
                            }
                        } elseif ($this->isPartMultipart($multipartNo, 'alternative') || $this->isPartMultipart($multipartNo, 'report')) {
                            // Need to match this PID to next level in
                            $pid = $this->structure['pid'][$multipartNo];
                            $pidLength = strlen($pid);
                            $partLevel = count(explode('.', $pid));
                            $pidAdd = 2;
                            continue;
                        }
                    }
                } elseif ('inline' == $this->structure['disposition'][$partNo] && !$this->isPartMultipart($partNo, 'related') && !$this->isPartMultipart($partNo, 'mixed')) {
                    // It is inline, but not related or mixed type
                    if ($this->structure['ftype'][$partNo] == $mimeType && !isset($this->structure['fname'][$partNo])) {
                        return $this->structure['pid'][$partNo];
                    }
                }
            }
        }
    }