Spamworldpro Mini Shell
Spamworldpro


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/mirasvit/module-report/src/Report/Service/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/mirasvit/module-report/src/Report/Service/DateService.php
<?php
/**
 * Mirasvit
 *
 * This source file is subject to the Mirasvit Software License, which is available at https://mirasvit.com/license/.
 * Do not edit or add to this file if you wish to upgrade the to newer versions in the future.
 * If you wish to customize this module for your needs.
 * Please refer to http://www.magentocommerce.com for more information.
 *
 * @category  Mirasvit
 * @package   mirasvit/module-report
 * @version   1.4.27
 * @copyright Copyright (C) 2024 Mirasvit (https://mirasvit.com/)
 */



namespace Mirasvit\Report\Service;

use Magento\Directory\Helper\Data as DirectoryHelper;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
use Magento\Store\Model\StoreManagerInterface;
use Mirasvit\Report\Api\Service\DateServiceInterface;
use Mirasvit\Core\Model\Date;

/**
 * @SuppressWarnings(PHPMD)
 */
class DateService implements DateServiceInterface
{
    /**
     * @var DateTime
     */
    private $dateTime;

    /**
     * @var StoreManagerInterface
     */
    private $storeManager;

    /**
     * @var ScopeConfigInterface
     */
    private $scopeConfig;

    /**
     * @var TimezoneInterface
     */
    private $localeDate;

    /**
     * DateService constructor.
     * @param TimezoneInterface $localeDate
     * @param DateTime $dateTime
     * @param StoreManagerInterface $storeManager
     * @param ScopeConfigInterface $scopeConfig
     */
    public function __construct(
        TimezoneInterface $localeDate,
        DateTime $dateTime,
        StoreManagerInterface $storeManager,
        ScopeConfigInterface $scopeConfig
    ) {
        $this->dateTime     = $dateTime;
        $this->storeManager = $storeManager;
        $this->scopeConfig  = $scopeConfig;
        $this->localeDate   = $localeDate;
    }

    /**
     * {@inheritdoc}
     */
    public function getIntervals($addHint = false)
    {
        $intervals = [];

        $intervals[self::TODAY]        = 'Today';
        $intervals[self::YESTERDAY]    = 'Yesterday';
        $intervals[self::LAST_7_DAYS]  = 'Last 7 days';
        $intervals[self::LAST_30_DAYS] = 'Last 30 days';
        $intervals[self::LAST_90_DAYS] = 'Last 90 days';
        $intervals[self::LAST_365_DAYS] = 'Last 365 days';

        $intervals[self::THIS_WEEK]    = 'Week to date';
        $intervals[self::THIS_MONTH]   = 'Month to date';
        $intervals[self::THIS_QUARTER] = 'Quarter to date';
        $intervals[self::THIS_YEAR]    = 'Year to date';

        if ($this->getFiscalYearStart()) {
//            $intervals[self::FISCAL_THIS_MONTH]   = 'Month to Date (fiscal)';
//            $intervals[self::FISCAL_THIS_QUARTER] = 'Quarter to Date (fiscal)';
            $intervals[self::FISCAL_THIS_YEAR] = 'Year to date (fiscal)';
        }

        $intervals[self::PREVIOUS_WEEK]  = 'Last week';
        $intervals[self::PREVIOUS_MONTH] = 'Last month';
        $intervals[self::PREVIOUS_YEAR]  = 'Last year';

        if ($this->getFiscalYearStart()) {
//            $intervals[self::FISCAL_PREV_MONTH]   = 'Last Month (fiscal)';
//            $intervals[self::FISCAL_PREV_QUARTER] = 'Last Quarter (fiscal)';
            $intervals[self::FISCAL_PREV_YEAR] = 'Last year (fiscal)';
        }

        $intervals[self::LIFETIME] = 'Lifetime';

        if ($addHint) {
            foreach ($intervals as $code => $label) {
                $label = __($label);

                $hint = $this->getIntervalHint($code);

                if ($hint) {
                    $label .= ' / ' . $hint;

                    $intervals[$code] = $label . '';
                }
            }
        }

        return $intervals;
    }

    /**
     * @return array|null
     */
    private function getFiscalYearStart()
    {
        $fiscalYearStart = $this->scopeConfig->getValue('reports/dashboard/ytd_start');

        if (!$fiscalYearStart || $fiscalYearStart == '01,01' || $fiscalYearStart == '1,1') {
            return null;
        }

        return explode(',', $fiscalYearStart);
    }

