| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- <?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.3.5
- */
- namespace PrivateBin\Data;
- /**
- * AbstractData
- *
- * Abstract model for data access, implemented as a singleton.
- */
- abstract class AbstractData
- {
- /**
- * Singleton instance
- *
- * @access protected
- * @static
- * @var AbstractData
- */
- protected static $_instance = null;
- /**
- * cache for the traffic limiter
- *
- * @access private
- * @static
- * @var array
- */
- protected static $_last_cache = array();
- /**
- * Enforce singleton, disable constructor
- *
- * Instantiate using {@link getInstance()}, this object implements the singleton pattern.
- *
- * @access protected
- */
- protected function __construct()
- {
- }
- /**
- * Enforce singleton, disable cloning
- *
- * Instantiate using {@link getInstance()}, this object implements the singleton pattern.
- *
- * @access private
- */
- private function __clone()
- {
- }
- /**
- * Get instance of singleton
- *
- * @access public
- * @static
- * @param array $options
- * @return AbstractData
- */
- public static function getInstance(array $options)
- {
- }
- /**
- * Create a paste.
- *
- * @access public
- * @param string $pasteid
- * @param array $paste
- * @return bool
- */
- abstract public function create($pasteid, array $paste);
- /**
- * Read a paste.
- *
- * @access public
- * @param string $pasteid
- * @return array|false
- */
- abstract public function read($pasteid);
- /**
- * Delete a paste and its discussion.
- *
- * @access public
- * @param string $pasteid
- */
- 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, array $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);
- /**
- * Purge outdated entries.
- *
- * @access public
- * @param string $namespace
- * @param int $time
- * @return void
- */
- public function purgeValues($namespace, $time)
- {
- if ($namespace === 'traffic_limiter') {
- foreach (self::$_last_cache as $key => $last_submission) {
- if ($last_submission <= $time) {
- unset(self::$_last_cache[$key]);
- }
- }
- }
- }
- /**
- * Save a value.
- *
- * @access public
- * @param string $value
- * @param string $namespace
- * @param string $key
- * @return bool
- */
- abstract public function setValue($value, $namespace, $key = '');
- /**
- * Load a value.
- *
- * @access public
- * @param string $namespace
- * @param string $key
- * @return string
- */
- abstract public function getValue($namespace, $key = '');
- /**
- * 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
- */
- 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 protected
- * @param array $comments
- * @param int|string $postdate
- * @return int|string
- */
- protected function getOpenSlot(array &$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;
- }
- /**
- * Upgrade pre-version 1 pastes with attachment to version 1 format.
- *
- * @access protected
- * @static
- * @param array $paste
- * @return array
- */
- protected static function upgradePreV1Format(array $paste)
- {
- if (array_key_exists('attachment', $paste['meta'])) {
- $paste['attachment'] = $paste['meta']['attachment'];
- unset($paste['meta']['attachment']);
- if (array_key_exists('attachmentname', $paste['meta'])) {
- $paste['attachmentname'] = $paste['meta']['attachmentname'];
- unset($paste['meta']['attachmentname']);
- }
- }
- return $paste;
- }
- }
|