- Patch #329140 by catch, pwolanin: improve consistency of vocabulary API and term API.

merge-requests/26/head
Dries Buytaert 2008-11-05 12:47:23 +00:00
parent ad96ff71c1
commit d31c77513b
5 changed files with 91 additions and 99 deletions

View File

@ -17,13 +17,13 @@ function forum_enable() {
// vocabulary still exists. Keep all other node types intact there.
$vocabulary = (array) $vocabulary;
$vocabulary['nodes']['forum'] = 1;
taxonomy_save_vocabulary($vocabulary);
taxonomy_vocabulary_save($vocabulary);
}
else {
// Create the forum vocabulary if it does not exist. Assign the vocabulary
// a low weight so it will appear first in forum topic create and edit
// forms.
$vocabulary = array(
$edit = array(
'name' => t('Forums'),
'multiple' => 0,
'required' => 0,
@ -33,9 +33,10 @@ function forum_enable() {
'weight' => -10,
'nodes' => array('forum' => 1),
);
taxonomy_save_vocabulary($vocabulary);
$vocabulary = (object) $edit;
taxonomy_vocabulary_save($vocabulary);
variable_set('forum_nav_vocabulary', $vocabulary['vid']);
variable_set('forum_nav_vocabulary', $vocabulary->vid);
}
}
@ -47,8 +48,8 @@ function forum_uninstall() {
drupal_load('module', 'taxonomy');
// Delete the vocabulary.
$vid = variable_get('forum_nav_vocabulary', '');
taxonomy_del_vocabulary($vid);
$vid = variable_get('forum_nav_vocabulary', 0);
taxonomy_vocabulary_delete($vid);
db_query('DROP TABLE {forum}');
variable_del('forum_containers');

View File

@ -143,10 +143,9 @@ class ForumTestCase extends DrupalWebTestCase {
$this->assertEqual($current_settings->description, $description, t('The description was updated'));
// Restore the original vocabulary.
$original_settings = (array) $original_settings;
taxonomy_save_vocabulary($original_settings);
taxonomy_vocabulary_save($original_settings);
$current_settings = taxonomy_vocabulary_load($vid, TRUE);
$this->assertEqual($current_settings->name, $original_settings['name'], 'The original vocabulary settings were restored');
$this->assertEqual($current_settings->name, $original_settings->name, 'The original vocabulary settings were restored');
}
/**

View File

@ -22,7 +22,7 @@ function taxonomy_overview_vocabularies() {
$node_type = node_get_types('name', $type);
$types[] = $node_type ? check_plain($node_type) : check_plain($type);
}
$form[$vocabulary->vid]['#vocabulary'] = (array)$vocabulary;
$form[$vocabulary->vid]['#vocabulary'] = $vocabulary;
$form[$vocabulary->vid]['name'] = array('#markup' => check_plain($vocabulary->name));
$form[$vocabulary->vid]['types'] = array('#markup' => implode(', ', $types));
$form[$vocabulary->vid]['weight'] = array('#type' => 'weight', '#delta' => 10, '#default_value' => $vocabulary->weight);
@ -49,9 +49,9 @@ function taxonomy_overview_vocabularies() {
*/
function taxonomy_overview_vocabularies_submit($form, &$form_state) {
foreach ($form_state['values'] as $vid => $vocabulary) {
if (is_numeric($vid) && $form[$vid]['#vocabulary']['weight'] != $form_state['values'][$vid]['weight']) {
$form[$vid]['#vocabulary']['weight'] = $form_state['values'][$vid]['weight'];
taxonomy_save_vocabulary($form[$vid]['#vocabulary']);
if (is_numeric($vid) && $form[$vid]['#vocabulary']->weight != $form_state['values'][$vid]['weight']) {
$form[$vid]['#vocabulary']->weight = $form_state['values'][$vid]['weight'];
taxonomy_vocabulary_save($form[$vid]['#vocabulary']);
}
}
}
@ -210,18 +210,19 @@ function taxonomy_form_vocabulary_submit($form, &$form_state) {
}
// Fix up the nodes array to remove unchecked nodes.
$form_state['values']['nodes'] = array_filter($form_state['values']['nodes']);
switch (taxonomy_save_vocabulary($form_state['values'])) {
$vocabulary = (object) $form_state['values'];
switch (taxonomy_vocabulary_save($vocabulary)) {
case SAVED_NEW:
drupal_set_message(t('Created new vocabulary %name.', array('%name' => $form_state['values']['name'])));
watchdog('taxonomy', 'Created new vocabulary %name.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE, l(t('edit'), 'admin/content/taxonomy/' . $form_state['values']['vid']));
drupal_set_message(t('Created new vocabulary %name.', array('%name' => $vocabulary->name)));
watchdog('taxonomy', 'Created new vocabulary %name.', array('%name' => $vocabulary->name), WATCHDOG_NOTICE, l(t('edit'), 'admin/content/taxonomy/' . $vocabulary->vid));
break;
case SAVED_UPDATED:
drupal_set_message(t('Updated vocabulary %name.', array('%name' => $form_state['values']['name'])));
watchdog('taxonomy', 'Updated vocabulary %name.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE, l(t('edit'), 'admin/content/taxonomy/' . $form_state['values']['vid']));
drupal_set_message(t('Updated vocabulary %name.', array('%name' => $vocabulary->name)));
watchdog('taxonomy', 'Updated vocabulary %name.', array('%name' => $vocabulary->name), WATCHDOG_NOTICE, l(t('edit'), 'admin/content/taxonomy/' . $vocabulary->vid));
break;
}
$form_state['vid'] = $form_state['values']['vid'];
$form_state['vid'] = $vocabulary->vid;
$form_state['redirect'] = 'admin/content/taxonomy';
return;
}
@ -245,7 +246,7 @@ function taxonomy_overview_terms(&$form_state, $vocabulary) {
}
$form = array(
'#vocabulary' => (array)$vocabulary,
'#vocabulary' => $vocabulary,
'#tree' => TRUE,
'#parent_fields' => FALSE,
);
@ -452,7 +453,7 @@ function taxonomy_overview_terms_submit($form, &$form_state) {
$hierarchy = 0; // Update the current hierarchy type as we go.
$changed_terms = array();
$tree = taxonomy_get_tree($vocabulary['vid']);
$tree = taxonomy_get_tree($vocabulary->vid);
if (empty($tree)) {
return;
@ -517,9 +518,9 @@ function taxonomy_overview_terms_submit($form, &$form_state) {
}
// Update the vocabulary hierarchy to flat or single hierarchy.
if ($vocabulary['hierarchy'] != $hierarchy) {
$vocabulary['hierarchy'] = $hierarchy;
taxonomy_save_vocabulary($vocabulary);
if ($vocabulary->hierarchy != $hierarchy) {
$vocabulary->hierarchy = $hierarchy;
taxonomy_vocabulary_save($vocabulary);
}
}
@ -626,8 +627,8 @@ function taxonomy_form_term(&$form_state, $vocabulary, $edit = array()) {
$parent = array_keys(taxonomy_get_parents($edit['tid']));
$form['#term'] = $edit;
$form['#term']['parent'] = $parent;
$form['#vocabulary'] = (array)$vocabulary;
$form['#vocabulary']['nodes'] = drupal_map_assoc($vocabulary->nodes);
$form['#vocabulary'] = $vocabulary;
$form['#vocabulary']->nodes = drupal_map_assoc($vocabulary->nodes);
// Check for confirmation forms.
if (isset($form_state['confirm_delete'])) {
@ -741,7 +742,7 @@ function taxonomy_form_term_submit($form, &$form_state) {
return;
}
// Rebuild the form to confirm enabling multiple parents.
elseif ($form_state['clicked_button']['#value'] == t('Save') && !$form['#vocabulary']['tags'] && count($form_state['values']['parent']) > 1 && $form['#vocabulary']['hierarchy'] < 2) {
elseif ($form_state['clicked_button']['#value'] == t('Save') && !$form['#vocabulary']->tags && count($form_state['values']['parent']) > 1 && $form['#vocabulary']->hierarchy < 2) {
$form_state['rebuild'] = TRUE;
$form_state['confirm_parents'] = TRUE;
return;
@ -759,7 +760,7 @@ function taxonomy_form_term_submit($form, &$form_state) {
break;
}
if (!$form['#vocabulary']['tags']) {
if (!$form['#vocabulary']->tags) {
$current_parent_count = count($form_state['values']['parent']);
$previous_parent_count = count($form['#term']['parent']);
// Root doesn't count if it's the only parent.
@ -775,9 +776,9 @@ function taxonomy_form_term_submit($form, &$form_state) {
}
// If we've increased the number of parents and this is a single or flat
// hierarchy, update the vocabulary immediately.
elseif ($current_parent_count > $previous_parent_count && $form['#vocabulary']['hierarchy'] < 2) {
$form['#vocabulary']['hierarchy'] = $current_parent_count == 1 ? 1 : 2;
taxonomy_save_vocabulary($form['#vocabulary']);
elseif ($current_parent_count > $previous_parent_count && $form['#vocabulary']->hierarchy < 2) {
$form['#vocabulary']->hierarchy = $current_parent_count == 1 ? 1 : 2;
taxonomy_vocabulary_save($form['#vocabulary']);
}
}
@ -871,7 +872,7 @@ function taxonomy_vocabulary_confirm_delete(&$form_state, $vid) {
* @see taxonomy_vocabulary_confirm_delete()
*/
function taxonomy_vocabulary_confirm_delete_submit($form, &$form_state) {
$status = taxonomy_del_vocabulary($form_state['values']['vid']);
$status = taxonomy_vocabulary_delete($form_state['values']['vid']);
drupal_set_message(t('Deleted vocabulary %name.', array('%name' => $form_state['values']['name'])));
watchdog('taxonomy', 'Deleted vocabulary %name.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE);
$form_state['redirect'] = 'admin/content/taxonomy';

View File

@ -209,34 +209,31 @@ function taxonomy_admin_vocabulary_title_callback($vocabulary) {
}
/**
* Save a vocabulary given form values or an equivalent array.
* Save a vocabulary given a vocabulary object..
*/
function taxonomy_save_vocabulary(&$edit) {
$edit['nodes'] = empty($edit['nodes']) ? array() : $edit['nodes'];
if (!isset($edit['module'])) {
$edit['module'] = 'taxonomy';
function taxonomy_vocabulary_save($vocabulary) {
if (empty($vocabulary->nodes)) {
$vocabulary->nodes = array();
}
if (!empty($edit['vid']) && !empty($edit['name'])) {
drupal_write_record('vocabulary', $edit, 'vid');
db_query("DELETE FROM {vocabulary_node_types} WHERE vid = %d", $edit['vid']);
foreach ($edit['nodes'] as $type => $selected) {
db_query("INSERT INTO {vocabulary_node_types} (vid, type) VALUES (%d, '%s')", $edit['vid'], $type);
}
module_invoke_all('taxonomy', 'update', 'vocabulary', $edit);
$status = SAVED_UPDATED;
if (!isset($vocabulary->module)) {
$vocabulary->module = 'taxonomy';
}
elseif (!empty($edit['vid'])) {
$status = taxonomy_del_vocabulary($edit['vid']);
}
else {
drupal_write_record('vocabulary', $edit);
foreach ($edit['nodes'] as $type => $selected) {
db_query("INSERT INTO {vocabulary_node_types} (vid, type) VALUES (%d, '%s')", $edit['vid'], $type);
if (!empty($vocabulary->vid) && !empty($vocabulary->name)) {
$status = drupal_write_record('vocabulary', $vocabulary, 'vid');
db_query("DELETE FROM {vocabulary_node_types} WHERE vid = %d", $vocabulary->vid);
foreach ($vocabulary->nodes as $type => $selected) {
db_query("INSERT INTO {vocabulary_node_types} (vid, type) VALUES (%d, '%s')", $vocabulary->vid, $type);
}
module_invoke_all('taxonomy', 'insert', 'vocabulary', $edit);
$status = SAVED_NEW;
module_invoke_all('taxonomy_vocabulary_update', $vocabulary);
}
elseif (empty($vocabulary->vid)) {
$status = drupal_write_record('vocabulary', $vocabulary);
foreach ($vocabulary->nodes as $type => $selected) {
db_query("INSERT INTO {vocabulary_node_types} (vid, type) VALUES (%d, '%s')", $vocabulary->vid, $type);
}
module_invoke_all('taxonomy_vocabulary_insert', $vocabulary);
}
cache_clear_all();
@ -252,7 +249,7 @@ function taxonomy_save_vocabulary(&$edit) {
* @return
* Constant indicating items were deleted.
*/
function taxonomy_del_vocabulary($vid) {
function taxonomy_vocabulary_delete($vid) {
$vocabulary = (array) taxonomy_vocabulary_load($vid);
db_query('DELETE FROM {vocabulary} WHERE vid = %d', $vid);
@ -280,12 +277,12 @@ function taxonomy_del_vocabulary($vid) {
* hieararchy of 2.
*
* @param $vocabulary
* An array of the vocabulary structure.
* A vocabulary object.
* @param $changed_term
* An array of the term structure that was updated.
*/
function taxonomy_check_vocabulary_hierarchy($vocabulary, $changed_term) {
$tree = taxonomy_get_tree($vocabulary['vid']);
$tree = taxonomy_get_tree($vocabulary->vid);
$hierarchy = 0;
foreach ($tree as $term) {
// Update the changed term with the new parent value before comparision.
@ -302,9 +299,9 @@ function taxonomy_check_vocabulary_hierarchy($vocabulary, $changed_term) {
$hierarchy = 1;
}
}
if ($hierarchy != $vocabulary['hierarchy']) {
$vocabulary['hierarchy'] = $hierarchy;
taxonomy_save_vocabulary($vocabulary);
if ($hierarchy != $vocabulary->hierarchy) {
$vocabulary->hierarchy = $hierarchy;
taxonomy_vocabulary_save($vocabulary);
}
return $hierarchy;

View File

@ -56,18 +56,18 @@ class TaxonomyVocabularyLoadTestCase extends DrupalWebTestCase {
function testTaxonomyVocabularyLoadStaticReset() {
// Load the first available vocabulary.
$original_vocabulary = taxonomy_vocabulary_load(1);
$this->assertTrue(is_object($original_vocabulary));
// Change the name and description.
$edit = (array) $original_vocabulary;
$edit['name'] = $this->randomName();
$edit['description'] = $this->randomName();
$this->assertNotEqual($edit['name'], $original_vocabulary->name);
taxonomy_save_vocabulary($edit);
$vocabulary = $original_vocabulary;
$vocabulary->name = $this->randomName();
$vocabulary->description = $this->randomName();
taxonomy_vocabulary_save($vocabulary);
// Load the vocabulary with $reset TRUE.
$new_vocabulary = taxonomy_vocabulary_load($original_vocabulary->vid, TRUE);
$this->assertEqual($new_vocabulary->name, $edit['name']);
$this->assertEqual($new_vocabulary->name, $edit['name']);
$this->assertEqual($new_vocabulary->name, $vocabulary->name);
$this->assertEqual($new_vocabulary->name, $vocabulary->name);
}
}
@ -120,7 +120,8 @@ class TaxonomyVocabularyFunctionsTestCase extends DrupalWebTestCase {
$edit[$key] = $$key;
// Exec save function.
taxonomy_save_vocabulary($edit);
$vocabulary = (object) $edit;
taxonomy_vocabulary_save($vocabulary);
// After save we use $nodesBak.
ksort($nodesBak);
$edit['nodes'] = $nodesBak;
@ -138,13 +139,8 @@ class TaxonomyVocabularyFunctionsTestCase extends DrupalWebTestCase {
$this->assertEqual($value, $edit[$key], t('Checking value of @key.', array('@key' => $key)));
}
// Delete vocabulary to avoid exception messages we create array with empty fields.
$deleteArray = array();
foreach($getEdit as $key => $v) {
$deleteArray[$key] = 0;
}
$deleteArray['vid'] = $vid;
taxonomy_save_vocabulary($deleteArray);
// Delete vocabulary.
taxonomy_vocabulary_delete($vid);
// Checking if we deleted voc.
$vocabularies = taxonomy_get_vocabularies();
$vid = 0;
@ -184,7 +180,9 @@ class TaxonomyTermFunctionsTestCase extends DrupalWebTestCase {
$name = $this->randomName(20);
$relation = 1;
$edit['name'] = $name;
taxonomy_save_vocabulary($edit);
$vocabulary = (object) $edit;
taxonomy_vocabulary_save($vocabulary);
$edit['vid'] = $vocabulary->vid;
// Create term.
$termname = $this->randomName(20);
@ -234,8 +232,7 @@ class TaxonomyTermFunctionsTestCase extends DrupalWebTestCase {
}
// Delete vocabulary.
$edit['name'] = 0;
taxonomy_save_vocabulary($edit);
taxonomy_vocabulary_delete($edit['vid']);
}
}
@ -268,7 +265,9 @@ class TaxonomyTermSingleTestCase extends DrupalWebTestCase {
$name = $this->randomName(20);
$edit['hierarchy'] = 1;
$edit['name'] = $name;
taxonomy_save_vocabulary($edit);
$vocabulary = (object) $edit;
taxonomy_vocabulary_save($vocabulary);
$edit['vid'] = $vocabulary->vid;
// Create 1st term.
$termname = $this->randomName(20);
@ -291,8 +290,7 @@ class TaxonomyTermSingleTestCase extends DrupalWebTestCase {
$this->assertEqual($children,$getChildren[$children->tid], t('Checking children.'));
// Delete vocabulary.
$edit['name'] = 0;
taxonomy_save_vocabulary($edit);
taxonomy_vocabulary_delete($edit['vid']);
}
}
@ -323,7 +321,9 @@ class TaxonomyTermMultipleTestCase extends DrupalWebTestCase {
$name = $this->randomName(20);
$edit['hierarchy'] = 1;
$edit['name'] = $name;
taxonomy_save_vocabulary($edit);
$vocabulary = (object) $edit;
taxonomy_vocabulary_save($vocabulary);
$edit['vid'] = $vocabulary->vid;
// Create 1st term.
$parent = array();
@ -354,8 +354,7 @@ class TaxonomyTermMultipleTestCase extends DrupalWebTestCase {
}
// Delete vocabulary.
$edit['name'] = 0;
taxonomy_save_vocabulary($edit);
taxonomy_vocabulary_delete($edit['vid']);
}
}
@ -423,12 +422,13 @@ class TaxonomyTestNodeApiTestCase extends DrupalWebTestCase {
}
$name = $this->randomName(20);
$edit['hierarchy'] = 1;
$edit['multiple'] = 1;
$edit['name'] = $name;
$edit['nodes'] = array('article' => 'article');
taxonomy_save_vocabulary($edit);
$vid = $edit['vid']; // We need to persist vid after $edit is unset().
$vocabulary->hierarchy = 1;
$vocabulary->multiple = 1;
$vocabulary->name = $name;
$vocabulary->nodes = array('article' => 'article');
taxonomy_vocabulary_save($vocabulary);
$vid = $vocabulary->vid;
$parent = array();
$patternArray = array();
@ -524,14 +524,8 @@ class TaxonomyTestNodeApiTestCase extends DrupalWebTestCase {
$num_rows = db_result(db_query('SELECT COUNT(*) FROM {term_node} WHERE nid = %d', $node->nid));
$this->assertEqual($num_rows, 0, t('Checking database field after deletion'));
// Delete vocabulary to avoid exception messages create array with empty fields.
$edit = array();
foreach($_t as $key ) {
$edit[$key] = 0;
}
$edit['name'] = 0;
$edit['vid'] = $vid;
taxonomy_save_vocabulary($edit);
// Delete vocabulary.
taxonomy_vocabulary_delete($vid);
}
}