2namespace Sale\Handlers\Delivery\Additional\DeliveryRequests\RusPost;
4use Bitrix\Main\Application;
7use Bitrix\Main\Web\HttpClient;
8use Bitrix\Sale\Shipment;
9use Bitrix\Main\Type\Date;
10use Bitrix\Main\Localization\Loc;
11use Bitrix\Sale\Delivery\Requests;
12use Bitrix\Sale\Delivery\Services;
13use Sale\Handlers\Delivery\Additional\DeliveryRequests\RusPost\Requests\Base as RequestBase;
15Loc::loadMessages(__FILE__);
20 protected $httpClient =
null;
29 self::registerLocalClasses();
35 protected function getHttpClient()
37 if($this->httpClient ===
null)
39 $this->httpClient =
new HttpClient(
array(
41 "socketTimeout" => 30,
42 "streamTimeout" => 30,
48 return $this->httpClient;
54 public function setHttpClient(HttpClient $httpClient): void
56 $this->httpClient = $httpClient;
63 protected static function registerLocalClasses()
65 static $registered =
false;
70 $path =
'handlers/delivery/additional/deliveryrequests/ruspost/requests/';
71 $namespace = __NAMESPACE__.
'\Requests\\';
72 $requestClasses =
array(
73 'Base',
'BaseFile',
'OrderCreate',
'OrderDelete',
'CleanAddress',
'NormalizeFio',
'BatchCreate',
74 'OrderDocF7P',
'OrderDocForms',
'BatchOrderAdd',
'BatchesList',
'BatchOrders',
'BatchDocF103',
75 'BatchDocPrepare',
'BatchDateUpdate',
'BatchDocAll',
'Batch',
'BatchOrder',
'OPS',
'OrderDocF112EK',
76 'UserSettings',
'UnreliableRecipient'
79 __NAMESPACE__.
'\Reference' =>
'handlers/delivery/additional/deliveryrequests/ruspost/reference.php'
82 foreach($requestClasses as $className)
83 $classes[$namespace.$className] =
$path.mb_strtolower($className).
'.php';
85 Loader::registerAutoLoadClasses(
'sale', $classes);
93 public function getActions($requestId)
96 'BATCH_DOC_PREPARE' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_BATCH_DOC_PREPARE'),
97 'BATCH_DOC_ALL' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_BATCH_DOC_ALL'),
98 'BATCH_DOC_F103' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_BATCH_DOC_F103'),
99 'BATCH_DATE_UPDATE' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_BATCH_DATE_UPDATE')
109 public function executeAction($requestId, $actionType,
array $additional)
111 return $this->getRequestObject($actionType)->process(
array($requestId), $additional);
118 public function getShipmentActions(Shipment $shipment)
120 if(Requests\Manager::isShipmentSent($shipment->getId()))
123 'ORDER_DOC_CREATE' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_ORDER_DOC_CREATE'),
124 'ORDER_DOC_F7P' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_ORDER_DOC_F7P'),
127 $delivery = Services\Manager::getObjectById($shipment->getDeliveryId());
128 $deliveryConfig = $delivery ? $delivery->getConfigValues() : [];
131 if($deliveryConfig[
'MAIN'][
'CATEGORY'] == 4)
132 $result[
'ORDER_DOC_F112EK'] = Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_ORDER_DOC_F112EK');
149 public function executeShipmentAction($requestId, $shipmentId, $actionType,
array $additional)
151 return $this->getRequestObject($actionType)->process(
array($shipmentId), $additional);
159 public function send($requestType,
array $requestData)
161 $result =
new Requests\Result();
162 $request = $this->getRequestObject($requestType);
168 Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_UNKNOWN_TYPE'),
169 array(
'#REQUEST_TYPE#' => $requestType)
174 return $request->send($requestData);
183 public function create(
array $shipmentIds,
array $additional =
array())
185 return $this->getRequestObject(
'BATCH_CREATE')->process($shipmentIds, $additional);
194 public function addShipments($requestId, $shipmentIds, $additional = [])
196 $result =
new Requests\Result();
197 $request = $this->getRequestObject(
'BATCH_ORDER_ADD');
198 $requestFields = Requests\RequestTable::getById($requestId)->fetch();
200 if(empty($requestFields[
'EXTERNAL_ID']))
204 Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_UNKNOWN_TYPE'),
205 array(
'#REQUEST_ID#' => $requestId)
216 'BATCH_NAME' => $requestFields[
'EXTERNAL_ID'],
217 'REQUEST_ID' => $requestFields[
'ID']
229 public function delete($requestId)
231 return $this->deleteShipments($requestId);
240 public function getFormFields($formFieldsType,
array $entityIds,
array $additional =
array())
242 if ($formFieldsType == Requests\Manager::FORM_FIELDS_TYPE_CREATE)
251 "TITLE" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SEND_DAY'),
252 "VALUE" => $date->toString(),
257 $opsData = $this->getOpsData();
258 if (!is_null($opsData))
263 elseif ($formFieldsType == Requests\Manager::FORM_FIELDS_TYPE_ADD)
267 $opsData = $this->getOpsData();
268 if (!is_null($opsData))
273 elseif($formFieldsType == Requests\Manager::FORM_FIELDS_TYPE_ACTION)
275 $result = $this->getRequestObject($additional[
'ACTION_TYPE'])->getFormFields($entityIds);
288 private function getOpsData(): ?
array
291 $ops = $this->getDeliveryServiceOps();
293 if(!empty($ops[
'VALUE']) && isset($ops[
'NAME']))
295 $opsList[$ops[
'VALUE']] = $ops[
'NAME'];
300 $opsRes = $this->getRequestObject(
'OPS')->send();
302 if($opsRes->isSuccess())
304 foreach($opsRes->getData() as $ops)
305 if($ops[
'enabled'] ==
true)
306 $opsList[$ops[
'operator-postcode']] =
'('.$ops[
'operator-postcode'].
') '.$ops[
'ops-address'];
314 "TITLE" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_OPS'),
316 "OPTIONS" => $opsList
322 protected function getDeliveryServiceOps()
324 return \Sale\Handlers\Delivery\Additional\RusPost\Helper::getSelectedShippingPoint($this->deliveryService);
331 public function getRequestObject(
$type)
335 'NORMALIZE_FIO' =>
'NormalizeFio',
336 'CLEAN_ADDRESS' =>
'CleanAddress',
337 'ORDER_CREATE' =>
'OrderCreate',
338 'ORDER_DELETE' =>
'OrderDelete',
339 'BATCH_CREATE' =>
'BatchCreate',
340 'ORDER_DOC_F7P' =>
'OrderDocF7P',
341 'ORDER_DOC_CREATE' =>
'OrderDocForms',
342 'BATCH_ORDER_ADD' =>
'BatchOrderAdd',
343 'BATCHES_LIST' =>
'BatchesList',
344 'BATCH_ORDERS' =>
'BatchOrders',
345 'BATCH_DOC_F103' =>
'BatchDocF103',
346 'BATCH_DOC_PREPARE' =>
'BatchDocPrepare',
347 'BATCH_DATE_UPDATE' =>
'BatchDateUpdate',
348 'BATCH_DOC_ALL' =>
'BatchDocAll',
350 'BATCHORDER' =>
'BatchOrder',
352 'USER_SETTINGS' =>
'UserSettings',
353 'ORDER_DOC_F112EK' =>
'OrderDocF112EK',
354 'UNRELIABLE_RECIPIENT' =>
'UnreliableRecipient'
357 if(isset($requests[
$type]))
359 $className = __NAMESPACE__.
'\Requests\\'.$requests[
$type];
360 $result =
new $className($this->deliveryService, $this->getHttpClient());
370 protected function getContentFieldName($field)
373 "batch-name" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_BN'),
374 "batch-status" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_BS'),
375 "batch-status-date" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_BSD'),
376 "delivery-notice-payment-method" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_DNPM'),
377 "list-number" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_LN'),
378 "list-number-date" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_LND'),
379 "mail-category" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_MC'),
380 "mail-category-text" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_MCT'),
381 "mail-type" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_MT'),
382 "mail-type-text" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_MTT'),
383 "payment-method" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_MTT'),
384 "postoffice-code" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_PC'),
385 "postoffice-name" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_PN'),
386 "shipment-count" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_SC'),
387 "shipment-insure-rate-sum" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_SIRS'),
388 "shipment-insure-rate-vat-sum" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_SIRVS'),
389 "shipment-mass" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_SM'),
390 "shipment-mass-rate-sum" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_SMRS'),
391 "shipment-mass-rate-vat-sum" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_SMRVS'),
392 "shipping-notice-type" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_SNT'),
393 "transport-type" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_TT'),
394 "postmarks" => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_PM'),
405 protected function getContentFieldValue($field, $value)
409 if($field ==
'batch-status')
410 $result = Reference::getBatchStatus($value);
411 elseif($field ==
'delivery-notice-payment-method')
412 $result = Reference::getPaymentMethod($value);
413 elseif($field == 'payment-method')
414 $result = Reference::getPaymentMethod($value);
415 elseif($field == 'shipping-notice-type')
416 $result = Reference::getShipmentNoticeType($value);
417 elseif($field == 'transport-type')
418 $result = Reference::getTransportType($value);
419 elseif($field == 'postmarks')
423 array(
'\Sale\Handlers\Delivery\Additional\DeliveryRequests\RusPost\Reference',
'getPostmarkType'),
439 public function getContent($requestId)
441 $result = $this->getRequestObject(
'BATCH')->process(
array($requestId));
446 foreach(
$result->getData() as $field => $value)
449 "TITLE" => self::getContentFieldName($field),
450 "VALUE" => self::getContentFieldValue($field, $value)
465 public function deleteShipments($requestId,
array $shipmentIds =
array())
470 if(!empty($shipmentIds))
471 $filter[
'=SHIPMENT_ID'] = $shipmentIds;
473 $res = Requests\ShipmentTable::getList(
array(
477 while($row =
$res->fetch())
478 if(intval($row[
'SHIPMENT_ID']) > 0)
479 $ids[] = $row[
'SHIPMENT_ID'];
482 $result = $this->getRequestObject(
'ORDER_DELETE')->process($ids);
484 $result =
new Requests\Result();
497 $result = $this->addShipments($requestId, $shipmentIds);
504 $con = Application::getConnection();
505 $sqlHelper =
$con->getSqlHelper();
508 foreach(
$result->getRequestResults() as $reqRes)
510 if($reqRes->isSuccess())
513 foreach($reqRes->getShipmentResults() as $shpRes)
515 if($shpRes->isSuccess())
517 $shpInternalId = intval($shpRes->getInternalId());
518 $idsToDel[] = $shpInternalId;
519 $externalId = $sqlHelper->forSql($shpRes->getExternalId());
520 $queries[$shpInternalId] =
"UPDATE b_sale_delivery_req_shp SET EXTERNAL_ID='".$externalId.
"' WHERE REQUEST_ID=".intval($requestId).
" AND SHIPMENT_ID=".$shpInternalId;
526 $failedShipments =
array();
528 if(!empty($idsToDel))
530 $res = $this->deleteShipments($requestId, array_values($idsToDel));
532 if(!
$res->isSuccess())
538 foreach(
$res->getShipmentResults() as $shpRes)
539 if(!$shpRes->isSuccess())
540 $failedShipments[$shpRes->getInternalId()] = $shpRes;
543 if(!empty($failedShipments))
545 $results =
$result->getRequestResults();
547 foreach($results as $resId => $reqRes)
549 if($reqRes->isSuccess())
551 $shpResults = $reqRes->getShipmentResults();
553 foreach($shpResults as $resShpId => $shpRes)
554 if(isset($failedShipments[$resShpId]))
555 $shpResults[$resShpId]->addErrors($failedShipments[$resShpId]->
getErrors());
557 $results[$resId]->setResults($shpResults);
565 foreach($queries as $shpId =>
$query)
566 if(!isset($failedShipments[$shpId]))
576 protected function getShipmentContentFieldName($field)
579 'address-type-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ATT'),
580 'area-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_AT'),
581 'avia-rate' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_AR'),
582 'avia-rate-with-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ARWV'),
583 'avia-rate-wo-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ARWOV'),
584 'barcode' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_B'),
585 'batch-category' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_BC'),
586 'batch-name' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_BN'),
587 'batch-status' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_BS'),
588 'brand-name' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_BRN'),
589 'building-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_BT'),
590 'comment' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_C'),
591 'corpus-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_CT'),
592 'delivery-time' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_DT'),
593 'dimension' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_D'),
594 'envelope-type' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ET'),
595 'fragile-rate-with-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_FRWV'),
596 'fragile-rate-wo-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_FRWOV'),
597 'given-name' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_GN'),
598 'ground-rate' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_GR'),
599 'ground-rate-with-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_GRWV'),
600 'ground-rate-wo-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_GRWOV'),
601 'hotel-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_HT'),
602 'house-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_HT2'),
603 'human-operation-name' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_HON'),
604 'id' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ID'),
605 'index-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_IT'),
606 'insr-rate' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_IR'),
607 'insr-rate-with-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_IRWV'),
608 'insr-rate-wo-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_IRWOV'),
609 'insr-value' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_IV'),
610 'is-deleted' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ID'),
611 'last-oper-attr' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_LOA'),
612 'last-oper-type' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_LOT'),
613 'letter-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_LT'),
614 'location-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_LOCT'),
615 'mail-category' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_MC'),
616 'mail-direct' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_MD'),
617 'mail-rank' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_MR'),
618 'mail-type' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_MT'),
619 'mass' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_M'),
620 'mass-rate' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_MRA'),
621 'mass-rate-with-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_MRAWV'),
622 'mass-rate-wo-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_MRAWOV'),
623 'middle-name' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_MN'),
624 'notice-rate-with-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_NRWV'),
625 'notice-rate-wo-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_NRWOV'),
626 'num-address-type-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_NATT'),
627 'order-num' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ON'),
628 'oversize-rate-with-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ORWV'),
629 'oversize-rate-wo-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ORWOV'),
630 'payment' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_P'),
631 'payment-method' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_PM'),
632 'place-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_PT'),
633 'postmarks' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_POMA'),
634 'postoffice-code' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_F_PC'),
635 'recipient-name' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_RN'),
636 'region-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_RT'),
637 'room-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ROTO'),
638 'slash-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_ST'),
639 'street-to' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_STT'),
640 'surname' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_S'),
641 'tel-address' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_TA'),
642 'total-rate-wo-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_TRWV'),
643 'total-vat' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_TV'),
644 'transport-type' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_TT'),
645 'version' => Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_SF_V')
656 protected function getShipmentContentFieldValue($field, $value)
660 if($field ==
'address-type-to')
661 $result = Reference::getAddressType($value);
662 elseif($field ==
'batch-category')
663 $result = Reference::getRpoCategory($value);
664 elseif($field == 'batch-status')
665 $result = Reference::getBatchStatus($value);
666 elseif($field == 'delivery-time')
667 $result = $value['max-days'].' - '.$value['min-days'];
668 elseif($field == 'dimension')
670 elseif($field == 'envelope-type')
671 $result = Reference::getEnvelopeType($value);
672 elseif($field == 'last-oper-attr')
673 $result = Reference::getTrackingAttr($value);
674 elseif($field == 'last-oper-type')
675 $result = Reference::getTrackingAttr($value);
676 elseif($field == 'mail-category')
677 $result = Reference::getRpoCategory($value);
678 elseif($field == 'mail-rank')
679 $result = Reference::getMailRank($value);
680 elseif($field == 'mail-type')
681 $result = Reference::getRpoKind($value);
682 elseif($field == 'payment-method')
683 $result = Reference::getPaymentMethod($value);
684 elseif($field == 'transport-type')
685 $result = Reference::getTransportType($value);
686 elseif($field == 'postmarks')
690 array(__NAMESPACE__.
'\\Reference',
'getPostmarkType'),
708 public function getShipmentContent($requestId, $shipmentId)
710 $result =
new Requests\Result();
712 if(intval($shipmentId) <= 0)
714 $result->addError(
new Error(Loc::getMessage(
'SALE_DLVRS_ADD_DREQ_ERR_SID_NULL')));
718 $res = Requests\ShipmentTable::getList(
array(
720 '=SHIPMENT_ID' => $shipmentId
724 $row =
$res->fetch();
726 if(!$row || (
string)$row[
'EXTERNAL_ID'] ===
'')
731 'SALE_DLVRS_ADD_DREQ_ERR_SHIPMENT_NOT_INCLUDED',
732 array(
'#SHIPMENT_ID#' => $shipmentId)
738 $res = $this->getRequestObject(
'BATCHORDER')->process(
array($shipmentId));
742 if(
$res->isSuccess())
748 foreach(
$data as $field => $value)
751 "TITLE" => $this->getShipmentContentFieldName($field),
752 "VALUE" => $this->getShipmentContentFieldValue($field, $value),
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
updateShipments($requestId, array $shipmentIds=[])
hidden PROPERTY[<?=$propertyIndex?>][CODE]<?=htmlspecialcharsEx( $propertyCode)?> height
bx popup label bx width30 PAGE_NEW_MENU_NAME text width
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)