diff --git a/release/project_release.module b/release/project_release.module index c5bfcaa..f11e30d 100644 --- a/release/project_release.module +++ b/release/project_release.module @@ -40,8 +40,8 @@ function project_release_menu() { 'title' => 'Releases', 'page callback' => 'project_release_project_edit_releases', 'page arguments' => array(1), - 'access callback' => 'project_user_access', - 'access arguments' => array(1, 'administer releases'), + 'access callback' => 'project_release_project_settings_form_access', + 'access arguments' => array(1), 'type' => MENU_LOCAL_TASK, 'file' => 'includes/project_edit_releases.inc', ); @@ -90,6 +90,18 @@ function project_release_menu_alter(&$callbacks) { } /** + * Access callback for node/%project_node/edit/releases subtab. + */ +function project_release_project_settings_form_access($node) { + if (variable_get('project_release_sandbox_disable_releases', FALSE) && $node->project['sandbox']) { + return FALSE; + } + else { + return project_user_access($node, 'administer releases'); + } +} + +/** * @defgroup project_release_node Drupal node-type related hooks */ @@ -801,6 +813,12 @@ function project_release_form_alter(&$form, &$form_state, $form_id) { if ($form_id == 'project_release_node_form') { return project_release_alter_release_form($form, $form_state); } + if ($form_id == 'project_settings_form') { + return project_release_project_settings_form($form, $form_state); + } + if ($form_id == 'project_promote_project_form') { + return project_release_project_promote_form($form, $form_state); + } } /** @@ -880,6 +898,42 @@ function project_release_alter_release_form(&$form, &$form_state) { $form['buttons']['submit']['#submit'][] = 'project_release_node_submit'; } +/** + * Alters the project settings form. + */ +function project_release_project_settings_form(&$form, &$form_state) { + $form['sandbox']['project_release_sandbox_disable_releases'] = array( + '#title' => t('Disable releases for sandboxed projects'), + '#type' => 'checkbox', + '#default_value' => variable_get('project_release_sandbox_disable_releases', FALSE), + '#description' => t('If checked, projects marked as sandboxes will not be able to have releases associated with them.'), + ); +} + +/** + * Alters the form for promoting a project from sandbox to a full project. + */ +function project_release_project_promote_form(&$form, &$form_state) { + if (variable_get('project_release_sandbox_disable_releases', FALSE)) { + $node = node_load($form['pid']['#value']); + $form['releases'] = array( + '#type' => 'checkbox', + '#title' => t('Enable releases'), + '#return_value' => 1, + '#weight' => 10, + '#default_value' => $node->project_release['releases'], + '#description' => t('Allow releases of this project with specific versions.'), + ); + $form['#submit'][] = 'project_release_project_promote_form_submit'; + } +} + +/** + * Submit handler for project promote form. + */ +function project_release_project_promote_form_submit($form, &$form_state) { + db_query("UPDATE {project_release_projects} SET releases = %d WHERE nid = %d", $form_state['values']['releases'], $form_state['values']['pid']); +} /** * @defgroup project_release_nodeapi Node API hooks @@ -944,7 +998,12 @@ function project_release_project_nodeapi_load(&$node) { * Insert release information about a project node. */ function project_release_project_nodeapi_insert(&$node) { - db_query("INSERT INTO {project_release_projects} (nid, releases, version_format) VALUES (%d, %d, '%s')", $node->nid, 1, ''); + if (variable_get('project_release_sandbox_disable_releases', FALSE) && $node->project['sandbox']) { + db_query("INSERT INTO {project_release_projects} (nid, releases, version_format) VALUES (%d, %d, '%s')", $node->nid, 0, ''); + } + else { + db_query("INSERT INTO {project_release_projects} (nid, releases, version_format) VALUES (%d, %d, '%s')", $node->nid, 1, ''); + } } /**