When Better Select is enabled, it interferes with adding taxonomy terms. Taxonomy will report that the new term has been added, but when you go and list the terms, the term you just added will not be there.

To reproduce:

  1. Enable Better Select module
  2. Add a term to a vocabulary (admin/structure/taxonomy//add) - after adding, you will see a message that the term is successfully added
  3. List the terms in the vocabulary (admin/structure/taxonomy/) - you'll see that the newly added term is not there
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

ChristophWeber’s picture

Confirmed, but I got a PDOexception error and no new taxonomy term at all. The workaround is to disable betterselect, add terms, and then re-enable betterselect. This is on 7.23.
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '94-0' for key 'PRIMARY': INSERT INTO {taxonomy_term_hierarchy} (tid, parent) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1), (:db_insert_placeholder_2, :db_insert_placeholder_3), (:db_insert_placeholder_4, :db_insert_placeholder_5), (:db_insert_placeholder_6, :db_insert_placeholder_7), (:db_insert_placeholder_8, :db_insert_placeholder_9), (:db_insert_placeholder_10, :db_insert_placeholder_11), (:db_insert_placeholder_12, :db_insert_placeholder_13), (:db_insert_placeholder_14, :db_insert_placeholder_15), (:db_insert_placeholder_16, :db_insert_placeholder_17), (:db_insert_placeholder_18, :db_insert_placeholder_19), (:db_insert_placeholder_20, :db_insert_placeholder_21), (:db_insert_placeholder_22, :db_insert_placeholder_23), (:db_insert_placeholder_24, :db_insert_placeholder_25), (:db_insert_placeholder_26, :db_insert_placeholder_27), (:db_insert_placeholder_28, :db_insert_placeholder_29), (:db_insert_placeholder_30, :db_insert_placeholder_31), (:db_insert_placeholder_32, :db_insert_placeholder_33), (:db_insert_placeholder_34, :db_insert_placeholder_35), (:db_insert_placeholder_36, :db_insert_placeholder_37), (:db_insert_placeholder_38, :db_insert_placeholder_39), (:db_insert_placeholder_40, :db_insert_placeholder_41), (:db_insert_placeholder_42, :db_insert_placeholder_43), (:db_insert_placeholder_44, :db_insert_placeholder_45), (:db_insert_placeholder_46, :db_insert_placeholder_47), (:db_insert_placeholder_48, :db_insert_placeholder_49), (:db_insert_placeholder_50, :db_insert_placeholder_51), (:db_insert_placeholder_52, :db_insert_placeholder_53), (:db_insert_placeholder_54, :db_insert_placeholder_55), (:db_insert_placeholder_56, :db_insert_placeholder_57), (:db_insert_placeholder_58, :db_insert_placeholder_59), (:db_insert_placeholder_60, :db_insert_placeholder_61), (:db_insert_placeholder_62, :db_insert_placeholder_63), (:db_insert_placeholder_64, :db_insert_placeholder_65), (:db_insert_placeholder_66, :db_insert_placeholder_67), (:db_insert_placeholder_68, :db_insert_placeholder_69), (:db_insert_placeholder_70, :db_insert_placeholder_71), (:db_insert_placeholder_72, :db_insert_placeholder_73), (:db_insert_placeholder_74, :db_insert_placeholder_75), (:db_insert_placeholder_76, :db_insert_placeholder_77), (:db_insert_placeholder_78, :db_insert_placeholder_79), (:db_insert_placeholder_80, :db_insert_placeholder_81), (:db_insert_placeholder_82, :db_insert_placeholder_83), (:db_insert_placeholder_84, :db_insert_placeholder_85), (:db_insert_placeholder_86, :db_insert_placeholder_87), (:db_insert_placeholder_88, :db_insert_placeholder_89), (:db_insert_placeholder_90, :db_insert_placeholder_91), (:db_insert_placeholder_92, :db_insert_placeholder_93), (:db_insert_placeholder_94, :db_insert_placeholder_95), (:db_insert_placeholder_96, :db_insert_placeholder_97), (:db_insert_placeholder_98, :db_insert_placeholder_99), (:db_insert_placeholder_100, :db_insert_placeholder_101), (:db_insert_placeholder_102, :db_insert_placeholder_103), (:db_insert_placeholder_104, :db_insert_placeholder_105), (:db_insert_placeholder_106, :db_insert_placeholder_107), (:db_insert_placeholder_108, :db_insert_placeholder_109), (:db_insert_placeholder_110, :db_insert_placeholder_111), (:db_insert_placeholder_112, :db_insert_placeholder_113), (:db_insert_placeholder_114, :db_insert_placeholder_115), (:db_insert_placeholder_116, :db_insert_placeholder_117), (:db_insert_placeholder_118, :db_insert_placeholder_119), (:db_insert_placeholder_120, :db_insert_placeholder_121), (:db_insert_placeholder_122, :db_insert_placeholder_123), (:db_insert_placeholder_124, :db_insert_placeholder_125), (:db_insert_placeholder_126, :db_insert_placeholder_127), (:db_insert_placeholder_128, :db_insert_placeholder_129), (:db_insert_placeholder_130, :db_insert_placeholder_131), (:db_insert_placeholder_132, :db_insert_placeholder_133), (:db_insert_placeholder_134, :db_insert_placeholder_135), (:db_insert_placeholder_136, :db_insert_placeholder_137), (:db_insert_placeholder_138, :db_insert_placeholder_139), (:db_insert_placeholder_140, :db_insert_placeholder_141), (:db_insert_placeholder_142, :db_insert_placeholder_143), (:db_insert_placeholder_144, :db_insert_placeholder_145), (:db_insert_placeholder_146, :db_insert_placeholder_147), (:db_insert_placeholder_148, :db_insert_placeholder_149); Array ( [:db_insert_placeholder_0] => 94 [:db_insert_placeholder_1] => 0 [:db_insert_placeholder_2] => 94 [:db_insert_placeholder_3] => 0 [:db_insert_placeholder_4] => 94 [:db_insert_placeholder_5] => 0 [:db_insert_placeholder_6] => 94 [:db_insert_placeholder_7] => 0 [:db_insert_placeholder_8] => 94 [:db_insert_placeholder_9] => 0 [:db_insert_placeholder_10] => 94 [:db_insert_placeholder_11] => 0 [:db_insert_placeholder_12] => 94 [:db_insert_placeholder_13] => 0 [:db_insert_placeholder_14] => 94 [:db_insert_placeholder_15] => 0 [:db_insert_placeholder_16] => 94 [:db_insert_placeholder_17] => 0 [:db_insert_placeholder_18] => 94 [:db_insert_placeholder_19] => 0 [:db_insert_placeholder_20] => 94 [:db_insert_placeholder_21] => 0 [:db_insert_placeholder_22] => 94 [:db_insert_placeholder_23] => 0 [:db_insert_placeholder_24] => 94 [:db_insert_placeholder_25] => 0 [:db_insert_placeholder_26] => 94 [:db_insert_placeholder_27] => 0 [:db_insert_placeholder_28] => 94 [:db_insert_placeholder_29] => 0 [:db_insert_placeholder_30] => 94 [:db_insert_placeholder_31] => 0 [:db_insert_placeholder_32] => 94 [:db_insert_placeholder_33] => 0 [:db_insert_placeholder_34] => 94 [:db_insert_placeholder_35] => 0 [:db_insert_placeholder_36] => 94 [:db_insert_placeholder_37] => 0 [:db_insert_placeholder_38] => 94 [:db_insert_placeholder_39] => 0 [:db_insert_placeholder_40] => 94 [:db_insert_placeholder_41] => 0 [:db_insert_placeholder_42] => 94 [:db_insert_placeholder_43] => 0 [:db_insert_placeholder_44] => 94 [:db_insert_placeholder_45] => 0 [:db_insert_placeholder_46] => 94 [:db_insert_placeholder_47] => 0 [:db_insert_placeholder_48] => 94 [:db_insert_placeholder_49] => 0 [:db_insert_placeholder_50] => 94 [:db_insert_placeholder_51] => 0 [:db_insert_placeholder_52] => 94 [:db_insert_placeholder_53] => 0 [:db_insert_placeholder_54] => 94 [:db_insert_placeholder_55] => 0 [:db_insert_placeholder_56] => 94 [:db_insert_placeholder_57] => 0 [:db_insert_placeholder_58] => 94 [:db_insert_placeholder_59] => 0 [:db_insert_placeholder_60] => 94 [:db_insert_placeholder_61] => 0 [:db_insert_placeholder_62] => 94 [:db_insert_placeholder_63] => 0 [:db_insert_placeholder_64] => 94 [:db_insert_placeholder_65] => 0 [:db_insert_placeholder_66] => 94 [:db_insert_placeholder_67] => 0 [:db_insert_placeholder_68] => 94 [:db_insert_placeholder_69] => 0 [:db_insert_placeholder_70] => 94 [:db_insert_placeholder_71] => 0 [:db_insert_placeholder_72] => 94 [:db_insert_placeholder_73] => 0 [:db_insert_placeholder_74] => 94 [:db_insert_placeholder_75] => 0 [:db_insert_placeholder_76] => 94 [:db_insert_placeholder_77] => 0 [:db_insert_placeholder_78] => 94 [:db_insert_placeholder_79] => 0 [:db_insert_placeholder_80] => 94 [:db_insert_placeholder_81] => 0 [:db_insert_placeholder_82] => 94 [:db_insert_placeholder_83] => 0 [:db_insert_placeholder_84] => 94 [:db_insert_placeholder_85] => 0 [:db_insert_placeholder_86] => 94 [:db_insert_placeholder_87] => 0 [:db_insert_placeholder_88] => 94 [:db_insert_placeholder_89] => 0 [:db_insert_placeholder_90] => 94 [:db_insert_placeholder_91] => 0 [:db_insert_placeholder_92] => 94 [:db_insert_placeholder_93] => 0 [:db_insert_placeholder_94] => 94 [:db_insert_placeholder_95] => 0 [:db_insert_placeholder_96] => 94 [:db_insert_placeholder_97] => 0 [:db_insert_placeholder_98] => 94 [:db_insert_placeholder_99] => 0 [:db_insert_placeholder_100] => 94 [:db_insert_placeholder_101] => 0 [:db_insert_placeholder_102] => 94 [:db_insert_placeholder_103] => 0 [:db_insert_placeholder_104] => 94 [:db_insert_placeholder_105] => 0 [:db_insert_placeholder_106] => 94 [:db_insert_placeholder_107] => 0 [:db_insert_placeholder_108] => 94 [:db_insert_placeholder_109] => 0 [:db_insert_placeholder_110] => 94 [:db_insert_placeholder_111] => 0 [:db_insert_placeholder_112] => 94 [:db_insert_placeholder_113] => 0 [:db_insert_placeholder_114] => 94 [:db_insert_placeholder_115] => 0 [:db_insert_placeholder_116] => 94 [:db_insert_placeholder_117] => 0 [:db_insert_placeholder_118] => 94 [:db_insert_placeholder_119] => 0 [:db_insert_placeholder_120] => 94 [:db_insert_placeholder_121] => 0 [:db_insert_placeholder_122] => 94 [:db_insert_placeholder_123] => 0 [:db_insert_placeholder_124] => 94 [:db_insert_placeholder_125] => 0 [:db_insert_placeholder_126] => 94 [:db_insert_placeholder_127] => 0 [:db_insert_placeholder_128] => 94 [:db_insert_placeholder_129] => 0 [:db_insert_placeholder_130] => 94 [:db_insert_placeholder_131] => 0 [:db_insert_placeholder_132] => 94 [:db_insert_placeholder_133] => 0 [:db_insert_placeholder_134] => 94 [:db_insert_placeholder_135] => 0 [:db_insert_placeholder_136] => 94 [:db_insert_placeholder_137] => 0 [:db_insert_placeholder_138] => 94 [:db_insert_placeholder_139] => 0 [:db_insert_placeholder_140] => 94 [:db_insert_placeholder_141] => 0 [:db_insert_placeholder_142] => 94 [:db_insert_placeholder_143] => 0 [:db_insert_placeholder_144] => 94 [:db_insert_placeholder_145] => 0 [:db_insert_placeholder_146] => 94 [:db_insert_placeholder_147] => 0 [:db_insert_placeholder_148] => 94 [:db_insert_placeholder_149] => 0 ) in taxonomy_term_save() (line 679 of /var/www/pv/modules/taxonomy/taxonomy.module).

