summaryrefslogtreecommitdiffstats
path: root/modules-available/statistics_reporting/inc/remotereport.inc.php
blob: 7aad8b3a9fa4a1fc8e9be0a49c394628e97d123f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php

class RemoteReport
{

	const ENABLED_ID = 'statistics-reporting-enabled';
	const NEXT_SUBMIT_ID = 'statistics-reporting-next';

	/**
	 * Enable or disable remote reporting of usage statistics.
	 *
	 * @param bool|string $isEnabled true or 'on' if reporting should be enabled
	 */
	public static function setReportingEnabled($isEnabled)
	{
		$value = ($isEnabled === true || $isEnabled === 'on') ? 'on' : '';
		Property::set(self::ENABLED_ID, $value, 60 * 24 * 14);
	}

	/**
	 * Returns whether remote reporting is enabled or not.
	 *
	 * @return bool true if reporting is on, false if off
	 */
	public static function isReportingEnabled()
	{
		return Property::get(self::ENABLED_ID, false) === 'on';
	}

	/**
	 * Get the timestamp of the end of the next 7 day interval to
	 * report statistics for. Usually if this is < time() you want
	 * to generate the report.
	 *
	 * @return int timestamp of the end of the reporting time frame
	 */
	public static function getReportingTimestamp()
	{
		$ts = Property::get(self::NEXT_SUBMIT_ID, 0);
		if ($ts === 0) {
			// No timestamp stored yet - might be a fresh install
			// schedule for next time
			self::updateNextReportingTimestamp();
			$ts = Property::get(self::NEXT_SUBMIT_ID, 0);
		} elseif ($ts < strtotime('last monday')) {
			// Too long ago, move forward to last monday
			$ts = strtotime('last monday');
		}
		return $ts;
	}

	/**
	 * Update the timestamp of the next scheduled statistics report.
	 * This sets the end of the next 7 day interval to the start of
	 * next monday (00:00).
	 */
	public static function writeNextReportingTimestamp()
	{
		Property::set(self::NEXT_SUBMIT_ID, strtotime('next monday'), 60 * 24 * 14);
	}

	/**
	 * Generate the multi-dimensional array containing the anonymized
	 * (weekly) statistics to report.
	 *
	 * @param $from start timestamp
	 * @param $to end timestamp
	 * @return array wrapped up statistics, ready for reporting
	 */
	public static function generateReport($from, $to) {
		GetData::$from = $from;
		GetData::$to = $to;
		GetData::$salt = bin2hex(Util::randomBytes(20));
		$data = GetData::total(GETDATA_ANONYMOUS);
		$data['perLocation'] = GetData::perLocation(GETDATA_ANONYMOUS);
		$data['perClient'] = GetData::perClient(GETDATA_ANONYMOUS);
		$data['perUser'] = GetData::perUser(GETDATA_ANONYMOUS);
		$data['perVM'] = GetData::perVM(GETDATA_ANONYMOUS);
		$data['tsFrom'] = $from;
		$data['tsTo'] = $to;
		return $data;
	}

}