cvs diff: Diffing release Index: release/project_release.install =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.install,v retrieving revision 1.15 diff -u -p -r1.15 project_release.install --- release/project_release.install 22 Dec 2007 09:11:44 -0000 1.15 +++ release/project_release.install 26 Dec 2007 21:29:39 -0000 @@ -25,16 +25,18 @@ function project_release_install() { db_query("CREATE TABLE IF NOT EXISTS {project_release_projects} ( nid int unsigned NOT NULL default '0', releases tinyint NOT NULL default '1', - snapshot_table tinyint unsigned NOT NULL default '1', version_format varchar(255) NOT NULL default '', PRIMARY KEY (nid), KEY project_release_projects_releases (releases) ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); - db_query("CREATE TABLE IF NOT EXISTS {project_release_default_versions} ( + db_query("CREATE TABLE IF NOT EXISTS {project_release_supported_versions} ( nid int unsigned NOT NULL default '0', tid int unsigned NOT NULL default '0', major int unsigned NOT NULL default '0', - PRIMARY KEY (nid, tid) + supported tinyint unsigned NOT NULL default '1', + recommended tinyint unsigned NOT NULL default '0', + snapshot tinyint unsigned NOT NULL default '0', + PRIMARY KEY (nid, tid, major) ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); db_query("CREATE TABLE IF NOT EXISTS {project_release_package_errors} ( nid int unsigned NOT NULL default '0', @@ -75,18 +77,20 @@ function project_release_install() { db_query("CREATE TABLE {project_release_projects} ( nid int NOT NULL default '0', releases smallint NOT NULL default '1', - snapshot_table smallint NOT NULL default '1', version_format varchar(255) NOT NULL default '', PRIMARY KEY (nid) );"); db_query("CREATE INDEX {project_release_projects}_releases_idx ON {project_release_projects} (releases)"); } - if (!db_table_exists('project_release_default_versions')) { - db_query("CREATE TABLE {project_release_default_versions} ( + if (!db_table_exists('project_release_supported_versions')) { + db_query("CREATE TABLE {project_release_supported_versions} ( nid int NOT NULL default '0', tid int NOT NULL default '0', major int NOT NULL default '0', - PRIMARY KEY (nid, tid) + supported smallint NOT NULL default '1', + recommended smallint NOT NULL default '0', + snapshot smallint NOT NULL default '0', + PRIMARY KEY (nid, tid, major) );"); } if (!db_table_exists('project_release_package_errors')) { @@ -296,3 +300,56 @@ function project_release_update_5003() { } return $ret; } + +/** + * Add the new {project_release_supported_versions} table, transfer data + * from {project_release_default_versions} and {project_release_projects}, + * and drop the stale table and columns. + */ +function project_release_update_5200() { + $ret = array(); + switch ($GLOBALS['db_type']) { + case 'mysql': + case 'mysqli': + $ret[] = update_sql("CREATE TABLE IF NOT EXISTS {project_release_supported_versions} ( + nid int unsigned NOT NULL default '0', + tid int unsigned NOT NULL default '0', + major int unsigned NOT NULL default '0', + supported tinyint unsigned NOT NULL default '1', + recommended tinyint unsigned NOT NULL default '0', + snapshot tinyint unsigned NOT NULL default '0', + PRIMARY KEY (nid, tid, major) + ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); + break; + case 'pgsql': + if (!db_table_exists('project_release_supported_versions')) { + $ret[] = update_sql("CREATE TABLE {project_release_supported_versions} ( + nid int NOT NULL default '0', + tid int NOT NULL default '0', + major int NOT NULL default '0', + supported smallint NOT NULL default '1', + recommended smallint NOT NULL default '0', + snapshot smallint NOT NULL default '0', + PRIMARY KEY (nid, tid, major) + );"); + } + break; + } + // Now, populate the table with the existing data. First, populate all the + // recommended majors versions from {project_release_default_versions}. + $ret[] = update_sql("INSERT INTO {project_release_supported_versions} (nid, tid, major, supported, recommended, snapshot) SELECT prdv.nid, prdv.tid, prdv.major, 1, 1, prp.snapshot_table FROM {project_release_default_versions} prdv INNER JOIN {project_release_projects} prp ON prdv.nid = prp.nid"); + + // Now, fill in all the non-recommended versions. For the migration path, we + // assume that if it's not recommended, it's also not supported. Project + // maintainers will have to manually visit the new UI if they want to + // specify multiple supported versions. + $vid = _project_release_get_api_vid(); + $ret[] = update_sql("INSERT INTO {project_release_supported_versions} (nid, tid, major, supported, recommended, snapshot) SELECT DISTINCT prn.pid, tn.tid, prn.version_major, 0, 0, prp.snapshot_table FROM {project_release_nodes} prn INNER JOIN {project_release_projects} prp ON prn.pid = prp.nid INNER JOIN {term_node} tn ON prn.nid = tn.nid INNER JOIN {term_data} td ON tn.tid = td.tid INNER JOIN {node} n ON prn.nid = n.nid LEFT JOIN {project_release_default_versions} prdv ON prdv.nid = prn.pid AND prdv.tid = tn.tid AND prdv.major = prn.version_major WHERE n.status = 1 AND td.vid = $vid AND prn.version_major IS NOT NULL AND prdv.major IS NULL"); + + // Finally, drop the stale table and column. + // While testing the upgrade path, these are both commented out for now: + //$ret[] = update_sql('DROP TABLE {project_release_default_versions}'); + //$ret[] = update_sql("ALTER TABLE {project_release_projects} DROP snapshot_table"); + + return $ret; +} Index: release/project_release.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v retrieving revision 1.55 diff -u -p -r1.55 project_release.module --- release/project_release.module 21 Oct 2007 19:45:45 -0000 1.55 +++ release/project_release.module 26 Dec 2007 21:29:40 -0000 @@ -1023,7 +1023,75 @@ function project_release_project_edit_re return drupal_get_form('project_release_project_edit_form', $node); } + function project_release_project_edit_form($node) { + $data = _project_release_project_edit_form_getdef($node); + return _project_release_project_edit_form_formdef($data); +} + +function _project_release_project_edit_form_getdef($node) { + $data = array(); + $data[102] = array( + 'name' => '4.6.x', + 'majors' => array( + 1 => array('#recommended' => TRUE, '#supported' => TRUE), + ), + ); + $data[103] = array( + 'name' => '4.7.x', + 'majors' => array( + 1 => array('#recommended' => TRUE, '#supported' => TRUE), + ), + ); + $data[104] = array( + 'name' => '5.x', + 'majors' => array( + 1 => array('#recommended' => FALSE, '#supported' => FALSE), + 2 => array('#recommended' => FALSE, '#supported' => TRUE), + 3 => array('#recommended' => TRUE, '#supported' => TRUE), + ), + ); + $data[105] = array( + 'name' => '6.x', + 'majors' => array( + 1 => array('#recommended' => TRUE, '#supported' => TRUE), + ), + ); + + $data['node'] = $node; + + return $data; +} + +function _project_release_project_edit_form_formdef($data) { + $form = array(); + + $node = $data['node']; + unset($data['node']); + + foreach ($data as $core_tid => $core_data) { + $form['cores'][$core_tid] = array( + '#core_name' => $core_data['name'], + ); + $recommended_version = -1; + foreach ($core_data['majors'] as $major_version => $major_data) { + if ($major_data['#supported'] == TRUE) { + $recommended_version = $major_version; + } + $form['cores'][$core_tid]['major'][$major_version]['supported'] = array( + '#type' => 'checkbox', + '#title' => t('Supported'), + '#default_value' => $major_data['#supported'], + ); + } + $form['cores'][$core_tid]['recommended'] = array( + '#type' => 'radios', + '#title' => t('Recommended'), + '#options' => array_keys($core_data['majors']), + '#default_value' => $recommended_version, + ); + } + $form['advanced'] = array( '#type' => 'fieldset', '#title' => t('Advanced options'), @@ -1040,121 +1108,49 @@ function project_release_project_edit_fo '#default_value' => isset($node->releases) ? $node->releases : 1, '#description' => t('Allow releases of this project with specific versions.'), ); - if ($node->releases) { - $releases = array(); - if ($tree = project_release_get_api_taxonomy()) { - $query = db_query('SELECT tid, major FROM {project_release_default_versions} WHERE nid = %d', $node->nid); - $node->default_versions = array(); - while ($version = db_fetch_object($query)) { - $tid = $version->tid; - $major = $version->major; - $node->default_versions[$tid] = $major; - } - $result = db_query(db_rewrite_sql("SELECT n.nid, tn.tid, td.name, r.* FROM {node} n INNER JOIN {project_release_nodes} r ON r.nid = n.nid INNER JOIN {term_node} tn ON tn.nid = r.nid INNER JOIN {term_data} td ON tn.tid = td.tid WHERE (r.pid = %d) AND (n.status = 1) AND (r.file_path <> '') ORDER BY tn.tid, r.rebuild, r.version_major DESC, r.version_minor DESC, r.version_patch DESC, r.file_date DESC"), $node->nid); - while ($rel = db_fetch_object($result)) { - $tid = $rel->tid; - $major = $rel->version_major; - if (isset($major)) { - $releases[$tid]['majors'][$major] = $major; - } - $releases[$tid]['name'] = $rel->name; - if (!isset($releases[$tid]['current']) && (!isset($node->default_versions[$tid]) || $node->default_versions[$tid] == $major)) { - $releases[$tid]['current'] = $rel->version; - } - } - $form['default_versions'] = array('#tree' => TRUE); - foreach ($tree as $term) { - $tid = $term->tid; - if (isset($releases[$tid])) { - $form['default_versions'][$tid] = array(); - if (count($releases[$tid]['majors']) > 1) { - $form['default_versions'][$tid]['major'] = array( - '#title' => t('Major version'), - '#type' => 'select', - '#options' => $releases[$tid]['majors'], - '#default_value' => isset($node->default_versions[$tid]) ? $node->default_versions[$tid] : 1, - ); - } - else { - $form['default_versions'][$tid]['major'] = array( - '#type' => 'value', - '#theme' => 'project_release_form_value', - '#value' => is_array($releases[$tid]['majors']) ? current($releases[$tid]['majors']) : '', - ); - } - $form['default_versions'][$tid]['current_release'] = array( - '#type' => 'value', - '#theme' => 'project_release_form_value', - '#value' => $releases[$tid]['current'], - ); - $form['default_versions'][$tid]['name'] = array( - '#type' => 'value', - '#theme' => 'project_release_form_value', - '#value' => $releases[$tid]['name'], - ); - } - } - } - - if (user_access('administer projects')) { - $form['advanced']['version_format'] = array( - '#type' => 'textfield', - '#title' => t('Version format string'), - '#default_value' => $node->version_format, - '#size' => 50, - '#maxlength' => 255, - '#description' => t('Customize the format of the version strings for releases of this project.') .' '. PROJECT_RELEASE_VERSION_FORMAT_HELP .' '. t('If blank, this project will use the site-wide default (currently set to: %default)', array('%default' => variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT))), - ); - } - $vocab = taxonomy_get_vocabulary(_project_release_get_api_vid()); - $vocab = isset($vocab) ? theme('placeholder', $vocab->name) : t('version'); - $form['snapshot_table'] = array( - '#type' => 'checkbox', - '#title' => t('Display snapshot releases on project page'), - '#return_value' => 1, - '#default_value' => isset($node->snapshot_table) ? $node->snapshot_table : 1, - '#description' => t('Note: Even if the current default release for a given !vocabulary_name is a development snapshot, it will only be shown if this checkbox is enabled.', array('!vocabulary_name' => $vocab)), + + if (user_access('administer projects')) { + $form['advanced']['version_format'] = array( + '#type' => 'textfield', + '#title' => t('Version format string'), + '#default_value' => $node->version_format, + '#size' => 50, + '#maxlength' => 255, + '#description' => t('Customize the format of the version strings for releases of this project.') .' '. PROJECT_RELEASE_VERSION_FORMAT_HELP .' '. t('If blank, this project will use the site-wide default (currently set to: %default)', array('%default' => variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT))), ); } - + $form['nid'] = array('#type' => 'value', '#value' => $node->nid); $form['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), '#weight' => 45, ); - + return $form; } + function theme_project_release_form_value($element) { return check_plain($element['#value']); } function theme_project_release_project_edit_form($form) { $output = ''; - $rows = array(); - if ($vocab = taxonomy_get_vocabulary(_project_release_get_api_vid())) { - $header = array( - check_plain($vocab->name), - t('Major version'), - t('Current default release'), - ); - } - foreach (element_children($form['default_versions']) as $tid) { - $row = array(); - $row[] = drupal_render($form['default_versions'][$tid]['name']); - unset($form['default_versions'][$tid]['major']['#title']); - $row[] = drupal_render($form['default_versions'][$tid]['major']); - $row[] = drupal_render($form['default_versions'][$tid]['current_release']); - $rows[] = $row; - } - if (count($rows)) { - $output .= '