? 98278_project_node_namespace_61.patch ? 98278_project_node_namespace_63.patch Index: project.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/project.inc,v retrieving revision 1.124 diff -u -p -r1.124 project.inc --- project.inc 15 Mar 2008 20:09:39 -0000 1.124 +++ project.inc 6 Aug 2008 15:17:36 -0000 @@ -70,20 +70,14 @@ function project_project_form($node) { } } - /* Project properties */ - $form['project'] = array( - '#type' => 'fieldset', - '#title' => t('Project information'), - '#collapsible' => TRUE, - ); - $form['project']['title'] = array( + $form['title'] = array( '#type' => 'textfield', '#title' => t('Full project name'), '#default_value' => isset($node->title) ? $node->title : NULL, '#maxlength' => 128, '#required' => TRUE, ); - $form['project']['body'] = array( + $form['body'] = array( '#type' => 'textarea', '#title' => t('Full description'), '#default_value' => isset($node->body) ? $node->body : NULL, @@ -91,11 +85,19 @@ function project_project_form($node) { '#rows' => 10, '#required' => TRUE, ); - $form['project']['format'] = filter_form($node->format); + $form['format'] = filter_form($node->format); + /* Project properties */ + $form['project'] = array( + '#type' => 'fieldset', + '#title' => t('Project information'), + '#collapsible' => TRUE, + '#tree' => TRUE, + ); + $form['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.'), @@ -104,7 +106,7 @@ function project_project_form($node) { $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.'), @@ -112,7 +114,7 @@ function project_project_form($node) { $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.'), @@ -120,7 +122,7 @@ function project_project_form($node) { $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.'), @@ -128,7 +130,7 @@ function project_project_form($node) { $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.'), @@ -136,7 +138,7 @@ function project_project_form($node) { $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.'), @@ -144,7 +146,7 @@ function project_project_form($node) { $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.'), @@ -152,7 +154,7 @@ function project_project_form($node) { $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,12 +176,12 @@ function project_project_validate(&$node } // Validate uri. - if (empty($node->uri)) { + if (empty($node->project['uri'])) { form_set_error('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)) { + if (!preg_match('/^[a-zA-Z0-9_-]+$/', $node->project['uri'])) { form_set_error('uri', t('Please only use alphanumerical characters for the project name.')); } @@ -194,7 +196,7 @@ function project_project_validate(&$node } } } - if (in_array(strtolower($node->uri), $reserved_names) || db_num_rows(db_query("SELECT nid FROM {project_projects} WHERE uri = '%s' AND nid <> %d", $node->uri, $node->nid))) { + if (in_array(strtolower($node->project['uri']), $reserved_names) || db_num_rows(db_query("SELECT nid FROM {project_projects} WHERE uri = '%s' AND nid <> %d", $node->project['uri'], $node->nid))) { form_set_error('uri', t('This project name is already in use.')); } } @@ -212,7 +214,7 @@ 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)) { + if ($node->project[$uri] && !preg_match('/^(http|https|ftp):\/\//i', $node->project[$uri])) { form_set_error($uri, t('!field is not a valid URL.', array('!field' => $name))); } } @@ -292,14 +294,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->issues); // ***namespace pi $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'); @@ -310,18 +312,18 @@ function project_project_view($node, $te ); $links = array(); if ($view_issues) { - $links['all_support'] = l(t('View all support requests'), 'project/issues/'. $node->uri, null, 'categories=support&states=all', null); - $links['pending_support'] = l(t('View pending support requests'), 'project/issues/'. $node->uri, null, 'categories=support', null); - $links['pending_bugs'] = l(t('View pending bug reports'), 'project/issues/'. $node->uri, null, 'categories=bug', null); - $links['pending_features'] = l(t('View pending feature requests'), 'project/issues/'. $node->uri, null, 'categories=feature', null); + $links['all_support'] = l(t('View all support requests'), 'project/issues/'. $node->project['uri'], null, 'categories=support&states=all', null); + $links['pending_support'] = l(t('View pending support requests'), 'project/issues/'. $node->project['uri'], null, 'categories=support', null); + $links['pending_bugs'] = l(t('View pending bug reports'), 'project/issues/'. $node->project['uri'], null, 'categories=bug', null); + $links['pending_features'] = l(t('View pending feature requests'), 'project/issues/'. $node->project['uri'], null, 'categories=feature', null); } 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; @@ -333,13 +335,13 @@ function project_project_view($node, $te ); $links = array(); if ($view_issues) { - $links['pending_patches'] = l(t('View pending patches'), 'project/issues/'. $node->uri, null, 'states=8,13,14', null); - $links['available_tasks'] = l(t('View available tasks'), 'project/issues/'. $node->uri, null, 'categories=task', null); - $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'], null, 'states=8,13,14', null); + $links['available_tasks'] = l(t('View available tasks'), 'project/issues/'. $node->project['uri'], null, 'categories=task', null); + $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)) { @@ -366,9 +368,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)); + $project = db_fetch_array(db_query('SELECT * FROM {project_projects} WHERE nid = %d', $node->nid)); - return $project; + return array('project' => $project); } /** @@ -380,7 +382,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"); + path_set_alias("node/$node->nid", "project/". $node->project['uri']); } break; @@ -388,20 +390,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"); + path_set_alias("node/$node->nid", "project/". $node->project['uri']); } 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', %d, '%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) { @@ -416,7 +418,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.317 diff -u -p -r1.317 project.module --- project.module 1 Aug 2008 22:36:51 -0000 1.317 +++ project.module 6 Aug 2008 15:17:37 -0000 @@ -1206,7 +1206,7 @@ function project_use_taxonomy() { 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 isset($project->cvs['cvs_repository']) && ($project->cvs['cvs_repository'] != 0); } } Index: release/project_release.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v retrieving revision 1.70 diff -u -p -r1.70 project_release.module --- release/project_release.module 28 Jul 2008 18:42:55 -0000 1.70 +++ release/project_release.module 6 Aug 2008 15:17:40 -0000 @@ -213,7 +213,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; @@ -240,11 +240,12 @@ function project_release_node_info() { */ function project_release_form($release) { if (arg(1) == 'add') { - $release->pid = arg(3); - $project = node_load($release->pid); + $release->project_release = array(); + $release->project_release['pid'] = arg(3); + $project = node_load($release->project_release['pid']); project_project_set_breadcrumb($project, TRUE); if (!isset($project) || $project->type != 'project_project') { - drupal_set_message(t('Node !nid is not a valid project.', array('!nid' => $release->pid))); + drupal_set_message(t('Node !nid is not a valid project.', array('!nid' => $release->project_reelease['pid']))); drupal_not_found(); module_invoke_all('exit'); exit; @@ -266,7 +267,7 @@ function project_release_form($release) global $user; $admin = user_access('administer projects'); $is_edit = true; - $project->nid = $release->pid; + $project->nid = $release->project_release['pid']; $project = node_load($project); $breadcrumb[] = l($project->title, 'node/'. $project->nid); $breadcrumb[] = l(t('Releases'), 'node/'. $project->nid . '/release'); @@ -290,12 +291,16 @@ 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); + + $form['project_release'] = array( + '#tree' => TRUE + ); - $form['pid'] = array( + $form['project_release']['pid'] = array( '#type' => 'value', - '#value' => $release->pid, + '#value' => $release->project_release['pid'], ); - $form['version']['num'] = array( + $form['project_release']['version']['num'] = array( '#type' => 'fieldset', '#title' => t('Version number elements'), '#collapsible' => TRUE, @@ -313,14 +318,14 @@ function project_release_form($release) _project_release_form_add_version_element($form, $release, $modify, $format, 'extra', t('Extra identifier'), t('Optionally specify other identifying information for this version, for example "beta-1", "rc-1" or "dev". In most cases, this should be left blank.'), 40); - $form['file'] = array( + $form['project_release']['file'] = array( '#type' => 'fieldset', '#title' => t('File information'), '#collapsible' => TRUE, ); - if (empty($release->file_path)) { + if (empty($release->project_release['file_path'])) { $file = file_check_upload('file'); - $form['file']['file'] = array( + $form['project_release']['file']['file'] = array( '#title' => t('File'), '#type' => 'file', '#description' => ($file ? t('A file named %filename has already been uploaded. If you upload another file %filename will be replaced.', array('%filename' => $file->filename)) : t('Choose the file that will be associated with this release.')), @@ -343,14 +348,14 @@ function project_release_form($release) ); $form['body_filter']['format'] = filter_form($release->format); - _project_release_form_add_text_element($form['tag']['tag'], t('Tag'), $release->tag, $is_edit, $admin, true, 40, 255); - $form['tag']['rebuild'] = array( + _project_release_form_add_text_element($form['project_release']['tag']['tag'], t('Tag'), $release->project_release['tag'], $is_edit, $admin, true, 40, 255); + $form['project_release']['tag']['rebuild'] = array( '#type' => 'value', - '#value' => $release->rebuild, + '#value' => $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); - _project_release_form_add_text_element($form['file']['file_date'], t('File date'), $release->file_date, $is_edit, false); + _project_release_form_add_text_element($form['project_release']['file']['file_path'], t('File path'), $release->project_release['file_path'], $is_edit, $admin, false, 40, 255); + _project_release_form_add_text_element($form['project_release']['file']['file_hash'], t('File md5 hash'), $release->project_release['file_hash'], $is_edit, false); + _project_release_form_add_text_element($form['project_release']['file']['file_date'], t('File date'), $release->project_release['file_date'], $is_edit, false); return $form; } @@ -381,10 +386,10 @@ function _project_release_form_add_versi $var_name = 'version_'. $name; $regexp = "@.*[!#%]$name.*@"; if (preg_match($regexp, $format)) { - $form['version']['num'][$var_name] = array( + $form['project_release']['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'), @@ -396,16 +401,16 @@ function _project_release_form_add_versi $form[$var_name]['#required'] = TRUE; } if ($description) { - $form['version']['num'][$var_name]['#description'] = $description; + $form['project_release']['version']['num'][$var_name]['#description'] = $description; } if (!$modify) { - $form['version']['num'][$var_name]['#attributes'] = array('disabled' => 'disabled'); + $form['project_release']['version']['num'][$var_name]['#attributes'] = array('disabled' => 'disabled'); } } else { - $form['version']['num'][$var_name] = array( + $form['project_release']['version']['num'][$var_name] = array( '#type' => 'value', - '#value' => $release->$var_name, + '#value' => $release->project_release[$var_name], ); } } @@ -455,19 +460,19 @@ function project_release_validate(&$edit global $form_values; if ($_POST['validate_version']) { - if (!isset($edit->version_major) && !isset($edit->version_minor) && - !isset($edit->version_patch) && - (!($edit->version_extra) || $edit->version_extra === '')) { + if (!isset($edit->project_release['version']['num']['version_major']) && !isset($edit->project_release['version']['num']['version_minor']) && + !isset($edit->project_release['version']['num']['version_patch']) && + (!($edit->project_release['version']['num']['version_extra']) || $edit->project_release['version']['num']['version_extra'] === '')) { form_set_error('version_major', t('You must fill in some version information.')); // TODO: find a better form value to mark as the error? } foreach (array('version_major' => 'Major version number', 'version_minor' => 'Minor version number') as $field => $name) { - $val = $edit->$field; + $val = $edit->project_release['version']['num'][$field]; if (isset($val) && $val !== '' && !is_numeric($val)) { form_set_error($field, t('!name must be a number.', array('!name' => $name))); } } - $val = $edit->version_patch; + $val = $edit->project_release['version']['num']['version_patch']; if (isset($val) && $val !== '' && !is_numeric($val) && $val != 'x') { form_set_error('version_patch', t("Patch-level version number must be numeric or the letter 'x'.")); } @@ -498,7 +503,7 @@ function project_release_validate(&$edit $tid = $edit->$vid; } if (isset($tid) && is_numeric($tid)) { - $edit->version_api_tid = $tid; + $edit->project_release['version_api_tid'] = $tid; } } @@ -516,8 +521,8 @@ function project_release_validate(&$edit if (isset($edit->project->uri)) { $project_name = $edit->project->uri; } - elseif (isset($edit->pid)) { - $project_name = db_result(db_query("SELECT uri FROM {project_projects} WHERE nid = %d", $edit->pid)); + elseif (isset($edit->project_release['pid'])) { + $project_name = db_result(db_query("SELECT uri FROM {project_projects} WHERE nid = %d", $edit->project_release['pid'])); } if (isset($edit->title)) { // TODO: Magic re-setting to "%project_name %version" ?? @@ -538,12 +543,12 @@ function project_release_validate(&$edit * @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; + return array('project_release' => $additions); } /** @@ -592,8 +597,8 @@ function project_release_db_save($node, // If the patch field is set to a non-numeric value, we just want to // keep it as a NULL in the DB, instead of casting it to a 0. - if (isset($node->version_patch) && !is_numeric($node->version_patch)) { - unset($node->version_patch); + if (isset($node->project_release['version']['num']['version_patch']) && !is_numeric($node->project_release['version']['num']['version_patch'])) { + unset($node->project_release['version']['num']['version_patch']); } // Handle file upload data. @@ -605,28 +610,28 @@ function project_release_db_save($node, } else { // If there's no upload, save whatever value is already in $node. - $file_path = $node->file_path; + $file_path = $node->project_release['file']['file_path']; } $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' => $file_path, - 'file_date' => $node->file_date, 'file_hash' => $node->file_hash, - 'rebuild' => $node->rebuild, + $values = array( 'pid' => $node->project_release['pid'], 'version' => $node->version, + 'tag' => $node->project_release['tag']['tag'], 'file_path' => $file_path, + 'file_date' => $node->project_release['file']['file_date'], 'file_hash' => $node->project_release['file']['file_hash'], + 'rebuild' => $node->project_release['tag']['rebuild'], ); $fields = array('version_major', 'version_minor', 'version_patch'); foreach ($fields as $field) { - if (isset($node->$field) && is_numeric($node->$field)) { + if (isset($node->project_release['version']['num'][$field]) && is_numeric($node->project_release['version']['num'][$field])) { $types[$field] = "%d"; - $values[$field] = $node->$field; + $values[$field] = $node->project_release['version']['num'][$field]; } } - if (!empty($node->version_extra)) { + if (!empty($node->project_release['version']['num']['version_extra'])) { $types['version_extra'] = "'%s'"; - $values['version_extra'] = $node->version_extra; + $values['version_extra'] = $node->project_release['version']['num']['version_extra']; } if ($is_new) { @@ -727,7 +732,7 @@ function project_release_check_supported */ function project_release_delete($node) { if ($node->file_path) { - file_delete(file_create_path($node->file_path)); + file_delete(file_create_path($node->project_release['file_path'])); } db_query("DELETE FROM {project_release_nodes} WHERE nid = %d", $node->nid); } @@ -743,8 +748,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)); @@ -777,15 +782,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; + $variables["!$field"] = $release->project_release[$var]; + $variables["%$field"] = '.'. $release->project_release[$var]; + $variables["#$field"] = '-'. $release->project_release[$var]; } else { $variables["!$field"] = ''; @@ -821,7 +826,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 @@ -831,25 +836,25 @@ function project_release_view($node, $te } $output = ''; - if (project_use_cvs($project) && isset($node->tag)) { - if ($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 ($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 ($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 ($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 ($node->file_date && ($node->file_date != $node->created)) { - $output .= ''. t('Last updated: !changed', array('!changed' => format_date($node->file_date))) .'
'; + $output .= ''. t('Last updated: !changed', array('!changed' => format_date($node->project_release['file_date']))) .'
'; } $node->content['release_info'] = array( '#value' => '
'. $output .'
', @@ -857,7 +862,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); @@ -949,7 +954,7 @@ function project_release_get_releases($p $releases[$obj->nid] = node_load($obj->nid); } else { - $releases[$obj->nid] = $obj->version; + $releases[$obj->nid] = $obj->project_release['version']; } } return $releases; @@ -1125,7 +1130,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, ); @@ -1134,7 +1139,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.'), ); @@ -1397,15 +1402,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); @@ -1489,11 +1494,11 @@ function project_release_project_nodeapi $project = db_fetch_object(db_query('SELECT * FROM {project_release_projects} WHERE nid = %d', $node->nid)); $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 = 1 LIMIT 1', $node->nid)); if (isset($wants_snapshots)) { - $node->project_release_show_snapshots = TRUE; + $node->project_release['show_snapshots'] = TRUE; } break; @@ -1527,8 +1532,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(); @@ -1537,9 +1542,13 @@ 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)); } } + // Finally, clear the cache for the release table on any of these node + // operations, since what we want to display might have changed, too. + $cid = 'table:'. $node->project_release['pid'] .':'; + cache_clear_all($cid, 'cache_project_release', TRUE); break; } } @@ -1606,12 +1615,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 (!$node->releases) { + if (!$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['show_snapshots']) { $output .= project_release_table($node, 'supported', 'snapshot', t('Development snapshots')); } return $output;