<?php /** * @package akeebabackup * @copyright Copyright (c)2006-2022 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AkeebaBackup\Administrator\View\Mixin; defined('_JEXEC') || die(); use DateTimeZone; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Date\Date; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; trait BackupStartTimeAware { /** * Should I use the user's local time zone for display? * * @var boolean */ public $useLocalTime; /** * Time format string to use for the time zone suffix * * @var string */ public $timeZoneFormat; /** * Date format for the backup start time * * @var string */ public $dateFormat = ''; protected function initTimeInformation() { $cParams = ComponentHelper::getParams('com_akeebabackup'); // Date format $dateFormat = $cParams->get('dateformat', ''); $dateFormat = trim($dateFormat); $this->dateFormat = !empty($dateFormat) ? $dateFormat : Text::_('DATE_FORMAT_LC4'); // Time zone options $this->useLocalTime = $cParams->get('localtime', '1') == 1; $this->timeZoneFormat = $cParams->get('timezonetext', 'T'); } /** * Get the start time and duration of a backup record * * @param array $record A backup record * * @return array array(startTimeAsString, durationAsString) */ protected function getTimeInformation($record) { $utcTimeZone = new DateTimeZone('UTC'); $startTime = new Date($record['backupstart'], $utcTimeZone); $endTime = new Date($record['backupend'], $utcTimeZone); $duration = $endTime->toUnix() - $startTime->toUnix(); if ($duration > 0) { $seconds = $duration % 60; $duration = $duration - $seconds; $minutes = ($duration % 3600) / 60; $duration = $duration - $minutes * 60; $hours = $duration / 3600; $duration = sprintf('%02d', $hours) . ':' . sprintf('%02d', $minutes) . ':' . sprintf('%02d', $seconds); } else { $duration = ''; } $user = Factory::getApplication()->getIdentity(); $userTZ = $user->getParam('timezone', 'UTC'); $tz = new DateTimeZone($userTZ); $startTime->setTimezone($tz); $timeZoneSuffix = ''; if (!empty($this->timeZoneFormat)) { $timeZoneSuffix = $startTime->format($this->timeZoneFormat, $this->useLocalTime); } return [ $startTime->format($this->dateFormat, $this->useLocalTime), $duration, $timeZoneSuffix, ]; } }