|
@@ -67,9 +67,8 @@ function tripal_chado_migrate_form($form, &$form_state) {
|
|
|
visitors can continue to visit the Tripal v2 pages. Tripal
|
|
|
v3 content types may remain private while customization is underway.
|
|
|
Once customization is completed a subsequent step will allow you to
|
|
|
- swap out Tripal v2 pages for the newer Tripal v3 pages.') .
|
|
|
- t('If you would like to use Trial v3 web services you must migrate
|
|
|
- content types.'),
|
|
|
+ swap out Tripal v2 pages for the newer Tripal v3 pages. If you would like to
|
|
|
+ use Trial v3 web services you must migrate content types.'),
|
|
|
);
|
|
|
|
|
|
$tv2_content_type = 'all';
|
|
@@ -130,12 +129,10 @@ function tripal_chado_migrate_form($form, &$form_state) {
|
|
|
// Migrate selection only
|
|
|
if ($table == 'organism') {
|
|
|
$sql =
|
|
|
- "SELECT count(*)
|
|
|
- FROM {organism} O
|
|
|
- INNER JOIN public.chado_organism CO ON O.organism_id = CO.organism_id
|
|
|
- LEFT JOIN public.chado_entity CE ON CE.record_id = O.organism_id
|
|
|
- AND CE.data_table = 'organism'
|
|
|
- WHERE CE.record_id IS NULL";
|
|
|
+ "SELECT count(*)
|
|
|
+ FROM {organism} O
|
|
|
+ INNER JOIN public.chado_organism CO ON O.organism_id = CO.organism_id
|
|
|
+ ";
|
|
|
$org_count = chado_query($sql)->fetchField();
|
|
|
if ($org_count > 0) {
|
|
|
$key = urldecode('tv3_content_type--OBI--0100026--organism');
|
|
@@ -149,11 +146,9 @@ function tripal_chado_migrate_form($form, &$form_state) {
|
|
|
else if ($table == 'analysis') {
|
|
|
$sql =
|
|
|
"SELECT count(*)
|
|
|
- FROM {analysis} A
|
|
|
- INNER JOIN public.chado_analysis CA ON A.analysis_id = CA.analysis_id
|
|
|
- LEFT JOIN public.chado_entity CE ON CE.record_id = A.analysis_id
|
|
|
- AND CE.data_table = 'analysis'
|
|
|
- WHERE CE.record_id IS NULL";
|
|
|
+ FROM {analysis} A
|
|
|
+ INNER JOIN public.chado_analysis CA ON A.analysis_id = CA.analysis_id
|
|
|
+ ";
|
|
|
$ana_count = chado_query($sql)->fetchField();
|
|
|
if ($ana_count > 0) {
|
|
|
$key = urlencode('tv3_content_type--local--analysis--analysis');
|
|
@@ -166,12 +161,10 @@ function tripal_chado_migrate_form($form, &$form_state) {
|
|
|
}
|
|
|
else if ($table == 'project') {
|
|
|
$sql =
|
|
|
- "SELECT count(*)
|
|
|
- FROM {project} P
|
|
|
- INNER JOIN public.chado_project CP ON P.project_id = CP.project_id
|
|
|
- LEFT JOIN public.chado_entity CE ON CE.record_id = P.project_id
|
|
|
- AND CE.data_table = 'project'
|
|
|
- WHERE CE.record_id IS NULL";
|
|
|
+ "SELECT count(*)
|
|
|
+ FROM {project} P
|
|
|
+ INNER JOIN public.chado_project CP ON P.project_id = CP.project_id
|
|
|
+ ";
|
|
|
$proj_count = chado_query($sql)->fetchField();
|
|
|
if ($proj_count > 0) {
|
|
|
$key = urlencode('tv3_content_type--local--project--project');
|
|
@@ -184,12 +177,10 @@ function tripal_chado_migrate_form($form, &$form_state) {
|
|
|
}
|
|
|
else if ($table == 'featuremap') {
|
|
|
$sql =
|
|
|
- "SELECT count(*)
|
|
|
- FROM {featuremap} M
|
|
|
- INNER JOIN public.chado_featuremap CM ON M.featuremap_id = CM.featuremap_id
|
|
|
- LEFT JOIN public.chado_entity CE ON CE.record_id = M.featuremap_id
|
|
|
- AND CE.data_table = 'featuremap'
|
|
|
- WHERE CE.record_id IS NULL";
|
|
|
+ "SELECT count(*)
|
|
|
+ FROM {featuremap} M
|
|
|
+ INNER JOIN public.chado_featuremap CM ON M.featuremap_id = CM.featuremap_id
|
|
|
+ ";
|
|
|
$map_count = chado_query($sql)->fetchField();
|
|
|
if ($map_count > 0) {
|
|
|
$key = urlencode('tv3_content_type--data--1274--map');
|
|
@@ -202,12 +193,10 @@ function tripal_chado_migrate_form($form, &$form_state) {
|
|
|
}
|
|
|
else if ($table == 'pub') {
|
|
|
$sql =
|
|
|
- "SELECT count(*)
|
|
|
- FROM {pub} P
|
|
|
- INNER JOIN public.chado_pub CP ON P.pub_id = CP.pub_id
|
|
|
- LEFT JOIN public.chado_entity CE ON CE.record_id = P.pub_id
|
|
|
- AND CE.data_table = 'pub'
|
|
|
- WHERE CE.record_id IS NULL";
|
|
|
+ "SELECT count(*)
|
|
|
+ FROM {pub} P
|
|
|
+ INNER JOIN public.chado_pub CP ON P.pub_id = CP.pub_id
|
|
|
+ ";
|
|
|
$proj_count = chado_query($sql)->fetchField();
|
|
|
if ($proj_count > 0) {
|
|
|
$key = urlencode('tv3_content_type--TPUB--0000002--Publication');
|
|
@@ -221,15 +210,12 @@ function tripal_chado_migrate_form($form, &$form_state) {
|
|
|
else if (key_exists('cvterm', $fkeys) && key_exists('type_id', $fkeys['cvterm']['columns'])) {
|
|
|
// Get all Tripal v2 node types from the chad_* linking table
|
|
|
$sql =
|
|
|
- "SELECT V.name AS type, X.accession, db.name AS vocabulary , count(*) AS num
|
|
|
+ "SELECT V.name AS type, X.accession, db.name AS vocabulary , count(*) AS num
|
|
|
FROM {" . $table . "} T
|
|
|
INNER JOIN public.$tv2_content_type CT ON T.$pkey = CT.$pkey
|
|
|
INNER JOIN {cvterm} V ON V.cvterm_id = T.type_id
|
|
|
INNER JOIN {dbxref} X ON X.dbxref_id = V.dbxref_id
|
|
|
INNER JOIN {db} ON db.db_id = X.db_id
|
|
|
- LEFT JOIN public.chado_entity CE ON CE.record_id = T.$pkey
|
|
|
- AND CE.data_table = '$table'
|
|
|
- WHERE CE.record_id IS NULL
|
|
|
GROUP BY V.name, X.accession, db.name";
|
|
|
$tv3_content_types = chado_query($sql);
|
|
|
while($tv3_content_type = $tv3_content_types->fetchObject()) {
|
|
@@ -260,6 +246,10 @@ function tripal_chado_migrate_form($form, &$form_state) {
|
|
|
'#name' => 'migrate_btn',
|
|
|
'#value' => "Migrate $tv2_options[$tv2_content_type]",
|
|
|
);
|
|
|
+ // Disable the migration if all have been done
|
|
|
+ if (count($tv2_options) == 1 && key_exists('all', $tv2_options)) {
|
|
|
+ $form['step2']['step2_container']['migrate_btn']['#disabled'] = 1;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// Step 3
|
|
@@ -525,6 +515,10 @@ function tripal_chado_migrate_form_step2_ajax_callback(&$form, &$form_state) {
|
|
|
*
|
|
|
* @param boolean $all_option
|
|
|
* Include an 'all' option in the returned array
|
|
|
+ * @param boolean $has_template
|
|
|
+ * Return TV2 content types only if it has a base template. This will exclude TV2 content
|
|
|
+ * types such as Blast/Kegg/Interpro/Unigene which are all converted into the TV3
|
|
|
+ * 'Analysis' entity type
|
|
|
* @return string[]
|
|
|
* Return a string array keyed by the node type
|
|
|
*/
|
|
@@ -774,17 +768,21 @@ function tripal_chado_unpublish_selected_types($tv2_content_types = array()) {
|
|
|
*/
|
|
|
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)
|
|
|
- );
|
|
|
+ $chado_table = str_replace('chado_', '', $type);
|
|
|
+ $bio_data_tables = tripal_chado_migrate_get_biodata_tables($chado_table);
|
|
|
+ foreach($bio_data_tables AS $bio_data_table) {
|
|
|
+ $sql = "SELECT nid, entity_id FROM $bio_data_table 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)
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -798,14 +796,18 @@ function tripal_chado_copy_title_for_selected_types($tv2_content_types = array()
|
|
|
*/
|
|
|
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);
|
|
|
+ $chado_table = str_replace('chado_', '', $type);
|
|
|
+ $bio_data_tables = tripal_chado_migrate_get_biodata_tables($chado_table);
|
|
|
+ foreach($bio_data_tables AS $bio_data_table) {
|
|
|
+ $sql = "SELECT nid, entity_id FROM $bio_data_table 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);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -818,10 +820,10 @@ function tripal_chado_migrate_url_alias_for_selected_types($tv2_content_types =
|
|
|
*/
|
|
|
function tripal_chado_migrate_organism_images () {
|
|
|
// Get all organism entities
|
|
|
+ $bio_data_table = array_pop(tripal_chado_migrate_get_biodata_tables('organism'));
|
|
|
$results =
|
|
|
- db_select('chado_entity', 'ce')
|
|
|
+ db_select($bio_data_table, 'ce')
|
|
|
->fields('ce', array('entity_id', 'record_id', 'nid'))
|
|
|
- ->condition('data_table', 'organism')
|
|
|
->execute();
|
|
|
|
|
|
// Iterate through each organism entity
|
|
@@ -908,3 +910,27 @@ function tripal_chado_migrate_organism_image_add_file ($fid, $entity_id) {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Retrieve chado_biodata_* table name
|
|
|
+ *
|
|
|
+ * @param string $chado_table
|
|
|
+ * the chado_table where the record is stored
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ * Return all chado_biodata_* table names mapping to a chado_table
|
|
|
+ */
|
|
|
+function tripal_chado_migrate_get_biodata_tables ($chado_table) {
|
|
|
+ // To find the bundle_table, check if type_column is used for the chado_table
|
|
|
+ $query = db_select('chado_bundle', 'cb');
|
|
|
+ $query->join('tripal_bundle', 'tb', 'tb.id = cb.bundle_id');
|
|
|
+ $query->fields('cb', array('data_table'));
|
|
|
+ $query->fields('tb', array('name'));
|
|
|
+ $query->condition('cb.data_table', $chado_table);
|
|
|
+ $bundles = $query->execute();
|
|
|
+ $tables = array();
|
|
|
+ while ($bundle = $bundles->fetchObject()) {
|
|
|
+ array_push($tables, 'chado_' . $bundle->name);
|
|
|
+ }
|
|
|
+ return $tables;
|
|
|
+}
|