    /**
     * {@inheritdoc}
     */
    public function getInterval($code, $inStoreTZ = false)
    {
        // we use local timestamp for select correct day (UTC 12 Aug, 00:10, EST 11 Aug, 20:10)
        $timestamp = strtotime($this->localeDate->date()->format('Y-m-d H:i:s'));

        $firstDay = (int)$this->scopeConfig->getValue('general/locale/firstday');
        $locale   = $this->scopeConfig->getValue(DirectoryHelper::XML_PATH_DEFAULT_LOCALE);


        $from = new Date(
            $timestamp,
            null,
            $locale
        );

        /** @var Date $to */
        $to = clone $from;

        switch ($code) {
            case self::TODAY:
                $from->setTime('00:00:00');

                $to->setTime('23:59:59');

                break;

            case self::YESTERDAY:
                $from->subDay(1)
                    ->setTime('00:00:00');

                $to->subDay(1)
                    ->setTime('23:59:59');

                break;

            case self::THIS_MONTH:
                $from->setDay(1)
                    ->setTime('00:00:00');

                $to->setDay(1)
                    ->addDay($to->get(Date::MONTH_DAYS) - 1)
                    ->setTime('23:59:59');

                break;

            case self::PREVIOUS_MONTH:
            case 'last_month':
                $from->setDay(1)
                    ->subMonth(1)
                    ->setTime('00:00:00');

                $to->setDay(1)
                    ->subMonth(1)
                    ->addDay($to->get(Date::MONTH_DAYS) - 1)
                    ->setTime('23:59:59');

                break;

            case self::THIS_QUARTER:
                $month = intval($from->get(Date::MONTH) / 3) * 3 + 1;
                $from->setDay(1)
                    ->setMonth($month)
                    ->setTime('00:00:00');

                $to->setDay(1)
                    ->setMonth($month)
                    ->addMonth(3)
                    ->subDay(1)
                    ->setTime('23:59:59');

                break;

            case self::PREVIOUS_QUARTER:
            case 'last_quarter':
                $month = intval($from->get(Date::MONTH) / 3) * 3 + 1;

                $from->setDay(1)
                    ->setMonth($month)
                    ->subMonth(3)
                    ->setTime('00:00:00');

                $to->setDay(1)
                    ->setMonth($month)
                    ->addMonth(3)
                    ->subDay(1)
                    ->subMonth(3)
                    ->setTime('23:59:59');
                break;

            case self::THIS_YEAR:
                $from->setDay(1)
                    ->setMonth(1)
                    ->setTime('00:00:00');

                $to->setDay(1)
                    ->setMonth(1)
                    ->addDay($to->get(Date::LEAPYEAR) ? 365 : 364)
                    ->setTime('23:59:59');

                break;

            case self::PREVIOUS_YEAR:
            case 'last_year':
                $from->setDay(1)
                    ->setMonth(1)
                    ->subYear(1)
                    ->setTime('00:00:00');

                $to->setDay(1)
                    ->setMonth(1)
                    ->addDay($to->get(Date::LEAPYEAR) ? 365 : 364)
                    ->subYear(1)
                    ->setTime('23:59:59');

                break;

            case self::THIS_WEEK:
                $weekday = $from->get(Date::WEEKDAY_DIGIT); #0-6

                if ($weekday < $firstDay) {
                    $weekday += 7;
                }

                $from->subDay($weekday - $firstDay)
                    ->setTime('00:00:00');

                $to->addDay(6 - $weekday + $firstDay)
                    ->setTime('23:59:59');

                break;

            case self::PREVIOUS_WEEK:
            case 'last_week':
                $weekday = $from->get(Date::WEEKDAY_DIGIT); #0-6

                if ($weekday < $firstDay) {
                    $weekday += 7;
                }

                $from->subDay($weekday - $firstDay)
                    ->subWeek(1)
                    ->setTime('00:00:00');

                $to->addDay(6 - $weekday + $firstDay)
                    ->subWeek(1)
                    ->setTime('23:59:59');

                break;

            case self::LAST_7_DAYS:
                $from->subDay(6)->setTime('00:00:00');
                $to->setTime('23:59:59');

                break;

            case self::LAST_30_DAYS:
                $from->subDay(29)->setTime('00:00:00');
                $to->setTime('23:59:59');

                break;

            case self::LAST_90_DAYS:
                $from->subDay(89)->setTime('00:00:00');
                $to->setTime('23:59:59');

                break;

            case self::LAST_365_DAYS:
                $from->subYear(1)->addDay(1)->setTime('00:00:00');
                $to->setTime('23:59:59');

                break;

            case self::FISCAL_THIS_YEAR:
                list($month, $day) = $this->getFiscalYearStart();

                $from->setDay((int)$day)
                    ->setMonth((int)$month)
                    ->setTime('00:00:00');

                $to->setDay((int)$day)
                    ->setMonth((int)$month)
                    ->addDay($to->get(Date::LEAPYEAR) ? 365 : 364)
                    ->setTime('23:59:59');

                break;

            case self::FISCAL_PREV_YEAR:
                list($month, $day) = $this->getFiscalYearStart();

                $from->setDay((int)$day)
                    ->setMonth((int)$month)
                    ->subYear(1)
                    ->setTime('00:00:00');

                $to->setDay((int)$day)
                    ->setMonth((int)$month)
                    ->addDay($to->get(Date::LEAPYEAR) ? 365 : 364)
                    ->subYear(1)
                    ->setTime('23:59:59');

                break;

            case self::LIFETIME:
            case 'life':
                $from->subYear(20);
                $to->addYear(10);

                break;
        }
        return new \Magento\Framework\DataObject([
            'from' => $from,
            'to'   => $to,
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function getIntervalHint($code)
    {
        $hint = '';

        $interval = $this->getInterval($code, true);
        $from     = $interval->getFrom();
        $to       = $interval->getTo();

        switch ($code) {
            case self::TODAY:
            case self::YESTERDAY:
                $hint = $from->get('M, d HH:mm') . ' - ' . $to->get('HH:mm');
                break;

            case self::THIS_WEEK:
            case self::PREVIOUS_WEEK:
            case self::LAST_7_DAYS:
            case self::LAST_30_DAYS:
            case self::LAST_90_DAYS:
            case self::LAST_365_DAYS:
            case self::THIS_MONTH:
            case self::PREVIOUS_MONTH:
            case self::THIS_QUARTER:
            case self::PREVIOUS_QUARTER:
                if ($from->get('YYYY') == $to->get('YYYY') && $from->get('YYYY') == date('Y')) {
                    if ($from->get('M') == $to->get('M')) {
                        $hint = $from->get('M, d') . ' - ' . $to->get('d');
                    } else {
                        $hint = $from->get('M, d') . ' - ' . $to->get('M, d');
                    }
                } else {
                    $hint = $from->get('M, d YYYY') . ' - ' . $to->get('M, d YYYY');
                }

                break;

            case self::THIS_YEAR:
            case self::PREVIOUS_YEAR:
            case self::FISCAL_THIS_YEAR:
            case self::FISCAL_PREV_YEAR:
                $hint = $from->get('M, d YYYY') . ' - ' . $to->get('M, d YYYY');
                break;

            //            case self::LAST_24H:
            //                $hint = $from->get('MMM, d HH:mm') . ' - ' . $to->get('MMM, d HH:mm');
            //                break;

            case self::LIFETIME:
                $hint = $from->get('M, d YYYY') . ' - ' . $to->get('M, d YYYY');
                break;
        }

        return $hint;
    }

    /**
     * {@inheritdoc}
     */
    public function getPreviousInterval($interval, $offset, $inStoreTZ = false)
    {
        $diff = clone $interval->getTo();
        $diff->sub($interval->getFrom());

        if ($inStoreTZ) {
            $diff->sub($this->dateTime->getGmtOffset());
        }

        $now = new Date(
            $this->dateTime->gmtTimestamp(),
            null,
            $this->storeManager->getStore()->getLocaleCode()
        );
        if ($interval->getTo()->getTimestamp() > $now->getTimestamp()) {
            $interval->getTo()->subTimestamp($interval->getTo()->getTimestamp() - $now->getTimestamp());
        }

        $interval->getTo()->setTime('23:59:59');

        if ($offset === self::OFFSET_YEAR) {
            $interval->getFrom()->subYear(1);
            $interval->getTo()->subYear(1);
        } elseif ($offset === self::OFFSET_MONTH) {
            $interval->getFrom()->subMonth(1);
            $interval->getTo()->subMonth(1);
        } elseif ($offset === self::OFFSET_WEEK) {
            $interval->getFrom()->subWeek(1);
            $interval->getTo()->subWeek(1);
        } else {
            $interval->getFrom()->sub($diff);
            $interval->getTo()->sub($diff);
        }

        return $interval;
    }

    /**
     * {@inheritdoc}
     */
    public function toZendDate($date, $format = Date::ISO_8601)
    {
        if ($date instanceof Date) {
            return $date;
        }

        return new Date($date, $format);
    }

    /**
     * {@inheritdoc}
     */
    public function toMysqlDate($date)
    {
        if ($date instanceof Date) {
            return $date->toString('Y-MM-dd HH:mm:ss');
        }

        return date('YYYY-MM-dd HH:mm:ss', strtotime($date));
    }

    /**
     * @param string|Date $from
     * @param string|Date $to
     * @return \Magento\Framework\DataObject|\Mirasvit\Report\Api\Service\IntervalInterface
     */
    public function toInterval($from, $to)
    {
        return new \Magento\Framework\DataObject([
            'from' => $this->toZendDate($from),
            'to'   => $this->toZendDate($to),
        ]);
    }
}

Spamworldpro Mini