![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/wyomind/framework/Block/Adminhtml/Progress/ |
<?php /** * Copyright © 2019 Wyomind. All rights reserved. * See LICENSE.txt for license details. */ /** * Copyright © 2020 Wyomind. All rights reserved. * See LICENSE.txt for license details. */ namespace Wyomind\Framework\Block\Adminhtml\Progress; /** * Class Status */ class Status extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer { /** * @var \Magento\Framework\ObjectManagerInterface */ protected $objectManager; /** * @var \Wyomind\Framework\Helper\Progress */ private $helperProgress; /** * @var \Magento\Framework\Stdlib\DateTime\DateTime */ private $coreDate; /** * Name of the column that stores the scheduled tasks settings * @var null */ private $field; /** * @var string */ private $module; /** * Status constructor. * @param \Magento\Framework\ObjectManagerInterface $objectManager * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate * @param \Magento\Backend\Block\Context $context * @param string $module Name of the module (camelcase) * @param null $field Field name of the cron task json configuration * @param array $data */ public function __construct( \Magento\Framework\ObjectManagerInterface $objectManager, \Magento\Framework\Stdlib\DateTime\DateTime $coreDate, \Magento\Backend\Block\Context $context, $module = "Framework", $field = null, array $data = [] ) { parent::__construct($context, $data); $this->coreDate=$coreDate; $this->helperProgress=$objectManager->create("Wyomind\\" . $module . "\Helper\Progress"); $this->field=$field; $this->module=$module; $this->objectManager=$objectManager; } public function render(\Magento\Framework\DataObject $row) { $helperProgress=$this->helperProgress; try { $line=$helperProgress->readFlag($row->getId()); $stats=$helperProgress->getStats($row->getId()); if ($line["status"] == $helperProgress::SUCCEEDED) { $line["status"]=$this->checkCronTasks($line["status"], $row, $stats["mtime"]); } switch ($line["status"]) { case $helperProgress::SUCCEEDED: $severity='notice'; $status=($line["status"]); break; case $helperProgress::PENDING: $severity='minor'; $status=($line["status"]); break; case $helperProgress::PROCESSING: $percent=round($line["percent"]); $severity='minor'; $status=($line["status"]) . " [" . $percent . "%]"; break; case $helperProgress::HOLD: $severity='major'; $status=($line["status"]); break; case $helperProgress::FAILED: $severity='critical'; $status=($line["status"]); break; default: $severity='critical'; $status=($helperProgress::ERROR); break; } } catch (\Exception $exception) { $severity='minor'; $line["message"]=$exception->getMessage(); $status=($helperProgress::PENDING); } $tooltip=null; $tooltipClass=null; if (isset($line["message"]) && $line["message"] != "") { $tooltip="<div class=\"tooltip-content\">" . $line["message"] . "</div>"; $tooltipClass="tooltip"; } if ($status == $helperProgress::PENDING && $this->getNextSchedule($row) != "") { $tooltipClass="tooltip"; $tooltip="<div class=\"tooltip-content\">" . __("Next Schedule") . " " . $this->getNextSchedule($row) . " </div > "; } $script="<script language='javascript' type='text/javascript'>var updater_url='" . $this->getUrl('wyomind_framework/progress/updater') . "'</script>"; return $script . "<span class='$tooltipClass grid-severity-$severity updater' data-module='" . $this->module . "' data-field='" . $this->field . "' data-cron='" . $row->getData($this->field) . "' data-id='" . $row->getId() . "' ><span > " . __($status) . "</span > " . $tooltip . "</span > "; } /** * @param $status * @param \Magento\Framework\DataObject $row * @param $mtime * @return mixed */ /** * @param $status * @param array $item * @param $mtime * @return mixed */ protected function checkCronTasks($status, $item, $mtime) { $helperProgress = $this->helperProgress; $cron = []; $offset = $this->coreDate->getGmtOffset(); $cron['current']['localTime'] = $this->coreDate->timestamp(time() + $offset); $cron['file']['localTime'] = $this->coreDate->timestamp($mtime + $offset); if (isset($item[$this->field])) { $cronExpr = json_decode((string) $item[$this->field]); $i = 0; if (isset($cronExpr->days)) { foreach ($cronExpr->days as $day) { foreach ($cronExpr->hours as $hour) { $time = explode(':', $hour); if (date('l', $cron['current']['localTime']) == $day) { $cron['tasks'][$i]['localTime'] = strtotime($this->coreDate->date('Y-m-d', time() + $offset)) + ($time[0] * 60 * 60) + ($time[1] * 60); } else { $cron['tasks'][$i]['localTime'] = strtotime('last ' . $day, $cron['current']['localTime']) + ($time[0] * 60 * 60) + ($time[1] * 60); } if ($cron['tasks'][$i]['localTime'] >= $cron['file']['localTime'] && $cron['tasks'][$i]['localTime'] <= $cron['current']['localTime']) { $status = $helperProgress::PENDING; continue 2; } } } } return $status; } else { return $helperProgress::SUCCEEDED; } } protected function getNextSchedule($item) { $offset = $this->coreDate->getGmtOffset(); $cron['current']['localTime'] = $this->coreDate->timestamp(time() + $offset); $cron['current']['gmtTime'] = $this->coreDate->gmtTimestamp(); if (isset($item[$this->field])) { $cronExpr = json_decode((string) $item[$this->field]); $schedules = []; if (isset($cronExpr->days)) { foreach ($cronExpr->days as $day) { foreach ($cronExpr->hours as $hour) { $time = explode(':', $hour); if (date('l', $cron['current']['localTime']) == $day) { $schedule = strtotime($this->coreDate->date('Y-m-d', time() + $offset)) + ($time[0] * 60 * 60) + ($time[1] * 60); } else { $schedule = strtotime('next ' . $day, $cron['current']['localTime']) + ($time[0] * 60 * 60) + ($time[1] * 60); } if ($schedule > $cron['current']['localTime']) { $schedules[] = $schedule; } } } } sort($schedules); if (!empty($schedules)) { return $this->objectManager->create( 'Magento\Framework\Stdlib\DateTime\TimezoneInterface' )->formatDate( date('Y-m-d H:i:s', $schedules[0]), \IntlDateFormatter::MEDIUM, true ); } else { return __('not set'); } } else { return ""; } } }