diff -uprbwB ./relatedlinks.info ../../relatedlinks/relatedlinks.info --- ./relatedlinks.info 2008-02-19 01:10:11.000000000 +0100 +++ ../../relatedlinks/relatedlinks.info 2008-03-27 22:56:27.000000000 +0100 @@ -1,6 +1,9 @@ ; $Id: relatedlinks.info,v 1.2 2007/06/18 22:53:56 dww Exp $ name = Related Links -description = Displays links related to content. +description = Displays links related to content +package = Development +version = "6.x-1.x-dev" +core = "6.x" ; Information added by drupal.org packaging script on 2008-02-19 version = "5.x-2.x-dev" diff -uprbwB ./relatedlinks.install ../../relatedlinks/relatedlinks.install --- ./relatedlinks.install 2007-02-26 18:26:10.000000000 +0100 +++ ../../relatedlinks/relatedlinks.install 2008-03-27 22:56:27.000000000 +0100 @@ -5,62 +5,17 @@ * Implementation of hook_install(). */ function relatedlinks_install() { - $ret = array(); - - switch ($GLOBALS['db_type']) { - case 'mysqli': - case 'mysql': - db_query("CREATE TABLE {relatedlinks} ( - lid int(11) unsigned NOT NULL auto_increment, - nid int(11) unsigned NOT NULL default 0, - url varchar(255) NOT NULL default '', - title varchar(255) default NULL, - type tinyint(4) unsigned NOT NULL default 1, - PRIMARY KEY (lid), - KEY nid (nid), - KEY nid_type (nid, type)) - COMMENT = 'Relatedlinks module: store manual and parsed links.' - /*!40100 default CHARACTER SET utf8 */" - ); - db_query("CREATE TABLE {relatedlinks_tracker} ( - nid int(11) UNSIGNED NOT NULL, - keywords varchar(255) NULL, - updated int(11) NOT NULL default 0, - PRIMARY KEY (nid), - KEY (updated)) - COMMENT = 'Table keeping track of discovered links.' - /*!40100 default CHARACTER SET utf8 */" - ); - break; - case 'pgsql': - db_query("CREATE TABLE {relatedlinks} ( - lid serial, - nid integer NOT NULL default 0, - url varchar(255) NOT NULL default '', - title varchar(255) default NULL, - type smallint NOT NULL default 1 - PRIMARY KEY (lid))" - ); - db_query("CREATE INDEX {relatedlinks}_nid_idx ON {relatedlinks}(nid)"); - db_query("CREATE INDEX {relatedlinks}_nid_type_idx ON {relatedlinks}(nid, type)"); - db_query("CREATE TABLE {relatedlinks_tracker} ( - nid integer NOT NULL default 0, - keywords varchar(255) NULL, - updated integer NOT NULL default 0 - PRIMARY KEY (nid))" - ); - db_query("CREATE INDEX {relatedlinks_tracker}_updated_idx ON {relatedlinks_tracker}(updated)"); - } - drupal_set_message(t('The relatedlinks module installation script has completed.')); if (!module_exists('taxonomy') && !module_exists('search')) { drupal_set_message(t('The discovered links feature of the relatedlinks module requires one of the following modules: ')); + return; } - return $ret; + // Create tables. + drupal_install_schema('relatedlinks'); } /** @@ -99,25 +54,13 @@ function relatedlinks_update_2() { function relatedlinks_update_3() { $ret = array(); - switch ($GLOBALS['db_type']) { - case 'mysqli': - case 'mysql': - $ret[] = update_sql("ALTER TABLE {relatedlinks} ADD lid int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST"); - $ret[] = update_sql("ALTER TABLE {relatedlinks} CHANGE link url varchar(255) NOT NULL default ''"); - $ret[] = update_sql("ALTER TABLE {relatedlinks} ADD title varchar(255) DEFAULT NULL AFTER url"); - // nid and type are UNSIGNED fields. - $ret[] = update_sql("ALTER TABLE {relatedlinks} CHANGE nid nid int(11) UNSIGNED NOT NULL DEFAULT 0"); - $ret[] = update_sql("ALTER TABLE {relatedlinks} CHANGE type type tinyint(4) UNSIGNED NOT NULL DEFAULT 1"); - $ret[] = update_sql("ALTER TABLE {relatedlinks} ADD INDEX nid_type (nid, type)"); - break; - case 'pgsql': - // Needs testing. Field ordering needs to be added. - db_add_column($ret, 'relatedlinks', 'lid', 'serial'); - db_change_column($ret, 'relatedlinks', 'link', 'url', 'varchar(255)', array('default' => "''", 'not null' => TRUE)); - db_add_column($ret, 'relatedlinks', 'title', 'varchar(255)', array('default' => "NULL")); - $ret[] = update_sql("CREATE INDEX {relatedlinks}_nid_type_idx ON {relatedlinks}(nid, type)"); - break; - } + db_drop_primary_key($ret, 'relatedlinks'); + db_add_field($ret, 'relatedlinks', 'lid', array('type' => 'serial', 'size' => 'tiny', 'not null' => TRUE)); + db_change_field($ret, 'relatedlinks', 'link', 'url', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '')); + db_add_field($ret, 'relatedlinks', 'title', array('type' => 'varchar', 'length' => '255', 'default' => NULL)); + db_change_field($ret, 'relatedlinks', 'nid', array('type' => 'int', 'size' => 'tiny', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0)); + db_change_field($ret, 'relatedlinks', 'type', array('type' => 'int', 'size' => 'tiny', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 1)); + db_add_index($ret, 'relatedlinks', 'nid_type', array('nid', 'type')); $result = db_query("SELECT * FROM {relatedlinks}"); while ($link = db_fetch_array($result)) { @@ -137,29 +80,31 @@ function relatedlinks_update_3() { function relatedlinks_update_4() { $ret = array(); - switch ($GLOBALS['db_type']) { - case 'mysqli': - case 'mysql': - $ret[] = update_sql("CREATE TABLE {relatedlinks_tracker} ( - nid int(11) UNSIGNED NOT NULL, - keywords varchar(255) NULL, - updated int(11) NOT NULL default 0, - PRIMARY KEY (nid), - KEY (updated)) - COMMENT = 'Table keeping track of discovered links.' - /*!40100 default CHARACTER SET utf8 */" + $schema['relatedlinks_tracker'] = array( + 'description' => t('Table keeping track of discovered links.'), + 'fields' => array( + 'nid' => array( + 'type' => 'serial', + 'size' => 'tiny', + 'unsigned' => TRUE, + 'not null' => TRUE), + 'keywords' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE), + 'updated' => array( + 'type' => 'int', + 'size' => 'tiny', + 'not null' => TRUE, + 'default' => 0), + ), + 'indexes' => array( + 'updated' => array('updated'), + ), + 'primary key' => array('nid'), ); - break; - case 'pgsql': - $ret[] = update_sql("CREATE TABLE {relatedlinks_tracker} ( - nid integer NOT NULL default 0, - keywords varchar(255) NULL, - updated integer NOT NULL default 0 - PRIMARY KEY (nid))" - ); - $ret[] = update_sql("CREATE INDEX {relatedlinks_tracker}_updated_idx ON {relatedlinks_tracker}(updated)"); - } + db_create_table($ret, 'relatedlinks_tracker', $schema); $ret[] = update_sql("INSERT INTO {relatedlinks_tracker} (nid) SELECT DISTINCT(nid) FROM {relatedlinks}"); return $ret; @@ -169,7 +114,77 @@ function relatedlinks_update_4() { * Implementation of hook_uninstall(). */ function relatedlinks_uninstall() { - db_query('DROP TABLE {relatedlinks_tracker}, {relatedlinks}'); + $ret = array(); + db_drop_table($ret, 'relatedlinks'); + db_drop_table($ret, 'relatedlinks_tracker'); variable_del('relatedlinks_types'); variable_del('relatedlinks_node_types'); } + +/** + * Implementation of hook_schema(). + */ +function relatedlinks_schema() { + $schema['relatedlinks'] = array( + 'description' => t('Relatedlinks module: store manual and parsed links.'), + 'fields' => array( + 'lid' => array( + 'type' => 'serial', + 'size' => 'tiny', + 'unsigned' => TRUE, + 'not null' => TRUE), + 'nid' => array( + 'type' => 'int', + 'size' => 'tiny', + 'unsigned' => TRUE, + 'default' => 0), + 'url' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => TRUE, + 'default' => ''), + 'title' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => NULL), + 'type' => array( + 'type' => 'int', + 'size' => 'tiny', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 1), + ), + 'indexes' => array( + 'nid' => array('nid'), + 'nid_type' => array('nid', 'type'), + ), + 'primary key' => array('lid'), + ); + + $schema['relatedlinks_tracker'] = array( + 'description' => t('Table keeping track of discovered links.'), + 'fields' => array( + 'nid' => array( + 'type' => 'serial', + 'size' => 'tiny', + 'unsigned' => TRUE, + 'not null' => TRUE), + 'keywords' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE), + 'updated' => array( + 'type' => 'int', + 'size' => 'tiny', + 'not null' => TRUE, + 'default' => 0), + ), + 'indexes' => array( + 'updated' => array('updated'), + ), + 'primary key' => array('nid'), + ); + + return $schema; +} diff -uprbwB ./relatedlinks.js ../../relatedlinks/relatedlinks.js --- ./relatedlinks.js 2008-02-18 21:59:05.000000000 +0100 +++ ../../relatedlinks/relatedlinks.js 2008-03-28 15:59:49.000000000 +0100 @@ -8,7 +8,7 @@ $(document).ready(function() { // Parse textarea for links and store them in a global array. l = $(ta).val().split("\n"); - r = new RegExp('\w*([^\ \w]+)\ *(.*)$', 'i'); + r = new RegExp('^([^ ]+)\ (.*)$', 'i'); links = new Array(); for (var i = 0; i < l.length; i++) { m = l[i].match(r); diff -uprbwB ./relatedlinks.module ../../relatedlinks/relatedlinks.module --- ./relatedlinks.module 2008-02-18 15:42:59.000000000 +0100 +++ ../../relatedlinks/relatedlinks.module 2008-03-28 17:19:23.000000000 +0100 @@ -26,8 +26,8 @@ define('RELATEDLINKS_DISCOVERED', 3); /** * Implementation of hook_help(). */ -function relatedlinks_help($section) { - switch ($section) { +function relatedlinks_help($path, $arg) { + switch ($path) { case 'admin/settings/relatedlinks': return t('Select the types of links to store and display.'); case 'admin/settings/relatedlinks/discovered': @@ -57,46 +57,38 @@ Links: /** * Implementation of hook_menu(). */ -function relatedlinks_menu($may_cache) { +function relatedlinks_menu() { $items = array(); - if ($may_cache) { - $items[] = array( - 'path' => 'admin/settings/relatedlinks', - 'title' => t('Related links'), - 'description' => t('Configure related links settings.'), - 'callback' => 'drupal_get_form', - 'callback arguments' => array('_relatedlinks_settings_form'), - 'access' => user_access('administer related links') - ); - $items[] = array( - 'path' => 'admin/settings/relatedlinks/configure', - 'title' => t('Settings'), - 'callback' => 'drupal_get_form', - 'callback arguments' => array('_relatedlinks_settings_form'), - 'access' => user_access('administer related links'), + $items['admin/settings/relatedlinks'] = array( + 'title' => 'Related links', + 'description' => 'Configure related links settings.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('_relatedlinks_settings_form'), + 'access arguments' => array('administer related links') + ); + $items['admin/settings/relatedlinks/configure'] = array( + 'title' => 'Settings', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('_relatedlinks_settings_form'), + 'access arguments' => array('administer related links'), 'type' => MENU_DEFAULT_LOCAL_TASK ); - $items[] = array( - 'path' => 'admin/settings/relatedlinks/discovered', - 'title' => t('Discovered links'), - 'callback' => 'drupal_get_form', - 'callback arguments' => array('_relatedlinks_discovered_settings_form'), - 'access' => user_access('administer related links'), + $items['admin/settings/relatedlinks/discovered'] = array( + 'title' => 'Discovered links', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('_relatedlinks_discovered_settings_form'), + 'access arguments' => array('administer related links'), 'type' => MENU_LOCAL_TASK, 'weight' => 2 ); - } - else { - $items[] = array( - 'path' => 'relatedlinks/autocomplete', - 'callback' => 'relatedlinks_autocomplete', - 'callback arguments' => array(arg(2)), - 'access' => user_access('add related links'), + $items['relatedlinks/autocomplete'] = array( + 'page callback' => 'relatedlinks_autocomplete', + 'page arguments' => array(arg(2)), + 'access arguments' => array('add related links'), 'type' => MENU_LOCAL_TASK, 'weight' => 2 ); - } return $items; } @@ -133,7 +125,7 @@ function relatedlinks_block($op = 'list' // This is only valid if we're looking at a node now. if (arg(0) == 'node' && is_numeric(arg(1))) { $block = array(); - $node = node_load(arg(1)); + $node = menu_get_object(); // Only display if node type is associated with this module. if ($node && in_array($node->type, variable_get('relatedlinks_node_types', _relatedlinks_node_get_types(TRUE)))) { $link_types = variable_get('relatedlinks_types', _relatedlinks_get_type_defaults()); @@ -249,7 +241,7 @@ function relatedlinks_nodeapi(&$node, $o /** * Implementation of hook_form_alter(). */ -function relatedlinks_form_alter($form_id, &$form) { +function relatedlinks_form_alter(&$form, $form_state, $form_id) { if (user_access('add related links') && isset($form['type']) && ($form['type']['#value'] .'_node_form' == $form_id)) { @@ -283,7 +275,7 @@ function relatedlinks_form_alter($form_i $form['relatedlinks_fieldset']['#collapsed'] = empty($relatedlinks); - $path = '/'. drupal_get_path('module', 'relatedlinks'); + $path = './'. drupal_get_path('module', 'relatedlinks'); drupal_add_js($path .'/relatedlinks.js'); drupal_add_css($path .'/relatedlinks.css'); drupal_add_js(array( @@ -326,7 +318,7 @@ function relatedlinks_cron() { if (_relatedlinks_get_type_property(RELATEDLINKS_DISCOVERED, 'enabled') && $discovered['cron']) { $updated = time() - ($discovered['cron'] * 24 * 60 * 60); // Select all stale nodes. - $result = db_query("SELECT nid FROM {relatedlinks_tracker} WHERE updated != 0 AND updated < %d", $updated); + $result = db_query("SELECT nid FROM {relatedlinks_tracker} WHERE updated <> 0 AND updated < %d", $updated); $nids = array(); while ($node = db_fetch_array($result)) { $nids[] = $node['nid']; @@ -426,14 +418,14 @@ Related links blocks and forms will only /** * Process relatedlinks settings form submissions. */ -function _relatedlinks_settings_form_submit($form_id, $form_values) { +function _relatedlinks_settings_form_submit($form, &$form_state) { // Sort on 'weight'. - uasort($form_values['relatedlinks_types'], '_relatedlinks_compare'); + uasort($form_state['values']['relatedlinks_types'], '_relatedlinks_compare'); // Store the entire relatedlinks_types table. - variable_set('relatedlinks_types', $form_values['relatedlinks_types']); + variable_set('relatedlinks_types', $form_state['values']['relatedlinks_types']); - $node_types = array_filter($form_values['relatedlinks_node_types']); + $node_types = array_filter($form_state['values']['relatedlinks_node_types']); variable_set('relatedlinks_node_types', array_keys($node_types)); // Block table needs to be reset. @@ -471,6 +463,7 @@ criteria are applied to results derived $criteria = array( 'taxonomy' => t('Results based on taxonomy terms (if enabled).'), 'search' => t('Results from the search module (if enabled).'), + 'language' => t('Results based on language of nodes.'), 'node' => t('Prefer results of the same content type.'), 'user' => t('Prefer results from the same author.'), 'date' => t('Prefer newer results.'), @@ -549,7 +542,7 @@ that they be periodically purged and rec $form['relatedlinks_discovered']['cron']['refresh'] = array( '#type' => 'select', '#title' => t('Automatically update discovered links older than'), - '#description' => t('This feature requires cron to be enabled.', array('!cron' => url('admin/logs/status'))), + '#description' => t('This feature requires cron to be enabled.', array('!cron' => url('admin/reports/status'))), '#parents' => array('relatedlinks_discovered', 'cron'), '#options' => array( 1 => t('One day'), @@ -569,17 +562,17 @@ that they be periodically purged and rec /** * Validate discovered links settings form submissions. */ -function _relatedlinks_discovered_settings_form_validate($form_id, $form_values) { - if ($form_values['relatedlinks_discovered']['ranking']['taxonomy'] === $form_values['relatedlinks_discovered']['ranking']['search'] && - $form_values['relatedlinks_discovered']['ranking']['taxonomy'] === 0) { +function _relatedlinks_discovered_settings_form_validate($form, &$form_state) { + if ($form_state['values']['relatedlinks_discovered']['ranking']['taxonomy'] === $form_state['values']['relatedlinks_discovered']['ranking']['search'] && + $form_state['values']['relatedlinks_discovered']['ranking']['taxonomy'] === 0) { $error = t('The discovered links feature requires either taxonomy or search results to be enabled.'); form_set_error('relatedlinks_discovered][criteria][ranking', $error); } - if ($form_values['relatedlinks_discovered']['ranking']['taxonomy'] === 'taxonomy' && !module_exists('taxonomy')) { + if ($form_state['values']['relatedlinks_discovered']['ranking']['taxonomy'] === 'taxonomy' && !module_exists('taxonomy')) { form_set_error('relatedlinks_discovered][criteria][ranking', t('The taxonomy module needs to be enabled for taxonomy results to be calculated.')); } - if ($form_values['relatedlinks_discovered']['ranking']['search'] === 'search' && !module_exists('search')) { + if ($form_state['values']['relatedlinks_discovered']['ranking']['search'] === 'search' && !module_exists('search')) { form_set_error('relatedlinks_discovered][criteria][ranking', t('The search module needs to be enabled for taxonomy results to be calculated.')); } } @@ -587,16 +580,16 @@ function _relatedlinks_discovered_settin /** * Process discovered links settings form submissions. */ -function _relatedlinks_discovered_settings_form_submit($form_id, $form_values) { +function _relatedlinks_discovered_settings_form_submit($form, &$form_state) { $indices = array('ranking', 'vocabularies', 'node_types'); foreach ($indices as $index) { - if (isset($form_values['relatedlinks_discovered'][$index])) { - $form_values['relatedlinks_discovered'][$index] = array_filter($form_values['relatedlinks_discovered'][$index]); - $form_values['relatedlinks_discovered'][$index] = array_keys($form_values['relatedlinks_discovered'][$index]); + if (isset($form_state['values']['relatedlinks_discovered'][$index])) { + $form_state['values']['relatedlinks_discovered'][$index] = array_filter($form_state['values']['relatedlinks_discovered'][$index]); + $form_state['values']['relatedlinks_discovered'][$index] = array_keys($form_state['values']['relatedlinks_discovered'][$index]); } } - variable_set('relatedlinks_discovered', $form_values['relatedlinks_discovered']); + variable_set('relatedlinks_discovered', $form_state['values']['relatedlinks_discovered']); } /** @@ -948,12 +941,14 @@ function _relatedlinks_get_discovered_li $user = in_array('user', $discovered['ranking']) ? $node->uid : FALSE; $date = in_array('date', $discovered['ranking']) ? TRUE : FALSE; $comments = in_array('comments', $discovered['ranking']) ? TRUE : FALSE; + $lang = in_array('language', $discovered['ranking']) ? $node->language : FALSE; $taxonomy_links = $search_links = array(); if (module_exists('taxonomy') && in_array('taxonomy', $discovered['ranking'])) { $vids = isset($discovered['vocabularies']) ? $discovered['vocabularies'] : array(); $tids = array_keys($node->taxonomy); - $taxonomy_links = _relatedlinks_taxonomy_select_nodes($node->nid, $tids, $max, $vids, $node_types, $date, $user, $comments); + + $taxonomy_links = _relatedlinks_taxonomy_select_nodes($node->nid, $tids, $max, $vids, $node_types, $date, $user, $comments, $lang); } if (module_exists('search') && in_array('search', $discovered['ranking'])) { $search_links = _relatedlinks_search_select_nodes($node->nid, $keywords, $max, $node_types); @@ -998,7 +993,7 @@ function _relatedlinks_get_discovered_li * Handle term hierarchies (depth). * Escape SQL input as an added precaution. */ -function _relatedlinks_taxonomy_select_nodes($nid, $tids, $limit, $vids, $node_types, $date, $comments) { +function _relatedlinks_taxonomy_select_nodes($nid, $tids, $limit, $vids, $node_types, $date, $user, $comments, $lang) { $links = array(); foreach ($tids as $index => $tid) { @@ -1019,6 +1014,9 @@ function _relatedlinks_taxonomy_select_n $where[] = 'n.status = 1'; $where[] = 'n.moderate = 0'; $where[] = 'n.nid != '. $nid; + if ($lang) { + $where[] = 'n.language = \'' . $lang . '\''; + } $order[] = 'count DESC'; $order[] = 'sticky DESC'; @@ -1165,6 +1163,16 @@ function _relatedlinks_node_candidates($ } /** + * Implementation of hook_theme(). + */ +function relatedlinks_theme() { + return array( + 'relatedlinks_types_table' => array('form' => NULL), + 'relatedlinks' => array('arguments' => array('links' => array())) + ); +} + +/** * Theme the related links configuration table. * * @param $form