? flexiconvert.module.tar_.gz
Index: flexiconvert.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flexiconvert/flexiconvert.module,v
retrieving revision 1.1.1.1.2.6
diff -u -u -r1.1.1.1.2.6 flexiconvert.module
--- flexiconvert.module	11 Oct 2007 21:17:33 -0000	1.1.1.1.2.6
+++ flexiconvert.module	30 Apr 2009 16:17:47 -0000
@@ -5,8 +5,6 @@
  */
 function flexiconvert_help($section) { 
   switch ($section) {
-    case 'admin/modules#description':
-        return t('Tool to help convert flexinodes to cck nodes');
     case 'admin/help#flexiconvert':
         return t('Flexiconvert will convert some kinds of flexinode types into cck types.<br>' .
             '<b>Limitations:</b> <ul>' .
@@ -47,37 +45,27 @@
 function flexiconvert_form_submit($form_id, $form_values) {
   $flexitype = $form_values['flexitype'];
   $ccktype = $form_values['ccktype'];
-  variable_set( 'flexiconvert_flexitype', $flexitype );      
-  variable_set( 'flexiconvert_ccktype', $ccktype );      
+  variable_set('flexiconvert_flexitype', $flexitype);      
+  variable_set('flexiconvert_ccktype', $ccktype);      
   
   $flexitype_name = 'flexinode-'. $flexitype;
-  drupal_set_message( "Syncing flexinode: $flexitype_name to cck: $ccktype " );
+  drupal_set_message("Syncing flexinode: $flexitype_name to cck: $ccktype ");
   
-  // Map flexinode fields to cck fields
   $fields = array();
-  $result = db_query( "SELECT field_id, label FROM {flexinode_field} WHERE ctype_id = ". $flexitype );
+  $result = db_query("SELECT field_id, label FROM {flexinode_field} WHERE ctype_id = '%s'", $flexitype);
   while( $row = db_fetch_array( $result ) ) {
     $label = $row['label'];
     $cckfield = strtolower( $label );
-    $cckfield = str_replace("(", "", $cckfield);
-    $cckfield = str_replace(")", "", $cckfield);
-    $cckfield = str_replace("#", "", $cckfield);
-    $cckfield = str_replace("/", "", $cckfield);
-    $cckfield = str_replace("\\", "", $cckfield);
-    $cckfield = 'field_'. str_replace( ' ', '_', $cckfield ); // .'_value';
-	$cckfield = substr($cckfield, 0, 31);
-
-    $fields[ $row['field_id'] ] = $cckfield; 
-    drupal_set_message( "Mapping $label (flexifield-".$row['field_id'].") to $cckfield" );
+    $cckfield = 'field_'. str_replace(' ', '_', $cckfield); // .'_value';
+    $fields[ $row['field_id'] ] = $cckfield;
+    drupal_set_message("Mapping $label (flexifield-".$row['field_id'].") to $cckfield");
   }    
 
   // gather all the field data, ordered per node
   $nodes = array();
-  foreach( $fields as $flexifield_id => $cckfield ) {
-    $sql = "SELECT ff.field_type, fd.nid, fd.textual_data, fd.numeric_data, fd.serialized_data FROM {flexinode_data} fd, {flexinode_field} ff WHERE fd.field_id = $flexifield_id AND fd.field_id = ff.field_id";
-    //drupal_set_message( $sql );
-    $result = db_query( $sql );
-    while( $row = db_fetch_array( $result ) ) {
+  foreach($fields as $flexifield_id => $cckfield) {
+    $result = db_query("SELECT ff.field_type, fd.nid, fd.textual_data, fd.numeric_data, fd.serialized_data FROM {flexinode_data} fd, {flexinode_field} ff WHERE fd.field_id = '%s' AND fd.field_id = ff.field_id", $flexifield_id);
+    while($row = db_fetch_array($result)) {
       if ($row['field_type'] == 'textfield' || $row['field_type'] == 'textarea') {
         $nodes[ $row['nid'] ][$cckfield]['text'] = $row['textual_data'];
         $nodes[ $row['nid'] ][$cckfield]['format'] = $row['numeric_data'];
@@ -91,95 +79,73 @@
       else if ($row['field_type'] == 'file') {
         $nodes[ $row['nid'] ][$cckfield]['file'] = $row['serialized_data'];
       }
-      else if ($row['field_type'] == 'email') {
-        $nodes[ $row['nid'] ][$cckfield]['email'] = $row['textual_data'];
-      }
-      else if ($row['field_type'] == 'checkbox' || $row['field_type'] == 'timestamp' || $row['field_type'] == 'select') {
-        $nodes[ $row['nid'] ][$cckfield]['number'] = $row['numeric_data'];
-      }
       //drupal_set_message( 'Nodes['. $row['nid'] . "][$cckfield] = ". $row['textual_data'] );
     }
   }
 
-  $sql = "SELECT nid, vid FROM {node} WHERE type = '$flexitype_name'";
- // drupal_set_message( $sql );
-  $result = db_query( $sql );
+  $result = db_query("SELECT nid, vid FROM {node} WHERE type = '%s'", $flexitype_name);
   $count_to_convert = db_num_rows($result);
-  drupal_set_message( "There are $count_to_convert items to convert" );  
+  drupal_set_message("There are $count_to_convert items to convert");  
   $fields_str = ''; 
   $count = 0;
-  while( $row = db_fetch_array( $result ) ) { 
+  while($row = db_fetch_array($result)) { 
     $count++;
     // INSERT flexinode data as rows in cck table 
     $nid = $row['nid'];
     $vid = $row['vid'];
     $node = $nodes[$nid];
-    $cck_table = "node_$ccktype";
-    $sql = "insert into {$cck_table} (nid, vid) value ('$nid', '$vid')";
+    $cck_table = "content_type_" . $ccktype;
     //drupal_set_message( "$count: $sql" );
-    db_query( $sql );
-    foreach( $node as $cckfield => $value ) {
-//      db_query( "UPDATE {%s} SET %s = '%s' WHERE nid = %d", $cck_table,  $cckfield . '_value', $value['text'], $nid );
-//      if( $value['format'] != 0 ) {
-//        db_query( "UPDATE {%s} SET %s = '%d' WHERE nid = %d", $cck_table,  $cckfield . '_format', $value['format'], $nid );
-      if ( array_key_exists( 'image', $value) ) {
+    db_query("INSERT INTO {%s} (nid, vid) VALUES (%d, %d)", $cck_table, $nid, $vid);
+    foreach($node as $cckfield => $value) {
+      if ($value['image']) {
         $file = unserialize($value['image']);
         $fid = db_next_id('{files}_fid');
         db_query("INSERT into {files} (fid, nid, filename, filepath, filemime, filesize) VALUES (%d, %d, '%s','%s','%s',%d)", $fid, $nid, $file->filename, $file->filepath, $file->filemime, $file->filesize);
-        db_query( "UPDATE {%s} SET %s = '%s', %s = '%s', %s = '%s' WHERE nid = %d", $cck_table, $cckfield . '_fid', $fid, $cckfield . '_title', $file->filename, $cckfield . '_alt', $file->filename, $nid);
+        db_query("UPDATE {%s} SET %s = '%s', %s = '%s', %s = '%s' WHERE nid = %d", $cck_table, $cckfield . '_fid', $fid, $cckfield . '_title', $file->filename, $cckfield . '_alt', $file->filename, $nid);
       }
-      else if (array_key_exists( 'url', $value) ) {
-        db_query( "UPDATE {%s} SET %s = '%s' WHERE nid = %d", $cck_table,  $cckfield . '_url', $value['url'],  $nid);
+      else if ($value['url']) {
+        db_query("UPDATE {%s} SET %s = '%s' WHERE nid = %d", $cck_table,  $cckfield . '_url', $value['url'],  $nid);
       }
-      else if (array_key_exists( 'text', $value)) {
-        db_query( "UPDATE {%s} SET %s = '%s' WHERE nid = %d", $cck_table,  $cckfield . '_value', $value['text'], $nid );
+      else if ($value['text']) {
+        db_query("UPDATE {%s} SET %s = '%s' WHERE nid = %d", $cck_table,  $cckfield . '_value', $value['text'],  $nid);
         if( $value['format'] != 0 ) {
-          // check to see if the column exists before trying to make it. I know that putting the query in this inner-loop is
-          // dreadfully inefficient, but it's easy, and efficiency isn't such a big deal here since the update will only
-          // be run once.
-		  $does_format_col_exist = db_query( "show columns from " . $cck_table . " like '".$cckfield . "_format'" );
-		  $format_col_exists = db_num_rows($does_format_col_exist);
-		  if( $format_col_exists ) {
-	          db_query( "UPDATE {%s} SET %s = '%d' WHERE nid = %d", $cck_table,  $cckfield . '_format', $value['format'], $nid );
-	      }
+          db_query("UPDATE {%s} SET %s = %d WHERE nid = %d", $cck_table,  $cckfield . '_format', $value['format'], $nid);
         }
       }
-      else if (array_key_exists( 'file', $value ) ) {
+      else if ($value['file']) {
         $file = unserialize($value['file']);
         $fid = db_next_id('{files}_fid');
         db_query("INSERT into {files} (fid, nid, filename, filepath, filemime, filesize) VALUES (%d, %d, '%s','%s','%s',%d)", $fid, $nid, $file->filename, $file->filepath, $file->filemime, $file->filesize);
-        db_query( "UPDATE {%s} SET %s = '%s', %s = '%s', %s = '%s' WHERE nid = %d", $cck_table, $cckfield . '_fid', $fid, $cckfield . '_description', $file->filename, $cckfield . '_list', 0, $nid);    
-      }
-      else if ($value['email']) {
-        db_query( "UPDATE {%s} SET %s = '%s' WHERE nid = %d", $cck_table,  $cckfield . '_email', $value['email'],  $nid);
-      }
-      else if (array_key_exists('number', $value) ) {
-        db_query( "UPDATE {%s} SET %s = '%s' WHERE nid = %d", $cck_table,  $cckfield . '_value', $value['number'],  $nid);
+        db_query("UPDATE {%s} SET %s = '%s', %s = '%s', %s = '%s' WHERE nid = %d", $cck_table, $cckfield . '_fid', $fid, $cckfield . '_description', $file->filename, $cckfield . '_list', 0, $nid);
       }
     }
   }
 
-  $result = db_query( "SELECT nid FROM {$cck_table}" );
+  $result = db_query("SELECT nid FROM {%s}", $cck_table);
   $count_converted = db_num_rows($result);
-  drupal_set_message( "Inserted '$count_converted' items ($count)" );  
+  drupal_set_message("Inserted '$count_converted' items ($count)");  
 
   if( $count_converted == $count_to_convert ) {
-    drupal_set_message( "Yay, all nodes converted" );
+    drupal_set_message("Yay, all nodes converted");
     // finally convert the node type fields
-    $sql = "UPDATE {node} SET type = '$ccktype' WHERE type = '$flexitype_name'";
-    //drupal_set_message( "Not Done: ". $sql );
-    db_query( $sql );
+    db_query("UPDATE {node} SET type = '%s' WHERE type = '%s'", $ccktype, $flexitype_name);
+    cache_clear_all(NULL, 'cache_content');
   } 
   else {
-    drupal_set_message( "Boo!!");
+    drupal_set_message("Boo!!");
   }
 } 
 
 function flexiconvert_page() { 
-  drupal_set_title( "Flexiconvert" ); 
+  drupal_set_title("Flexiconvert"); 
+  return drupal_get_form('flexiconvert_form');
+}
+
+function flexiconvert_form() {
   $types = array();
-  $result = db_query( "SELECT name, ctype_id FROM {flexinode_type}" );
-  while( $row = db_fetch_array( $result ) ) {
+  $result = db_query("SELECT name, ctype_id FROM {flexinode_type}");
+  while($row = db_fetch_array($result)) {
     $types[ $row['ctype_id'] ] = $row['name']; 
   }
   
@@ -188,19 +154,19 @@
     '#type' => 'select',
     '#title' => t('Flexinode to read from'),
     '#options' => $types,
-    '#default_value' => variable_get( 'flexiconvert_flexitype', NULL ),
+    '#default_value' => variable_get('flexiconvert_flexitype', NULL),
   ); 
 
   $ccktypes = array();
-  $result = db_query( "SELECT label, type_name FROM {node_type_content}" );
+	$result = db_query("SELECT type, name FROM {node_type}");
   while( $row = db_fetch_array( $result ) ) {
-    $ccktypes[ $row['type_name'] ] = $row['label']; 
+    $ccktypes[ $row['type'] ] = $row['name']; 
   }   
   $form['ccktype'] = array(
     '#type' => 'select',
     '#title' => t('CCK Type to insert into'),
     '#options' => $ccktypes,
-    '#default_value' => variable_get( 'flexiconvert_ccktype', NULL ),
+    '#default_value' => variable_get('flexiconvert_ccktype', NULL),
   ); 
   
   $form['submit'] = array(
@@ -208,7 +174,7 @@
     '#value' => t('Do It'),
   );
   
-  return drupal_get_form('flexiconvert_form', $form);
+  return $form;
 }
 
 
