feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MonetaPhpShop\host;
|
||||
|
||||
/**
|
||||
* Êîäèðîâêè íà ãðàíèöå ñ PHPShop.
|
||||
*
|
||||
* Ìîäóëü âíóòðè ðàáîòàåò â cp1251 — â íåé åãî èñõîäíèêè ïîñëå ñáîðêè è øòàòíàÿ áàçà PHPShop.
|
||||
* Ìàãàçèí ñ áàçîé `utf-8` (`$PHPShopBase->codBase`) îòäà¸ò ñòðîêè èç ÁÄ â UTF-8 è âûâîäèò
|
||||
* ñòðàíèöû â UTF-8 — íà ýòîé ãðàíèöå ñòðîêè ïåðåêîäèðóþòñÿ, êàê â øòàòíûõ ìîäóëÿõ ÿäðà.
|
||||
* Âñ¸, ÷òî óõîäèò â Ìîíåòó (JSON, XML), — UTF-8.
|
||||
*/
|
||||
final class HostCharset
|
||||
{
|
||||
private function __construct() {}
|
||||
|
||||
public static function isUtf8Shop(): bool
|
||||
{
|
||||
$base = $GLOBALS['PHPShopBase'] ?? null;
|
||||
|
||||
return is_object($base) && isset($base->codBase) && ($base->codBase === 'utf-8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Ñòðîêà èç ÁÄ ìàãàçèíà -> cp1251.
|
||||
*/
|
||||
public static function fromDatabase(string $value): string
|
||||
{
|
||||
if (!self::isUtf8Shop()) {
|
||||
return $value;
|
||||
}
|
||||
$converted = iconv('UTF-8', 'Windows-1251//IGNORE', $value);
|
||||
|
||||
return ($converted === false) ? '' : $converted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ñòðîêà ìîäóëÿ (cp1251) -> êîäèðîâêà ÁÄ ìàãàçèíà.
|
||||
*/
|
||||
public static function toDatabase(string $value): string
|
||||
{
|
||||
return self::isUtf8Shop() ? self::toUtf8($value) : $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* HTML ìîäóëÿ (cp1251) -> êîäèðîâêà ñòðàíèöû ìàãàçèíà.
|
||||
*/
|
||||
public static function toPage(string $html): string
|
||||
{
|
||||
return self::isUtf8Shop() ? self::toUtf8($html) : $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* cp1251 -> UTF-8 äëÿ Ìîíåòû. Áàéò 0x98 â cp1251 íå îïðåäåë¸í — íà í¸ì iconv âåðíóë áû false
|
||||
* íà âñþ ñòðîêó (íàçâàíèå ïîçèöèè â ÷åêå ñòàëî áû ïóñòûì), ïîýòîìó îí óäàëÿåòñÿ çàðàíåå.
|
||||
* Íå //IGNORE: åãî ïîääåðæêà çàâèñèò îò ðåàëèçàöèè iconv (glibc — äà, musl — íåò).
|
||||
*/
|
||||
public static function toUtf8(string $value): string
|
||||
{
|
||||
$converted = iconv('Windows-1251', 'UTF-8', str_replace("\x98", '', $value));
|
||||
|
||||
return ($converted === false) ? '' : $converted;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user