cvs diff: Diffing modules/project Index: modules/project/project.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/project.inc,v retrieving revision 1.75.2.16.2.11 diff -u -p -r1.75.2.16.2.11 project.inc --- modules/project/project.inc 3 Dec 2006 02:25:46 -0000 1.75.2.16.2.11 +++ modules/project/project.inc 3 Dec 2006 02:31:10 -0000 @@ -7,6 +7,7 @@ */ function project_project_form(&$node) { global $user; + project_project_set_breadcrumb($node); /* ** Allow the following fields to be initialized via $_GET Index: modules/project/project.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/project.module,v retrieving revision 1.239.2.13.2.14 diff -u -p -r1.239.2.13.2.14 project.module --- modules/project/project.module 3 Dec 2006 02:25:46 -0000 1.239.2.13.2.14 +++ modules/project/project.module 3 Dec 2006 02:31:11 -0000 @@ -270,6 +270,19 @@ function project_menu($may_cache) { } else { theme_add_style(drupal_get_path('module', 'project') .'/project.css'); + if (arg(0) == 'node' && is_numeric(arg(1))) { + $node = node_load(arg(1)); + if ($node->type == 'project_project' && + project_check_admin_access($node) && + (module_exist('project_issue') || module_exist('project_release'))) { + $items[] = array( + 'path' => 'node/'. arg(1) .'/edit/project', + 'title' => t('project'), + 'callback' => 'node_page', + 'weight' => -5, 'type' => MENU_DEFAULT_LOCAL_TASK, + ); + } + } } return $items; cvs diff: Diffing modules/project/po cvs diff: Diffing modules/project/po/ar cvs diff: Diffing modules/project/release Index: modules/project/release/project_release.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v retrieving revision 1.1.2.43 diff -u -p -r1.1.2.43 project_release.module --- modules/project/release/project_release.module 3 Dec 2006 02:25:46 -0000 1.1.2.43 +++ modules/project/release/project_release.module 3 Dec 2006 02:31:12 -0000 @@ -38,6 +38,12 @@ function project_release_menu($may_cache $items[] = array('path' => 'node/'. arg(1) .'/release', 'title' => t('releases'), 'callback' => 'project_release_project_releases', 'access' => node_access('view', $node), 'weight' => 0, 'type' => MENU_CALLBACK); if (node_access('update', $node)) { $items[] = array('path' => 'node/'. arg(1) .'/release/overview', 'title' => t('overview'), 'callback' => 'project_release_project_releases', 'access' => node_access('view', $node), 'weight' => 0, 'type' => MENU_CALLBACK); + $items[] = array( + 'path' => 'node/'. arg(1) .'/edit/releases', + 'title' => t('releases'), + 'callback' => 'project_release_project_edit_releases', + 'weight' => 0, 'type' => MENU_LOCAL_TASK, + ); } } } @@ -817,14 +823,18 @@ function project_release_form_alter($for * @see project_release_form_alter */ function project_release_alter_project_form(&$form) { - $node = $form['#node']; - $form['release'] = array( - '#type' => 'fieldset', - '#title' => t('Release information'), - '#collapsible' => TRUE, - '#collapsed' => TRUE, - ); - $form['release']['releases'] = array( + $form['project']['uri']['#description'] .= ' '. t("This string is also used to generate the name of releases associated with this project."); +} + +/** + * Releases subtab for the project edit tab. + */ +function project_release_project_edit_releases() { + $node = node_load(arg(1)); + project_project_set_breadcrumb($node); + drupal_set_title(check_plain($node->title)); + + $form['releases'] = array( '#type' => 'checkbox', '#title' => t('Enable releases'), '#return_value' => 1, @@ -832,46 +842,69 @@ function project_release_alter_project_f '#default_value' => isset($node->releases) ? $node->releases : 1, '#description' => t('Allow releases of this project with specific versions.'), ); - if ($releases = project_release_get_releases($node, false, 'version', 'files')) { - $form['release']['version'] = array( - '#type' => 'select', - '#title' => t('Default version'), - '#default_value' => $node->version, - '#options' => $releases, - '#description' => t('Default version for downloading.'), - ); + if ($node->releases) { + if ($releases = project_release_get_releases($node, false, 'version', 'files')) { + $form['version'] = array( + '#type' => 'select', + '#title' => t('Default version'), + '#default_value' => $node->version, + '#options' => $releases, + '#description' => t('Default version for downloading.'), + ); + } + + if (user_access('administer projects')) { + $form['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' => theme('placeholder', variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT)))), + ); + $form['#validate'] = array_merge($form['#validate'], array('project_release_project_edit_form_validate' => array())); + } } - $form['project']['uri']['#description'] .= ' '. t("This string is also used to generate the name of releases associated with this project."); + $form['nid'] = array('#type' => 'value', '#value' => $node->nid); + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Submit'), + '#weight' => 45, + ); - // TODO: disable this form element if the "Enable releases" checkbox - // is not checked? - if (user_access('administer projects')) { - $form['release']['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' => theme('placeholder', variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT)))), - ); - $form['#validate'] = array_merge($form['#validate'], array('project_release_project_form_validate' => array())); - } + return drupal_get_form('project_release_project_edit_form', $form); } /** * Validates the project form regarding release-specific fields. * Ensures that the version format string doesn't contain bad characters. * @ingroup project_release_fapi - * @see project_release_alter_project_form + * @see project_release_project_edit_releases */ -function project_release_project_form_validate($form_id, $form_values, $form) { +function project_release_project_edit_form_validate($form_id, $form_values, $form) { if (!empty($form_values['version_format'])) { _project_release_validate_format_string($form_values, 'version_format'); } } /** + * Submit handler when project admins use the releases subtab. + * @ingroup project_release_fapi + * @see project_release_project_edit_releases + */ +function project_release_project_edit_form_submit($form_id, $form_values) { + if (!empty($form_values['releases'])) { + db_query("UPDATE {project_release_projects} SET releases = %d, version_format = '%s' WHERE nid = %d", $form_values['releases'], $form_values['version_format'], $form_values['nid']); + db_query("UPDATE {project_projects} SET version = %d WHERE nid = %d", $form_values['version'], $form_values['nid']); + } + else { + db_query("UPDATE {project_release_projects} SET releases = 0, version_format = '' WHERE nid = %d", $form_values['nid']); + db_query("UPDATE {project_projects} SET version = 0 WHERE nid = %d", $form_values['nid']); + } +} + +/** * Alters the project_release node form to handle the API taxonomy. * If the vocabulary is empty, this removes the form elements. * @ingroup project_release_fapi @@ -966,11 +999,7 @@ function project_release_project_nodeapi break; case 'insert': - db_query("INSERT INTO {project_release_projects} (nid, releases, version_format) VALUES (%d, %d, '%s')", $node->nid, $node->releases, $node->version_format); - break; - - case 'update': - db_query("UPDATE {project_release_projects} SET releases = %d, version_format = '%s' WHERE nid = %d", $node->releases, $node->version_format, $node->nid); + db_query("INSERT INTO {project_release_projects} (nid, releases, version_format) VALUES (%d, %d, '%s')", $node->nid, 1, ''); break; case 'delete': cvs diff: Diffing modules/project_issue Index: modules/project_issue/project_issue.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project_issue/project_issue.module,v retrieving revision 1.4.2.3.2.1 diff -u -p -r1.4.2.3.2.1 project_issue.module --- modules/project_issue/project_issue.module 12 Nov 2006 09:22:15 -0000 1.4.2.3.2.1 +++ modules/project_issue/project_issue.module 3 Dec 2006 02:31:12 -0000 @@ -190,30 +190,33 @@ function project_issue_menu($may_cache) // Comments $access = user_access('create project issues'); $items[] = array('path' => 'project/comments', 'title' => t('comments'), 'callback' => 'project_comment_page', 'access' => $access, 'type' => MENU_CALLBACK); - } else { + // Issues subtab on project node edit tab. + if (arg(0) == 'node' && is_numeric(arg(1))) { + $node = node_load(arg(1)); + if ($node->type == 'project_project' && node_access('update', $node)) { + $items[] = array( + 'path' => 'node/'. arg(1) .'/edit/issues', + 'title' => t('issues'), + 'callback' => 'project_issue_project_edit_issues', + 'weight' => 0, 'type' => MENU_LOCAL_TASK, + ); + } + } theme_add_style(drupal_get_path('module', 'project_issue') .'/project_issue.css'); } - return $items; } /** - * Implementation of hook_form_alter. + * Adds the issues subtab to the edit tab on project nodes. */ -function project_issue_form_alter($form_id, &$form) { - if ($form_id == 'project_project_node_form') { - return project_issue_alter_project_form($form); - } -} +function project_issue_project_edit_issues() { + $node = node_load(arg(1)); + project_project_set_breadcrumb($node); + drupal_set_title(check_plain($node->title)); -/** - * Alters the project_project node form to add issue tracking settings. - * @see project_issue_form_alter - */ -function project_issue_alter_project_form(&$form) { - $node = $form['#node']; if (is_array($node->components)) { $node->components = implode("\n", $node->components); } @@ -221,15 +224,6 @@ function project_issue_alter_project_for $node->components = "Code\nDocumentation\nMiscellaneous\nUser interface"; } - /* - ** Allow the following fields to be initialized via $_GET - */ - foreach (array('issues', 'mail_reminder', 'mail_digest') as $field) { - if ($_GET['edit'][$field]) { - $node->$field = $_GET['edit'][$field]; - } - } - /* Issue properties */ $form['issue'] = array( '#type' => 'fieldset', @@ -267,7 +261,6 @@ function project_issue_alter_project_for '#type' => 'fieldset', '#title' => t('Issue e-mail options'), '#collapsible' => TRUE, - '#collapsed' => TRUE, ); $form['email']['mail_digest'] = array( '#type' => 'textfield', @@ -330,6 +323,27 @@ function project_issue_alter_project_for '#description' => t('Enabling this will send a monthly reminder to users that have open issues registered.'), ); } + + $form['nid'] = array('#type' => 'value', '#value' => $node->nid); + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Submit'), + '#weight' => 45, + ); + + return drupal_get_form('project_issue_project_edit_form', $form); +} + +/** + * Submit handler when project admins use the issues subtab. + * @see project_issue_project_edit_issues + */ +function project_issue_project_edit_form_submit($form_id, $form_values) { + $components = serialize(explode("\n", $form_values['components'])); + $mail_copy_filter = serialize($form_values['mail_copy_filter']); + $mail_copy_filter_state = serialize($form_values['mail_copy_filter_state']); + + db_query("UPDATE {project_issue_projects} SET issues = %d, components = '%s', mail_digest = '%s', mail_reminder = %d, mail_copy = '%s', mail_copy_filter = '%s', mail_copy_filter_state = '%s', help = '%s' WHERE nid = %d", $form_values['issues'], $components, $form_values['mail_digest'], $form_values['mail_reminder'], $form_values['mail_copy'], $mail_copy_filter, $mail_copy_filter_state, $form_values['help'], $form_values['nid']); } /** @@ -455,10 +469,6 @@ function project_issue_project_nodeapi(& project_issue_project_insert($node); break; - case 'update': - project_issue_project_update($node); - break; - case 'delete': project_issue_project_delete($node); break; @@ -485,15 +495,6 @@ function project_issue_project_insert($n db_query("INSERT INTO {project_issue_projects} (nid, issues, components, mail_digest, mail_reminder, mail_copy, mail_copy_filter, mail_copy_filter_state, help) VALUES (%d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s')", $node->nid, $node->issues, $node->components, $node->mail_digest, $node->reminder, $node->mail_copy, $node->mail_copy_filter, $node->mail_copy_filter_state, $node->help); } -function project_issue_project_update($node) { - project_issue_convert_components($node); - $node->components = serialize($node->components); - $node->mail_copy_filter = serialize($node->mail_copy_filter); - $node->mail_copy_filter_state = serialize($node->mail_copy_filter_state); - - db_query("UPDATE {project_issue_projects} SET issues = %d, components = '%s', mail_digest = '%s', mail_reminder = %d, mail_copy = '%s', mail_copy_filter = '%s', mail_copy_filter_state = '%s', help = '%s' WHERE nid = %d", $node->issues, $node->components, $node->mail_digest, $node->mail_reminder, $node->mail_copy, $node->mail_copy_filter, $node->mail_copy_filter_state, $node->help, $node->nid); -} - function project_issue_project_delete($node) { // TODO: first we need to DELETE FROM {project_comments} using a // subselect against {project_issues} to map the project nid from