_conf = $configuration; $this->_store = $storage; $this->_data = new stdClass; $this->_data->meta = new stdClass; } /** * 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 string $data * @throws Exception */ public function setData($data) { if (!Sjcl::isValid($data)) { throw new Exception('Invalid data.', 61); } $this->_data->data = $data; // We just want a small hash to avoid collisions: // Half-MD5 (64 bits) will do the trick $this->setId(substr(hash('md5', $data), 0, 16)); } /** * Get instance data. * * @access public * @return stdClass */ abstract public function get(); /** * 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); } }