--- C:/Apache2/social/sites/default/modules/old_freelinking/freelinking.install	Thu Oct 04 10:19:53 2007
+++ C:/Apache2/social/sites/default/modules/freelinking/freelinking.install	Thu Dec 27 13:34:24 2007
@@ -1,75 +1,25 @@
 <?php
 
-function freelinking_install() {
-
-  switch ($GLOBALS['db_type']) {
-    case 'mysql':
-    case 'mysqli':
-      db_query('CREATE TABLE {freelinking} (
-                   hash   CHAR(32)     NOT NULL,
-                   phrase VARCHAR(200) NOT NULL,
-                   path   VARCHAR(200) NOT NULL,
-                   args   VARCHAR(200) NOT NULL, 
-                   PRIMARY KEY(hash))
-                TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */;');
-      break;
-    case 'pgsql':
-      db_query('CREATE TABLE {freelinking} (
-                  hash   CHAR(32)     NOT NULL,
-                  phrase VARCHAR(200) NOT NULL,
-                  path   VARCHAR(200) NOT NULL,
-                  args   VARCHAR(200) NOT NULL,
-                  PRIMARY KEY(hash));');
-      break;
-    }
-} // endfunction freelinking_install
-
-function freelinking_update_1() {
-  $ret = array();
-  switch ($GLOBALS['db_type']) {
-    case 'mysql':
-    case 'mysqli':
-      $ret[] = update_sql('ALTER TABLE {freelinking} DROP PRIMARY KEY');
-      break;
-    case 'pgsql':
-      $ret[] = update_sql('ALTER TABLE {freelinking} DROP CONSTRAINT {freelinking}_pkey');
-      break;
-  } // endswitch on db type
-
-  $ret[] = _system_update_utf8(array('freelinking'));
-
-  return $ret;
-};
+function freelinking_schema() {
+  $schema = array();
 
-function freelinking_update_2() { // this is the update to the 4.7 version
-  $ret = array();
+  $schema['freelinking'] = array(
+    'fields' => array(
+      'hash' => array( 'type' => 'varchar', 'length' => 32, 'not null' => TRUE,),
+      'phrase' => array( 'type' => 'varchar', 'length' => 200, 'not null' => TRUE,),
+      'path' => array( 'type' => 'varchar', 'length' => 200, 'not null' => TRUE,),
+      'args' => array( 'type' => 'varchar', 'length' => 200, 'not null' => TRUE,),
+    ),
+    'primary key' => array('hash'),
+  );
 
-  switch ($GLOBALS['db_type']) {
-    case 'mysql':
-    case 'mysqli':
-      $ret[] = update_sql('ALTER TABLE {freelinking} ADD COLUMN hash CHAR(32)');
-      $ret[] = update_sql('ALTER TABLE {freelinking} ADD COLUMN path VARCHAR(200)');
-      $ret[] = update_sql('ALTER TABLE {freelinking} ADD COLUMN args VARCHAR(200)');
-      $ret[] = update_sql('UPDATE      {freelinking} SET path = target');
-      $ret[] = update_sql('UPDATE      {freelinking} SET hash = MD5(CONCAT(phrase, path))');
-      $ret[] = update_sql('ALTER TABLE {freelinking} DROP COLUMN target');
-      $ret[] = update_sql('ALTER TABLE {freelinking} ADD PRIMARY KEY hash (hash)');
-      break;
+  return $schema;
+}
 
-    case 'pgsql':
-      $ret[] = update_sql('ALTER TABLE {freelinking} DROP COLUMN target');
-      db_add_column($ret, 'freelinking', 'hash', 'char(32)');
-      db_add_column($ret, 'freelinking', 'path', 'varchar(200)');
-      db_add_column($ret, 'freelinking', 'args', 'varchar(200)');
-      $ret[] = update_sql('ALTER TABLE {freelinking} ADD PRIMARY KEY hash');
-      break;
-  } // endswitch db_table
-  return $ret;
+function freelinking_install() {
+  drupal_install_schema('freelinking');
 }
 
 function freelinking_uninstall() {
   drupal_uninstall_schema('freelinking');
-}
-
-// vim: tw=300 nowrap syn=php
-?>
+}
\ No newline at end of file
--- C:/Apache2/social/sites/default/modules/old_freelinking/freelinking.module	Thu Oct 04 10:19:53 2007
+++ C:/Apache2/social/sites/default/modules/freelinking/freelinking.module	Thu Dec 27 16:18:48 2007
@@ -51,7 +51,7 @@
           $link = l(t('see this content'), drupal_get_path_alias('node/' . $fltargetnid));
         }
         else { // content not found, show link to create
-          $link = '<a href=' . url($freelink['path'], $freelink['args']) . '>' . t('create this content') . '</a>';
+          $link = '<a href=' . url($freelink['path'], array('query' => $freelink['args'])) . '>' . t('create this content') . '</a>';
         }
         $rows[$i][] = $link;
       }
