4 class Pingback_DbStorage
5 implements \PEAR2\Services\Pingback\Server\Callback\IStorage,
6 \PEAR2\Services\Pingback\Server\Callback\ILink
8 public function __construct(PDO $db)
13 public function storePingback(
14 $target, $source, $sourceBody, \HTTP_Request2_Response $res
16 if ($this->alreadyExists($target, $source)) {
18 'Pingback from ' . $source . ' to ' . $target
19 . ' has already been registered.',
23 $stmt = $this->db->prepare(
24 'INSERT INTO pingbacks SET'
25 . ' p_source = :source'
26 . ', p_target = :target'
28 . ', p_client_ip = :ip'
29 . ', p_client_agent = :agent'
30 . ', p_client_referer = :referer'
31 . ', p_needs_review = 1'
33 . ', p_needs_update = 1'
39 ':ip' => isset($_SERVER['REMOTE_ADDR'])
40 ? $_SERVER['REMOTE_ADDR'] : '',
41 ':agent' => isset($_SERVER['HTTP_USER_AGENT'])
42 ? $_SERVER['HTTP_USER_AGENT'] : '',
43 ':referer' => isset($_SERVER['HTTP_REFERER'])
44 ? $_SERVER['HTTP_REFERER'] : '',
49 protected function alreadyExists($target, $source)
51 $res = $this->db->query(
52 'SELECT COUNT(*) as count FROM pingbacks'
53 . ' WHERE p_source = ' . $this->db->quote($source)
54 . ' AND p_target = ' . $this->db->quote($target)
56 $answer = $res->fetch(\PDO::FETCH_OBJ);
57 return $answer->count > 0;
61 * Verifies that a link from $source to $target exists.
63 * @param string $target Target URI that should be linked in $source
64 * @param string $source Pingback source URI that should link to target
65 * @param string $sourceBody Content of $source URI
66 * @param object $res HTTP response from fetching $source
68 * @return boolean True if $source links to $target
70 * @throws Exception When something fatally fails
72 public function verifyLinkExists(
73 $target, $source, $sourceBody, \HTTP_Request2_Response $res