paste.chapril.org-privatebin/lib/Model.php

92 lines
1.9 KiB
PHP
Raw Normal View History

<?php
/**
2016-07-11 11:58:15 +02:00
* PrivateBin
*
* a zero-knowledge paste bin
*
2016-07-11 11:58:15 +02:00
* @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
2021-04-05 16:44:12 +02:00
* @version 1.3.5
*/
2016-12-12 18:43:23 +01:00
2016-12-12 18:50:00 +01:00
namespace PrivateBin;
2016-07-21 17:09:48 +02:00
use PrivateBin\Model\Paste;
use PrivateBin\Persistence\PurgeLimiter;
2016-07-21 17:09:48 +02:00
/**
* Model
*
2016-07-11 11:58:15 +02:00
* Factory of PrivateBin instance models.
*/
class Model
{
/**
* Configuration.
*
* @var Configuration
*/
private $_conf;
/**
* Data storage.
*
2018-11-19 13:07:25 +01:00
* @var Data\AbstractData
*/
private $_store = null;
/**
* Factory constructor.
*
* @param configuration $conf
*/
public function __construct(Configuration $conf)
{
$this->_conf = $conf;
}
/**
* Get a paste, optionally a specific instance.
*
* @param string $pasteId
* @return Paste
*/
public function getPaste($pasteId = null)
{
$paste = new Paste($this->_conf, $this->_getStore());
if ($pasteId !== null) {
$paste->setId($pasteId);
}
return $paste;
}
/**
* Checks if a purge is necessary and triggers it if yes.
*/
public function purge()
{
PurgeLimiter::setConfiguration($this->_conf);
PurgeLimiter::setStore($this->_getStore());
if (PurgeLimiter::canPurge()) {
$this->_getStore()->purge($this->_conf->getKey('batchsize', 'purge'));
}
}
/**
* Gets, and creates if neccessary, a store object
*
2018-11-19 13:07:25 +01:00
* @return Data\AbstractData
*/
private function _getStore()
{
if ($this->_store === null) {
$this->_store = forward_static_call(
'PrivateBin\\Data\\' . $this->_conf->getKey('class', 'model') . '::getInstance',
$this->_conf->getSection('model_options')
);
}
return $this->_store;
}
2016-07-11 11:58:15 +02:00
}