array()); /** * Configuration. * * @access protected * @var Configuration */ protected $_conf; /** * Data storage. * * @access protected * @var AbstractData */ protected $_store; /** * Instance constructor. * * @access public * @param Configuration $configuration * @param AbstractData $storage */ public function __construct(Configuration $configuration, AbstractData $storage) { $this->_conf = $configuration; $this->_store = $storage; } /** * Get ID. * * @access public * @return string */ public function getId() { return $this->_id; } /** * Set ID. * * @access public * @param string $id * @throws Exception */ public function setId($id) { if (!self::isValidId($id)) { throw new Exception('Invalid paste ID.', 60); } $this->_id = $id; } /** * Set data and recalculate ID. * * @access public * @param array $data * @throws Exception */ public function setData(array $data) { $data = $this->_sanitize($data); $this->_validate($data); $this->_data = $data; // calculate a 64 bit checksum to avoid collisions $this->setId(hash(version_compare(PHP_VERSION, '5.6', '<') ? 'fnv164' : 'fnv1a64', $data['ct'])); } /** * Get instance data. * * @access public * @return array */ public function get() { return $this->_data; } /** * Store the instance's data. * * @access public * @throws Exception */ abstract public function store(); /** * Delete the current instance. * * @access public * @throws Exception */ abstract public function delete(); /** * Test if current instance exists in store. * * @access public * @return bool */ abstract public function exists(); /** * Validate ID. * * @access public * @static * @param string $id * @return bool */ public static function isValidId($id) { return (bool) preg_match('#\A[a-f\d]{16}\z#', (string) $id); } /** * Sanitizes data to conform with current configuration. * * @access protected * @param array $data * @return array */ abstract protected function _sanitize(array $data); /** * Validate data. * * @access protected * @param array $data * @throws Exception */ protected function _validate(array $data) { } }