Pārlūkot izejas kodu

Merge branch '7.x-3.x-upgrade' of github.com:tripal/tripal into 7.x-3.x-upgrade

Stephen Ficklin 9 gadi atpakaļ
vecāks
revīzija
0ef429644e

+ 241 - 26
tripal_chado/includes/tripal_chado.migrate.inc

@@ -10,21 +10,60 @@
  */
  */
 function tripal_chado_migrate_form($form, &$form_state) {
 function tripal_chado_migrate_form($form, &$form_state) {
 
 
+  $form['overview_vert_tabs'] = array(
+    '#type' => 'vertical_tabs'
+  );
+  $form['modes']['#group'] = 'overview_vert_tabs';
+  $form['modes']['#weight'] = 1000;
+  
+  // Step 1
+  $form['step1'] = array(
+    '#type' => 'fieldset',
+    '#title' => 'Step1',
+    '#description' => '<b>Enable Legacy Support</b>',
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#group' => 'overview_vert_tabs'
+  );
+  global $base_url;
+  $mod_url = $base_url . '/admin/modules';
+  $form['step1']['step1_content'] = array(
+    '#markup' => 'Tripal legacy modules are needed to support the display of Tripal v2 
+                      content types. Review and <a href="'. $mod_url .'">enable modules</a>
+                      in the \'Tripal v2 Legacy\' category for legacy content support'
+  );
+  
+  // Step 2
+  $form['step2'] = array(
+    '#type' => 'fieldset',
+    '#title' => 'Step2',
+    '#description' => '<b>Migrate Content</b>',
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#group' => 'overview_vert_tabs'
+  );
+  $form['step2']['step2_container'] = array(
+    '#type' => 'container',
+    '#collapsible' => FALSE,
+    '#prefix' => '<div id="tripal-chado-migrate-form-step2">',
+    '#suffix' => '</div>'
+  );
+  
   $tv2_content_type = 'all';
   $tv2_content_type = 'all';
   if (array_key_exists('values', $form_state)) {
   if (array_key_exists('values', $form_state)) {
     $tv2_content_type = $form_state['values']['tv2_content_type'];
     $tv2_content_type = $form_state['values']['tv2_content_type'];
   }
   }
 
 
-  $options = tripal_chado_get_tripal_v2_content_type_options(TRUE);
-  $form['tv2_content_type'] = array(
+  $tv2_options = tripal_chado_get_tripal_v2_content_type_options(TRUE);
+  $form['step2']['step2_container']['tv2_content_type'] = array(
     '#type' => 'select',
     '#type' => 'select',
     '#title' => 'Tripal v2 Content Type',
     '#title' => 'Tripal v2 Content Type',
     '#description' => t('Select the Tripal v2 content type to migrate.'),
     '#description' => t('Select the Tripal v2 content type to migrate.'),
-    '#options' => $options,
+    '#options' => $tv2_options,
     '#default_value' => $tv2_content_type,
     '#default_value' => $tv2_content_type,
     '#ajax' => array(
     '#ajax' => array(
-      'callback' => "tripal_chado_migrate_form_ajax_callback",
-      'wrapper' => "tripal-chado-migrate-form",
+      'callback' => "tripal_chado_migrate_form_step2_ajax_callback",
+      'wrapper' => "tripal-chado-migrate-form-step2",
       'effect' => 'fade',
       'effect' => 'fade',
       'method' => 'replace'
       'method' => 'replace'
     ),
     ),
@@ -32,13 +71,12 @@ function tripal_chado_migrate_form($form, &$form_state) {
 
 
   // Add a review button that allows reviewing migratable content types
   // Add a review button that allows reviewing migratable content types
   if ($tv2_content_type != 'all') {
   if ($tv2_content_type != 'all') {
-
     $table = str_replace('chado_', '', $tv2_content_type);
     $table = str_replace('chado_', '', $tv2_content_type);
     $schema = chado_get_schema($table);
     $schema = chado_get_schema($table);
     $pkey = $schema['primary key'][0];
     $pkey = $schema['primary key'][0];
     $fkeys = $schema['foreign keys'];
     $fkeys = $schema['foreign keys'];
 
 
-    $form['tv3_content_type'] = array(
+    $form['step2']['step2_container']['tv3_content_type'] = array(
       '#type' => 'fieldset',
       '#type' => 'fieldset',
       '#title' => 'Tripal v3 Content Type',
       '#title' => 'Tripal v3 Content Type',
       '#description' => "Click the 'Get Tripal v3 Types' button to retrieve a list of Tripal v3
       '#description' => "Click the 'Get Tripal v3 Types' button to retrieve a list of Tripal v3
@@ -46,13 +84,13 @@ function tripal_chado_migrate_form($form, &$form_state) {
         depending on the size of your database.  The number of items to be converted is
         depending on the size of your database.  The number of items to be converted is
         shown beside the type."
         shown beside the type."
     );
     );
-    $form['tv3_content_type']['get_v3_type_btn'] = array(
+    $form['step2']['step2_container']['tv3_content_type']['get_v3_type_btn'] = array(
       '#type' => 'button',
       '#type' => 'button',
       '#name' => 'get_v3_type_btn',
       '#name' => 'get_v3_type_btn',
       '#value' => "Get Tripal v3 Types",
       '#value' => "Get Tripal v3 Types",
       '#ajax' => array(
       '#ajax' => array(
-        'callback' => "tripal_chado_migrate_form_ajax_callback",
-        'wrapper' => "tripal-chado-migrate-form",
+        'callback' => "tripal_chado_migrate_form_step2_ajax_callback",
+        'wrapper' => "tripal-chado-migrate-form-step2",
         'effect' => 'fade',
         'effect' => 'fade',
         'method' => 'replace'
         'method' => 'replace'
       ),
       ),
@@ -62,7 +100,7 @@ function tripal_chado_migrate_form($form, &$form_state) {
     if ($form_state['clicked_button']['#name'] == 'get_v3_type_btn') {
     if ($form_state['clicked_button']['#name'] == 'get_v3_type_btn') {
 
 
       // Migrate all      
       // Migrate all      
-      $form['tv3_content_type']['tv3_migrate_all'] = array(
+      $form['step2']['step2_container']['tv3_content_type']['tv3_migrate_all'] = array(
         '#type' => 'checkbox',
         '#type' => 'checkbox',
         '#title' => 'Migrate All'
         '#title' => 'Migrate All'
       );
       );
@@ -89,7 +127,7 @@ function tripal_chado_migrate_form($form, &$form_state) {
             $tv3_content_type->namespace . '--' . 
             $tv3_content_type->namespace . '--' . 
             $tv3_content_type->accession . '--' . 
             $tv3_content_type->accession . '--' . 
             $tv3_content_type->type);
             $tv3_content_type->type);
-          $form['tv3_content_type'][$key] = array(
+          $form['step2']['step2_container']['tv3_content_type'][$key] = array(
             '#type' => 'checkbox',
             '#type' => 'checkbox',
             '#title' => $tv3_content_type->type . ' (' . $tv3_content_type->num . ')',
             '#title' => $tv3_content_type->type . ' (' . $tv3_content_type->num . ')',
           );
           );
@@ -107,7 +145,7 @@ function tripal_chado_migrate_form($form, &$form_state) {
         $org_count = chado_query($sql)->fetchField();
         $org_count = chado_query($sql)->fetchField();
         if ($org_count > 0) {
         if ($org_count > 0) {
           $key = urldecode('tv3_content_type--local--organism--organism');
           $key = urldecode('tv3_content_type--local--organism--organism');
-          $form['tv3_content_type'][$key] = array(
+          $form['step2']['step2_container']['tv3_content_type'][$key] = array(
             '#type' => 'checkbox',
             '#type' => 'checkbox',
             '#title' => 'Organism (' . $org_count . ')',
             '#title' => 'Organism (' . $org_count . ')',
           );
           );
@@ -125,7 +163,7 @@ function tripal_chado_migrate_form($form, &$form_state) {
         $ana_count = chado_query($sql)->fetchField();
         $ana_count = chado_query($sql)->fetchField();
         if ($ana_count > 0) {
         if ($ana_count > 0) {
           $key = urlencode('tv3_content_type--local--analysis--analysis');
           $key = urlencode('tv3_content_type--local--analysis--analysis');
-          $form['tv3_content_type'][$key] = array(
+          $form['step2']['step2_container']['tv3_content_type'][$key] = array(
             '#type' => 'checkbox',
             '#type' => 'checkbox',
             '#title' => 'Analysis (' . $ana_count . ')',
             '#title' => 'Analysis (' . $ana_count . ')',
           );
           );
@@ -133,23 +171,74 @@ function tripal_chado_migrate_form($form, &$form_state) {
         }
         }
       }
       }
       if ($no_data) {
       if ($no_data) {
-        unset($form['tv3_content_type']['tv3_migrate_all']);
+        unset($form['step2']['step2_container']['tv3_content_type']['tv3_migrate_all']);
         drupal_set_message('No data for migration or all have been migrated.', 'warning');
         drupal_set_message('No data for migration or all have been migrated.', 'warning');
       }
       }
     }
     }
   }
   }
-
-  // Submit button
-  if ($tv2_content_type == 'all' || key_exists('tv3_migrate_all', $form['tv3_content_type'])) {
-    $form['migrate_btn'] = array(
+  // Migrate button
+  if ($tv2_content_type == 'all' || key_exists('tv3_migrate_all', $form['step2']['step2_container']['tv3_content_type'])) {
+    $form['step2']['step2_container']['migrate_btn'] = array(
       '#type' => 'submit',
       '#type' => 'submit',
       '#name' => 'migrate_btn',
       '#name' => 'migrate_btn',
-      '#value' => "Migrate $options[$tv2_content_type]",
+      '#value' => "Migrate $tv2_options[$tv2_content_type]",
     );
     );
   }
   }
-
-  $form['#prefix'] = '<div id="tripal-chado-migrate-form">';
-  $form['#suffix'] = '</div>';
+  
+  // Step 3
+  $form['step3'] = array(
+    '#type' => 'fieldset',
+    '#title' => 'Step3',
+    '#description' => '<b>Use Legacy Templates (optional)</b>',
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#group' => 'overview_vert_tabs'
+  );
+  // Get a list of enabled legacy modules with tv2 templates
+  $mod_enabled = tripal_chado_migrate_get_enabled_legacy_modules(TRUE);
+  $enabled_templates = variable_get('tripal_chado_enabled_legacy_templates', array());
+  foreach ($mod_enabled AS $mod_name => $mod_path) {
+    $form ['step3']['legacy_template--' . $mod_name] = array (
+      '#type' => 'checkbox',
+      '#title' => ucwords(str_replace(array('tripal', '_'), array('chado', ' '), $mod_name)),
+      '#default_value' => key_exists('legacy_template--' . $mod_name, $enabled_templates) ? $enabled_templates['legacy_template--' . $mod_name] : 0,
+    );
+  }
+  $form['step3']['save_btn'] = array(
+    '#type' => 'button',
+    '#name' => 'save_enabled_template_btn',
+    '#value' => "Save",
+  );
+  
+  // Step 4
+  $form['step4'] = array(
+    '#type' => 'fieldset',
+    '#title' => 'Step4',
+    '#description' => '<b>Complete Migration</b>',
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#group' => 'overview_vert_tabs'
+  );
+  $opt_complete_migration = array (
+    'delete' => 'Delete Tripal v2 Content',
+    'unpublish' => 'Unpublish Tripal v2 Content',
+    'cp_title' => 'Copy Title over to Tripal v3 Content',
+    'mv_url' => 'Migrate URL Alias to Tripal v3 Content'
+  );
+  foreach ($tv2_options AS $opt_key => $opt) {
+    $form['step4'][$opt_key . '_title'] = array(
+      '#markup' => "<b>$opt</b>"
+    );
+    $form['step4']['complete_migration--' . $opt_key] = array(
+      '#type' => 'checkboxes',
+      '#options' => $opt_complete_migration,
+    );
+  }
+  $form['step4']['submit_btn'] = array(
+    '#type' => 'button',
+    '#name' => 'complete_migration_btn',
+    '#value' => "Submit",
+  );
   return $form;
   return $form;
 }
 }
 
 
@@ -160,7 +249,31 @@ function tripal_chado_migrate_form($form, &$form_state) {
  * @param $form_state
  * @param $form_state
  */
  */
 function tripal_chado_migrate_form_validate($form, &$form_state) {
 function tripal_chado_migrate_form_validate($form, &$form_state) {
-
+  // Store the legacy template setting in a Drupal variable
+  if ($form_state['clicked_button']['#name'] == 'save_enabled_template_btn') {
+    $values = $form_state['values'];
+    $enabled_templates = array();
+    foreach ($values AS $key => $value) {
+      if (preg_match('/^legacy_template--/', $key)) {
+        $enabled_templates[$key] = $value;
+      }
+    }
+    variable_set('tripal_chado_enabled_legacy_templates', $enabled_templates);
+    drupal_theme_rebuild();
+  }
+  // Complete migration
+  else if ($form_state['clicked_button']['#name'] == 'complete_migration_btn') {
+    $values = $form_state['values'];
+    $delete = array();
+    $unpublish = array();
+    $cp_title = array();
+    $mv_url = array();
+    foreach ($values AS $key => $value) {
+      if (preg_match('/^complete_migration--/', $key)) {
+        
+      }
+    }
+  }
 }
 }
 
 
 /**
 /**
@@ -225,8 +338,8 @@ function tripal_chado_migrate_form_submit($form, &$form_state) {
  * @param $form_state
  * @param $form_state
  * @return $form
  * @return $form
  */
  */
-function tripal_chado_migrate_form_ajax_callback($form, $form_state) {
-  return $form;
+function tripal_chado_migrate_form_step2_ajax_callback(&$form, &$form_state) {
+  return $form['step2']['step2_container'];
 }
 }
 
 
 /**
 /**
@@ -293,6 +406,10 @@ function tripal_chado_get_tripal_v2_content_type_options($all_option = FALSE) {
 
 
 /**
 /**
  * Migrate all Tripal v2 content types
  * Migrate all Tripal v2 content types
+ * 
+ * Gather all available Tripal v2 content types and store the result in an associated array with 
+ * values of namespace, accession, term_name. The array is then pass to the function 
+ * tripal_chado_migrate_selected_types() that handles the migration
  */
  */
 function tripal_chado_migrate_all_types() {
 function tripal_chado_migrate_all_types() {
   // Get all available Tripal v2 content types
   // Get all available Tripal v2 content types
@@ -371,4 +488,102 @@ function tripal_chado_migrate_selected_types($tv3_content_types) {
     );
     );
     tripal_chado_publish_records ($value);
     tripal_chado_publish_records ($value);
   }
   }
+}
+
+/**
+ * Get a list of enabled legacy modules
+ * 
+ * return an associated array with value of module directory and keyed by the module name
+ */
+function tripal_chado_migrate_get_enabled_legacy_modules ($has_base_template = FALSE) {
+  $mod_enabled = module_list();
+  $legacy_mod = array ();
+  foreach ($mod_enabled AS $mod) {
+    if (preg_match('/^tripal_/', $mod)) {
+      $mod_dir = drupal_get_path('module', $mod);
+      if (preg_match('/\/legacy\//', $mod_dir) ) {
+        if ($has_base_template) {
+          if (file_exists($mod_dir . '/theme/templates/' . $mod . '_base.tpl.php')) {
+            $legacy_mod[$mod] = $mod_dir;
+          }
+        } else {
+          $legacy_mod[$mod] = $mod_dir;
+        }
+      }
+    }
+  }
+  return $legacy_mod;
+}
+
+/**
+ * Delete selected Tripal v2 content
+ *
+ * Delete all records from chado_* table then call the cleanup orphan nodes function
+ * 
+ * @param unknown $tv2_content_types
+ */
+function tripal_chado_delete_selected_types($tv2_content_types = array()) {
+  foreach ($tv2_content_types AS $type) {
+    $sql = "DELETE FROM $type";
+    db_query($sql);
+  }
+}
+
+/**
+ * Unpublish selected Tripal v2 content
+ *
+ * Set status = 0 (unpublished) for all nodes of selected Tripal v2 content types
+ *
+ * @param unknown $tv2_content_types
+ */
+function tripal_chado_unpublish_selected_types($tv2_content_types = array()) {
+  foreach ($tv2_content_types AS $type) {
+    $sql = "UPDATE node SET status = 0 WHERE nid IN (SELECT nid FROM $type)";
+    db_query($sql);
+  }
+}
+
+/**
+ * Copy titles for selected Tripal v2 content
+ *
+ * Copy tiltles for all nodes of selected Tripal v2 content types
+ *
+ * @param unknown $tv2_content_types
+ */
+function tripal_chado_copy_title_for_selected_types($tv2_content_types = array()) {
+  foreach ($tv2_content_types AS $type) {
+    $sql = "SELECT nid, entity_id FROM chado_entity WHERE nid IN (SELECT nid FROM $type)";
+    $result = db_query($sql);
+    while ($entity = $result->fetchObject()) {
+      $usql = "
+          UPDATE tripal_entity 
+          SET title = (SELECT title FROM node WHERE nid = :nid)
+          WHERE id = :entity_id";
+      db_query($usql, array(
+        ':nid' => $entity->nid, 
+        ':entity_id' => $entity->entity_id)
+      );
+    }
+  }
+}
+
+/**
+ * Migrate URL alias for selected Tripal v2 content
+ *
+ * Migrate URL alias for all nodes of selected Tripal v2 content types
+ *
+ * @param unknown $tv2_content_types
+ */
+function tripal_chado_migrate_url_alias_for_selected_types($tv2_content_types = array()) {
+  foreach ($tv2_content_types AS $type) {
+    $sql = "SELECT nid, entity_id FROM chado_entity WHERE nid IN (SELECT nid FROM $type)";
+    $result = db_query($sql);
+    while ($entity = $result->fetchObject()) {
+      $usql = "
+          UPDATE url_alias
+          SET source = 'bio_data/'" . $entity->entity_id .
+          "WHERE source = 'node/" . $entity->nid;
+      db_query($usql);
+    }
+  }
 }
 }

+ 42 - 30
tripal_chado/tripal_chado.module

@@ -608,31 +608,36 @@ function tripal_chado_entity_view($entity, $type, $view_mode, $langcode) {
       $chado_table = tripal_get_bundle_variable('chado_table', $bundle->id);
       $chado_table = tripal_get_bundle_variable('chado_table', $bundle->id);
       $chado_field = tripal_get_bundle_variable('chado_column', $bundle->id);
       $chado_field = tripal_get_bundle_variable('chado_column', $bundle->id);
 
 
-      // Remove the fields added by the chado_field_storage.
-      $fields = field_info_fields();
-      foreach($fields as $field) {
-        if ($field['storage']['type'] == 'field_chado_storage' or
-            $field['storage']['type'] == 'tripal_no_storage') {
-          $field_name = $field['field_name'];
-          if (property_exists($entity, $field_name)) {
-            $entity->$field_name = NULL;
-            unset($entity->content[$field_name]);
+      $enabled_templates = variable_get('tripal_chado_enabled_legacy_templates', array());
+      $legacy_template = 'legacy_template--tripal_' . $chado_table;
+
+      if (key_exists($legacy_template, $enabled_templates) && $enabled_templates[$legacy_template]) {
+        // Remove the fields added by the chado_field_storage.
+        $fields = field_info_fields();
+        foreach($fields as $field) {
+          if ($field['storage']['type'] == 'field_chado_storage' or
+              $field['storage']['type'] == 'tripal_no_storage') {
+            $field_name = $field['field_name'];
+            if (property_exists($entity, $field_name)) {
+              $entity->$field_name = NULL;
+              unset($entity->content[$field_name]);
+            }
           }
           }
         }
         }
-      }
-
-      // Now call the module's node_view hook to add additional
-      // content to our 'fake' entity node.
-      $entity->type = 'chado_' . $chado_table;
-      $entity->$chado_table = $entity->chado_record;
-      // The comment module is expecting a 'comment' property
-      // is attached to the node, so just set it to NULL.
-      $entity->comment = NULL;
-      $modules = module_list();
-      foreach ($modules as $mname => $details) {
-        $function_name = $mname . '_node_view';
-        if (function_exists($function_name)) {
-          $function_name($entity, $view_mode, $langcode);
+  
+        // Now call the module's node_view hook to add additional
+        // content to our 'fake' entity node.
+        $entity->type = 'chado_' . $chado_table;
+        $entity->$chado_table = $entity->chado_record;
+        // The comment module is expecting a 'comment' property
+        // is attached to the node, so just set it to NULL.
+        $entity->comment = NULL;
+        $modules = module_list();
+        foreach ($modules as $mname => $details) {
+          $function_name = $mname . '_node_view';
+          if (function_exists($function_name)) {
+            $function_name($entity, $view_mode, $langcode);
+          }
         }
         }
       }
       }
     }
     }
@@ -648,13 +653,20 @@ function tripal_chado_entity_view($entity, $type, $view_mode, $langcode) {
 function tripal_chado_entity_view_alter(&$build) {
 function tripal_chado_entity_view_alter(&$build) {
   // For the legacy support, we need to make sure the TOC
   // For the legacy support, we need to make sure the TOC
   // is built.
   // is built.
-  $build['#entity']->nid = NULL;
-  $build['#node'] = $build['#entity'];
-  $modules = module_list();
-  foreach ($modules as $mname => $details) {
-    $function_name = $mname . '_node_view_alter';
-    if (function_exists($function_name)) {
-      $function_name($build);
+  if ($build['#entity_type'] == 'TripalEntity') {
+    $enabled_templates = variable_get('tripal_chado_enabled_legacy_templates', array());
+    $entity = $build['#entity'];
+    $legacy_template = 'legacy_template--' . str_replace('chado', 'tripal', $entity->type);
+    if (key_exists($legacy_template, $enabled_templates) && $enabled_templates[$legacy_template]) {
+      $build['#entity']->nid = NULL;
+      $build['#node'] = $build['#entity'];
+      $modules = module_list();
+      foreach ($modules as $mname => $details) {
+        $function_name = $mname . '_node_view_alter';
+        if (function_exists($function_name)) {
+          $function_name($build);
+        }
+      }
     }
     }
   }
   }
 }
 }

+ 0 - 0
tripal_panes/tripal_panes.module