-
Notifications
You must be signed in to change notification settings - Fork 783
/
AbstractData.php
185 lines (169 loc) · 4.01 KB
/
AbstractData.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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<?php
/**
* PrivateBin
*
* a zero-knowledge paste bin
*
* @link https://github.com/PrivateBin/PrivateBin
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
* @version 1.0
*/
namespace PrivateBin\Data;
use stdClass;
/**
* AbstractData
*
* Abstract model for PrivateBin data access, implemented as a singleton.
*/
abstract class AbstractData
{
/**
* singleton instance
*
* @access protected
* @static
* @var AbstractData
*/
protected static $_instance = null;
/**
* enforce singleton, disable constructor
*
* Instantiate using {@link getInstance()}, privatebin is a singleton object.
*
* @access protected
*/
protected function __construct()
{
}
/**
* enforce singleton, disable cloning
*
* Instantiate using {@link getInstance()}, privatebin is a singleton object.
*
* @access private
*/
private function __clone()
{
}
/**
* get instance of singleton
*
* @access public
* @static
* @param array $options
* @return privatebin_abstract
*/
public static function getInstance($options)
{
}
/**
* Create a paste.
*
* @access public
* @param string $pasteid
* @param array $paste
* @return bool
*/
abstract public function create($pasteid, $paste);
/**
* Read a paste.
*
* @access public
* @param string $pasteid
* @return stdClass|false
*/
abstract public function read($pasteid);
/**
* Delete a paste and its discussion.
*
* @access public
* @param string $pasteid
* @return void
*/
abstract public function delete($pasteid);
/**
* Test if a paste exists.
*
* @access public
* @param string $pasteid
* @return bool
*/
abstract public function exists($pasteid);
/**
* Create a comment in a paste.
*
* @access public
* @param string $pasteid
* @param string $parentid
* @param string $commentid
* @param array $comment
* @return bool
*/
abstract public function createComment($pasteid, $parentid, $commentid, $comment);
/**
* Read all comments of paste.
*
* @access public
* @param string $pasteid
* @return array
*/
abstract public function readComments($pasteid);
/**
* Test if a comment exists.
*
* @access public
* @param string $pasteid
* @param string $parentid
* @param string $commentid
* @return bool
*/
abstract public function existsComment($pasteid, $parentid, $commentid);
/**
* Returns up to batch size number of paste ids that have expired
*
* @access protected
* @param int $batchsize
* @return array
*/
abstract protected function _getExpiredPastes($batchsize);
/**
* Perform a purge of old pastes, at most the given batchsize is deleted.
*
* @access public
* @param int $batchsize
* @return void
*/
public function purge($batchsize)
{
if ($batchsize < 1) {
return;
}
$pastes = $this->_getExpiredPastes($batchsize);
if (count($pastes)) {
foreach ($pastes as $pasteid) {
$this->delete($pasteid);
}
}
}
/**
* Get next free slot for comment from postdate.
*
* @access public
* @param array $comments
* @param int|string $postdate
* @return int|string
*/
protected function getOpenSlot(&$comments, $postdate)
{
if (array_key_exists($postdate, $comments)) {
$parts = explode('.', $postdate, 2);
if (!array_key_exists(1, $parts)) {
$parts[1] = 0;
}
++$parts[1];
return $this->getOpenSlot($comments, implode('.', $parts));
}
return $postdate;
}
}