-DROP TABLE IF EXISTS `feedentries`;
CREATE TABLE `feedentries` (
`fe_id` int(11) NOT NULL AUTO_INCREMENT,
`fe_f_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-DROP TABLE IF EXISTS `feedentryurls`;
CREATE TABLE `feedentryurls` (
`feu_id` int(11) NOT NULL AUTO_INCREMENT,
`feu_fe_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-DROP TABLE IF EXISTS `feeds`;
CREATE TABLE `feeds` (
`f_id` int(11) NOT NULL AUTO_INCREMENT,
`f_url` varchar(2048) CHARACTER SET utf8 NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-DROP TABLE IF EXISTS `pingbacks`;
CREATE TABLE `pingbacks` (
`p_id` int(11) NOT NULL AUTO_INCREMENT,
`p_source` varchar(1024) CHARACTER SET latin1 NOT NULL,
`p_client_ip` varchar(40) CHARACTER SET latin1 NOT NULL,
`p_client_agent` varchar(128) CHARACTER SET latin1 NOT NULL,
`p_client_referer` varchar(1024) CHARACTER SET latin1 NOT NULL,
+ `p_needs_review` tinyint(1) NOT NULL,
+ `p_use` tinyint(1) NOT NULL,
+ `p_needs_update` tinyint(1) NOT NULL,
PRIMARY KEY (`p_id`),
UNIQUE KEY `p_id` (`p_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `pingbacktargets` (
+ `pt_id` int(11) NOT NULL AUTO_INCREMENT,
+ `pt_url` varchar(2048) NOT NULL,
+ PRIMARY KEY (`pt_id`),
+ UNIQUE KEY `pt_id` (`pt_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='List of pages that may receive pingbacks';
+
+
class Pingback_DbStorage
implements \PEAR2\Services\Pingback\Server\Callback\IStorage,
- \PEAR2\Services\Pingback\Server\Callback\ILink
+ \PEAR2\Services\Pingback\Server\Callback\ILink,
+ \PEAR2\Services\Pingback\Server\Callback\ITarget
{
public function __construct(PDO $db)
{
$this->db = $db;
}
+ /**
+ * Verifies that the given target URI exists in our system.
+ *
+ * @param string $target Target URI that got linked to
+ *
+ * @return boolean True if the target URI exists, false if not
+ *
+ * @throws Exception When something fatally fails
+ */
+ public function verifyTargetExists($target)
+ {
+ $res = $this->db->query(
+ 'SELECT COUNT(*) as count FROM pingbacktargets'
+ . ' WHERE ' . $this->db->quote($target) . ' LIKE pt_url'
+ );
+ $answer = $res->fetch(\PDO::FETCH_OBJ);
+ if ($answer->count == 0) {
+ throw new \Exception(
+ 'The specified target URI cannot be used as a target.',
+ 33
+ );
+ }
+
+ return true;
+ }
+
public function storePingback(
$target, $source, $sourceBody, \HTTP_Request2_Response $res
) {