/modules/trackback/tb.php

https://github.com/GunioRobot/Loggix · PHP · 182 lines · 142 code · 18 blank · 22 comment · 24 complexity · ee77ba9f0a2be4e61a109334240e0b99 MD5 · raw file

  1. <?php
  2. /**
  3. * Receiving Trackback Ping
  4. *
  5. * @package Trackback
  6. * @uses Loggix_Application
  7. * @since 4.5.9
  8. * @version 9.3.24
  9. */
  10. /**
  11. * Include Core Module class
  12. */
  13. $pathToIndex = '../..';
  14. require_once $pathToIndex . '/lib/Loggix/Module/Trackback.php';
  15. $trackback = new Loggix_Module_Trackback;
  16. $config = $trackback->getConfigArray();
  17. $error = 0;
  18. $message = '';
  19. $trackback->insertSafe();
  20. if (!isset($_GET['id'])) {
  21. $error = 1;
  22. $message = 'You must set blog id!';
  23. } else {
  24. $id = $_GET['id'];
  25. // Check if trackback is allowed
  26. $checkSql = 'SELECT '
  27. . 'allow_pings '
  28. . 'FROM '
  29. . LOG_TABLE . ' '
  30. . 'WHERE '
  31. . 'id = :id';
  32. $stmt = $trackback->db->prepare($checkSql);
  33. $stmt->execute(
  34. array(
  35. ':id' => $id
  36. )
  37. );
  38. $checkRes = $stmt->fetchColumn();
  39. // echo var_dump($checkRes);
  40. $receiveTrackback = ($checkRes == '1')
  41. ? 'allowed'
  42. : 'not_allowed';
  43. // echo var_dump($receiveTrackback);
  44. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  45. $title = $_POST['title'];
  46. $excerpt = $_POST['excerpt'];
  47. $url = $_POST['url'];
  48. $name = $_POST['blog_name'];
  49. // Receiving Ping from MT doesn't work without this
  50. } elseif ($_SERVER['REQUEST_METHOD'] == "GET") {
  51. if (isset($_GET['title'], $_GET['excerpt'], $_GET['url'], $_GET['blog_name'])) {
  52. $title = $_GET['title'];
  53. $excerpt = $_GET['excerpt'];
  54. $url = $_GET['url'];
  55. $name = $_GET['blog_name'];
  56. }
  57. } else {
  58. $title = '';
  59. $excerpt = '';
  60. $url = '';
  61. $name = '';
  62. }
  63. // Deny when required values are empty
  64. if (empty($url) || empty($title) ||
  65. empty($excerpt) || empty($name) ||
  66. ($url == 'http://') ||
  67. ($receiveTrackback == 'not_allowed')) {
  68. $error = 1;
  69. $message = 'Bad Request. Error ID:1';
  70. } else {
  71. $articleId = intval($_GET['id']);
  72. $title = $title;
  73. $excerpt = $excerpt;
  74. $url = $url;
  75. $name = $name;
  76. // Spam Blocking
  77. if ((preg_match($config['block_spam']['keywords'], $title)) ||
  78. (preg_match($config['block_spam']['keywords'], $excerpt)) ||
  79. (preg_match($config['block_spam']['keywords'], $url)) ||
  80. (preg_match($config['block_spam']['keywords'], $name)) ||
  81. (($config['block_spam']['deny_1byteonly'] == 'yes') &&
  82. (!preg_match('/.*[\x80-\xff]/', $excerpt)))
  83. ) {
  84. //echo 'You Are A Spammer!';
  85. header('Location: ' . $pathToIndex . '/index.php?id=' . $articleId);
  86. exit;
  87. }
  88. $trackback->plugin->doAction('before-receive-trackback', $articleId);
  89. // Deny Ping from the same page
  90. $checkSql = 'SELECT '
  91. . 'COUNT(id) '
  92. . 'FROM '
  93. . TRACKBACK_TABLE . ' '
  94. . 'WHERE '
  95. . '(blog_id = :article_id)'
  96. . ' AND '
  97. . '(url = :url)';
  98. $stmt = $trackback->db->prepare($checkSql);
  99. $stmt->execute(
  100. array(
  101. ':article_id' => $articleId,
  102. ':url' => $url
  103. )
  104. );
  105. $checkRow = $stmt->fetchColumn();
  106. // Deny ping if the content is same with previously posted one
  107. $checkSql2 = 'SELECT '
  108. . 'COUNT(id) '
  109. . 'FROM '
  110. . TRACKBACK_TABLE . ' '
  111. . 'WHERE '
  112. . '(title = :title)'
  113. . ' AND '
  114. . '(excerpt = :excerpt)';
  115. $stmt2 = $trackback->db->prepare($checkSql2);
  116. $stmt2->execute(
  117. array(
  118. ':title' => $title,
  119. ':excerpt' => $excerpt
  120. )
  121. );
  122. $checkRow2 = $stmt2->fetchColumn();
  123. if (($checkRow == 0) &&
  124. ($checkRow2 == 0)) {
  125. // $trackback->db->query('BEGIN;');
  126. $fdate = gmdate('Y-m-d H:i:s', time() + ($config['tz'] * 3600));
  127. $sql = 'INSERT INTO '
  128. . TRACKBACK_TABLE . ' '
  129. . '(`blog_id`, `title`, `excerpt`, `url`, `name`, `date`)'
  130. . ' VALUES '
  131. . '(:article_id, :title, :excerpt, :url, :name, :fdate)';
  132. $sql = $trackback->setDelimitedIdentifier($sql);
  133. $stmt3 = $trackback->db->prepare($sql);
  134. $res = $stmt3->execute(
  135. array(
  136. ':article_id' => $articleId,
  137. ':title' => $title,
  138. ':excerpt' => $excerpt,
  139. ':url' => $url,
  140. ':name' => $name,
  141. ':fdate' => $fdate
  142. )
  143. );
  144. if ($res) {
  145. $error = 0;
  146. $message = 'Ping received.';
  147. } else {
  148. $error = 1;
  149. $message = 'Internal error!';
  150. }
  151. // $trackback->db->query('COMMIT;');
  152. } else {
  153. $error = 1;
  154. $message = 'Ping denied.';
  155. }
  156. }
  157. }
  158. echo <<<EOD
  159. <?xml version="1.0" encoding="UTF-8"?>
  160. <response>
  161. <error>{$error}</error>
  162. <message>{$message}</message>
  163. </response>
  164. EOD;