- <?php
- define('TRACKBACK_WITH_SPAM', FALSE);
-
- define('TRACKBACK_STATUS_UNPUBLISHED', 0);
- define('TRACKBACK_STATUS_PUBLISHED', 1);
- define('TRACKBACK_STATUS_SPAM_UNSURE', 2);
- define('TRACKBACK_STATUS_SPAM', 3);
-
- * Implementation of hook_theme()
- */
- function trackback_theme() {
- return array(
- 'trackback' => array(
- 'arguments' => array('trackback' => NULL)
- ),
- 'trackbacks' => array(
- 'arguments' => array('trackbacks' => NULL)
- ),
- 'trackback_url' => array(
- 'arguments' => array('url' => NULL, 'node' => NULL, 'inblock' => NULL)
- ),
- 'trackback_admin_table' => array(
- 'arguments' => array('form' => NULL)
- )
- );
- }
-
- function theme_trackback($trackback, $inblock) {
- drupal_add_css(drupal_get_path('module', 'trackback') .'/trackback.css');
-
- $output = '';
- if ($inblock) {
- $options = variable_get('trackback_block_display_options', array('excerpt'));
- $output .= '<div class="trackback" id="trackback-'. $trackback->trid .'">'."\n";
- $options['attributes'] = array(
- 'title' => t('Read post "%postname" from %sitename', array('%sitename' => $trackback->name, '%postname' => $trackback->subject))
- );
-
- $output .= '<span class="trackback-title">'. l($trackback->subject, $trackback->url, $options) .'</span>'."\n";
-
- if (!empty($options['created'])) {
- $output .= '<span class="trackback-created">'. t('from %sitename on @date', array('%sitename' => $trackback->name, '@date' => format_date($trackback->created))) .'</span>'."\n";
- } else {
- $output .= '<span class="trackback-created">'. t('from %sitename', array('%sitename' => $trackback->name)) .'</span>'."\n";
- }
- if (!empty($options['excerpt'])) {
- $output .= '<div class="excerpt">'. check_markup($trackback->excerpt .'[..]') .'</div>'."\n";
- }
- if (!empty($options['site'])) {
- $output .= '<span class="trackback-site">'. t('IP Address: %ip', array('%ip' => $trackback->site)) .'</span>'."\n";
- }
- $output .= '</div>'."\n";
- }
- else {
- $output = '<div class="trackback" id="trackback-'. $trackback->trid .'">'."\n";
- $output .= '<h3 class="title">'. l($trackback->subject, $trackback->url) .'</h3>'."\n";
- $output .= '<span class="submitted">'. t('from %sitename on @date', array('%sitename' => $trackback->name, '@date' => format_date($trackback->created))) .'</span>'."\n";
- $output .= '<div class="content">'. check_markup($trackback->excerpt) .'</div>'."\n";
- if ($links) {
- $output .= '<div class="links">'. theme('links', $links) .'</div>'."\n";
- }
- $output .= '</div>'."\n";
- }
- return $output;
- }
-
-
- function theme_trackbacks($trackbacks, $inblock) {
- if (count($trackbacks) == 0)
- return;
-
- $output = '';
-
- if ($inblock) {
- if (count($trackbacks) == 0) {
- $output = t('No Trackbacks received');
- }
- else {
- $output = theme('item_list', $trackbacks, NULL, 'ul', array('class' => 'trackback-block-list'));
- }
- }
- else {
- $output = 'aaaa';
- }
- return $output;
- }
-
- function theme_trackback_url($url, &$node, $inblock = FALSE) {
- if ($inblock) {
- $options['attributes'] = array(
- 'class' => 'trackback-url',
- 'title' => t('Trackback URL for "%nodetitle"', array('%nodetitle' => $node->title))
- );
- return l(t('Trackback-URL'), $url, $options);
- }
- else
- return '<div class="trackback-url">'. theme('box', t('Trackback URL for "%nodetitle"', array('%nodetitle' => $node->title)), $url) .'</div>';
- }
-
- * Invoke a hook_trackback() operation in all modules.
- *
- * @param &$trackback
- * A trackback object.
- * @param $op
- * A string containing the name of the trackback operation.
- * - received : the trackback have been received, not already stored into DB ($trackback->trid is NULL)
- * modules can set "status" and "status_log" to something useful (see TRACKBACK_STATUS_xxxx defines)
- * - inserted : the trackback have been saved into DB (modules can use $trackback->trid value)
-
- * - published : the trackback have been published
- * - mark-spam : the trackback have been marked as SPAM content
- * - unmark-spam: the trackback have been un-marked from beening SPAM
- * - unpublished: the trackback have been un-published
- * - deleted : the trackback have been deleted (the Trackback Object is only for read)
- *
- * - sent : a pingback have been sent
- *
- * - spam-filtering : a module should present himself for SPAM filtering returning a 'modulename' => TRUE
- *
- * @return
- * The returned value of the invoked hooks.
- */
-
- function trackback_invoke_trackback($op, &$trackback) {
- $return = array();
- foreach (module_implements('trackback') as $name) {
- $function = $name .'_trackback';
- $result = $function($op, $trackback);
-
-
- if (isset($result)) {
- if (is_array($result)) {
- $return = array_merge($return, $result);
- }
- else {
- $return[$name] = $result;
- }
- }
- }
- return $return;
- }
-
- function trackback_render_received(&$node, $inblock = FALSE) {
- $trackbacks = trackback_get_received($node);
-
-
- $received = array();
- foreach ($trackbacks as $trackback) {
- $received[] = theme('trackback', $trackback, $inblock);
- }
- return theme('trackbacks', $received, $inblock);
- }
-
- * Implementation of hook_node_type()
- */
- function trackback_node_type($op, $info) {
- switch($op) {
- case 'update':
- if (!empty($info->old_type) && $info->old_type != $info->type && trackback_nodetypes_enabled($info->old_type)) {
-
- trackback_nodetypes_enabled($info->old_type, 'delete');
- trackback_nodetypes_enabled($info->type, 'add');
- }
- break;
- case 'delete':
- if (trackback_nodetypes_enabled($info->type)) {
-
- trackback_nodetypes_enabled($info->type, 'delete');
-
-
- trackback_delete_trackbacks_nodetype($info->type);
- }
- break;
- }
- }
-
- * Adding/removing trackback for nodetypes
- */
- function trackback_node_type_form_submit(&$form, $form_state) {
- $type = $form_state['values']['type'];
- if (trackback_nodetypes_enabled($type) != $form_state['values']['trackback']) {
- trackback_nodetypes_enabled($type, $form_state['values']['trackback'] == 1 ? 'add' : 'delete');
- }
- return;
- }
-
- * Implementation of hook_form_alter()
- */
- function trackback_form_alter(&$form, $form_state, $form_id) {
-
- if ($form_id == 'node_type_form') {
- $form['workflow']['trackback'] = array(
- '#type' => 'checkbox',
- '#title' => t('Enable receiving Trackbacks'),
- '#default_value' => trackback_nodetypes_enabled($form['#node_type']->type),
- '#description' => t('Enable trackbacks for this node type.')
- );
- $form['#submit'][] = 'trackback_node_type_form_submit';
- }
-
-
- else if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
- $node = $form['#node'];
-
- if (trackback_nodetypes_enabled($node->type)) {
-
- $form['trackback'] = array(
- '#type' => 'fieldset',
- '#title' => t('Trackbacks'),
- '#collapsible' => TRUE,
- '#collapsed' => !isset($node->trackback_urls),
- );
-
- if (user_access('change node trackback setting')) {
- $form['trackback']['trackback_can_receive'] = array(
- '#type' => 'checkbox',
- '#title' => t('Enable incoming Trackbacks'),
- '#default_value' => isset($node->trackback_can_receive) ? $node->trackback_can_receive : 1,
- '#description' => t('Allow other posts to send trackbacks to this content.')
- );
- }
- else {
- $form['trackback']['trackback_can_receive'] = array(
- '#type' => 'value',
- '#value' => isset($node->trackback_can_receive) ? $node->trackback_can_receive : 1,
- );
- }
-
- if (variable_get('trackback_auto_detection', 'auto') == 'user') {
- $form['trackback']['trackback_urls'] = array(
- '#type' => 'textarea',
- '#title' => t('Send Trackbacks'),
- '#default_value' => isset($node->trackback_urls) ? $node->trackback_urls : '',
- '#cols' => 80,
- '#rows' => 4,
- '#description' => t('Enter one URL per line for each trackback you wish to send.'),
- '#wysiwyg' => FALSE,
- );
- }
-
-
- $past_successes_listing = array();
- $options = array();
- if (isset($node->nid)) {
- $sent_ok = trackback_get_sent($node, 'successful');
- if (count($sent_ok)) {
- $sent = array();
- foreach($sent_ok as $s) {
- $sent[$s] = $s;
- }
-
- $form['trackback']['trackbacks_urls'] = array(
- '#type' => 'checkboxes',
- '#title' => t('Successful sent URLs'),
- '#disabled' => 'disabled',
- '#default_value' => array_keys($sent),
- '#options' => $sent,
- );
- }
-
- if (TRUE || variable_get('trackback_auto_detection', 'auto') == 'user') {
- $sent_err = trackback_get_sent($node, 'error');
-
- if (count($sent_err)) {
- $sent = array();
- foreach($sent_err as $s) {
- $sent[$s] = $s;
- }
- $form['trackback']['trackback_urls_to_retry'] = array(
- '#type' => 'checkboxes',
- '#title' => t('Unsuccessful URLs'),
- '#default_value' => array(),
- '#options' => $sent,
- '#description' => t('Attempts to ping these URLs with this post have failed. Mark a check next to the trackback URLs you wish to retry for this post.')
- );
- }
- }
- }
- }
- }
- }
-
- function trackback_link($type, $node = NULL, $teaser = FALSE) {
- $links = array();
- switch ($type) {
- case 'node':
- if (isset($node->can_receive)) {
- if (variable_get('trackback_display_url', 'default') == 'links' ||
- (!$teaser && variable_get('trackback_display_url', 'default') == 'links-full') ||
- ($teaser && variable_get('trackback_display_url', 'default') == 'links-teaser')) {
- $links['trackback-url'] = array(
- 'title' => t('Trackback URL'),
- 'href' => trackback_get_url($node),
- 'attributes' => array('title' => t('Trackback URL for "%nodetitle"', array('%nodetitle' => $node->title))),
- );
- }
- if ($teaser && variable_get('trackback_links_count_display', 1) == 1) {
- $count = db_result(db_query("SELECT count(*) FROM {trackback_received} WHERE nid=%d AND status=1", $node->nid));
- if ($count) {
- $links['trackback_trackbacks'] = array(
- 'title' => format_plural($count, '1 trackback', '@count trackbacks'),
- 'href' => _trackback_path($node),
- );
- // Don't display fragment if trackbacks are displayed on a separate page
- if (variable_get('trackback_view', 0) != 1)
- $links['trackback_trackbacks']['fragment'] = 'trackbacks';
- }
- }
- }
- break;
-
- case 'trackback':
- if (!$teaser) {
- $links['trackback_edit'] = array(
- 'title' => t('edit'),
- 'href' => 'trackback/edit/'. $node->trid
- );
- }
- $links['trackback_delete'] = array(
- 'title' => t('delete'),
- 'href' => 'trackback/delete/'. $node->trid
- );
- if (TRACKBACK_WITH_SPAM) {
- $links += _trackback_spam_link($node);
- }
- break;
- }
- return $links;
- }
- */
-
- * hook_menu() callback
- */
- function trackback_menu() {
-
- $items['admin/content/trackback'] = array(
- 'title' => 'Trackbacks',
- 'description' => 'List and edit site trackbacks and the trackback moderation queue.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('trackback_admin_overview'),
- 'access arguments' => array('administer trackbacks'),
- 'file' => 'trackback.admin.inc'
- );
-
-
- $items['admin/content/trackback/list'] = array(
- 'title' => 'List',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -10
- );
-
-
- $items['admin/content/trackback/list/published'] = array(
- 'title' => 'Published trackbacks',
- 'access arguments' => array('administer trackbacks'),
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -10
- );
- $items['admin/content/trackback/list/approval'] = array(
- 'title' => 'Approval queue',
- 'page arguments' => array('trackback_admin_overview', 'approval'),
- 'access arguments' => array('administer trackbacks'),
- 'type' => MENU_LOCAL_TASK
- );
-
- $items['admin/content/trackback/list/spam'] = array(
- 'title' => 'Spam',
- 'page arguments' => array('trackback_admin_overview', 'spam'),
- 'access arguments' => array('administer trackbacks'),
- 'weight' => 10,
- 'type' => MENU_LOCAL_TASK
- );
- $items['admin/content/trackback/settings'] = array(
- 'title' => 'Settings',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('trackback_config_form'),
- 'access arguments' => array('administer trackbacks'),
- 'weight' => 10,
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'trackback.admin.inc'
- );
-
-
- $items['trackback/%node'] = array(
- 'title' => 'Trackbacks',
- 'page callback' => '_trackback_receive_post',
- 'page arguments' => array(1),
- 'access arguments' => array('access content'),
- 'access callback' => '_trackback_access',
- 'access arguments' => array('receive', 1),
- 'type' => MENU_CALLBACK,
- 'file' => 'trackback-receive.inc'
- );
- $items['trackback/edit/%trackback'] = array(
- 'title' => 'Moderate trackback',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('trackback_edit_form', 2),
- 'access callback' => '_trackback_access',
- 'access arguments' => array('edit', NULL, 2),
- 'type' => MENU_CALLBACK,
- 'file' => 'trackback.admin.inc'
- );
- $items['trackback/delete/%trackback'] = array(
- 'title' => 'Delete trackback',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('trackback_delete_form', 2),
- 'access callback' => '_trackback_access',
- 'access arguments' => array('edit', NULL, 2),
- 'type' => MENU_CALLBACK,
- 'file' => 'trackback.admin.inc'
- );
-
- $items['node/%node/trackback'] = array(
- 'title' => 'Trackbacks',
- 'page callback' => 'trackback_view_page',
- 'page arguments' => array(1),
- 'access callback' => '_trackback_access',
- 'access arguments' => array('page', 1),
- 'weight' => 2,
- 'type' => MENU_LOCAL_TASK
- );
- */
- return $items;
- }
-
- * hook_perm() callback
- */
-
- function trackback_perm() {
- return array(
- 'administer trackbacks',
- 'change node trackback setting',
- );
- }
-
-
- function _trackback_access($op, $node, $trackback = NULL) {
-
-
- switch ($op) {
- case 'page':
-
- return $node->trackback_can_receive && variable_get('trackback_view', 0) == 1 && node_access('view', $node) && db_result(db_query('SELECT count(*) FROM {trackback_received} WHERE nid=%d AND status=1', $node->nid));
- case 'edit':
- if (user_access('administer trackbacks')) {
- return TRUE;
- }
- if (empty($node) && !empty($trackback->nid)) {
- $node = node_load($trackback->nid);
- }
- return node_access('update', $node);
- case 'receive':
- if (variable_get('trackback_receive_post', TRUE) == TRUE)
- return $node->trackback_can_receive && node_access('view', $node);
- else
- return FALSE;
- }
- }
-
-
- function trackback_view_page($node) {
- drupal_set_title(check_plain($node->title));
- return trackback_render_received($node);
- }
-
- */
-
- * hook_cron() callback
- */
-
- function trackback_cron() {
- // query for all nodes where
- $result = db_query('SELECT t.nid, n.status FROM {trackback_node} t INNER JOIN {node} n ON t.nid = n.nid WHERE t.awaiting_cron = 1');
-
- while ($node = db_fetch_object($result)) {
- // First things first, let's unset the 'awaiting_cron' bit in the {trackback_node} table.
- db_query('UPDATE {trackback_node} SET awaiting_cron = 0 WHERE nid = %d', $node->nid);
- if ($node->status) {
- module_load_include('inc', 'trackback', 'trackback.ping');
- $node = node_load($node->nid);
- _trackback_ping($node, trackback_urls_via_nodebody($node));
- }
- }
- }
- */
-
- function _trackback_valid_url($url) {
- $uc = '[a-z0-9;/?:@&=+$,_.!~*\'()%-]';
- return preg_match('`^(http|https)://'. $uc .'+(#'. $uc .'*)?$`i', $url);
- }
- */
-
- function _trackback_path($obj, $text = NULL, $opt = array()) {
- static $prefix;
-
- if (!isset($prefix)) {
- $prefix = variable_get('trackback_view', 0) == 1 ? '/trackback' : '';
- }
- if (!isset($text)) {
- return 'node/'. $obj->nid . $prefix;
- }
- if ($obj->status) {
- $opt += array('fragment' => 'trackback-'. $obj->trid);
- return l($text, 'node/'. $obj->nid . $prefix, $opt);
- }
- return l($text, 'trackback/edit/'. $obj->trid, $opt);
- }
- */
-
-
- function _trackback_build_content($node, $teaser = FALSE) {
- unset($node->trackback_can_receive);
- return node_build_content($node, $teaser);
- }
-
-
- * Master function for Trackback management
- * @param <type> $op
- * @param <type> $trackback
- */
- function trackback_do($op, &$trackback, $cacheclear = FALSE) {
- $operated = NULL;
- $result = FALSE;
-
- if (is_numeric($trackback)) {
- $trackback = trackback_load($trackback);
- }
-
- if (is_object($trackback)) {
- switch ($op) {
- case 'publish':
- $trackback->status = TRACKBACK_STATUS_PUBLISHED;
- $result = _trackback_do_update($trackback);
- $operated = 'published';
- break;
-
- case 'unpublish':
- $trackback->status = TRACKBACK_STATUS_UNPUBLISHED;
- $result = _trackback_do_update($trackback);
- $operated = 'unpublished';
- break;
-
- case 'mark-spam':
- $trackback->status = TRACKBACK_STATUS_SPAM;
- $result = _trackback_do_save($trackback);
- $operated = 'mark-spam';
- break;
-
- case 'unmark-spam':
-
- $operated = 'unmark-spam';
- break;
-
- case 'delete':
- $result = _trackback_do_delete($trackback);
- $operated = 'deleted';
- break;
-
- default:
- drupal_set_message(t('Trackback Operation %op not implemented', array('%op' => $op)));
-
- }
-
- trackback_invoke_trackback($operated, $trackback);
- if ($clearcache) {
- cache_clear_all();
- }
- return $result;
- }
- else {
- return FALSE;
- }
- }
- function _trackback_operation($action, $trackback, $clear = TRUE) {
- if (is_numeric($trackback)) {
- $trackback = trackback_load($trackback);
- }
- if ($trackback) {
- switch ($action) {
- case 'publish':
- db_query('UPDATE {trackback_received} SET status=1 WHERE trid=%d', $trackback->trid);
- $trackback->status = 1;
- trackback_invoke_trackback($trackback, $action);
- watchdog('trackback', 'Published trackback %subject.', array('%subject' => $trackback->subject), WATCHDOG_NOTICE, _trackback_path($trackback, t('view')));
- break;
-
- case 'unpublish':
- db_query('UPDATE {trackback_received} SET status=0 WHERE trid=%d', $trackback->trid);
- $trackback->status = 0;
- trackback_invoke_trackback($trackback, $action);
- watchdog('trackback', 'Unpublished trackback %subject.', array('%subject' => $trackback->subject), WATCHDOG_NOTICE, _trackback_path($trackback, t('view')));
- break;
-
- case 'delete':
- db_query('DELETE FROM {trackback_received} WHERE trid=%d', $trackback->trid);
- trackback_invoke_trackback($trackback, $action);
- watchdog('trackback', 'Deleted trackback %subject. The trackback was posted to !link.', array('%subject' => $trackback->subject, '!link' => l(url('node/'. $trackback->nid, array('absolute' => TRUE)), 'node/'. $trackback->nid)));
- break;
-
- default:
- $action($trackback);
- break;
- }
- if ($clear) {
- cache_clear_all();
- }
- }
- return $trackback;
- }
- */
-
-
-
- * Implementation of hook_help().
- */
- function trackback_help($path, $arg) {
- if ($path == 'admin/help#trackback') {
- module_load_include('inc', 'trackback', 'trackback.admin');
- return _trackback_help($path, $arg);
- }
- }
-
- * Returns if the given Node can receive trackbacks
- * @param $nid
- * @param $action in check, enable, disable, insert
- * @return
- */
- function trackback_node_enabled($nid, $action = 'check') {
-
- switch ($action) {
- case 'insert':
- db_query("INSERT INTO {trackback_node}(nid, awaiting_cron, can_receive) VALUES(%d, %d, %b)", $nid, 0, 1);
- return TRUE;
- break;
-
- case 'enable':
- db_query("UPDATE {trackback_node} SET can_receive = %b, awaiting_cron = %b WHERE nid = %d", 1, 1, $nid);
- return TRUE;
- break;
-
- case 'disable':
- db_query("UPDATE {trackback_node} SET can_receive = %b, awaiting_cron = %b WHERE nid = %d", 0, 0, $nid);
- return TRUE;
- break;
-
- default:
- $sql = "SELECT can_receive FROM {trackback_node} WHERE nid=%d";
- return (boolean) db_result(db_query($sql, $nid));
- break;
- }
- }
-
-
- * Check if trackback is enabled for given NodeType
- * @param nodetype nodeType to check
- * @param action to do: check, add or delete
- * @return TRUE or FALSE
- */
- function trackback_nodetypes_enabled($nodetype, $action = 'check') {
-
- switch($action) {
- case 'check':
- return in_array($nodetype, variable_get('trackback_nodetypes', array()), TRUE);
- break;
-
- case 'delete':
- $types = variable_get('trackback_nodetypes', array());
- unset($types[$nodetype]);
- variable_set('trackback_nodetypes', $types);
- break;
-
- case 'add':
- $types = variable_get('trackback_nodetypes', array());
- $types[] = $nodetype;
- variable_set('trackback_nodetypes', $types);
-
-
- $conf['i18nsync_fields_node_nodetype'] = array(
- 'field3' => t('Field 3 name'),
- ...
- );
- */
- break;
-
- default:
- return FALSE;
- }
- return TRUE;
- }
-
- * Implementation of hook_xmlrpc()
- * Required by Pingback 1.0 specs (http://www.hixie.ch/specs/pingback/pingback)
- * Code taken from pingback.module
- */
- function trackback_xmlrpc() {
- return array(array(
- 'pingback.ping',
- 'trackback_receive_xmlrpc',
- array(
- 'string',
- 'string',
- 'string'
- ),
- t('Handles Trackbacks pings.'),
- ));
- }
-
- * XML-RPC callback: process pingback.ping() call.
- * @return xmlrpc server errors as for Pingback 1.0 specs (http://www.hixie.ch/specs/pingback/pingback)
- */
- function trackback_receive_xmlrpc($sourceURI, $targetURI) {
- if (variable_get('trackback_receive_xmlrpc', FALSE)) {
- module_load_include('inc', 'trackback', 'trackback-receive');
- _trackback_receive_xmlrpc($sourceURI, $targetURI);
- }
- else
- return xmlrpc_server_error(33, t("The specified target URL cannot be used as a target. It either doesn't exist, or it is not a pingback-enabled resource."));
- }
-
- * Implementation of hook_nodeapi()
- * @TODO: review!!
- */
- function trackback_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
-
- if (!variable_get('trackback_receive_post', TRUE) && !variable_get('trackback_receive_xmlrpc', FALSE)) {
-
- return;
- }
-
- if (!trackback_nodetypes_enabled($node->type)) {
-
-
-
- return;
- }
-
- switch ($op) {
-
- case 'load':
- $can_receive = FALSE;
- if ($node->status) {
- $can_receive = trackback_node_enabled($node->nid);
- }
-
- return array('trackback_can_receive' => $can_receive);
- break;
-
-
- case 'view':
-
- if (isset($node->trackback_can_receive) && empty($node->in_preview)) {
-
- if (variable_get('trackback_receive_xmlrpc', FALSE)) {
-
- if (arg(0) == 'node' && is_numeric(arg(1)) && arg(3) == NULL) {
- drupal_set_header('X-Pingback: '. $GLOBALS['base_url'] .'/xmlrpc.php');
-
-
- }
- }
-
-
- if (variable_get('trackback_receive_post', TRUE)) {
- $node->content['trackback'] = array('#weight' => 12);
- $node->content['trackback']['rdf'] = array(
- '#value' => trackback_get_RDF($node),
- '#weight' => -1
- );
- if (!$teaser && variable_get('trackback_display_url', 'innode') == 'innode') {
- $node->content['trackback']['url'] = array(
- '#value' => theme('trackback_url', trackback_get_url($node), $node),
- '#weight' => 8,
- );
- }
- }
- if (!$teaser && variable_get('trackback_display_node', FALSE)) {
- $node->content['trackback']['received'] = array(
- '#value' => trackback_render_received($node),
- '#weight' => 7,
- );
- }
- }
- break;
-
- case 'validate':
-
- if (!empty($node->trackback_urls)) {
- foreach (explode("\n", $node->trackback_urls) as $url) {
- $url = trim($url);
- if ($url && !_trackback_valid_url($url)) {
- form_set_error('trackback_urls', t('The trackback url %url is not a valid url.', array('%url' => $url)));
- }
- }
- }
- */
- break;
-
- case 'insert':
- if (trackback_nodetypes_enabled($node->type)) {
- trackback_node_enabled($node->nid, 'insert');
- $set = ($node->trackback_can_receive && $node->status)? 'enable' : 'disable';
- if (isset($node->trackback_can_receive)) {
- trackback_node_enabled($node->nid, $set);
- }
- }
- break;
-
- case 'update':
- $set = ($node->trackback_can_receive && $node->status)? 'enable' : 'disable';
-
-
- if (isset($node->trackback_can_receive)) {
- trackback_node_enabled($node->nid, $set);
- }
- if ($set == 'enable' && variable_get('trackback_sending', 'oncron') == 'onupdate') {
-
-
- global $_trackback_ping_nid;
- if (variable_get('trackback_merge_within_translations', TRUE)) {
-
- if (isset($node->tnid) && ($node->nid == $node->tnid)) {
- $_trackback_ping_nid[] = $node->tnid;
- }
- }
- else {
- $_trackback_ping_nid[] = $node->nid;
- }
-
- }
-
-
- module_load_include('inc', 'trackback', 'trackback.ping');
- global $_trackback_ping_node;
- $_trackback_ping_node = drupal_clone($node);
- $cron = ($node->status && variable_get('trackback_auto_detection_enabled', 0) == 2);
- db_query("UPDATE {trackback_node} SET awaiting_cron=%d, can_receive=%d WHERE nid=%d", $cron, $node->can_receive, $node->nid);
- if (!db_affected_rows()) {
- db_query("INSERT INTO {trackback_node}(nid, awaiting_cron, can_receive) VALUES(%d, %d, %d)", $node->nid, $cron, $node->can_receive);
- }
- */
-
-
- break;
-
- case 'delete':
- trackback_delete_trackbacks($node->nid);
- break;
- }
- }
-
- *
- */
- function trackback_exit() {
- global $_trackback_ping_nid;
-
- if (!empty($_trackback_ping_nid)) {
-
-
- $first = array_shift($_trackback_ping_nid);
- if (!empty($_trackback_ping_nid)) {
- _trackback_enqueue($_trackback_ping_nid);
- }
-
- module_load_include('inc', 'trackback', 'trackback-send');
- _trackback_send($first);
- }
- }
-
- * @TODO:
- */
- function _trackback_enqueue($nids) {
- drupal_set_message(__function__ .'() : NIDs='. var_export($nids, TRUE));
- return true;
- }
-
-
- * Handler function called when a trackback have been successfully received
- */
- function trackback_received(&$trackback) {
-
-
-
- trackback_invoke_trackback('received', $trackback);
-
- if ($trackback->status == TRACKBACK_STATUS_SPAM && variable_get('trackback_spam_moderation', 'delete') == 'delete') {
-
- watchdog('trackback', 'Auto-Deleted trackback %subject: marked as SPAM (%status_log).', array('%subject' => $trackback->subject, '%status_log' => $trackback->status_log));
- return;
- }
-
- if (empty($trackback->status)) {
- $trackback->status = variable_get('trackback_moderation', TRUE) == FALSE ? TRACKBACK_STATUS_PUBLISHED : TRACKBACK_STATUS_UNPUBLISHED;
- }
-
- if (trackback_save($trackback)) {
- trackback_invoke_trackback('insert', $trackback);
- watchdog('trackback', 'Added trackback %subject.', array('%subject' => $trackback->subject), WATCHDOG_NOTICE);
- }
- else {
- watchdog('trackback', 'Error adding %subject from %site(@status_log).', array('%subject' => $trackback->subject, '%site' => $trackback->site, '@status_log' => $trackback->status_log), WATCHDOG_WARNING);
- }
- }
-
- * Returns the trackback URL for given node
- */
- function trackback_get_url(&$node) {
- $nid = $node->nid;
-
- if (!empty($node->tnid) && variable_get('trackback_merge_within_translations', TRUE)) {
-
- $nid = $node->tnid;
- }
- return url('trackback/'. $nid, array('absolute' => TRUE));
- }
-
- * Construct RDF metadata for Trackback url
- */
- function trackback_get_RDF(&$node) {
- $url = url('node/'. $node->nid, array('absolute' => TRUE));
- $result = "\n<!--\n";
- $result .= '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">'."\n";
- $result .= '<rdf:Description rdf:about="'. $url .'"'
- .' dc:identifier="'. $url .'"'
- .' dc:title="'. strtr(check_plain($node->title), array('--' => '—')) .'"'
- .' trackback:ping="'. trackback_get_url($node) .'" />'."\n";
- $result .= '</rdf:RDF>';
- $result .= "\n-->\n";
-
- return $result;
- }
-
- * Returns an empry Trackback Object
- */
- function trackback_get_object_trackback() {
- $trackback = array(
- 'trid' => NULL,
- 'nid' => NULL,
- 'created' => time(),
- 'site' => ip_address(),
- 'name' => NULL,
- 'subject' => NULL,
- 'url' => NULL,
- 'excerpt' => NULL,
- 'status' => NULL,
- 'status_log' => NULL,
- );
- return (object)$trackback;
- }
-
- *
- */
- function trackback_sent($nid, $url, $success, $protocol) {
- $sql = 'INSERT INTO {trackback_sent} (nid, url, successful) VALUES (%d, "%s", %d)';
- db_query($sql, $nid, $url, $success);
- return TRUE;
- }
-
-
- * Check if the given trackback exists in the database
- */
- function trackback_exists($trid) {
- $params = null;
- if (is_numeric($trid)) {
- $sql = "SELECT trid FROM {trackback_received} WHERE trid = %d";
- $params = $trid;
- }elseif (is_array($trid)) {
- $sql = "SELECT trid FROM {trackback_received} WHERE nid = %d AND url = '%s'";
- $params = array($trid['nid'], $trid['url']);
- }
- $result = db_query($sql, $params);
- return db_result($result);
- }
-
- * Delete given TrackbackID from database
- */
- function _trackback_do_delete(&$trackback) {
- drupal_set_message(__function__);
- db_query('DELETE FROM {trackback_received} WHERE trid=%d', $trid);
- watchdog('trackback', 'Deleted trackback %subject. The trackback was posted to !link.', array('%subject' => $trackback->subject, '!link' => l(url('node/'. $trackback->nid, array('absolute' => TRUE)), 'node/'. $trackback->nid)));
-
- $trackback->trid = NULL;
- return TRUE;
- }
-
- * Update the given Trackback to database
- * @param <type> $trackback
- */
- function _trackback_do_update(&$trackback) {
-
-
- if (trackback_exists($trackback->trid)) {
- $sql = "UPDATE {trackback_received} SET subject = '%s', excerpt = '%s', status = %d WHERE trid = %d";
- $result = db_query($sql,
- $trackback->subject,
- $trackback->excerpt,
- $trackback->status,
- $trackback->trid);
- return $result;
- }
- return FALSE;
- }
-
-
- * Load gived TrackbackID from database
- */
- function trackback_load($trid) {
- return db_fetch_object(db_query('SELECT * FROM {trackback_received} WHERE trid=%d', $trid));
- }
-
- * Saves the given Trackback object into DB, trackback->trid is updated
- * @return TRUE on success, FALSE otherwise
- */
- function trackback_save(&$trackback) {
- drupal_set_message(__function__);
- if (!is_object($trackback))
- return FALSE;
- $trid = trackback_exists(array('trid' => $trackback->nid, 'url' => $trackback->url));
- if ($trid) {
- $trackback->trid = $trid;
- $trackback->status_log = t('Trackback already exists');
- return FALSE;
- }
- else {
- $sql = "INSERT INTO {trackback_received} (nid, created, site, name, subject, url, excerpt, status) VALUES (%d, %d, '%s', '%s', '%s', '%s', '%s', %d)";
- $result = db_query($sql, $trackback->nid,
- $trackback->created,
- drupal_substr($trackback->site, 0, 16),
- $trackback->name,
- drupal_substr($trackback->subject, 0 , 64),
- drupal_substr($trackback->url, 0, 255),
- drupal_substr($trackback->excerpt, 0, 255),
- $trackback->status
- );
- if ($result) {
- $trackback->trid = db_last_insert_id('trackback_received', 'trid');
- return TRUE;
- }
- }
- return FAlSE;
- }
-
- * Implementation of hook_block()
- */
- function trackback_block($op = 'list', $delta = 'trackback_recent', $edit = array()) {
-
- if ($op == 'list') {
-
- $blocks['trackback_recent'] = array (
- 'info' => t('Recent trackbacks'),
- );
-
- $blocks['trackback_block'] = array (
- 'info' => t('Trackbacks'),
- 'cache' => BLOCK_CACHE_PER_PAGE | BLOCK_CACHE_PER_ROLE,
- );
- return $blocks;
- }
-
- switch ($delta) {
- case 'trackback_recent':
- switch ($op) {
- case 'configure':
- $form['trackback_block_recent_count'] = array(
- '#type' => 'select',
- '#title' => t('Number of trackbacks to display'),
- '#default_value' => variable_get('trackback_block_recent_count', 10),
- '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30)),
- '#description' => t('How many trackbacks are displayed in the Recent Trackbacks block')
- );
- return $form;
- break;
-
- case 'save':
- variable_set('trackback_block_recent_count', $edit['trackback_block_recent_count']);
- break;
-
- case 'view':
-
-
-
-
-
-
- $block['subject'] = t('Recent Trackbacks');
- $block['content'] = __file__ . '::TO IMPLEMENT';
- return $block;
- break;
- }
- break;
-
- case 'trackback_block':
- switch ($op) {
- case 'configure':
- $form['trackback_block_display_url'] = array(
- '#type' => 'checkbox',
- '#title' => t('Display Trackback-URL in block'),
- '#default_value' => variable_get('trackback_block_display_url', TRUE),
- );
- $form['trackback_block_display_options'] = array(
- '#type' => 'checkboxes',
- '#title' => t('Display Options for trackbacks'),
- '#description' => t(''),
- '#default_value' => variable_get('trackback_block_display_options', array('excerpt')),
- '#options' => array(
- 'created' => t('Received date'),
- 'excerpt' => t('Excerpt text'),
- 'site' => t('IP Address'),
- ),
- );
-
- return $form;
- break;
-
- case 'save':
- variable_set('trackback_block_display_url', $edit['trackback_block_display_url']);
- variable_set('trackback_block_display_options', $edit['trackback_block_display_options']);
- break;
-
- case 'view':
- if (arg(0) == 'node' && is_numeric(arg(1)) && is_null(arg(2))) {
- $node = node_load(arg(1));
- $block['subject'] = t('Trackbacks');
-
- if (isset($node->trackback_can_receive) && node_access('view', $node)) {
- $block['content'] = trackback_render_received($node, TRUE);
- if (variable_get('trackback_receive_post', TRUE) && variable_get('trackback_block_display_url', TRUE)) {
- $url = trackback_get_url($node);
- $block['content'] .= theme('trackback_url', $url, $node, TRUE);
- }
- }
- return $block;
- }
- break;
- }
- break;
- }
- }
-
- * Delete all Trackbacks for the givend NodeID
- * @param $nid
- */
- function trackback_delete_trackbacks($nid) {
- db_query("DELETE FROM {trackback_node} WHERE nid = %d", $nid);
- db_query("DELETE FROM {trackback_sent} WHERE nid = %d", $nid);
- db_query("DELETE FROM {trackback_received} WHERE nid = %d", $nid);
- drupal_set_message(t('All trackbacks deleted.'));
- }
-
- * Returns an array of sented trackbacks for given Node,
- */
- function trackback_get_sent(&$node, $status = 'all') {
-
- $nid = $node->nid;
- $return = array();
- $params = array($node->nid);
-
- $sql = 'SELECT url FROM {trackback_sent} WHERE nid = %d';
-
- switch ($status) {
- case 'successful':
- $sql .= ' AND successful = %b';
- $params[] = 1;
- break;
-
- case 'error':
- $sql .= ' AND successful = %b';
- $params[] = 0;
- break;
-
- default:
-
- break;
- }
- $result = db_query($sql, $params);
-
- while ($send = db_fetch_object($result)) {
- $return[] = $send->url;
- }
-
- return $return;
- }
-
-
- * Return an array of Trackbacks object received by the given Node
- */
- function trackback_get_received($node) {
- $nid = $node->nid;
- if (!empty($node->tnid) && variable_get('trackback_merge_within_translations', TRUE)) {
- $nid = $node->tnid;
- }
- $return = array();
- $result = db_query('SELECT * FROM {trackback_received} WHERE nid = %d AND status = %d ORDER BY created DESC', $nid, TRACKBACK_STATUS_PUBLISHED);
- while ($trackback = db_fetch_object($result)) {
- $return[] = $trackback;
- }
- return $return;
- }
-
-
- * Delete all trackback for given node-type
- * @TODO: Implement this function!
- */
- function trackback_delete_trackbacks_nodetype($nodetype) {
- return;
- }
-
-
- * Load received trackback with given TrackbackID
- */
- function trackback_load_received($trid) {
- return db_fetch_object(db_query('SELECT * FROM {trackback_received} WHERE trid=%d', $trid));
- }