domignon’s picture

Same here,I thought better select was not even supposed to appear on the add/edit taxonomy term form in the first place if the setting "appears on nodes form only" has been activated. I've disabled the module for now.

joelstein’s picture

Issue summary: View changes
Status: Active » Needs review
FileSize
665 bytes

This bug is caused by Better Select's betterselect_taxonomy_form_term_from_checkboxes() function, which can result in an empty "parent" array, thus causing taxonomy_term_save() to not save the empty term hierarchy, which then causes taxonomy_get_tree() to not load the term.

The attached patch fixes this issue by restoring an empty parent array to array(0 => 0), which is the native form value submitted when no parent is selected.

vinmassaro’s picture

Status: Needs review » Reviewed & tested by the community

Patch in #3 works for us. Changing status, thanks!

ximo’s picture

Status: Reviewed & tested by the community » Needs review
FileSize
656 bytes

#3 didn't work for us, unfortunately. But after some investigation I found out that there's another bug that causes this same error.

If you have checked the setting "Node form only", Better Select will still convert the select element for parents on the Add term form to checkboxes (a bug), and it will not add the necessary submit callbacks. Without the callbacks, the form data won't be what Taxonomy module expects, and it blows up with Integrity constraint violation: 1062 Duplicate entry and a WSOD in our case.

The bug is a faulty boolean check in betterselect_should_format_element(), so the fix was dead simple. Patch made against -dev, but should work against -beta3 too.

andileco’s picture

Patch #5 worked for me--I was using 7.x-1.0-beta3.

andileco’s picture

Priority: Normal » Major

I'm bumping this up to Major priority, as it breaks a core function in Drupal--the addition of new taxonomy terms.

ehanuise’s picture

got this issue on D7.41, better select 7.x-1.0-beta3+2-dev
adding or editing taxonomy terms results in terms not being added to vocabulary (albeit they are saved to DB tables).
Creating a term while specifying as child to another term works. If parent is it fails.
Disabling better select fixes the issue.
I can't code, but by searching about this I found a similar issue in the hierarchical select module, maybe this could help fix better select ?
https://www.drupal.org/node/1255880