mirror of
				https://github.com/crypto-pro-web/crypto-pro-php.git
				synced 2025-10-31 02:13:23 +03:00 
			
		
		
		
	Процесс переделки библиотеки
This commit is contained in:
		
							parent
							
								
									aa94495fe7
								
							
						
					
					
						commit
						895acf2a85
					
				
							
								
								
									
										87
									
								
								src/Certificate.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										87
									
								
								src/Certificate.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,87 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro; | ||||
| 
 | ||||
| class Certificate | ||||
| { | ||||
| 	/** | ||||
| 	 * возвращает флаг действительности сертификата | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function isValid() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает указанное внутренее свойство у сертификата в формате Cades | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function getCadesProp() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает сертификат в формате base64 | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function exportBase64() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает информацию об алгоритме сертификата | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function getAlgorithm() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает расшифрованную информацию о владельце сертификата | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function getOwnerInfo() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает расшифрованную информацию об издателе сертификата | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function getIssuerInfo() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает ОИД'ы сертификата | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function getExtendedKeyUsage() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает расшифрованные ОИД'ы | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function getDecodedExtendedKeyUsage() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * проверяет наличие ОИД'а (ОИД'ов) у сертификата | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public function hasExtendedKeyUsage() | ||||
| 	{ | ||||
| 	} | ||||
| } | ||||
| @ -4,5 +4,112 @@ namespace Webmasterskaya\CryptoPro; | ||||
| 
 | ||||
| class CryptoPro | ||||
| { | ||||
| 	/** | ||||
| 	 * возвращает список сертификатов, доступных пользователю в системе | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function getUserCertificates(bool $resetCache = false) | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает список сертификатов, доступных пользователю в системе, в том числе просроченные и без закрытого ключа | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function getAllUserCertificates(bool $resetCache = false) | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает список сертификатов, из закрытых ключей и/или сертификаты не установленные всистеме* | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function getContainerCertificates(bool $resetCache = false) | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает список сертификатов, из закрытых ключей и/или сертификаты не установленные всистеме*, в том числе просроченные и без закрытого ключа | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function getAllContainerCertificates(bool $resetCache = false) | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает сертификат по отпечатку | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function getCertificate() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * создает совмещенную (присоединенную) подпись сообщения | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function createAttachedSignature() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * создает отсоединенную (открепленную) подпись сообщения | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function createDetachedSignature() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * добавляет совмещенную (присоединенную) подпись к раннее подписанному документу (реализует метод coSign) | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function addAttachedSignature() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * добавляет отсоединенную (открепленную) подпись к раннее подписанному документу (реализует метод coSign) | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function addDetachedSignature() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * создает XML подпись для документа в формате XML | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function createXMLSignature() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function createHash() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * возвращает информацию о CSP и плагине | ||||
| 	 * | ||||
| 	 * @return void | ||||
| 	 */ | ||||
| 	public static function getSystemInfo() | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										70
									
								
								src/Helpers/CertificateHelper.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										70
									
								
								src/Helpers/CertificateHelper.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,70 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Helpers; | ||||
| 
 | ||||
| use Webmasterskaya\CryptoPro\Tags\TagsCodes; | ||||
| use Webmasterskaya\CryptoPro\Tags\TagsOIDs; | ||||
| use Webmasterskaya\CryptoPro\Tags\TagsTranslationsInterface; | ||||
| 
 | ||||
| class CertificateHelper | ||||
| { | ||||
| 	public static function parseCertInfo(TagsTranslationsInterface $tagsTranslations, string $rawInfo) | ||||
| 	{ | ||||
| 		$extractedEntities = []; | ||||
| 
 | ||||
| 		preg_match_all('/([а-яА-Яa-zA-Z0-9\s.]+)=(?:("[^"]+?")|(.+?))(?:,|$)/', $rawInfo, $extractedEntities, PREG_SET_ORDER, 0); | ||||
| 
 | ||||
| 		if (!empty($extractedEntities)) | ||||
| 		{ | ||||
| 			return array_map(function ($extractedEntity) use ($tagsTranslations) { | ||||
| 
 | ||||
| 				$title = trim($extractedEntity[1]); | ||||
| 
 | ||||
| 				// Проверяем наличие OID в заголовке
 | ||||
| 				$oidIdentifierMatch = []; | ||||
| 				$oidIdentifier      = null; | ||||
| 				if (preg_match('/^OID\.(.*)/', $title, $oidIdentifierMatch) === 1) | ||||
| 				{ | ||||
| 					$oidIdentifier = trim($oidIdentifierMatch[1]); | ||||
| 				} | ||||
| 
 | ||||
| 				// Если нашли OID в заголовке, пытаемся его расшифровать
 | ||||
| 				if (!empty($oidIdentifier)) | ||||
| 				{ | ||||
| 					$titleCode = TagsOIDs::codeByOid($oidIdentifier); | ||||
| 
 | ||||
| 					if (empty($titleCode)) | ||||
| 					{ | ||||
| 						$titleCode = 'OID.' . $oidIdentifier; | ||||
| 					} | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					$titleCode = TagsCodes::codeByName($title); | ||||
| 
 | ||||
| 					if (empty($titleCode)) | ||||
| 					{ | ||||
| 						$titleCode = $title; | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 				// Получаем человекочитаемый заголовок
 | ||||
| 				$title = $tagsTranslations::translationByCode($titleCode); | ||||
| 
 | ||||
| 				// Вырезаем лишние кавычки
 | ||||
| 				$description = preg_replace( | ||||
| 					'/"{2}/g', '"', | ||||
| 					preg_replace( | ||||
| 						'/^"(.*)"/', "$1", | ||||
| 						trim($extractedEntity[2] ?? $extractedEntity[3]) | ||||
| 					) | ||||
| 				); | ||||
| 
 | ||||
| 				return ['title' => $title, 'description' => $description, 'code' => $titleCode]; | ||||
| 
 | ||||
| 			}, $extractedEntities); | ||||
| 		} | ||||
| 
 | ||||
| 		return []; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/Helpers/Messages/HumanReadebleCPErrors.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								src/Helpers/Messages/HumanReadebleCPErrors.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,8 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Helpers\Messages; | ||||
| 
 | ||||
| class HumanReadableCPErrors | ||||
| { | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										20
									
								
								src/Tags/AbstractTagsCodes.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								src/Tags/AbstractTagsCodes.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,20 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| use Webmasterskaya\CryptoPro\Traits\ReversMapInterface; | ||||
| use Webmasterskaya\CryptoPro\Traits\ReversMapTrait; | ||||
| 
 | ||||
| abstract class AbstractTagsCodes implements TagsCodesInterface, ReversMapInterface | ||||
| { | ||||
| 	protected const MAP = []; | ||||
| 
 | ||||
| 	use ReversMapTrait; | ||||
| 
 | ||||
| 	public static function codeByName($name) | ||||
| 	{ | ||||
| 		$reverseMap = self::reverseMap(); | ||||
| 
 | ||||
| 		return $reverseMap[strtolower($name)] ?? null; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										25
									
								
								src/Tags/AbstractTagsOIDs.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								src/Tags/AbstractTagsOIDs.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,25 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| use Webmasterskaya\CryptoPro\Traits\ReversMapInterface; | ||||
| use Webmasterskaya\CryptoPro\Traits\ReversMapTrait; | ||||
| 
 | ||||
| abstract class AbstractTagsOIDs implements TagsOIDsInterface, ReversMapInterface | ||||
| { | ||||
| 	protected const MAP = []; | ||||
| 
 | ||||
| 	use ReversMapTrait; | ||||
| 
 | ||||
| 	public static function codeByOid($oid) | ||||
| 	{ | ||||
| 		return self::MAP[$oid] ?? null; | ||||
| 	} | ||||
| 
 | ||||
| 	public static function oidByCode($code) | ||||
| 	{ | ||||
| 		$reverseMap = self::reverseMap(); | ||||
| 
 | ||||
| 		return $reverseMap[strtolower($code)] ?? null; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										13
									
								
								src/Tags/AbstractTagsTranslations.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								src/Tags/AbstractTagsTranslations.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,13 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| abstract class AbstractTagsTranslations implements TagsTranslationsInterface | ||||
| { | ||||
| 	protected const MAP = []; | ||||
| 
 | ||||
| 	public static function translationByCode($code) | ||||
| 	{ | ||||
| 		return self::MAP[$code] ?? $code; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										25
									
								
								src/Tags/IssuerTagsTranslations.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								src/Tags/IssuerTagsTranslations.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,25 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| class IssuerTagsTranslations extends AbstractTagsTranslations | ||||
| { | ||||
| 	protected const MAP | ||||
| 		= [ | ||||
| 			'UN'     => 'Неструктурированное имя', | ||||
| 			'CN'     => 'Удостоверяющий центр', | ||||
| 			'C'      => 'Страна', | ||||
| 			'S'      => 'Регион', | ||||
| 			'STREET' => 'Адрес', | ||||
| 			'O'      => 'Компания', | ||||
| 			'OU'     => 'Тип', | ||||
| 			'T'      => 'Должность', | ||||
| 			'OGRN'   => 'ОГРН', | ||||
| 			'OGRNIP' => 'ОГРНИП', | ||||
| 			'SNILS'  => 'СНИЛС', | ||||
| 			'INN'    => 'ИНН', | ||||
| 			'INNLE'  => 'ИНН рганизации', | ||||
| 			'E'      => 'Email', | ||||
| 			'L'      => 'Город', | ||||
| 		]; | ||||
| } | ||||
							
								
								
									
										27
									
								
								src/Tags/SubjectTagsTranslations.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										27
									
								
								src/Tags/SubjectTagsTranslations.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,27 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| class SubjectTagsTranslations extends AbstractTagsTranslations | ||||
| { | ||||
| 	protected const MAP | ||||
| 		= [ | ||||
| 			'UN'     => 'Неструктурированное имя', | ||||
| 			'CN'     => 'Владелец', | ||||
| 			'SN'     => 'Фамилия', | ||||
| 			'G'      => 'Имя Отчество', | ||||
| 			'C'      => 'Страна', | ||||
| 			'S'      => 'Регион', | ||||
| 			'STREET' => 'Адрес', | ||||
| 			'O'      => 'Компания', | ||||
| 			'OU'     => 'Отдел/подразделение', | ||||
| 			'T'      => 'Должность', | ||||
| 			'OGRN'   => 'ОГРН', | ||||
| 			'OGRNIP' => 'ОГРНИП', | ||||
| 			'SNILS'  => 'СНИЛС', | ||||
| 			'INN'    => 'ИНН', | ||||
| 			'INNLE'  => 'ИНН рганизации', | ||||
| 			'E'      => 'Email', | ||||
| 			'L'      => 'Город', | ||||
| 		]; | ||||
| } | ||||
							
								
								
									
										27
									
								
								src/Tags/TagsCodes.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										27
									
								
								src/Tags/TagsCodes.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,27 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| class TagsCodes extends AbstractTagsCodes | ||||
| { | ||||
| 	protected const MAP | ||||
| 		= [ | ||||
| 			'UN'     => ['UN', 'unstructuredName'], | ||||
| 			'CN'     => ['CN', 'commonName'], | ||||
| 			'SN'     => ['SN', 'surname'], | ||||
| 			'G'      => ['G', 'givenName', 'gn'], | ||||
| 			'C'      => ['C', 'countryName'], | ||||
| 			'S'      => ['S', 'ST', 'stateOrProvinceName'], | ||||
| 			'STREET' => ['STREET', 'streetAddress'], | ||||
| 			'O'      => ['O', 'organizationName'], | ||||
| 			'OU'     => ['OU', 'organizationalUnitName'], | ||||
| 			'T'      => ['T', 'TITLE'], | ||||
| 			'OGRN'   => ['OGRN', 'ОГРН'], | ||||
| 			'OGRNIP' => ['OGRNIP', 'ОГРНИП'], | ||||
| 			'SNILS'  => ['СНИЛС', 'SNILS'], | ||||
| 			'INN'    => ['ИНН', 'ИННФЛ', 'ИНН ФЛ', 'INN'], | ||||
| 			'INNLE'  => ['ИННЮЛ', 'ИНН ЮЛ', 'INNLE', 'INN LE', 'ИНН организации'], | ||||
| 			'E'      => ['E', 'email', 'emailAddress', 'pkcs9email'], | ||||
| 			'L'      => ['L', 'localityName'], | ||||
| 		]; | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/Tags/TagsCodesInterface.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								src/Tags/TagsCodesInterface.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,8 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| interface TagsCodesInterface | ||||
| { | ||||
| 	public static function codeByName($name); | ||||
| } | ||||
							
								
								
									
										27
									
								
								src/Tags/TagsOIDs.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										27
									
								
								src/Tags/TagsOIDs.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,27 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| class TagsOIDs extends AbstractTagsOIDs | ||||
| { | ||||
| 	protected const MAP | ||||
| 		= [ | ||||
| 			'1.2.840.113549.1.9.2' => 'UN', | ||||
| 			'2.5.4.3'              => 'CN', | ||||
| 			'2.5.4.4'              => 'SN', | ||||
| 			'2.5.4.42'             => 'G', | ||||
| 			'2.5.4.6'              => 'C', | ||||
| 			'2.5.4.8'              => 'S', | ||||
| 			'2.5.4.9'              => 'STREET', | ||||
| 			'2.5.4.10'             => 'O', | ||||
| 			'2.5.4.11'             => 'OU', | ||||
| 			'2.5.4.12'             => 'T', | ||||
| 			'1.2.643.100.1'        => 'OGRN', | ||||
| 			'1.2.643.100.5'        => 'OGRNIP', | ||||
| 			'1.2.643.100.3'        => 'SNILS', | ||||
| 			'1.2.643.3.131.1.1'    => 'INN', | ||||
| 			'1.2.643.100.4'        => 'INNLE', | ||||
| 			'1.2.840.113549.1.9.1' => 'E', | ||||
| 			'2.5.4.7'              => 'L', | ||||
| 		]; | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/Tags/TagsOIDsInterface.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								src/Tags/TagsOIDsInterface.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,10 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| interface TagsOIDsInterface | ||||
| { | ||||
| 	public static function codeByOid($oid); | ||||
| 
 | ||||
| 	public static function oidByCode($code); | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/Tags/TagsTranslationsInterface.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								src/Tags/TagsTranslationsInterface.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,8 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Tags; | ||||
| 
 | ||||
| interface TagsTranslationsInterface | ||||
| { | ||||
| 	public static function translationByCode($code); | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/Traits/ReversMapInterface.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								src/Traits/ReversMapInterface.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,8 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Traits; | ||||
| 
 | ||||
| interface ReversMapInterface | ||||
| { | ||||
| 	public static function reverseMap(); | ||||
| } | ||||
							
								
								
									
										37
									
								
								src/Traits/ReversMapTrait.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								src/Traits/ReversMapTrait.php
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,37 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace Webmasterskaya\CryptoPro\Traits; | ||||
| 
 | ||||
| trait ReversMapTrait | ||||
| { | ||||
| 	public static function reverseMap() | ||||
| 	{ | ||||
| 		static $reverseMap; | ||||
| 
 | ||||
| 		if (!isset($reverseMap)) | ||||
| 		{ | ||||
| 			$reverseMap = []; | ||||
| 			foreach (self::MAP as $key => $values) | ||||
| 			{ | ||||
| 				if (is_object($values)) | ||||
| 				{ | ||||
| 					$values = (array) $values; | ||||
| 				} | ||||
| 
 | ||||
| 				if (!is_array($values)) | ||||
| 				{ | ||||
| 					$reverseMap[strtolower((string) $values)] = $key; | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					foreach ($values as $value) | ||||
| 					{ | ||||
| 						$reverseMap[strtolower($value)] = $key; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return $reverseMap; | ||||
| 	} | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user