TRUE)); } } /** * Implementation of hook_requirements(). * * @ingroup tripal_featuremap */ function tripal_featuremap_requirements($phase) { $requirements = array(); if ($phase == 'install') { // make sure chado is installed if (!$GLOBALS["chado_is_installed"]) { $requirements ['tripal_featuremap'] = array( 'title' => "tripal_featuremap", 'value' => "ERROR: Chado most be installed before this module can be enabled", 'severity' => REQUIREMENT_ERROR, ); } } return $requirements; } /** * Implementation of hook_install(). * * @ingroup tripal_featuremap */ function tripal_featuremap_install() { // create the module's data directory tripal_create_files_dir('tripal_featuremap'); // add the featuremapprop table to Chado tripal_featuremap_add_custom_tables(); // Add cvterms tripal_featuremap_add_cvs(); tripal_featuremap_add_cvterms(); // set the default vocabularies tripal_set_default_cv('featuremapprop', 'type_id', 'featuremap_property'); tripal_set_default_cv('featureposprop', 'type_id', 'featurepos_property'); tripal_set_default_cv('featuremap', 'uinittype_id', 'featuremap_units'); } /** * Implementation of hook_uninstall(). * * @ingroup tripal_featuremap */ function tripal_featuremap_uninstall() { } /** * Implementation of hook_schema(). * * @ingroup tripal_featuremap */ function tripal_featuremap_schema() { $schema['chado_featuremap'] = array( 'fields' => array( 'vid' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0 ), 'nid' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0 ), 'featuremap_id' => array( 'type' => 'int', 'not null' => TRUE, 'default' => 0 ) ), 'indexes' => array( 'featuremap_id' => array('featuremap_id') ), 'unique keys' => array( 'nid_vid' => array('nid', 'vid'), 'vid' => array('vid') ), 'primary key' => array('nid'), ); return $schema; } /** * Add cvs needed by the featuremap module * * @ingroup tripal_featuremap */ function tripal_featuremap_add_cvs() { tripal_cv_add_cv( 'featuremap_units', 'Contains map unit types for the unittype_id column of the featuremap table.' ); tripal_cv_add_cv( 'featurepos_property', 'Contains terms map properties.' ); tripal_cv_add_cv( 'featuremap_property', 'Contains positional types for the feature positions' ); } /** * Add cv terms needed by the featuremap module * * @ingroup tripal_featuremap */ function tripal_featuremap_add_cvterms() { // add cvterms for the map unit types tripal_cv_add_cvterm( array( 'name' => 'cM', 'def' => 'Centimorgan units' ), 'featuremap_units', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'bp', 'def' => 'Base pairs units' ), 'featuremap_units', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'bin_unit', 'def' => 'The bin unit' ), 'featuremap_units', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'marker_order', 'def' => 'Units simply to define marker order.' ), 'featuremap_units', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'undefined', 'def' => 'A catch-all for an undefined unit type' ), 'featuremap_units', 0, 1, 'tripal' ); // featurepos properties tripal_cv_add_cvterm( array( 'name' => 'start', 'def' => 'The start coordinate for a map feature.' ), 'featurepos_property', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'stop', 'def' => 'The end coordinate for a map feature' ), 'featurepos_property', 0, 1, 'tripal' ); // add cvterms for map properties tripal_cv_add_cvterm( array( 'name' => 'Map Dbxref', 'def' => 'A unique identifer for the map in a remote database. The format is a database abbreviation and a unique accession separated by a colon. (e.g. Gramene:tsh1996a)' ), 'featuremap_property', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'Map Type', 'def' => 'The type of Map (e.g. QTL, Physical, etc.)' ), 'featuremap_property', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'Genome Group', 'def' => '' ), 'featuremap_property', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'URL', 'def' => 'A univeral resource locator (URL) reference where the publication can be found. For maps found online, this would be the web address for the map.' ), 'featuremap_property', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'Population Type', 'def' => 'A brief description of the population type used to generate the map (e.g. RIL, F2, BC1, etc).' ), 'featuremap_property', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'Population Size', 'def' => 'The size of the population used to construct the map.' ), 'featuremap_property', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'Methods', 'def' => 'A brief description of the methods used to construct the map.' ), 'featuremap_property', 0, 1, 'tripal' ); tripal_cv_add_cvterm( array( 'name' => 'Software', 'def' => 'The software used to construct the map.' ), 'featuremap_property', 0, 1, 'tripal' ); } /** * Add custom tables needed by the feature map module * - featuremapprop * - featuremap_dbxref * - featureposprop * * @ingroup tripal_featuremap */ function tripal_featuremap_add_custom_tables(){ // add the featuremaprop table to Chado $schema = array ( 'table' => 'featuremapprop', 'fields' => array ( 'featuremapprop_id' => array ( 'type' => 'serial', 'not null' => true, ), 'featuremap_id' => array ( 'type' => 'int', 'not null' => true, ), 'type_id' => array ( 'type' => 'int', 'not null' => true, ), 'value' => array ( 'type' => 'text', 'not null' => false, ), 'rank' => array ( 'type' => 'int', 'not null' => true, 'default' => 0, ), ), 'primary key' => array ( 0 => 'featuremapprop_id', ), 'unique keys' => array ( 'featuremapprop_c1' => array ( 0 => 'featuremap_id', 1 => 'type_id', 2 => 'rank', ), ), 'indexes' => array ( 'featuremapprop_idx1' => array ( 0 => 'featuremap_id', ), 'featuremapprop_idx2' => array ( 0 => 'type_id', ), ), 'foreign keys' => array ( 'cvterm' => array ( 'table' => 'cvterm', 'columns' => array ( 'type_id' => 'cvterm_id', ), ), 'featuremap' => array ( 'table' => 'featuremap', 'columns' => array ( 'featuremap_id' => 'featuremap_id', ), ), ), ); chado_create_custom_table('featuremapprop', $schema, TRUE); // add the featuremap_dbxref table to Chado $schema = array ( 'table' => 'featuremap_dbxref', 'fields' => array ( 'featuremap_dbxref_id' => array ( 'type' => 'serial', 'not null' => true, ), 'featuremap_id' => array ( 'type' => 'int', 'not null' => true, ), 'dbxref_id' => array ( 'type' => 'int', 'not null' => true, ), ), 'primary key' => array ( 0 => 'featuremap_dbxref_id', ), 'unique keys' => array ( 'featuremap_dbxref_c1' => array ( 0 => 'featuremap_id', 1 => 'dbxref_id', ), ), 'indexes' => array ( 'featuremap_dbxref_idx1' => array ( 0 => 'featuremap_dbxref_id', ), 'featuremap_dbxref_idx2' => array ( 0 => 'dbxref_id', ), ), 'foreign keys' => array ( 'dbxref' => array ( 'table' => 'dbxref', 'columns' => array ( 'dbxref_id' => 'dbxref_id', ), ), 'featuremap' => array ( 'table' => 'featuremap', 'columns' => array ( 'featuremap_id' => 'featuremap_id', ), ), ), 'referring_tables' => NULL, ); chado_create_custom_table('featuremap_dbxref', $schema, TRUE); $schema = array ( 'table' => 'featureposprop', 'fields' => array ( 'featureposprop_id' => array ( 'type' => 'serial', 'not null' => true, ), 'featurepos_id' => array ( 'type' => 'int', 'not null' => true, ), 'type_id' => array ( 'type' => 'int', 'not null' => true, ), 'value' => array ( 'type' => 'text', 'not null' => false, ), 'rank' => array ( 'type' => 'int', 'not null' => true, 'default' => 0, ), ), 'primary key' => array ( 0 => 'featureposprop_id', ), 'unique keys' => array ( 'featureposprop_id' => array ( 0 => 'featurepos_id', 1 => 'type_id', 2 => 'rank', ), ), 'indexes' => array ( 'featureposprop_c1' => array ( 0 => 'featurepos_id', ), 'featureposprop_idx2' => array ( 0 => 'type_id', ), ), 'foreign keys' => array ( 'cvterm' => array ( 'table' => 'cvterm', 'columns' => array ( 'type_id' => 'cvterm_id', ), ), 'featurepos' => array ( 'table' => 'featurepos', 'columns' => array ( 'featurepos_id' => 'featurepos_id', ), ), ), ); chado_create_custom_table('featureposprop', $schema, TRUE); } /** * This is the required update for tripal_featuremap when upgrading from Drupal core API 6.x. * This update may take some time to complete. */ function tripal_featuremap_update_7200() { // We can't use the Tripal API during an upgrade from D6 to D7 Tripal because the tripal_core // module is disabled. So, we have to manually make database additions/changes to chado. // set the default vocabularies // featuremap_units try { $cv_id = db_query("SELECT cv_id FROM chado.cv WHERE name = 'featuremap_units'")->fetchField(); db_insert('tripal_cv_defaults') ->fields(array( 'table_name' => 'featuremap', 'field_name' => 'unittype_id', 'cv_id' => $cv_id )) ->execute(); } catch (\PDOException $e) { $error = $e->getMessage(); throw new DrupalUpdateException('Failed to set featuremap_units vocabulary as default: '. $error); } // featurepos_property try { $cv_id = db_query("SELECT cv_id FROM chado.cv WHERE name = 'featurepos_property'")->fetchField(); db_insert('tripal_cv_defaults') ->fields(array( 'table_name' => 'featureposprop', 'field_name' => 'type_id', 'cv_id' => $cv_id )) ->execute(); } catch (\PDOException $e) { $error = $e->getMessage(); throw new DrupalUpdateException('Failed to set featurepos_property vocabulary as default: '. $error); } // featuremap_property try { $cv_id = db_query("SELECT cv_id FROM chado.cv WHERE name = 'featuremap_property'")->fetchField(); db_insert('tripal_cv_defaults') ->fields(array( 'table_name' => 'featuremapprop', 'field_name' => 'type_id', 'cv_id' => $cv_id )) ->execute(); } catch (\PDOException $e) { $error = $e->getMessage(); throw new DrupalUpdateException('Failed to set featuremap_property vocabulary as default: '. $error); } } /** * Implementation of hook_update_dependencies(). It specifies a list of * other modules whose updates must be run prior to this one. */ function tripal_featuremap_update_dependencies() { $dependencies = array(); // the tripal_cv update 7200 must run prior to update 7200 of this module $dependencies['tripal_featuremap'][7200] = array( 'tripal_cv' => 7200 ); return $dependencies; }