@@ -106,11 +106,12 @@
           $result = db_query($query);
           $i = 0;
           $content = '';
+          $items = array();
           while ($freelink = db_fetch_object($result)) {
             if ($i == variable_get('freelinking_blocknum', 10)) { // we're done
               break;
             }
-            $items[] = l(urldecode($freelink->phrase), $freelink->path, array(), $freelink->args);
+            $items[] = l(urldecode($freelink->phrase), $freelink->path, array('query' => $freelink->args));
             $i++;
           } // endwhile looping through flpairs
           $block['subject'] = variable_get('freelinking_blocktitle', 'Create This Content');
@@ -174,11 +175,7 @@
     case 'list':
       return (array(0 => t('freelinking filter')));
       break;
-
-    case 'name':
-      return t('freelinking filter');
-      break;
-    
+      
     case 'description':
       return t('Enables freelinking between nodes with CamelCase or delimiters like [[ and ]].');
       break;
@@ -197,8 +194,6 @@
 function freelinking_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
   switch ($op) {
     case 'update':
-      _freelinking_do_filtering($node->body, TRUE);
-      break;
     case 'insert':
       _freelinking_do_filtering($node->body, TRUE);
       break;
@@ -232,7 +227,8 @@
 }
 
 function freelinking_form_alter(&$form, $form_state, $form_id) {
-  if (isset($form['type'])) {
+  // Check that this is a new node we're adding
+  if (isset($form['type']) && arg(1) == 'add') {
     $type = $form['type']['#value'];
     if (variable_get('freelinking_nodetype', 'story') == $type && $_GET['edit']) { // on the right node type, with GET data
       $form['title']['#default_value'] = urldecode($_GET['edit']['title']); // prepopulate the title field
@@ -294,7 +290,7 @@
   return $text;
 } // endfunction _freelinking_do_filtering
 
-function _freelinking_store($phrase, $path, $args=NULL) { // store freelinking pair in the db
+function _freelinking_store($phrase, $path, $args = '') { // store freelinking pair in the db
   $hash = md5($phrase . $path . $args);
   $query = "SELECT hash FROM {freelinking} WHERE phrase = '%s'";
   $result = db_query($query, $phrase); 
@@ -335,8 +331,15 @@
 }
 
 
-function _freelinking_make_link($thetitle) { // helper function for freelinking_page
+function _freelinking_make_link($title) { // helper function for freelinking_page
   global $user;
+  
+  // Make sure title is safe for placing in URL
+  $thetitle = urlencode($title);
+  
+  // Create a default array to prevent key lookup misses
+  $freelink = array('path' => '', 'args' => '');
+  
   // Returns a link to a node named $thetitle if found, or a link to new content otherwise.
   $nid = _freelinking_exists($thetitle); 
   if ($nid) { // the node exists, set the path to go there
@@ -362,7 +365,7 @@
         break;
     } // endswitch notfound options
   }
-  _freelinking_store($thetitle, $freelink['path'], isset($freelink['args']) ? $freelink['args'] : '');
+  _freelinking_store($thetitle, $freelink['path'], $freelink['args']);
   return $freelink;
 } // endfunction _freelinking_make_link
 
