DANFA

Статистика записей текущего дня не учитывает часовой пояс

Давно заметил, что статистика записей за текущий день, что отображается в Админ панели, считает начало дня, не учитывая часовой пояс. Это потому что, во всех методах getSiteStatsForAdmins() (Файлы модулей: "callback.class.php"), по умолчанию нацелено на часовой пояс 0:
$today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));

Из за этого статистика может быть неточной.

У меня наконец то дошли руки до этого и сейчас расскажу, как я добился, чтобы статистика записей учитывала часовой пояс.

Для определения времени с учётом часового пояса пользователя, в PHPFox есть метод: convertToGmt(), в библиотеке date (Файл: "include/library/phpfox/date/date.class.php"). Однако функция может работать только с типом переменной int, то есть принимает только цифру (Метка времени). А я хочу ей отправлять строку midnight. Для этого я слегка правлю метод convertToGmt(), добавив в начало метода:
	    // Конвертирование строки в Unix-timestamp (Например: 'midnight')
	    if (!is_numeric($time))
	    {
	        $time = strtotime($time);
	    }

С этим разобрались! Теперь в функцию можно "посылать" строки вида: midnight, today, yesterday, и так далее.

Следующая задача - это в файлах "callback.class.php", каждого модуля, что участвует в статистике, заменить:
		$today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));

На:
		$today = phpfox::getLib('date')->convertToGmt('midnight');

Например, модуль blog: файл: "module/blog/include/service/callback.class.php":
	public function getSiteStatsForAdmins()
	{
		$today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));

		return [
			'phrase' => phpfox::getPhrase('blog.blogs'),
			'value'  => $this->database()
			    ->select('COUNT(*)')
				->from($this->database()->table('blog'))
				->where('time_stamp >= ' . $today)
				->execute('getSlaveField')
		];
	}

Меняем на:
	public function getSiteStatsForAdmins()
	{
		$today = phpfox::getLib('date')->convertToGmt('midnight');

		return [
			'phrase' => phpfox::getPhrase('blog.blogs'),
			'value'  => $this->database()
			    ->select('COUNT(*)')
				->from($this->database()->table('blog'))
				->where('time_stamp >= ' . $today)
				->execute('getSlaveField')
		];
	}

Заменив во всех модулях код, статистика будет отображать верно. На этом работа по исправлению часового пояса в статистике записей закончена.

Кстати, в мой движок не учитывал статистику добавленных ссылок и страниц. Исправил. Добавил метод статистики добавленных ссылок (Файл: "module/link/include/service/callback.class.php"):
	public function getSiteStatsForAdmins()
	{
		$today = phpfox::getLib('date')->convertToGmt('midnight');

		return [
			'phrase' => phpfox::getPhrase('link.links'),
			'value'  => $this->database()
			    ->select('COUNT(*)')
				->from($this->database()->table('link'))
				->where('time_stamp >= ' . $today)
				->execute('getSlaveField')
		];
	}

И количество созданных страниц (Файл: "module/pages/include/service/callback.class.php"):
	public function getSiteStatsForAdmins()
	{
		$today = phpfox::getLib('date')->convertToGmt('midnight');

		return [
			'phrase' => phpfox::getPhrase('pages.pages'),
			'value'  => $this->database()
			    ->select('COUNT(*)')
				->from($this->database()->table('pages'))
				->where('time_stamp >= ' . $today)
				->execute('getSlaveField')
		];
	}

После добавления данного кода, необходимо почистить кэш движка.

Обращаю ваше внимание, что название моих переменных и методов/функций может отличаться от вашего. Если будите следовать моим правкам исправляйте на свои названия, чтобы избежать ошибок. Либо пришлите свою функцию мне, в своём комментарии, я её исправлю учитывая ваши названия.
Автор:  8 часов назад