mirror of
https://github.com/itflow-org/itflow
synced 2026-05-25 04:08:18 +00:00
Reintroduce Webklex IMAP for ticket processing as PHP-IMAP is no longer being developed. This is optional for now and considered beta can be found in cron/ticket_email_parser.php
This commit is contained in:
98
plugins/vendor/webklex/php-imap/src/Decoder/HeaderDecoder.php
vendored
Normal file
98
plugins/vendor/webklex/php-imap/src/Decoder/HeaderDecoder.php
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
/*
|
||||
* File: Decoder.php
|
||||
* Category: -
|
||||
* Author: M.Goldenbaum
|
||||
* Created: 12.04.24 20:14
|
||||
* Updated: -
|
||||
*
|
||||
* Description:
|
||||
* -
|
||||
*/
|
||||
|
||||
namespace Webklex\PHPIMAP\Decoder;
|
||||
|
||||
use Webklex\PHPIMAP\EncodingAliases;
|
||||
|
||||
/**
|
||||
* Class HeaderDecoder
|
||||
*
|
||||
* @package Webklex\PHPIMAP
|
||||
*/
|
||||
class HeaderDecoder extends Decoder {
|
||||
|
||||
public function decode(array|string|null $value, ?string $encoding = null): mixed {
|
||||
if (is_array($value)) {
|
||||
return $this->decodeHeaderArray($value);
|
||||
}
|
||||
$original_value = $value;
|
||||
$decoder = $this->options['header'];
|
||||
|
||||
if ($value !== null) {
|
||||
if ($decoder === 'utf-8') {
|
||||
$decoded_values = $this->mimeHeaderDecode($value);
|
||||
$tempValue = "";
|
||||
foreach ($decoded_values as $decoded_value) {
|
||||
$tempValue .= $this->convertEncoding($decoded_value->text, $decoded_value->charset);
|
||||
}
|
||||
if ($tempValue) {
|
||||
$value = $tempValue;
|
||||
} else if (extension_loaded('imap')) {
|
||||
$value = \imap_utf8($value);
|
||||
} else if (function_exists('iconv_mime_decode')) {
|
||||
$value = iconv_mime_decode($value, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "UTF-8");
|
||||
} else {
|
||||
$value = mb_decode_mimeheader($value);
|
||||
}
|
||||
} elseif ($decoder === 'iconv') {
|
||||
$value = iconv_mime_decode($value, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "UTF-8");
|
||||
} else if (self::isUTF8($value)) {
|
||||
$value = mb_decode_mimeheader($value);
|
||||
}
|
||||
|
||||
if (self::notDecoded($original_value, $value)) {
|
||||
$value = $this->convertEncoding($original_value, $this->getEncoding($original_value));
|
||||
}
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the encoding of a given abject
|
||||
* @param object|string $structure
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getEncoding(object|string $structure): string {
|
||||
if (property_exists($structure, 'parameters')) {
|
||||
foreach ($structure->parameters as $parameter) {
|
||||
if (strtolower($parameter->attribute) == "charset") {
|
||||
return EncodingAliases::get($parameter->value == "default" ? EncodingAliases::detectEncoding($parameter->value) : $parameter->value, $this->fallback_encoding);
|
||||
}
|
||||
}
|
||||
} elseif (property_exists($structure, 'charset')) {
|
||||
return EncodingAliases::get($structure->charset == "default" ? EncodingAliases::detectEncoding($structure->charset) : $structure->charset, $this->fallback_encoding);
|
||||
} elseif (is_string($structure) === true) {
|
||||
$result = mb_detect_encoding($structure);
|
||||
return $result === false ? $this->fallback_encoding : $result;
|
||||
}
|
||||
|
||||
return $this->fallback_encoding;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Decode a given array
|
||||
* @param array $values
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function decodeHeaderArray(array $values): array {
|
||||
foreach ($values as $key => $value) {
|
||||
$values[$key] = $this->decode($value);
|
||||
}
|
||||
return $values;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user