forked from pkp/usageStats
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUsageStatsTemporaryRecordDAO.inc.php
128 lines (113 loc) · 3.13 KB
/
UsageStatsTemporaryRecordDAO.inc.php
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
/**
* @file plugins/generic/usageStats/UsageStatsTemporaryRecordDAO.inc.php
*
* Copyright (c) 2013-2020 Simon Fraser University
* Copyright (c) 2003-2020 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class UsageStatsTemporaryRecordDAO
* @ingroup plugins_generic_usageStats
*
* @brief Operations for retrieving and adding temporary usage statistics records.
*/
class UsageStatsTemporaryRecordDAO extends DAO {
/** @var Enumerable|false */
var $_result;
/** @var string|null */
var $_loadId;
/**
* Constructor
*/
function __construct() {
parent::__construct();
$this->_result = false;
$this->_loadId = null;
}
/**
* Add the passed usage statistic record.
* @param $assocType int
* @param $assocId int
* @param $representationId int
* @param $day string
* @param $time int
* @param $countryCode string
* @param $region string
* @param $cityName string
* @param $fileType int
* @param $loadId string
* @return boolean
*/
function insert($assocType, $assocId, $representationId, $day, $time, $countryCode, $region, $cityName, $fileType, $loadId) {
$this->update(
'INSERT INTO usage_stats_temporary_records
(assoc_type, assoc_id, representation_id, day, entry_time, country_id, region, city, file_type, load_id)
VALUES
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
[
(int) $assocType,
(int) $assocId,
isset($representationId) ? (int) $representationId : NULL,
$day,
(int) $time,
$countryCode,
$region,
$cityName,
(int) $fileType,
$loadId // Not number.
]
);
return true;
}
/**
* Get next temporary stats record by load id.
* @param string $loadId
* @return Enumerable
*/
function getByLoadId($loadId) {
return $this->_getGrouped($loadId);
}
/**
* Delete all temporary records associated
* with the passed load id.
* @param $loadId string
* @return boolean
*/
function deleteByLoadId($loadId) {
return $this->update(
'DELETE from usage_stats_temporary_records WHERE load_id = ?',
[$loadId] // $loadId is not a number
);
}
/**
* Delete the record with the passed assoc id and type with
* the most recent day value.
* @param $assocType int
* @param $assocId int
* @param $time int
* @param $loadId string
* @return boolean
*/
function deleteRecord($assocType, $assocId, $time, $loadId) {
return $this->update('DELETE from usage_stats_temporary_records
WHERE assoc_type = ? AND assoc_id = ? AND entry_time = ? AND load_id = ?',
[(int) $assocType, (int) $assocId, $time, $loadId] // $loadId is not a number
);
}
//
// Private helper methods.
//
/**
* Get all temporary records with the passed load id grouped.
* @param $loadId string
* @return Enumerable
*/
function _getGrouped($loadId) {
return $this->retrieve(
'SELECT assoc_type, assoc_id, representation_id, day, country_id, region, city, file_type, load_id, count(metric) as metric
FROM usage_stats_temporary_records WHERE load_id = ?
GROUP BY assoc_type, assoc_id, representation_id, day, country_id, region, city, file_type, load_id',
[$loadId] // $loadId is not a number.
);
}
}