108 lines
5.1 KiB
PHP
108 lines
5.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Æóðíàë îïåðàöèé ìîäóëÿ «Ìîíåòà» â àäìèíêå PHPShop (Ìîäóëè -> Ìîíåòà -> Æóðíàë îïåðàöèé).
|
|
*
|
|
* Êàê ôàéë ïîïàäàåò â àäìèíêó: ïóíêò ïîäìåíþ â `install/module.xml` (`podmenu_action` = `dir.moneta`)
|
|
* âåä¸ò íà `admin.php?path=modules.dir.moneta`. `admpanel/admin.php` ÿäðà ðåæåò ïóòü ïî òî÷êàì
|
|
* è ïîäêëþ÷àåò `admpanel/modules/admin_dir.php`, à òîò — `modules/<òðåòüÿ ÷àñòü ïóòè>/admpanel/
|
|
* admin_<òðåòüÿ ÷àñòü ïóòè>.php`, òî åñòü ýòîò ôàéë (èìÿ ôàéëà ìåíÿòü íåëüçÿ). Ïåðåä ýòèì ÿäðî
|
|
* çàïîëíÿåò ãëîáàëüíûå `$TitlePage` è `$select_name` (çàãîëîâîê è ïóíêòû ïîäìåíþ), ïîñëå — âûçûâàåò
|
|
* ãëîáàëüíóþ ôóíêöèþ `actionStart()`: èìÿ òîæå çàäà¸ò ÿäðî (`$loader_function`). Òàê æå â 6.7 è 7.0.
|
|
*
|
|
* Ïîäïèñü çàïðîñà è êîä ïðîâåðêè öåëîñòíîñòè â æóðíàë íå ïèøóòñÿ.
|
|
*/
|
|
|
|
require_once dirname(__DIR__) . '/class/autoload.php';
|
|
|
|
use MonetaPhpShop\callback\CallbackEvent;
|
|
use MonetaPhpShop\host\Database;
|
|
use MonetaPhpShop\host\HostCharset;
|
|
use MonetaPhpShop\host\OperationRepository;
|
|
use MonetaPhpShop\protocol\TransactionId;
|
|
|
|
function actionStart()
|
|
{
|
|
global $PHPShopInterface, $TitlePage, $select_name;
|
|
|
|
// Íà ñòðàíèöó îòäà¸ì òîëüêî 500 ïîñëåäíèõ çàïèñåé, íîâûå ñâåðõó. Ïîñòðàíè÷íûé âûâîä, ïîèñê
|
|
// è ñîðòèðîâêó äåëàåò DataTables, êîòîðûì ÿäðî îáîðà÷èâàåò òàáëèöó àäìèíêè (admpanel/js/phpshop.js),
|
|
// — â áðàóçåðå, ïî óæå âûâåäåííûì ñòðîêàì; áåç ëèìèòà ñòðàíèöà ðîñëà áû âìåñòå ñ æóðíàëîì.
|
|
// À îí íå ÷èñòèòñÿ è ðàñò¸ò áûñòðî: íà êàæäîå óâåäîìëåíèå ñòðîêà, íà çàêàç èõ ìèíèìóì äâå
|
|
// (Check URL è Pay URL), ïðîâåðî÷íûé çàïðîñ MONETA.RU ìîæåò ïðèñëàòü íåñêîëüêî ðàç, à Pay URL
|
|
// ïîñëå îòâåòà FAIL ïîâòîðÿåò äî ñóòîê. Ñòàðûå çàïèñè îñòàþòñÿ â òàáëèöå, íà ýêðàí íå âûâîäÿòñÿ.
|
|
$limit = 500;
|
|
|
|
$escape = static function (string $value): string {
|
|
return htmlspecialchars($value, ENT_QUOTES, 'Windows-1251');
|
|
};
|
|
// Íà ìàãàçèíå ñ áàçîé utf-8 ÿäðî ïåðåêîäèðóåò çàãîëîâêè setCaption(), íî íå ÿ÷åéêè setRow()
|
|
// è íå ðàçìåòêó ïàíåëè — òåêñòû ìîäóëÿ ïåðåêîäèðóþòñÿ çäåñü. Ââåä¸ííîå â ïîèñê è ñòðîêè
|
|
// æóðíàëà (ASCII) óæå â êîäèðîâêå ñòðàíèöû.
|
|
$page = static function (string $text): string {
|
|
return HostCharset::toPage($text);
|
|
};
|
|
|
|
// Ôèëüòð ïî çàêàçó: íîìåð (`33-57`) èëè öåëèêîì MNT_TRANSACTION_ID èç êàáèíåòà MONETA.RU.
|
|
// Èùåò ïî âñåìó æóðíàëó, à íå òîëüêî ïî âûâåäåííûì ñòðîêàì, êàê ïîèñê DataTables.
|
|
$input = isset($_GET['moneta_order']) && is_string($_GET['moneta_order']) ? trim($_GET['moneta_order']) : '';
|
|
$orderUid = $input !== '' ? TransactionId::orderUidFromInput($input) : null;
|
|
|
|
$PHPShopInterface->checkbox_action = false;
|
|
$PHPShopInterface->setActionPanel($TitlePage, $select_name, false);
|
|
// Ïîä ïàíåëüþ ñ çàãîëîâêîì, âíå ôîðì ÿäðà: Compile() âûâîäèò actionPanel ïåðåä òàáëèöåé.
|
|
$PHPShopInterface->actionPanel .= '<form method="get" class="form-inline" style="margin: 0 0 10px 15px">'
|
|
. '<input type="hidden" name="path" value="modules.dir.moneta">'
|
|
. '<input type="text" name="moneta_order" value="' . $escape($input) . '" class="form-control input-sm"'
|
|
. $page(
|
|
' style="width: 300px" placeholder="Íîìåð çàêàçà èëè MNT_TRANSACTION_ID"> '
|
|
. '<button type="submit" class="btn btn-default btn-sm">Íàéòè</button> '
|
|
. ($input !== '' ? '<a href="?path=modules.dir.moneta" class="btn btn-link btn-sm">Ñáðîñèòü</a>' : '')
|
|
. ($input !== '' && $orderUid === null
|
|
? ' <span class="text-danger">Íîìåð çàêàçà íå ðàñïîçíàí — ïîêàçàí âåñü æóðíàë</span>'
|
|
: '')
|
|
. '</form>',
|
|
);
|
|
$PHPShopInterface->setCaption(
|
|
['Äàòà', '12%'],
|
|
['Çàêàç', '8%'],
|
|
['Çàïðîñ', '8%'],
|
|
['Ñîáûòèå', '30%'],
|
|
['Îòâåò', '6%'],
|
|
['Ñóììà', '8%'],
|
|
['Íîìåð îïåðàöèè', '8%'],
|
|
['Èäåíòèôèêàòîð çàêàçà', '20%']
|
|
);
|
|
|
|
$rows = (new OperationRepository(Database::fromHost()))->latest($limit, $orderUid);
|
|
foreach ($rows as $row) {
|
|
$orderId = (int) $row['order_id'];
|
|
$order = $orderId > 0
|
|
? ['name' => $escape((string) $row['order_uid']), 'link' => '?path=order&id=' . $orderId]
|
|
: $page('—');
|
|
$command = (string) $row['command'] === 'CHECK' ? 'Ïðîâåðêà' : 'Îïëàòà';
|
|
if ((string) $row['test_mode'] === '1') {
|
|
$command .= ' (òåñò)';
|
|
}
|
|
|
|
$resultCode = $row['result_code'] === null ? null : (int) $row['result_code'];
|
|
$icon = CallbackEvent::iconHtml((string) $row['event'], $resultCode);
|
|
$event = ($icon === '' ? '' : $icon . ' ') . $escape(CallbackEvent::label((string) $row['event']));
|
|
|
|
$PHPShopInterface->setRow(
|
|
PHPShopDate::get((int) $row['created_at'], true),
|
|
$order,
|
|
$page($command),
|
|
$page($event),
|
|
$row['result_code'] === null ? 'FAIL' : (string) $row['result_code'],
|
|
['name' => $escape((string) $row['amount']), 'align' => 'right'],
|
|
$escape((string) $row['operation_id']),
|
|
$escape((string) $row['transaction_id'])
|
|
);
|
|
}
|
|
|
|
$PHPShopInterface->Compile();
|
|
}
|