--- ../cvslog.alter-by-perm/cvs.module 2007-01-09 15:14:15.000000000 -0800 +++ cvs.module 2007-01-09 16:22:33.000000000 -0800 @@ -301,15 +301,12 @@ function cvs_settings_form() { '#options' => array(t('Disabled'), t('Enabled')), '#description' => t('When enabled, this will store log messages in a temporary file to reduce memory consumption.'), ); - $result = db_query("SELECT * FROM {cvs_repositories} ORDER BY rid"); - while ($repo = db_fetch_object($result)) { - $options[$repo->rid] = $repo->name; - } + $options = _cvs_get_repository_options('<' . t('none') . '>'); $form['cvs_default_repo'] = array( '#title' => t('Default CVS repository for projects'), '#type' => 'radios', '#options' => $options, - '#default_value' => variable_get('cvs_default_repo', 1), + '#default_value' => variable_get('cvs_default_repo', 0), '#description' => t('Choose the repository that should be used by default when projects are being edited'), ); $form['cvs_restrict_project_creation'] = array( @@ -457,14 +454,21 @@ function cvs_nodeapi(&$node, $op, $arg = case 'validate': if ($node->title) { $project = !empty($node->nid) ? node_load($node->nid) : NULL; - if (isset($node->cvs_repository)) { - if (!db_num_rows(db_query('SELECT * FROM {cvs_repositories} WHERE rid=%d', $node->cvs_repository))) { - form_set_error('cvs_repository', t('You must select a valid CVS repository.')); - } - if (!user_access('administer projects') && $project && $node->cvs_repository != $project->cvs_repository) { - form_set_error('cvs_repository', t('You do not have permission to modify the CVS repository for this project.')); + if (!empty($node->cvs_repository) && !db_num_rows(db_query('SELECT * FROM {cvs_repositories} WHERE rid=%d', $node->cvs_repository))) { + form_set_error('cvs_repository', t('You must select a valid CVS repository.')); + } + if (!user_access('administer projects') && $project && $node->cvs_repository != $project->cvs_repository) { + form_set_error('cvs_repository', t('You do not have permission to modify the CVS repository for this project.')); + } + if (empty($node->cvs_repository)) { + // The rest of this validation only makes sense if we have + // a CVS repository for this project + if (!empty($node->cvs_directory)) { + form_set_error('cvs_directory', t('You can not specify a CVS directory if there is no CVS repository for this project.')); } + break; } + if (!$node->cvs_directory) { form_set_error('cvs_directory', t('You have to specify a valid CVS directory.')); } @@ -693,18 +697,14 @@ function cvs_user_edit_form_submit($form */ function cvs_alter_project_project_form(&$form) { $node = $form['#node']; - $result = db_query("SELECT rid, name FROM {cvs_repositories}"); - while ($repository = db_fetch_object($result)) { - $repositories[$repository->rid] = $repository->name; - } + $repositories = _cvs_get_repository_options(t('')); $form['cvs_nodeapi'] = array( '#type' => 'fieldset', '#title' => t('CVS integration'), '#collapsible' => TRUE, - '#collapsed' => $node->cvs_directory ? TRUE : FALSE, ); - $default_repo = $node->cvs_repository ? $node->cvs_repository : variable_get('cvs_default_repo', ''); - if (!empty($repositories)) { + $default_repo = isset($node->cvs_repository) ? $node->cvs_repository : variable_get('cvs_default_repo', 0); + if (count($repositories) > 1) { $form['cvs_nodeapi']['cvs_repository'] = array( '#type' => 'select', '#title' => t('Repository'), @@ -719,9 +719,16 @@ function cvs_alter_project_project_form( '#default_value' => $node->cvs_directory, '#size' => 40, '#maxlength' => 255, - '#description' => t("Specify the project's directory within the specified CVS repository. Directory names should start with a leading slash and end with a trailing slash, and must be unique for each project. For example: /modules/foo/, /themes/foo/ or /translations/foo/."), - '#required' => TRUE, + '#description' => t("Specify the project's directory within the selected CVS repository. Directory names should start with a leading slash and end with a trailing slash, and must be unique for each project. For example: /modules/foo/, /themes/foo/ or /translations/foo/. If there is no CVS repository associated with the project, this setting should be left blank."), ); + if ($default_repo == 0 || $node->cvs_directory) { + // If the default for the repository selector is (either + // because the project has already been saved with 0 for the + // repository, or because that's the site-wide default), or if we + // already have the value for the CVS directory, we should hide + // these gory details by default. + $form['cvs_nodeapi']['#collapsed'] = TRUE; + } } /** @@ -1270,12 +1277,7 @@ function cvs_page() { function cvs_page_search() { _cvs_styles(); - $repositories = array(t('')); - $result = db_query("SELECT rid, name FROM {cvs_repositories}"); - while ($repository = db_fetch_object($result)) { - $repositories[$repository->rid] = $repository->name; - } - + $repositories = _cvs_get_repository_options(t('')); $output = drupal_get_form('cvs_search_form', $repositories); if ($_REQUEST['rid'] || $_REQUEST['user'] || $_REQUEST['branch'] || $_REQUEST['file'] || $_REQUEST['message']) { @@ -2411,6 +2413,17 @@ function _cvs_get_status_options() { return $status_array; } +function _cvs_get_repository_options($label_for_zero = NULL) { + if (isset($label_for_zero)) { + $options[0] = $label_for_zero; + } + $result = db_query("SELECT * FROM {cvs_repositories} ORDER BY rid"); + while ($repo = db_fetch_object($result)) { + $options[$repo->rid] = $repo->name; + } + return $options; +} + /** * Return strings used in CVS account administration. */