cvs diff: Diffing . Index: project.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/project.inc,v retrieving revision 1.133 diff -u -p -r1.133 project.inc --- project.inc 13 Jan 2009 00:04:27 -0000 1.133 +++ project.inc 14 Jan 2009 16:20:20 -0000 @@ -92,32 +92,52 @@ function project_project_form($node, $fo } /* Project properties */ - $form['project'] = array( + // We can't put the title and body inside $node->project or core gets + // confused (e.g node_body_field() and friends). So, we put the core node + // fields in their own fieldset (for which is #tree is FALSE). + $form['project_node'] = array( '#type' => 'fieldset', '#title' => t('Project information'), '#collapsible' => TRUE, ); - $form['project']['title'] = array( + $form['project_node']['title'] = array( '#type' => 'textfield', '#title' => t('Full project name'), '#default_value' => isset($node->title) ? $node->title : NULL, '#maxlength' => 128, '#required' => TRUE, ); - $form['project']['body_field'] = node_body_field($node, t('Full description'), 1); - $form['project']['uri'] = array( + // This is sort of a hack: We want the 'uri' to be in the $node->project + // array during validation and submission of this form, to protect the $node + // namespace, even though from a usability standpoint, this field belongs + // right up next to the title. So, we add a 'project' subarray in here + // for which #tree is TRUE, and put the 'uri' field in there. That way, it + // still lives inside the "Project information" fieldset as far as the UI is + // concerned, but the value shows up in the $node->project array for + // validation and submission as far as FAPI is concerned. + $form['project_node']['project'] = array('#tree' => TRUE); + $form['project_node']['project']['uri'] = array( '#type' => 'textfield', '#title' => t('Short project name'), - '#default_value' => isset($node->uri) ? $node->uri : NULL, + '#default_value' => isset($node->project['uri']) ? $node->project['uri'] : NULL, '#size' => 40, '#maxlength' => 50, '#description' => t('This will be used to generate a /project/<shortname>/ URL for your project.'), '#required' => TRUE, ); + $form['project_node']['body_field'] = node_body_field($node, t('Full description'), 1); + + $form['project'] = array( + '#type' => 'fieldset', + '#title' => t('Project resources'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#tree' => TRUE, + ); $form['project']['homepage'] = array( '#type' => 'textfield', '#title' => t('Homepage'), - '#default_value' => isset($node->homepage) ? $node->homepage : NULL, + '#default_value' => isset($node->project['homepage']) ? $node->project['homepage'] : NULL, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to project homepage.'), @@ -125,7 +145,7 @@ function project_project_form($node, $fo $form['project']['documentation'] = array( '#type' => 'textfield', '#title' => t('Documentation'), - '#default_value' => isset($node->documentation) ? $node->documentation : NULL, + '#default_value' => isset($node->project['documentation']) ? $node->project['documentation'] : NULL, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to project documentation.'), @@ -133,7 +153,7 @@ function project_project_form($node, $fo $form['project']['license'] = array( '#type' => 'textfield', '#title' => t('License'), - '#default_value' => isset($node->license) ? $node->license : NULL, + '#default_value' => isset($node->project['license']) ? $node->project['license'] : NULL, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to project license.'), @@ -141,7 +161,7 @@ function project_project_form($node, $fo $form['project']['screenshots'] = array( '#type' => 'textfield', '#title' => t('Screenshots'), - '#default_value' => isset($node->screenshots) ? $node->screenshots : NULL, + '#default_value' => isset($node->project['screenshots']) ? $node->project['screenshots'] : NULL, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to project screenshots.'), @@ -149,7 +169,7 @@ function project_project_form($node, $fo $form['project']['changelog'] = array( '#type' => 'textfield', '#title' => t('Changelog'), - '#default_value' => isset($node->changelog) ? $node->changelog : NULL, + '#default_value' => isset($node->project['changelog']) ? $node->project['changelog'] : NULL, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to changelog.'), @@ -157,7 +177,7 @@ function project_project_form($node, $fo $form['project']['cvs'] = array( '#type' => 'textfield', '#title' => t('CVS tree'), - '#default_value' => isset($node->cvs) ? $node->cvs : NULL, + '#default_value' => isset($node->project['cvs']) ? $node->project['cvs'] : NULL, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to webcvs/viewcvs.'), @@ -165,7 +185,7 @@ function project_project_form($node, $fo $form['project']['demo'] = array( '#type' => 'textfield', '#title' => t('Demo site'), - '#default_value' => isset($node->demo) ? $node->demo : NULL, + '#default_value' => isset($node->project['demo']) ? $node->project['demo'] : NULL, '#size' => 40, '#maxlength' => 255, '#description' => t('Link to a live demo.'), @@ -174,6 +194,14 @@ function project_project_form($node, $fo return $form; } +/** + * Implementation of hook_validate(). + * + * @param $node + * An object containing values from the project node form. Note that since + * this isn't a fully-loaded $node object, not all values will necessarily + * be in the same location as they would after a node_load(). + */ function project_project_validate(&$node) { // Bail if user hasn't done a preview yet. if (!isset($node->title)) { @@ -186,13 +214,13 @@ function project_project_validate(&$node } // Validate uri. - if (empty($node->uri)) { - form_set_error('uri', t('A short project name is required.')); + if (empty($node->project['uri'])) { + form_set_error('project][uri', t('A short project name is required.')); } else { // Make sure uri only includes valid characters - if (!preg_match('/^[a-zA-Z0-9_-]+$/', $node->uri)) { - form_set_error('uri', t('Please only use alphanumerical characters for the project name.')); + if (!preg_match('/^[a-zA-Z0-9_-]+$/', $node->project['uri'])) { + form_set_error('project][uri', t('Please only use alphanumerical characters for the project name.')); } // Make sure uri isn't already in use, or reserved. Includes all X from @@ -206,8 +234,8 @@ function project_project_validate(&$node } } } - if (in_array(strtolower($node->uri), $reserved_names) || db_result(db_query("SELECT COUNT(*) FROM {project_projects} WHERE uri = '%s' AND nid <> %d", $node->uri, $node->nid))) { - form_set_error('uri', t('This project name is already in use.')); + if (in_array(strtolower($node->project['uri']), $reserved_names) || db_result(db_query("SELECT COUNT(*) FROM {project_projects} WHERE uri = '%s' AND nid <> %d", $node->project['uri'], $node->nid))) { + form_set_error('project][uri', t('This project name is already in use.')); } } @@ -219,8 +247,8 @@ function project_project_validate(&$node 'demo' => t('Demo site'), ); foreach ($fields as $uri => $name) { - if ($node->$uri && !preg_match('/^(http|https|ftp):\/\//i', $node->$uri)) { - form_set_error($uri, t('!field is not a valid URL.', array('!field' => $name))); + if ($node->project[$uri] && !preg_match('/^(http|https|ftp):\/\//i', $node->project[$uri])) { + form_set_error("project][$uri", t('!field is not a valid URL.', array('!field' => $name))); } } @@ -311,14 +339,14 @@ function project_project_view($node, $te 'weight' => 4, ); foreach (array('homepage' => t('Home page'), 'documentation' => t('Read documentation'), 'license' => t('Read license'), 'changelog' => t('Read complete log of changes'), 'demo' => t('Try out a demonstration'), 'screenshots' => t('Look at screenshots')) as $uri => $name) { - if (!empty($node->$uri)) { - $all_links['resources']['links'][$uri] = l($name, $node->$uri); + if (!empty($node->project[$uri])) { + $all_links['resources']['links'][$uri] = l($name, $node->project[$uri]); } } // Flags that indicate what kind of access to project issues to allow. - $has_issues = module_exists('project_issue') && !empty($node->issues); + $has_issues = module_exists('project_issue') && !empty($node->project_issue['issues']); $view_issues = $has_issues && (user_access('access project issues') || user_access('access own project issues') || user_access('administer projects')); $make_issues = $has_issues && node_access('create', 'project_issue'); @@ -329,19 +357,19 @@ function project_project_view($node, $te ); $links = array(); if ($view_issues) { - $links['all_support'] = l(t('View all support requests'), 'project/issues/'. $node->uri, array('query' => 'categories=support&states=all')); - $links['pending_support'] = l(t('View pending support requests'), 'project/issues/'. $node->uri, array('query' => 'categories=support')); - $links['pending_bugs'] = l(t('View pending bug reports'), 'project/issues/'. $node->uri, array('query' => 'categories=bug')); - $links['pending_features'] = l(t('View pending feature requests'), 'project/issues/'. $node->uri, array('query' => 'categories=feature')); - $links['search_issues'] = l(t('Search issues'), 'project/issues/search/'. $node->uri); + $links['all_support'] = l(t('View all support requests'), 'project/issues/'. $node->project['uri'], array('query' => 'categories=support&states=all')); + $links['pending_support'] = l(t('View pending support requests'), 'project/issues/'. $node->project['uri'], array('query' => 'categories=support')); + $links['pending_bugs'] = l(t('View pending bug reports'), 'project/issues/'. $node->project['uri'], array('query' => 'categories=bug')); + $links['pending_features'] = l(t('View pending feature requests'), 'project/issues/'. $node->project['uri'], array('query' => 'categories=feature')); + $links['search_issues'] = l(t('Search issues'), 'project/issues/search/'. $node->project['uri']); } if ($make_issues) { - $links['request_support'] = l(t('Request support'), 'node/add/project_issue/'. $node->uri .'/support'); - $links['report_bug'] = l(t('Report new bug'), 'node/add/project_issue/'. $node->uri .'/bug'); - $links['request_feature'] = l(t('Request new feature'), 'node/add/project_issue/'. $node->uri .'/feature'); + $links['request_support'] = l(t('Request support'), 'node/add/project_issue/'. $node->project['uri'] .'/support'); + $links['report_bug'] = l(t('Report new bug'), 'node/add/project_issue/'. $node->project['uri'] .'/bug'); + $links['request_feature'] = l(t('Request new feature'), 'node/add/project_issue/'. $node->project['uri'] .'/feature'); } elseif ($has_issues) { - $links['create_forbidden'] = theme('project_issue_create_forbidden', $node->uri); + $links['create_forbidden'] = theme('project_issue_create_forbidden', $node->project['uri']); } $all_links['support']['links'] = $links; @@ -353,13 +381,13 @@ function project_project_view($node, $te ); $links = array(); if ($view_issues) { - $links['pending_patches'] = l(t('View pending patches'), 'project/issues/'. $node->uri, array('query' => 'states=8,13', 'absolute' => TRUE, 'html' => TRUE)); - $links['available_tasks'] = l(t('View available tasks'), 'project/issues/'. $node->uri, array('query' => 'categories=task')); - $links['pending_issues'] = l(t('View all pending issues'), 'project/issues/'. $node->uri); + $links['pending_patches'] = l(t('View pending patches'), 'project/issues/'. $node->project['uri'], array('query' => 'states=8,13', 'absolute' => TRUE, 'html' => TRUE)); + $links['available_tasks'] = l(t('View available tasks'), 'project/issues/'. $node->project['uri'], array('query' => 'categories=task')); + $links['pending_issues'] = l(t('View all pending issues'), 'project/issues/'. $node->project['uri']); } - if ($node->cvs) { - $links['browse_repository'] = l(t('Browse the CVS repository'), $node->cvs); + if ($node->project['cvs']) { + $links['browse_repository'] = l(t('Browse the CVS repository'), $node->project['cvs']); } if (project_use_cvs($node)) { @@ -407,8 +435,9 @@ function project_project_view($node, $te } function project_project_load($node) { - $project = db_fetch_object(db_query('SELECT * FROM {project_projects} WHERE nid = %d', $node->nid)); - + $additions = db_fetch_array(db_query('SELECT * FROM {project_projects} WHERE nid = %d', $node->nid)); + $project = new stdClass; + $project->project = $additions; return $project; } @@ -422,7 +451,7 @@ function project_project_nodeapi(&$node, case 'insert': _project_save_taxonomy($node); if (module_exists('path')) { - path_set_alias("node/$node->nid", "project/$node->uri", NULL, $language); + path_set_alias("node/$node->nid", 'project/'. $node->project['uri'], NULL, $language); } break; @@ -430,20 +459,20 @@ function project_project_nodeapi(&$node, _project_save_taxonomy($node); if (module_exists('path')) { path_set_alias("node/$node->nid"); // Clear existing alias. - path_set_alias("node/$node->nid", "project/$node->uri", NULL, $language); + path_set_alias("node/$node->nid", 'project/'. $node->project['uri'], NULL, $language); } break; } } function project_project_insert($node) { - db_query("INSERT INTO {project_projects} (nid, uri, homepage, changelog, cvs, demo, screenshots, documentation, license) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", $node->nid, $node->uri, $node->homepage, $node->changelog, $node->cvs, $node->demo, $node->screenshots, $node->documentation, $node->license); -// project_release_scan_directory($node->uri); + db_query("INSERT INTO {project_projects} (nid, uri, homepage, changelog, cvs, demo, screenshots, documentation, license) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", $node->nid, $node->project['uri'], $node->project['homepage'], $node->project['changelog'], $node->project['cvs'], $node->project['demo'], $node->project['screenshots'], $node->project['documentation'], $node->project['license']); +// project_release_scan_directory($node->project['uri']); } function project_project_update($node) { - db_query("UPDATE {project_projects} SET uri = '%s', homepage = '%s', changelog = '%s', cvs = '%s', demo = '%s', screenshots = '%s', documentation = '%s', license = '%s' WHERE nid = %d", $node->uri, $node->homepage, $node->changelog, $node->cvs, $node->demo, $node->screenshots, $node->documentation, $node->license, $node->nid); -// project_release_scan_directory($node->uri); + db_query("UPDATE {project_projects} SET uri = '%s', homepage = '%s', changelog = '%s', cvs = '%s', demo = '%s', screenshots = '%s', documentation = '%s', license = '%s' WHERE nid = %d", $node->project['uri'], $node->project['homepage'], $node->project['changelog'], $node->project['cvs'], $node->project['demo'], $node->project['screenshots'], $node->project['documentation'], $node->project['license'], $node->nid); +// project_release_scan_directory($node->project['uri']); } function project_project_delete($node) { @@ -456,7 +485,7 @@ function project_project_access($op, $no // Since this function is shared for project_release nodes, we have to // be careful what node we pass to project_check_admin_access(). if ($node->type == 'project_release') { - $node = node_load($node->pid); + $node = node_load($node->project['pid']); } if (project_check_admin_access($node)) { return TRUE; Index: project.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/project.module,v retrieving revision 1.328 diff -u -p -r1.328 project.module --- project.module 12 Jan 2009 23:40:52 -0000 1.328 +++ project.module 14 Jan 2009 16:20:21 -0000 @@ -885,13 +885,12 @@ function project_use_taxonomy() { } /** - * Returns whether or not the project uses - * version control or not + * Returns whether or not the project uses version control or not. */ function project_use_cvs($project) { if (module_exists('cvs')) { $project = is_numeric($project) ? node_load($project) : $project; - return isset($project->cvs_repository) && ($project->cvs_repository != 0); + return !empty($project->cvs['repository']); } } cvs diff: Diffing legacy_paths cvs diff: Diffing release Index: release/project_release.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v retrieving revision 1.89 diff -u -p -r1.89 project_release.module --- release/project_release.module 13 Jan 2009 19:59:29 -0000 1.89 +++ release/project_release.module 14 Jan 2009 16:20:23 -0000 @@ -214,7 +214,7 @@ function project_release_access($op, $no // We can't just use project_project_access() here, since we // need to check access to the project itself, not the release // node, so we use the helper method and pass the project id. - return project_check_admin_access($node->pid); + return project_check_admin_access($node->project_release['pid']); case 'delete': // No one should ever delete a release node, only unpublish it. return FALSE; @@ -244,20 +244,21 @@ function project_release_form($release) // Initialize variables and $release object properties to prevent notices. $is_edit = FALSE; $admin = NULL; - $release->version_major = NULL; - $release->version_minor = NULL; - $release->version_patch = NULL; - $release->version_extra = NULL; - $release->tag = ''; - $release->version = ''; - $release->file_path = ''; - $release->file_hash = ''; - $release->file_date = 0; - $release->version_api_tid = NULL; - $release->pid = (integer) arg(3); - $project = node_load($release->pid); + $release->project_release = array(); + $release->project_release['version_major'] = NULL; + $release->project_release['version_minor'] = NULL; + $release->project_release['version_patch'] = NULL; + $release->project_release['version_extra'] = NULL; + $release->project_release['tag'] = ''; + $release->project_release['version'] = ''; + $release->project_release['file_path'] = ''; + $release->project_release['file_hash'] = ''; + $release->project_release['file_date'] = 0; + $release->project_release['version_api_tid'] = NULL; + $release->project_release['pid'] = (integer) arg(3); + $project = node_load($release->project_release['pid']); if (!isset($project) || $project->type != 'project_project') { - drupal_set_message(t('Node %nid is not a valid project.', array('%nid' => $release->pid)), 'error'); + drupal_set_message(t('Node %nid is not a valid project.', array('%nid' => $release->project_release['pid'])), 'error'); drupal_goto('node/add/project-release'); } // Make sure this user should have permissions to add releases for @@ -278,7 +279,7 @@ function project_release_form($release) global $user; $admin = user_access('administer projects'); $is_edit = true; - $project = node_load($release->pid); + $project = node_load($release->project_release['pid']); $breadcrumb[] = l($project->title, 'node/'. $project->nid); $breadcrumb[] = l(t('Releases'), 'node/'. $project->nid . '/release'); project_project_set_breadcrumb($project, $breadcrumb); @@ -297,11 +298,11 @@ function project_release_form($release) ); } _project_release_form_add_text_element($form['rel_id']['title'], t('Title'), $release->title, $is_edit, $admin, TRUE, 40, 128); - _project_release_form_add_text_element($form['rel_id']['version'], t('Version string'), $release->version, $is_edit, $admin, TRUE, 20, 255); + _project_release_form_add_text_element($form['rel_id']['version'], t('Version string'), $release->project_release['version'], $is_edit, $admin, TRUE, 20, 255); $form['pid'] = array( '#type' => 'value', - '#value' => $release->pid, + '#value' => $release->project_release['pid'], ); $form['version']['num'] = array( '#type' => 'fieldset', @@ -321,7 +322,7 @@ function project_release_form($release) '#title' => t('File information'), '#collapsible' => TRUE, ); - if (empty($release->file_path)) { + if (empty($release->project_release['file_path'])) { $file = file_save_upload('file'); $form['file']['file'] = array( '#title' => t('File'), @@ -334,14 +335,14 @@ function project_release_form($release) // Add a description to the body field. $form['body_field']['body']['#description'] = t('Enter a description of this release, such as a list of the major changes or updates.'); - _project_release_form_add_text_element($form['tag']['tag'], t('Tag'), $release->tag, $is_edit, $admin, TRUE, 40, 255); + _project_release_form_add_text_element($form['tag']['tag'], t('Tag'), $release->project_release['tag'], $is_edit, $admin, TRUE, 40, 255); $form['tag']['rebuild'] = array( '#type' => 'value', - '#value' => empty($release->rebuild) ? 0 : $release->rebuild, + '#value' => !empty($release->project_release['rebuild']), ); - _project_release_form_add_text_element($form['file']['file_path'], t('File path'), $release->file_path, $is_edit, $admin, FALSE, 40, 255); - _project_release_form_add_text_element($form['file']['file_hash'], t('File md5 hash'), $release->file_hash, $is_edit, FALSE, FALSE); - _project_release_form_add_text_element($form['file']['file_date'], t('File date'), $release->file_date, $is_edit, FALSE, FALSE); + _project_release_form_add_text_element($form['file']['file_path'], t('File path'), $release->project_release['file_path'], $is_edit, $admin, FALSE, 40, 255); + _project_release_form_add_text_element($form['file']['file_hash'], t('File md5 hash'), $release->project_release['file_hash'], $is_edit, FALSE, FALSE); + _project_release_form_add_text_element($form['file']['file_date'], t('File date'), $release->project_release['file_date'], $is_edit, FALSE, FALSE); // Add a custom validation function. $form['#validate'][] = 'project_release_node_form_validate'; @@ -378,7 +379,7 @@ function _project_release_form_add_versi $form['version']['num'][$var_name] = array( '#type' => 'textfield', '#title' => $title, - '#default_value' => $release->$var_name, + '#default_value' => $release->project_release[$var_name], '#size' => $size, '#maxlength' => $size+10, '#attributes' => array('style' => 'width:auto'), @@ -399,7 +400,7 @@ function _project_release_form_add_versi else { $form['version']['num'][$var_name] = array( '#type' => 'value', - '#value' => $release->$var_name, + '#value' => $release->project_release[$var_name], ); } } @@ -535,22 +536,24 @@ function project_release_node_form_valid // title based on changes to the version elements on an edit, but we // have to be careful not to break the fancy N-page form when // cvs_form_alter() is involved... - if (isset($edit->project->uri)) { - $project_name = $edit->project->uri; + $project = isset($form_state['values']['project']) ? $form_state['values']['project'] : new stdClass; + + if (isset($project->project['uri'])) { + $project_name = $project->project['uri']; } - elseif (isset($edit->pid)) { - $project_name = db_result(db_query("SELECT uri FROM {project_projects} WHERE nid = %d", $edit->pid)); + elseif (isset($form_state['values']['pid'])) { + $project_name = db_result(db_query("SELECT uri FROM {project_projects} WHERE nid = %d", $form_state['values']['pid'])); } - if (isset($edit->title)) { + if (isset($form_state['values']['title'])) { // TODO: Magic re-setting to "%project_name %version" ?? } - elseif (isset($edit->version) && $edit->version !== '') { - form_set_value($form['title'], "$project_name $edit->version", $form_state); + elseif (isset($form_state['values']['version']) && $form_state['values']['version'] !== '') { + form_set_value($form['title'], $project_name .' '. $form_state['values']['version'], $form_state); } - elseif (isset($edit->project)) { - $version = project_release_get_version((object)$edit, $edit->project); + elseif (!empty($project)) { + $version = project_release_get_version((object)$form_state['values'], $project); form_set_value(array('#parents' => array('version')), $version, $form_state); - $title = $edit->project->title; + $title = $project->title; form_set_value($form['title'], "$title $version", $form_state); } } @@ -565,7 +568,7 @@ function project_release_node_form_submi //} //else { // // If there's no upload, save whatever value is already in $node. - // $file_path = $node->file_path; + // $file_path = $node->project_release['file_path']; //} } @@ -574,16 +577,24 @@ function project_release_node_form_submi * @ingroup project_release_node */ function project_release_load($node) { - $additions = db_fetch_object(db_query("SELECT * FROM {project_release_nodes} WHERE nid = %d", $node->nid)); + $additions = db_fetch_array(db_query("SELECT * FROM {project_release_nodes} WHERE nid = %d", $node->nid)); // Add the API term associated with the release. $api_vid = _project_release_get_api_vid(); $api_tid = db_result(db_query("SELECT tn.tid FROM {term_node} tn INNER JOIN {term_data} td ON tn.tid = td.tid WHERE td.vid = %d AND tn.nid = %d", $api_vid, $node->nid)); - $additions->version_api_tid = $api_tid; - return $additions; + $additions['version_api_tid'] = $api_tid; + $release = new stdClass; + $release->project_release = $additions; + return $release; } /** * Implementation of hook_insert(). + * + * @param $node + * Object containing form values from the project_release node form. This + * is NOT a fully loaded $node object, so the release-related values are + * directly in $node, not in the $node->project_release array. + * * @ingroup project_release_node */ function project_release_insert($node) { @@ -603,6 +614,12 @@ function project_release_insert($node) { /** * Implementation of hook_update(). + * + * @param $node + * Object containing form values from the project_release node form. This + * is NOT a fully loaded $node object, so the release-related values are + * directly in $node, not in the $node->project_release array. + * * @ingroup project_release_node */ function project_release_update($node) { @@ -620,7 +637,10 @@ function project_release_update($node) { * @see db_query * @ingroup project_release_internal * - * @param $node Node object to save + * @param $node + * Object containing form values from the project_release node form. This + * is NOT a fully loaded $node object, so the release-related values are + * directly in $node, not in the $node->project_release array. * @param $is_new Is this a new release node, or are we updating? */ function project_release_db_save($node, $is_new) { @@ -643,13 +663,17 @@ function project_release_db_save($node, // $file_path = $node->file_path; //} - $types = array( 'pid' => "%d", 'version' => "'%s'", 'tag' => "'%s'", + $types = array('pid' => "%d", 'version' => "'%s'", 'tag' => "'%s'", 'file_path' => "'%s'", 'file_date' => "%d", 'file_hash' => "'%s'", 'rebuild' => "%d", ); - $values = array( 'pid' => $node->pid, 'version' => $node->version, - 'tag' => $node->tag, 'file_path' => $node->file_path, - 'file_date' => $node->file_date, 'file_hash' => $node->file_hash, + $values = array( + 'pid' => $node->pid, + 'version' => $node->version, + 'tag' => $node->tag, + 'file_path' => $node->file_path, + 'file_date' => $node->file_date, + 'file_hash' => $node->file_hash, 'rebuild' => $node->rebuild, ); $fields = array('version_major', 'version_minor', 'version_patch'); @@ -761,8 +785,8 @@ function project_release_check_supported * @ingroup project_release_node */ function project_release_delete($node) { - if ($node->file_path) { - file_delete(file_create_path($node->file_path)); + if ($node->project_release['file_path']) { + file_delete(file_create_path($node->project_release['file_path'])); } db_query("DELETE FROM {project_release_nodes} WHERE nid = %d", $node->nid); } @@ -778,8 +802,8 @@ function project_release_delete($node) { * @ingroup project_release_api */ function project_release_get_version_format($project) { - if (!empty($project->version_format)) { - return $project->version_format; + if (!empty($project->project_release['version_format'])) { + return $project->project_release['version_format']; } $db_format = db_result(db_query("SELECT version_format FROM {project_release_projects} WHERE nid = %d", $project->nid)); @@ -812,15 +836,15 @@ function project_release_get_version($re $node = $project; } else { - $node->nid = $release->pid; + $node->nid = $release->project_release['pid']; } $variables = array(); foreach (array('major', 'minor', 'patch', 'extra') as $field) { $var = "version_$field"; - if (isset($release->$var) && $release->$var !== '') { - $variables["!$field"] = $release->$var; - $variables["%$field"] = '.'. $release->$var; - $variables["#$field"] = '-'. $release->$var; + if (isset($release->project_release[$var]) && $release->project_release[$var] !== '') { + $variables["!$field"] = $release->project_release[$var]; + $variables["%$field"] = '.'. $release->project_release[$var]; + $variables["#$field"] = '-'. $release->project_release[$var]; } else { $variables["!$field"] = ''; @@ -833,9 +857,10 @@ function project_release_get_version($re $variables["#api"] = ''; $vid = _project_release_get_api_vid(); if (project_release_get_api_taxonomy()) { - if (isset($release->version_api_tid)) { - $tid = $release->version_api_tid; + if (isset($release->project_release['version_api_tid'])) { + $tid = $release->project_release['version_api_tid']; } + // @TODO: is this right? elseif (isset($release->$vid)) { $tid = $release->$vid; } @@ -856,7 +881,7 @@ function project_release_get_version($re */ function project_release_view($node, $teaser = FALSE, $page = FALSE) { $node = node_prepare($node, $teaser); - $project = node_load($node->pid); + $project = node_load($node->project_release['pid']); if ($page) { // Breadcrumb navigation @@ -866,25 +891,25 @@ function project_release_view($node, $te } $output = ''; - if (project_use_cvs($project) && isset($node->tag)) { - if (!empty($node->rebuild)) { - $output .= t('Nightly development snapshot from CVS branch: @tag', array('@tag' => $node->tag)) .'
'; + if (project_use_cvs($project) && isset($node->project_release['tag'])) { + if (!empty($node->project_release['rebuild'])) { + $output .= t('Nightly development snapshot from CVS branch: @tag', array('@tag' => $node->project_release['tag'])) .'
'; } else { - $output .= t('Official release from CVS tag: @tag', array('@tag' => $node->tag)) .'
'; + $output .= t('Official release from CVS tag: @tag', array('@tag' => $node->project_release['tag'])) .'
'; } } - if (!empty($node->file_path)) { - $output .= ''. t('Download: !file', array('!file' => theme('project_release_download_link', $node->file_path))) .'
'; - $output .= ''. t('Size: !size', array('!size' => format_size(filesize(file_create_path($node->file_path))))) .'
'; - $output .= ''. t('md5_file hash: !file_hash', array('!file_hash' => $node->file_hash)) .'
'; + if (!empty($node->project_release['file_path'])) { + $output .= ''. t('Download: !file', array('!file' => theme('project_release_download_link', $node->project_release['file_path']))) .'
'; + $output .= ''. t('Size: !size', array('!size' => format_size(filesize(file_create_path($node->project_release['file_path']))))) .'
'; + $output .= ''. t('md5_file hash: !file_hash', array('!file_hash' => $node->project_release['file_hash'])) .'
'; } if ($node->created) { $output .= ''. t('First released: !created', array('!created' => format_date($node->created))) .'
'; } - if (!empty($node->file_date) && ($node->file_date != $node->created)) { - $output .= ''. t('Last updated: !changed', array('!changed' => format_date($node->file_date))) .'
'; + if (!empty($node->project_release['file_date']) && ($node->project_release['file_date'] != $node->created)) { + $output .= ''. t('Last updated: !changed', array('!changed' => format_date($node->project_release['file_date']))) .'
'; } if (module_exists('project_usage') && user_access('view project usage')) { $output .= ''. l(t('View usage statistics for this release'), 'project/usage/'. $node->nid) .'
'; @@ -895,7 +920,7 @@ function project_release_view($node, $te ); // Display packaging errors to admins. - if (project_check_admin_access($node->pid)) { + if (project_check_admin_access($node->project_release['pid'])) { $rows = array(); $result = db_query('SELECT * FROM {project_release_package_errors} WHERE nid = %d', $node->nid); $error = db_fetch_object($result); @@ -1227,7 +1252,7 @@ function project_release_project_edit_fo '#type' => 'fieldset', '#title' => t('Advanced options'), '#collapsible' => TRUE, - '#collapsed' => $node->releases, + '#collapsed' => $node->project_release['releases'], '#weight' => 5, ); @@ -1236,7 +1261,7 @@ function project_release_project_edit_fo '#title' => t('Enable releases'), '#return_value' => 1, '#weight' => -10, - '#default_value' => isset($node->releases) ? $node->releases : 1, + '#default_value' => isset($node->project_release['releases']) ? $node->project_release['releases'] : 1, '#description' => t('Allow releases of this project with specific versions.'), ); @@ -1244,7 +1269,7 @@ function project_release_project_edit_fo $form['advanced']['version_format'] = array( '#type' => 'textfield', '#title' => t('Version format string'), - '#default_value' => $node->version_format, + '#default_value' => $node->project_release['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))), @@ -1506,15 +1531,15 @@ function project_release_project_edit_fo function project_release_alter_release_form(&$form) { global $user; $node = $form['#node']; - $tid = $node->version_api_tid; + $tid = $node->project_release['version_api_tid']; $vid = _project_release_get_api_vid(); if (!project_release_get_api_taxonomy() && isset($form['taxonomy'][$vid])) { unset($form['taxonomy'][$vid]); } else { /* - if (isset($node->pid)) { - $project->nid = $node->pid; + if (isset($node->project_release['pid'])) { + $project->nid = $node->project_release['pid']; } elseif (arg(1) == 'add' && is_numeric(arg(3))) { $project->nid = arg(3); @@ -1615,11 +1640,11 @@ function project_release_project_nodeapi if (!empty($project)) { $fields = array('releases', 'version_format'); foreach ($fields as $field) { - $node->$field = $project->$field; + $node->project_release[$field] = $project->$field; } $wants_snapshots = db_result(db_query('SELECT tid FROM {project_release_supported_versions} WHERE nid = %d AND snapshot = %d LIMIT %d', $node->nid, 1, 1)); if (isset($wants_snapshots)) { - $node->project_release_show_snapshots = TRUE; + $node->project_release['project_release_show_snapshots'] = TRUE; } } } @@ -1659,8 +1684,8 @@ function project_release_release_nodeapi // Since release nodes can be unpublished, we need to make sure that the // recommended branch information is still up to date. if (module_exists('taxonomy')) { - if (isset($node->version_api_tid)) { - $tid = $node->version_api_tid; + if (isset($node->project_release['version_api_tid'])) { + $tid = $node->project_release['version_api_tid']; } else { $vid = _project_release_get_api_vid(); @@ -1669,7 +1694,7 @@ function project_release_release_nodeapi } } if (isset($tid)) { - project_release_check_supported_versions($node->pid, $tid, $node->version_major, ($op == 'delete' ? TRUE : FALSE)); + project_release_check_supported_versions($node->project_release['pid'], $tid, $node->project_release['version_major'], ($op == 'delete' ? TRUE : FALSE)); } } break; @@ -1679,14 +1704,14 @@ function project_release_release_nodeapi $node->body = $node->content['release_info']['#value'] . $node->body; $node->teaser = $node->content['release_info']['#value'] . $node->teaser; // If the release node has a file, include an enclosure attribute for it. - if (!empty($node->file_path)) { - $file_link = theme('project_release_download_link', $node->file_path, NULL, TRUE); + if (!empty($node->project_release['file_path'])) { + $file_link = theme('project_release_download_link', $node->project_release['file_path'], NULL, TRUE); return array( array( 'key' => 'enclosure', 'attributes' => array( 'url' => $file_link['href'], - 'length' => filesize(file_create_path($node->file_path)), + 'length' => filesize(file_create_path($node->project_release['file_path'])), 'type' => 'application/octet-stream', ) ) @@ -1761,12 +1786,12 @@ function project_release_get_current_rec * Theme the appropriate release download table for a project node. */ function theme_project_release_project_download_table($node) { - if (empty($node->releases)) { + if (empty($node->project_release['releases'])) { return; } $output = '

'. t('Releases') .'

'; $output .= project_release_table($node, 'supported', 'official', t('Official releases')); - if ($node->project_release_show_snapshots) { + if ($node->project_release['project_release_show_snapshots']) { $output .= project_release_table($node, 'supported', 'snapshot', t('Development snapshots')); } return $output; @@ -1778,7 +1803,7 @@ function theme_project_release_project_d * Note: This is *not* an implementation of hook_link_alter(). */ function project_release_project_page_link_alter($node, &$all_links) { - if (empty($node->releases)) { + if (empty($node->project_release['releases'])) { return; } $all_links['project_release'] = array( @@ -2009,7 +2034,9 @@ function project_release_table($project, * Helper function to return an individual row for the download table. * * @param $release - * The release object queried from the database. + * The release object queried from the database. Since this is NOT a + * fully-loaded $node object, so the release-related fields are not in a + * 'project_release' sub-array. * @param $recommended * Boolean indicating if this release is the currently recommended one. * @param $can_edit @@ -2104,7 +2131,9 @@ function theme_project_release_download_ * Return the message text for recommended releases in the download table. * * @param $release - * Object with data about the release. + * The release object queried from the database. Since this is NOT a + * fully-loaded $node object, so the release-related fields are not in a + * 'project_release' sub-array. * @param $text_type * What kind of text to render. Can be either 'summary' for the summary * text to include directly on the project node, or 'message' for the text cvs diff: Diffing release/views cvs diff: Diffing release/views/handlers cvs diff: Diffing usage Index: usage/project_usage.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/usage/project_usage.module,v retrieving revision 1.23 diff -u -p -r1.23 project_usage.module --- usage/project_usage.module 19 Dec 2008 20:41:59 -0000 1.23 +++ usage/project_usage.module 14 Jan 2009 16:20:23 -0000 @@ -370,7 +370,7 @@ function project_usage_project_page($nod */ function project_usage_release_page($node) { drupal_add_css(drupal_get_path('module', 'project_usage') .'/project_usage.css'); - $project = node_load($node->pid); + $project = node_load($node->project_release['pid']); $breadcrumb = array( l(t('Usage'), 'project/usage'), l($project->title, 'project/usage/'. $project->nid), @@ -650,10 +650,10 @@ function theme_project_usage_release_pag */ function theme_project_usage_header_links($project, $release = NULL) { $links = array(); - $links[] = l(t('%project_name project page', array('%project_name' => $project->title)), 'project/'. $project->uri, array(), NULL, NULL, FALSE, TRUE); + $links[] = l(t('%project_name project page', array('%project_name' => $project->title)), 'project/'. $project->project['uri'], array(), NULL, NULL, FALSE, TRUE); if (!empty($release)) { $links[] = l(t('%release_name release page', array('%release_name' => $release->title)), 'node/' . $release->nid, array(), NULL, NULL, FALSE, TRUE); - $links[] = l(t('All %project_name usage statistics', array('%project_name' => $project->title)), 'project/usage/' . $project->uri, array(), NULL, NULL, FALSE, TRUE); + $links[] = l(t('All %project_name usage statistics', array('%project_name' => $project->title)), 'project/usage/' . $project->project['uri'], array(), NULL, NULL, FALSE, TRUE); } $links[] = l(t('Usage statistics for all projects'), 'project/usage'); return theme('item_list', $links); @@ -663,8 +663,8 @@ function theme_project_usage_header_link * Implementation of hook_project_page_link_alter(). */ function project_usage_project_page_link_alter($node, &$links) { - if (user_access('view project usage') && $node->releases) { - $links['resources']['links']['project_usage'] = l(t('View usage statistics'), 'project/usage/' . $node->uri); + if (user_access('view project usage') && $node->project_release['releases']) { + $links['resources']['links']['project_usage'] = l(t('View usage statistics'), 'project/usage/'. $node->project['uri']); } } cvs diff: Diffing usage/tests cvs diff: Diffing views cvs diff: Diffing views/handlers cvs diff: Diffing views/plugins cvs diff: Diffing views/theme Index: views/theme/theme.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/views/theme/theme.inc,v retrieving revision 1.2 diff -u -p -r1.2 theme.inc --- views/theme/theme.inc 12 Jan 2009 20:43:34 -0000 1.2 +++ views/theme/theme.inc 14 Jan 2009 16:20:24 -0000 @@ -93,11 +93,11 @@ function template_preprocess_project_vie // Link to the project's issue queue. if (!empty($options['project_issue_issues_link'])) { - if (isset($node->issues)) { + if (isset($node->project_issue['issues'])) { $vars['project_issue']->issues_link = array( - 'title' => t('Bugs and feature requests'), - 'href' => "project/issues/$node->uri", - ); + 'title' => t('Bugs and feature requests'), + 'href' => 'project/issues/'. $node->project['uri'], + ); } } }