| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830 | 
							- <?php
 
- /**
 
-  *
 
-  * @file
 
-  * Taxonomy Manager Admin
 
-  *
 
-  * contains all forms and saving function for the Taxonomy Manager
 
-  *
 
-  */
 
- include_once DRUPAL_ROOT . "/modules/taxonomy/taxonomy.admin.inc";
 
- /**
 
-  * list of vocabularies, which link to Taxonomy Manager interface
 
-  */
 
- function taxonomy_manager_voc_list() {
 
-   $output = l(t('Add new vocabulary'), 'admin/structure/taxonomy/add/vocabulary') . ' | ';
 
-   $output .= l(t('Edit vocabulary settings'), 'admin/structure/taxonomy') . '<br /><br />';
 
-   $vocabularies = taxonomy_get_vocabularies();
 
-   $voc_list = array();
 
-   foreach ($vocabularies as $vocabulary) {
 
-     $voc_list[] = l($vocabulary->name, 'admin/structure/taxonomy_manager/voc/' . $vocabulary->machine_name);
 
-   }
 
-   if (!count($voc_list)) {
 
-     $voc_list[] = t('No Vocabularies available');
 
-   }
 
-   $output .= theme('item_list', array('items' => $voc_list, 'title' => t('Vocabularies')));
 
-   return $output;
 
- }
 
- /**
 
-  * defines forms for taxonomy manager interface
 
-  *
 
-  * @param $voc vocabulary
 
-  * @param $tid a term id, if not 0, displays term editing from for given tid on right side
 
-  * @param $search_string a string to filter root level terms
 
-  */
 
- function taxonomy_manager_form($form, &$form_state, $voc, $tid = 0, $filter = NULL) {
 
-   // Check for confirmation forms.
 
-   if (isset($form_state['confirm_delete'])) {
 
-     return taxonomy_manager_term_confirm_delete($form, $form_state, $voc->vid);
 
-   }
 
-   // By default use tid from term data form, except it is submitted from the load-tid helper and the tree needs to be refreshed.
 
-   if (isset($form_state['values']['tid']) && !(isset($form_state['triggering_element']['#value']) && $form_state['triggering_element']['#value'] == "load term" && $form_state['values']['load-tid-refresh-tree'])) {
 
-     $tid = $form_state['values']['tid'];
 
-   }
 
-   elseif (isset($form_state['triggering_element']['#value']) && $form_state['triggering_element']['#value'] == "load term" && $form_state['values']['load-tid-refresh-tree']) {
 
-     $tid = $form_state['values']['load-tid'];
 
-   }
 
-   $module_path = drupal_get_path('module', 'taxonomy_manager') . '/';
 
-   $form['#attached']['css'][] = $module_path . 'css/taxonomy_manager.css';
 
-   $form['#attached']['js'][] = $module_path . 'js/hideForm.js';
 
-   $form['#attached']['js'][] = $module_path . 'js/updateWeight.js';
 
-   $form['#attached']['js'][] = $module_path . 'js/termData.js';
 
-   $form['#attached']['js'][] = array('data' => array('termData' => array('url' => url("admin/structure/taxonomy_manager/termdata/edit/" . $voc->vid))), 'type' => 'setting');
 
-   $form['#attached']['js'][] = array('data' => array('updateWeight' => array('up' => 'edit-weight-up', 'down' => 'edit-weight-down', 'url' => url('admin/structure/taxonomy_manager/weight/'), 'disable_mouseover' => variable_get('taxonomy_manager_disable_mouseover', 0))), 'type' => 'setting');
 
-   $form['#attached']['js'][] = array('data' => array('TMAjaxThrobber' => array('add' => TRUE)), 'type' => 'setting');
 
-   $form['#attached']['js'][] = array('data' => array('taxonomy_manager' => array('modulePath' => (url($module_path) == $module_path) ? $module_path : (base_path() . $module_path))), 'type' => 'setting');
 
-   drupal_set_title(t("Taxonomy Manager - %voc_name", array("%voc_name" => $voc->name)), PASS_THROUGH);
 
-   $form['voc'] = array('#type' => 'value', "#value" => $voc);
 
-   // Helper forms for loading the term data form.
 
-   // When a term link in the tree view gets clicked, the term id is written into the
 
-   // load-tid textfield and aftwards the load-tid-submit button gets clicked, which
 
-   // triggers the ajax system.
 
-   $form['load-tid'] = array(
 
-     '#type' => 'textfield',
 
-     '#prefix' => '<div class="taxonomy-manager-term-load-helper">',
 
-   );
 
-   $form['load-tid-refresh-tree'] = array(
 
-     '#type' => 'checkbox',
 
-   );
 
-   $form['load-tid-submit'] = array(
 
-     '#type' => 'submit',
 
-     '#value' => 'load term',
 
-     '#submit' => array('taxonomy_manager_load_tid_submit'),
 
-     '#ajax' => array(
 
-       'callback' => 'taxonomy_manager_term_data_form_ajax_callback',
 
-       'method' => 'replaceWith',
 
-       'event' => 'click',
 
-       'wrapper' => 'taxonomy-term-data-replace',
 
-     ),
 
-     '#suffix' => '</div>',
 
-   );
 
-   taxonomy_manager_form_voc_jumper($form, $form_state);
 
-   if (_taxonomy_manager_voc_is_empty($voc->vid)) {
 
-     $text = t('No terms available');
 
-     $form['text'] = array(
 
-       '#markup' => $text,
 
-     );
 
-     taxonomy_manager_add_form($form, $voc, FALSE);
 
-     return $form;
 
-   }
 
-   $form_state['cache'] = TRUE;
 
-   $form['taxonomy']['#tree'] = TRUE;
 
-   $form['taxonomy']['manager'] = array(
 
-     '#type' => 'fieldset',
 
-     '#title' => check_plain($voc->name) . _taxonomy_manager_select_all_helpers_markup(),
 
-     '#weight' => 10,
 
-     '#tree' => TRUE,
 
-   );
 
-   $form['taxonomy']['manager']['top'] = array(
 
-     '#markup' => '',
 
-     '#prefix' => '<div class="taxonomy-manager-tree-top">',
 
-     '#suffix' => '</div>',
 
-   );
 
-   if (module_exists('i18n_taxonomy')) {
 
-     if (i18n_taxonomy_vocabulary_mode($voc->vid, I18N_MODE_TRANSLATE)) {
 
-       if ($tid) {
 
-         $language = _taxonomy_manager_term_get_lang($tid);
 
-       }
 
-       else {
 
-         $language = language_default()->language;
 
-       }
 
-       $form['taxonomy']['manager']['top']['language'] = array(
 
-         '#type' => 'select',
 
-         '#title' => t('Language'),
 
-         '#default_value' => $language,
 
-         '#options' => array('' => t('All'), 'no language' => t('no language')) + locale_language_list('name'),
 
-         '#attributes' => array('class' => array('language-selector')),
 
-       );
 
-     }
 
-   }
 
-   $form['taxonomy']['manager']['top']['size'] = array('#markup' => '<div class="taxonomy-manager-tree-size">' . theme("image", array('path' => $module_path . "images/grippie.png", 'alt' => t("Resize tree"), 'title' => t("Resize tree"), 'attributes' => array('class' => "div-grippie"))) . '</div>');
 
-   if (isset($form_state['values']['double_tree_values']['left_tree_expand_terms']) && count($form_state['values']['double_tree_values']['left_tree_expand_terms'])) {
 
-     $tids_to_expand = $form_state['values']['double_tree_values']['left_tree_expand_terms'];
 
-   }
 
-   elseif (isset($form_state['values']['searched_terms']) && count($form_state['values']['searched_terms'])) {
 
-     $tids_to_expand = $form_state['values']['searched_terms'];
 
-   }
 
-   else {
 
-     $tids_to_expand = $tid;
 
-   }
 
-   $form['taxonomy']['manager']['tree'] = array(
 
-     '#type' => 'taxonomy_manager_tree',
 
-     '#vid' => $voc->vid,
 
-     '#pager' => TRUE,
 
-     '#search_string' => ($tid) ? NULL : $filter,
 
-     '#language' => isset($language) ? $language : '',
 
-     '#terms_to_expand' => $tids_to_expand,
 
-     '#terms_to_highlight' => $tids_to_expand,
 
-   );
 
-   $form['toolbar'] = array(
 
-     '#type' => 'fieldset',
 
-     '#title' => t('Toolbar'),
 
-   );
 
-   $form['toolbar']['weight_up'] = array(
 
-     //'#type' => 'button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons')),
 
-     '#value' => t('Up'),
 
-     '#theme' => 'no_submit_button',
 
-     '#prefix' => '<div id="taxonomy-manager-toolbar-buttons">',
 
-   );
 
-   $form['toolbar']['weight-down'] = array(
 
-     //'#type' => 'button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons')),
 
-     '#value' => t('Down'),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
-   $form['toolbar']['wrapper'] = array(
 
-     '#type' => 'markup',
 
-     '#markup' => '<div id="taxonomy-manager-toolbar-throbber"></div><div class="clear"></div>',
 
-     '#weight' => 20,
 
-     '#prefix' => '</div>',
 
-   );
 
-   taxonomy_manager_add_form($form, $voc);
 
-   taxonomy_manager_confirm_delete($form, $voc);
 
-   taxonomy_manager_term_merge_form($form, $voc);
 
-   taxonomy_manager_move_form($form, $voc);
 
-   taxonomy_manager_export_form($form, $form_state, $voc);
 
-   taxonomy_manager_double_tree_settings_form($form, $voc);
 
-   taxonomy_manager_search_form($form, $voc);
 
-   // A term clicked in tree-view and submitted through load-tid helper,
 
-   // generate term data form.
 
-   // Moved this code snippet to the bottom here to prevent needless
 
-   // expanding of the tree for this tid.
 
-   if (isset($form_state['values']['load-tid'])) {
 
-     $tid = $form_state['values']['load-tid'];
 
-   }
 
-   // Something on the term data has been submitted, e.g. the 'add another item'
 
-   // button
 
-   elseif (isset($form_state['term']) && is_object($form_state['term'])) {
 
-     $tid = $form_state['term']->tid;
 
-   }
 
-   taxonomy_manager_term_data_form($form, $form_state, $tid, $voc->vid);
 
-   return $form;
 
- }
 
- function taxonomy_manager_double_tree_form($form, &$form_state, $voc1, $voc2, $tid = 0, $filter = NULL) {
 
-   // Check for confirmation forms.
 
-   if (isset($form_state['confirm_delete'])) {
 
-     return taxonomy_manager_term_confirm_delete($form, $form_state, $voc1->vid, $voc2->vid);
 
-   }
 
-   $module_path = drupal_get_path('module', 'taxonomy_manager') . '/';
 
-   $form = taxonomy_manager_form($form, $form_state, $voc1, $tid, $filter);
 
-   $form['disable'] = array(
 
-     '#markup' => l(t('Disable Double Tree'), 'admin/structure/taxonomy_manager/voc/ ' . $voc1->machine_name),
 
-     '#weight' => -100,
 
-   );
 
-   $form['voc2'] = array('#type' => 'value', "#value" => $voc2);
 
-   $form['taxonomy2'] = array(
 
-     '#tree' => TRUE,
 
-   );
 
-   $form['taxonomy2']['manager'] = array(
 
-     '#type' => 'fieldset',
 
-     '#title' => check_plain($voc2->name) . _taxonomy_manager_select_all_helpers_markup(),
 
-     '#weight' => 10,
 
-     '#tree' => TRUE,
 
-   );
 
-   $form['taxonomy2']['manager']['top'] = array(
 
-     '#value' => '',
 
-     '#prefix' => '<div class="taxonomy-manager-tree-top">',
 
-     '#suffix' => '</div>',
 
-   );
 
-   if (module_exists('i18n_taxonomy')) {
 
-     if (i18n_taxonomy_vocabulary_mode($voc2->vid, I18N_MODE_TRANSLATE)) {
 
-       if ($tid) {
 
-         $language = _taxonomy_manager_term_get_lang($tid);
 
-       }
 
-       else {
 
-         $language = language_default()->language;
 
-       }
 
-       $form['taxonomy2']['manager']['top']['language'] = array(
 
-         '#type' => 'select',
 
-         '#title' => t('Language'),
 
-         '#default_value' => $language,
 
-         '#options' => array('' => t('All'), 'no language' => t('no language')) + locale_language_list('name'),
 
-         '#attributes' => array('class' => array('language-selector')),
 
-       );
 
-     }
 
-   }
 
-   $form['taxonomy2']['manager']['top']['size'] = array('#markup' => '<div class="taxonomy-manager-tree-size">' . theme("image", array('path' => $module_path . "images/grippie.png", 'alt' => t("Resize tree"), 'title' => t("Resize tree"), 'attributes' => array('class' => "div-grippie"))) . '</div>');
 
-   if (isset($form_state['values']['double_tree_values']['right_tree_expand_terms']) && count($form_state['values']['double_tree_values']['right_tree_expand_terms'])) {
 
-     $tids_to_expand = $form_state['values']['double_tree_values']['right_tree_expand_terms'];
 
-   }
 
-   else {
 
-     $tids_to_expand = $tid;
 
-   }
 
-   $form['taxonomy2']['manager']['tree'] = array(
 
-     '#type' => 'taxonomy_manager_tree',
 
-     '#vid' => $voc2->vid,
 
-     '#pager' => TRUE,
 
-     '#search_string' => ($tid) ? NULL : $filter,
 
-     '#language' => isset($language) ? $language : '',
 
-     '#terms_to_expand' => $tids_to_expand, //@todo check if term coming through ajax
 
-     '#terms_to_highlight' => $tids_to_expand,
 
-   );
 
-   $form['double-tree']['operations'] = array(
 
-     '#tree' => TRUE,
 
-   );
 
-   $form['double-tree']['operations']['move_right'] = array(
 
-     '#type' => 'image_button',
 
-     '#attributes' => array('title' => t('Move right')),
 
-     '#src' => $module_path . "images/go-next.png",
 
-     '#submit' => array('taxonomy_manager_double_tree_move_submit'),
 
-     '#validate' => array('taxonomy_manager_double_tree_move_validate'),
 
-     '#ajax' => array(
 
-       'callback' => 'taxonomy_manager_double_tree_ajax_callback',
 
-       'method' => 'replaceWith',
 
-       'event' => 'click',
 
-       'wrapper' => 'taxonomy-manager',
 
-       'progress' => array('type' => ''),
 
-     ),
 
-     '#weight' => 20,
 
-     '#prefix' => '<div class="taxonomy-manager-double-tree-operations-buttons">',
 
-     '#suffix' => '</div>',
 
-   );
 
-   $form['double-tree']['operations']['move_left'] = array(
 
-     '#type' => 'image_button',
 
-     '#attributes' => array('title' => t('Move left')),
 
-     '#src' => $module_path . "images/go-previous.png",
 
-     '#submit' => array('taxonomy_manager_double_tree_move_submit'),
 
-     '#validate' => array('taxonomy_manager_double_tree_move_validate'),
 
-     '#ajax' => array(
 
-       'callback' => 'taxonomy_manager_double_tree_ajax_callback',
 
-       'method' => 'replaceWith',
 
-       'event' => 'click',
 
-       'wrapper' => 'taxonomy-manager',
 
-       'progress' => array('type' => ''),
 
-     ),
 
-     '#weight' => 20,
 
-     '#prefix' => '<div class="taxonomy-manager-double-tree-operations-buttons">',
 
-     '#suffix' => '</div>',
 
-   );
 
-   //switch operations
 
-   if ($voc1->vid != $voc2->vid) {
 
-     $form['double-tree']['operations']['move_right']['#attributes']['title'] = t('Switch selected terms and its children to the right voc');
 
-     $form['double-tree']['operations']['move_right']['#submit'] = array('taxonomy_manager_double_tree_switch_submit');
 
-     $form['double-tree']['operations']['move_right']['#validate'] = array('taxonomy_manager_double_tree_switch_validate');
 
-     $form['double-tree']['operations']['move_left']['#attributes']['title'] = t('Switch selected terms and its children to the left voc');
 
-     $form['double-tree']['operations']['move_left']['#submit'] = array('taxonomy_manager_double_tree_switch_submit');
 
-     $form['double-tree']['operations']['move_left']['#validate'] = array('taxonomy_manager_double_tree_switch_validate');
 
-     // Copy buttons
 
-     $form['double-tree']['operations']['copy_right'] = $form['double-tree']['operations']['move_right'];
 
-     $form['double-tree']['operations']['copy_left'] = $form['double-tree']['operations']['move_left'];
 
-     $form['double-tree']['operations']['copy_right']['#attributes']['title'] = t('Copy selected term names to the right voc.');
 
-     $form['double-tree']['operations']['copy_right']['#src'] = $module_path . "images/copy-right.png";
 
-     $form['double-tree']['operations']['copy_right']['#submit'] = array('taxonomy_manager_double_tree_copy_submit');
 
-     $form['double-tree']['operations']['copy_right']['#validate'] = array('taxonomy_manager_double_tree_copy_validate');
 
-     $form['double-tree']['operations']['copy_right']['#weight'] = 22;
 
-     $form['double-tree']['operations']['copy_left']['#attributes']['title'] = t('Copy selected term names to the left voc.');
 
-     $form['double-tree']['operations']['copy_left']['#src'] = $module_path . "images/copy-left.png";
 
-     $form['double-tree']['operations']['copy_left']['#submit'] = array('taxonomy_manager_double_tree_copy_submit');
 
-     $form['double-tree']['operations']['copy_left']['#validate'] = array('taxonomy_manager_double_tree_copy_validate');
 
-     $form['double-tree']['operations']['copy_left']['#weight'] = 23;
 
-   }
 
-   elseif (module_exists('i18n_taxonomy') && i18n_taxonomy_vocabulary_mode($voc2->vid, I18N_MODE_TRANSLATE)) {
 
-     $form['double-tree']['operations']['add_translation'] = $form['double-tree']['operations']['move_right'];
 
-     $form['double-tree']['operations']['add_translation']['#attributes']['title'] = t('Add Translation.');
 
-     $form['double-tree']['operations']['add_translation']['#src'] = $module_path . "images/connect.png";
 
-     $form['double-tree']['operations']['add_translation']['#submit'] = array('taxonomy_manager_double_tree_add_translation_submit');
 
-     $form['double-tree']['operations']['add_translation']['#validate'] = array('taxonomy_manager_double_tree_add_translation_validate');
 
-   }
 
-   return $form;
 
- }
 
- /**
 
-  * Adds a voc jumper menu, if ctools is enabled.
 
-  */
 
- function taxonomy_manager_form_voc_jumper(&$form, $form_state) {
 
-   if (module_exists('ctools')) {
 
-     $options = array();
 
-     foreach (taxonomy_vocabulary_get_names() as $voc) {
 
-       $options[url('admin/structure/taxonomy_manager/voc/' . $voc->machine_name)] = $voc->name;
 
-     }
 
-     ctools_include('jump-menu');
 
-     $settings = array(
 
-       'choose' => t('-- Switch vocabulary --'),
 
-     );
 
-     $form = ctools_jump_menu($form, $form_state, $options, $settings);
 
-     // Attach the JS in case we rebuild the form.
 
-     $form['#attached']['js'][] = drupal_get_path('module', 'ctools') . '/js/jump-menu.js';
 
-   }
 
- }
 
- /**
 
-  * form for searching terms
 
-  */
 
- function taxonomy_manager_search_form(&$form, $voc) {
 
-   $form['#attached']['js'][] = array(
 
-     'data' => array('hideForm' => array(array(
 
-       'show_button' => 'edit-search-show',
 
-       'hide_button' => 'edit-search-cancel',
 
-       'div' => 'edit-search'))),
 
-     'type' => 'setting');
 
-   $form['toolbar']['search_show'] = array(
 
-     //'#type' => 'button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'search')),
 
-     '#value' => t('Search'),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
-   $search_description = t("You can search directly for exisiting terms.
 
-       If your input doesn't match an existing term, it will be used for filtering root level terms (useful for non-hierarchical vocabularies).");
 
-   $form['search'] = array(
 
-     '#type' => 'fieldset',
 
-     '#title' => t('Search'),
 
-     '#attributes' => array('style' => 'display:none;', 'id' => 'edit-search'),
 
-     '#description' => $search_description,
 
-     '#collapsed' => TRUE,
 
-     '#tree' => TRUE,
 
-   );
 
-   $form['search']['field'] = array(
 
-     '#type' => 'textfield',
 
-     '#title' => t('Search String'),
 
-     '#autocomplete_path' => 'taxonomy_manager/autocomplete/' . $voc->vid,
 
-     //'#prefix' => '<div id="edit-find-field">',
 
-     //'#suffix' => '</div>',
 
-   );
 
-   $search_options = array(
 
-     //'synonyms' => t('Include synonyms'), // @todo implement synonyms feature
 
-     'subtrees' => t('Search under selected terms'),
 
-   );
 
-   if (module_exists('i18n_taxonomy')) {
 
-     if (i18n_taxonomy_vocabulary_mode($voc->vid, I18N_MODE_TRANSLATE)) {
 
-       $search_options['language'] = t('Search within selected language');
 
-     }
 
-   }
 
-   $form['search']['options'] = array(
 
-     '#type' => 'checkboxes',
 
-     '#title' => t('Search options'),
 
-     '#options' => $search_options,
 
-   );
 
-   $form['search']['button'] = array(
 
-     '#type' => 'submit',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'search')),
 
-     '#value' => t('Search'),
 
-     //'#suffix' => '<div class="clear"></div>',
 
-   );
 
-   $form['search']['cancel'] = array(
 
-     //'#type' => 'button',
 
-     '#value' => t('Cancel'),
 
-     '#theme' => 'no_submit_button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'cancel')),
 
-   );
 
- }
 
- /**
 
-  * confirmation form for deleting selected terms
 
-  */
 
- function taxonomy_manager_confirm_delete(&$form, $voc) {
 
-   $form['#attached']['js'][] = array(
 
-     'data' => array('hideForm' => array(array(
 
-       'show_button' => 'edit-delete-confirm',
 
-       'hide_button' => 'edit-delete-cancel',
 
-       'div' => 'edit-delete'))),
 
-     'type' => 'setting');
 
-   $form['toolbar']['delete_confirm'] = array(
 
-     //'#type' => 'button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons delete')),
 
-     '#value' => t('Delete'),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
-   $form['delete'] = array(
 
-     '#type' => 'fieldset',
 
-     '#attributes' => array('style' => 'display:none;', 'id' => 'edit-delete'),
 
-     '#tree' => TRUE,
 
-     '#title' => t('Confirmation'),
 
-   );
 
-   $question = t('Are you sure you want to delete all selected terms?');
 
-   $info = t('Remember all term specific data will be lost. This action cannot be undone.');
 
-   $form['delete']['text'] = array('#value' => "<b>" . $question . "</b><br/>" . $info);
 
-   $options = array(
 
-     'delete_orphans' => t('Delete children of selected terms, if there are any'),
 
-   );
 
-   $form['delete']['options'] = array(
 
-     '#type' => 'checkboxes',
 
-     '#title' => t('Options'),
 
-     '#options' => $options,
 
-   );
 
-   $form['delete']['delete'] = array(
 
-     '#type' => 'submit',
 
-     '#value' => t('Delete'),
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'delete')),
 
-     '#submit' => array('taxonomy_manager_form_delete_submit'),
 
-     '#validate' => array('taxonomy_manager_form_delete_validate'),
 
-   );
 
-   $form['delete']['cancel'] = array(
 
-     //'#type' => 'button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'cancel')),
 
-     '#value' => t('Cancel'),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
- }
 
- /**
 
-  * form for adding terms
 
-  */
 
- function taxonomy_manager_add_form(&$form, $voc, $hide_form = TRUE) {
 
-   $attributes = array();
 
-   if ($hide_form) {
 
-     $form['#attached']['js'][] = array(
 
-       'data' => array('hideForm' => array(array(
 
-         'show_button' => 'edit-add-show',
 
-         'hide_button' => 'edit-add-cancel',
 
-         'div' => 'edit-add'))),
 
-       'type' => 'setting');
 
-     $attributes = array('style' => 'display:none;', 'id' => 'edit-add');
 
-     $form['toolbar']['add_show'] = array(
 
-       //'#type' => 'button',
 
-       '#attributes' => array('class' => 'taxonomy-manager-buttons add'),
 
-       '#value' => t('Add'),
 
-       '#theme' => 'no_submit_button',
 
-     );
 
-   }
 
-   $description = "";
 
-   $description = t("If you have selected one or more terms in the tree view, the new terms are automatically children of those.");
 
-   $form['add'] = array(
 
-     '#type' => 'fieldset',
 
-     '#tree' => TRUE,
 
-     '#attributes' => $attributes,
 
-     '#title' => t('Add new terms'),
 
-     '#description' => $description,
 
-   );
 
-   $form['add']['mass_add'] = array(
 
-     '#type' => 'textarea',
 
-     '#title' => t('Terms'),
 
-     '#description' => t("One term per line. Child terms can be prefixed with a
 
-         dash '-' (one dash per hierarchy level). Terms that should not become
 
-         child terms and start with a dash need to be wrapped in double quotes.
 
-         <br />Example:<br />
 
-         animals<br />
 
-         -canine<br />
 
-         --dog<br />
 
-         --wolf<br />
 
-         -feline<br />
 
-         --cat"),
 
-     '#rows' => 10,
 
-   );
 
-   $form['add']['add'] = array(
 
-     '#type' => 'submit',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'add')),
 
-     '#value' => t('Add'),
 
-     '#submit' => array('taxonomy_manager_form_add_submit'),
 
-   );
 
-   $form['add']['cancel'] = array(
 
-     //'#type' => 'button',
 
-     '#value' => t('Cancel'),
 
-     '#theme' => 'no_submit_button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'cancel')),
 
-   );
 
- }
 
- /**
 
-  * Form for the Term merge module
 
-  */
 
- function taxonomy_manager_term_merge_form(&$form, $voc) {
 
-   if (!module_exists('term_merge') || !user_access('merge terms')) {
 
-     return;
 
-   }
 
-   $form['#attached']['js'][] = array(
 
-     'data' => array('hideForm' => array(array(
 
-       'show_button' => 'edit-term-merge-show',
 
-       'hide_button' => 'edit-term-merge-cancel',
 
-       'div' => 'edit-term-merge'))),
 
-     'type' => 'setting');
 
-   $description = t("This operation is based on the Term merge module. Selected terms get merged into the given one. Optionally the selected terms can be retained, otherwise they will be deleted.");
 
-   $form['toolbar']['term_merge_show'] = array(
 
-     //'#type' => 'button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons merge')),
 
-     '#value' => t('Term merge'),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
-   $form['term_merge'] = array(
 
-     '#type' => 'fieldset',
 
-     '#tree' => TRUE,
 
-     '#attributes' => array('style' => 'display:none;', 'id' => 'edit-term-merge'),
 
-     '#title' => t('Merging of terms'),
 
-     '#description' => $description,
 
-   );
 
-   $form['term_merge']['dest_term'] = array(
 
-     '#type' => 'textfield',
 
-     '#title' => t('Destination term'),
 
-     '#description' => t("Enter a unique term name or a term id with 'term-id:[tid]'"),
 
-     '#required' => FALSE,
 
-     '#autocomplete_path' => 'taxonomy_manager/autocomplete/' . $voc->vid,
 
-   );
 
-   $form['term_merge']['options'] = array(
 
-     '#type' => 'checkboxes',
 
-     '#title' => t('Options'),
 
-     '#options' => array(
 
-       'keep_merged' => t('Keep merged terms'),
 
-     ),
 
-   );
 
-   $form['term_merge']['submit'] = array(
 
-     '#type' => 'submit',
 
-     '#value' => t('Merge'),
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'merge')),
 
-     '#validate' => array('taxonomy_manager_form_term_merge_validate'),
 
-     '#submit' => array('taxonomy_manager_form_term_merge_submit'),
 
-   );
 
-   $form['term_merge']['cancel'] = array(
 
-     //'#type' => 'button',
 
-     '#value' => t('Cancel'),
 
-     '#attributes' => array('class' =>  array('taxonomy-manager-buttons', 'cancel')),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
- }
 
- /**
 
-  * form for moving terms in hierarchies
 
-  */
 
- function taxonomy_manager_move_form(&$form, $voc) {
 
-   $form['#attached']['js'][] = array(
 
-     'data' => array('hideForm' => array(array(
 
-       'show_button' => 'edit-move-show',
 
-       'hide_button' => 'edit-move-cancel',
 
-       'div' => 'edit-move'))),
 
-     'type' => 'setting');
 
-   $description = t("You can change the parent of one or more selected terms.
 
-       If you leave the autocomplete field empty, the term will be a root term.");
 
-   $form['toolbar']['move_show'] = array(
 
-     //'#type' => 'button',
 
-     '#value' => t('Move'),
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons move')),
 
-      '#theme' => 'no_submit_button',
 
-   );
 
-   $form['move'] = array(
 
-     '#type' => 'fieldset',
 
-     '#tree' => TRUE,
 
-     '#attributes' => array('style' => 'display:none;', 'id' => 'edit-move'),
 
-     '#title' => t('Moving of terms'),
 
-     '#description' => $description,
 
-   );
 
-   $form['move']['parents'] = array(
 
-     '#type' => 'textfield',
 
-     '#title' => t('Parent term(s)'),
 
-     '#description' => t("Enter a unique term name or a term id with 'term-id:[tid]'. Separate multiple parent terms with commas."),
 
-     '#required' => FALSE,
 
-     '#autocomplete_path' => 'taxonomy_manager/autocomplete/' . $voc->vid,
 
-   );
 
-   $options = array();
 
-   $options['keep_old_parents'] = t('Keep old parents and add new ones (multi-parent). Otherwise old parents get replaced.');
 
-   $form['move']['options'] = array(
 
-     '#type' => 'checkboxes',
 
-     '#title' => t('Options'),
 
-     '#options' => $options,
 
-   );
 
-   $form['move']['submit'] = array(
 
-     '#type' => 'submit',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'move')),
 
-     '#value' => t('Move'),
 
-     '#validate' => array('taxonomy_manager_form_move_validate'),
 
-     '#submit' => array('taxonomy_manager_form_move_submit'),
 
-   );
 
-   $form['move']['cancel'] = array(
 
-     //'#type' => 'button',
 
-     '#value' => t('Cancel'),
 
-     '#attributes' => array('class' =>  array('taxonomy-manager-buttons', 'cancel')),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
- }
 
- /**
 
-  * form for exporting terms
 
-  */
 
- function taxonomy_manager_export_form(&$form, &$form_state, $voc) {
 
-   $form['#attached']['js'][] = array(
 
-     'data' => array('hideForm' => array(array(
 
-       'show_button' => 'edit-export-show',
 
-       'hide_button' => 'edit-export-cancel',
 
-       'div' => 'edit-export'))),
 
-     'type' => 'setting',
 
-   );
 
-   $form['toolbar']['export_show'] = array(
 
-     //'#type' => 'button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons export')),
 
-     '#value' => t('Export'),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
-   $form['export'] = array(
 
-     '#type' => 'fieldset',
 
-     '#tree' => TRUE,
 
-     '#attributes' => array('style' => 'display:none;', 'id' => 'edit-export'),
 
-     '#title' => t('Export'),
 
-   );
 
-   $scope_options = array(
 
-     'whole_voc' => t('Whole Vocabulary'),
 
-     'children' => t('Child terms of a selected term'),
 
-     'root_terms' => t('Root level terms only'),
 
-   );
 
-   $form['export']['scope'] = array(
 
-     '#type' => 'radios',
 
-     '#title' => t('Terms to export'),
 
-     '#options' => $scope_options,
 
-     '#default_value' => 'whole_voc',
 
-     '#prefix' => '<div id="taxonomy_manager_export_options">',
 
-     '#suffix' => '</div>',
 
-   );
 
-   $form['export']['depth'] = array(
 
-     '#type' => 'textfield',
 
-     '#title' => t('Depth of tree'),
 
-     '#description' => t('The number of levels of the tree to export. Leave empty to return all levels.'),
 
-     '#size' => 10,
 
-   );
 
-   $format_options = array(
 
-     'term_tree' => t('Term names with hierarchy'),
 
-     'csv' => t('CSV'),
 
-   );
 
-   $help_items[] = t('Term names with hierarchy: Only term names are exported. Child terms are prefixed with dashes. Uses the same format as for mass-import (Add button).');
 
-   $help_items[] = t('CSV: The comma-separated-values export has following columns: voc id | term id | term name | description | parent id 1 | ... | parent id n');
 
-   $form['export']['format'] = array(
 
-     '#type' => 'radios',
 
-     '#title' => t('Format'),
 
-     '#options' => $format_options,
 
-     '#default_value' => 'term_tree',
 
-     '#description' => theme('item_list', array('items' => $help_items, 'title' => t('Description of formats'))),
 
-   );
 
-   // CSV options
 
-   $form['export']['csv']['delimiter'] = array(
 
-     '#type' => 'textfield',
 
-     '#title' => t('Delimiter for CSV'),
 
-     '#required' => FALSE,
 
-     '#default_value' => ";",
 
-     '#size' => 10,
 
-     '#states' => array(
 
-       'visible' => array(
 
-         ':input[name="export[format]"]' => array('value' => 'csv'),
 
-       ),
 
-     ),
 
-   );
 
-   $wrapper_id = 'taxonomy-manager-export-textarea';
 
-   if (isset($form_state['values']['export']['data'])) {
 
-     $form['export']['data'] = array(
 
-       '#type' => 'textarea',
 
-       '#title' => t('Exported data'),
 
-       '#value' =>  $form_state['values']['export']['data'],
 
-       '#rows' => 8,
 
-       '#prefix' => '<div id="' . $wrapper_id . '">',
 
-       '#suffix' => '</div>',
 
-     );
 
-   }
 
-   $form['export']['submit'] = array(
 
-     '#prefix' => '<div id="' . $wrapper_id . '"></div>',
 
-     '#type' => 'submit',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'export')),
 
-     '#value' => t('Export now'),
 
-     '#submit' => array('taxonomy_manager_export_form_submit'),
 
-     '#ajax' => array(
 
-       'callback' => 'taxonomy_manager_export_ajax_callback',
 
-       'method' => 'replaceWith',
 
-       'event' => 'click',
 
-       'wrapper' => $wrapper_id,
 
-       'progress' => array('type' => ''),
 
-     ),
 
-   );
 
-   $form['export']['cancel'] = array(
 
-     //'#type' => 'button',
 
-     '#value' => t('Cancel'),
 
-     '#attributes' => array('class' =>  array('taxonomy-manager-buttons', 'cancel')),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
- }
 
- function taxonomy_manager_double_tree_settings_form(&$form, $voc) {
 
-   $form['#attached']['js'][] = array(
 
-     'data' => array('hideForm' => array(array(
 
-       'show_button' => 'edit-double-tree-show',
 
-       'hide_button' => 'edit-double-tree-settings-cancel',
 
-       'div' => 'edit-double-tree-settings'))),
 
-     'type' => 'setting');
 
-   $form['toolbar']['double_tree_show'] = array(
 
-     //'#type' => 'button',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons double-tree')),
 
-     '#value' => t('Double Tree'),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
-   $form['double-tree-settings'] = array(
 
-     '#type' => 'fieldset',
 
-     '#tree' => TRUE,
 
-     '#attributes' => array('style' => 'display:none;', 'id' => 'edit-double-tree-settings'),
 
-     '#title' => t('Double Tree Settings'),
 
-     '#description' => t('Specify settings for second tree. Choose the same vocabulary if you want to move terms in the hierarchy or if you want to add new translations within a multilingual vocabulary. Choose a different vocabulary if you want to switch terms among these vocabularies.'),
 
-   );
 
-   $options = array();
 
-   $vocs = taxonomy_get_vocabularies();
 
-   foreach ($vocs as $v) {
 
-     $options[$v->machine_name] = $v->name;
 
-   }
 
-   $form['double-tree-settings']['voc2_machine_name'] = array(
 
-     '#type' => 'select',
 
-     '#title' => t('Vocabulary for second tree'),
 
-     '#options' => $options,
 
-     '#default_value' => $voc->vid,
 
-   );
 
-   $form['double-tree-settings']['submit'] = array(
 
-     '#type' => 'submit',
 
-     '#attributes' => array('class' => array('taxonomy-manager-buttons', 'double-tree')),
 
-     '#value' => t('Enable Double Tree'),
 
-     '#submit' => array('taxonomy_manager_form_double_tree_submit'),
 
-   );
 
-   if (arg(3) == "double-tree") {
 
-     $form['double-tree-settings']['disable'] = array(
 
-       '#type' => 'submit',
 
-       '#attributes' => array('class' => array('taxonomy-manager-buttons', 'double-tree-disable')),
 
-       '#value' => t('Disable Double Tree'),
 
-       '#submit' => array('taxonomy_manager_form_double_tree_disable_submit'),
 
-     );
 
-   }
 
-   $form['double-tree-settings']['cancel'] = array(
 
-     //'#type' => 'button',
 
-     '#value' => t('Cancel'),
 
-     '#attributes' => array('class' =>  array('taxonomy-manager-buttons', 'cancel')),
 
-     '#theme' => 'no_submit_button',
 
-   );
 
- }
 
- function taxonomy_manager_term_data_form(&$form, &$form_state, $tid = 0, $vid1, $vid2 = 0) {
 
-   $module_path = drupal_get_path('module', 'taxonomy_manager') . '/';
 
-   if ($tid) {
 
-     $term = taxonomy_term_load($tid);
 
-     //prevent that title of the fieldset is too long
 
-     $title = check_plain($term->name);
 
-     if (drupal_strlen($title) >= 33) {
 
-       $title = drupal_substr($title, 0, 33) . "...";
 
-     }
 
-     $form['term_data'] = array(
 
-       '#type' => 'fieldset',
 
-       '#title' => $title . " (" . $term->tid . ")",
 
-     );
 
-     unset($form_state['term']);
 
-     $form['term_data'] = taxonomy_form_term($form['term_data'], $form_state, $term);
 
-     $form['term_data']['description']['#rows'] = 2;
 
-     // Disable wysiwyg editor as long as #356480 (lazy-loading) is not resolved.
 
-     $form['term_data']['description']['#wysiwyg'] = FALSE;
 
-     $form['term_data']['weight'] = $form['term_data']['relations']['weight'];
 
-     unset($form['term_data']['relations']);
 
-     unset($form['term_data']['actions']);
 
-     $form['term_data']['parents'] = _taxonomy_manager_form_term_data_parents($term);
 
-     $form['term_data']['parents']['#weight'] = '52';
 
-     $form['term_data']['close'] = array(
 
-       '#markup' => '<div id="term-data-close"><span title="' . t('Close') . '">    </span></div>',
 
-       '#weight' => -100,
 
-     );
 
-     $link_img = theme("image", array('path' => $module_path . "images/link-small.png", 'alt' => t("link to term page")));
 
-     $form['term_data']['link'] = array(
 
-       '#markup' => '<br />' . l($link_img . ' ' . t('Go to the term page'), 'taxonomy/term/' . $term->tid, array('attributes' => array('rel' => 'tag', 'title' => strip_tags($term->description), 'target' => '_blank'), 'html' => TRUE)),
 
-       '#weight' => 56);
 
-     $form['term_data']['vid'] = array('#type' => 'hidden', '#value' => $term->vid);
 
-     $form['term_data']['tid'] = array('#type' => 'hidden', '#value' => $tid);
 
-     $form['term_data']['save'] = array(
 
-       '#type' => 'submit',
 
-       '#value' => t('Save changes'),
 
-       '#submit' => array('taxonomy_manager_term_data_form_submit'),
 
-       '#validate' => array('taxonomy_form_term_validate'),
 
-       '#attributes' => array('class' => array('taxonomy-manager-buttons', 'save')),
 
-       '#ajax' => array(
 
-         'callback' => 'taxonomy_manager_term_data_form_ajax_callback',
 
-         'method' => 'replaceWith',
 
-         'event' => 'click',
 
-         'wrapper' => 'taxonomy-term-data-replace',
 
-         'progress' => array('type' => ''),
 
-       ),
 
-       '#weight' => 20,
 
-     );
 
-     // i18n integration
 
-     if (module_exists('i18n_taxonomy')) {
 
-       if (i18n_taxonomy_vocabulary_mode($term->vid, I18N_MODE_TRANSLATE)) {
 
-         $form['term_data']['translations'] = _taxonomy_manager_form_term_data_translations($term);
 
-         $form['term_data']['translations']['#weight'] = '50';
 
-         $form['term_data']['language'] = array(
 
-           '#type' => 'select',
 
-           '#title' => t('Language'),
 
-           '#description' => t('This term belongs to a multilingual vocabulary. You can set a language for it.'),
 
-           '#default_value' => $term->language,
 
-           '#options' => locale_language_list('name'),
 
-         );
 
-       }
 
-     }
 
-     // UUID integration.
 
-     if (module_exists('uuid')) {
 
-       $uuids = entity_get_uuid_by_id('taxonomy_term', array($tid));
 
-       if (count($uuids)) {
 
-         $form['term_data']['uuid'] = array(
 
-           '#markup' => t('UUID: @uuid', array('@uuid' => reset($uuids))),
 
-           '#weight' => -10,
 
-         );
 
-       }
 
-     }
 
-     _taxonomy_manager_term_data_form_filter_file_fields($form);
 
-   }
 
-   $form['term_data']['#prefix'] = '<div id="taxonomy-term-data-replace">';
 
-   $form['term_data']['#suffix'] = '</div>';
 
- }
 
- /**
 
-  * Removes file fields from the term data form, as they do not work on the
 
-  * nested form structure and link to the original term edit form instead.
 
-  *
 
-  * See #1195940, hack necessary until #1329856/#1468686 get fixed.
 
-  */
 
- function _taxonomy_manager_term_data_form_filter_file_fields(&$form) {
 
-   foreach (element_children($form['term_data']) as $key) {
 
-     $field = &$form['term_data'][$key];
 
-     if (isset($field['#type']) && $field['#type'] == 'container' && isset($field['#language']) && isset($field[$field['#language']])) {
 
-       foreach (element_children($field[$field['#language']]) as $delta) {
 
-         $element = &$field[$field['#language']][$delta];
 
-         if (isset($element['#type']) && $element['#type'] == "managed_file") {
 
-           $form['term_data']['file_field_info'] = array(
 
-             '#markup' => '<div class="term-data-form-file-field-info">' . t('Edit file fields <a href="!url" target="_blank">here</a>.', array('!url' => url('taxonomy/term/' . $form['term_data']['#term']['tid'] . '/edit'))) . '</div>',
 
-           );
 
-           unset($form['term_data'][$key]);
 
-           break;
 
-         }
 
-       }
 
-     }
 
-   }
 
- }
 
- /**
 
-  * helper function for generating tables with values and delete op and field for adding
 
-  *
 
-  * @param $term term object which is going to be displayed
 
-  * @return an form array
 
-  */
 
- function _taxonomy_manager_form_term_data_parents($term) {
 
-   $module_path = drupal_get_path('module', 'taxonomy_manager') . '/';
 
-   $form['#tree'] = TRUE;
 
-   $form['#theme'] = 'taxonomy_manager_term_data_extra';
 
-   $form['headers'][] = array('#markup' => t('Parents'));
 
-   $form['headers'][] = array('#markup' => '');
 
-   $form['data'] = array();
 
-   foreach (taxonomy_get_parents($term->tid) as $tid => $parent) {
 
-     $extra_info = taxonomy_manager_tree_term_extra_info($parent);
 
-     $form['data'][$tid][] = array(
 
-       '#markup' => l($parent->name, 'admin/structure/taxonomy_manager/termdata/' . $parent->tid, array('attributes' => array('title' => $extra_info, 'class' => 'taxonomy-term-data-name-link'))),
 
-       '#row-class' => 'taxonomy-term-data-name',
 
-       '#row-id' => 'term-' . $tid,
 
-       '#tree' => TRUE,
 
-     );
 
-     $form['data'][$tid][0]['tid'] = array(
 
-       '#type' => 'hidden',
 
-       '#value' => $tid,
 
-     );
 
-     $form['data'][$tid]['remove'] = array(
 
-       '#type' => 'image_button',
 
-       '#attributes' => array('title' => t('Remove')),
 
-       '#submit' => array('taxonomy_manager_term_data_form_submit_parents_remove'),
 
-       '#validate' => array('taxonomy_manager_term_data_form_validate_parents_remove'),
 
-       '#src' => $module_path . "images/list-remove.png",
 
-       '#row-class' => 'taxonomy-term-data-operations',
 
-     );
 
-     $form['data'][$tid]['remove']['#ajax'] = array(
 
-       'callback' => 'taxonomy_manager_term_data_form_ajax_callback',
 
-       'progress' => array('type' => ''),
 
-       'method' => 'replaceWith',
 
-       'event' => 'click',
 
-       'wrapper' => 'taxonomy-term-data-replace',
 
-     );
 
-   }
 
-   $form['op'] = array();
 
-   $form['op']['add'] = array(
 
-     '#type' => 'textfield',
 
-     '#prefix' => '<div class="term-data-autocomplete">',
 
-     '#autocomplete_path' => 'taxonomy_manager/autocomplete/' . $term->vid,
 
-     '#suffix' => '</div>',
 
-     '#size' => 35,
 
-   );
 
-   $form['op']['add_button'] = array(
 
-     '#type' => 'image_button',
 
-     '#attributes' => array('title' => t('Add')),
 
-     '#submit' => array('taxonomy_manager_term_data_form_submit_parents_add'),
 
-     '#validate' => array('taxonomy_manager_term_data_form_validate_parents_add'),
 
-     '#src' => $module_path . "images/list-add.png",
 
-     '#row-class' => 'term-data-autocomplete-add',
 
-     '#ajax' => array(
 
-       'callback' => 'taxonomy_manager_term_data_form_ajax_callback',
 
-       'progress' => array('type' => ''),
 
-       'method' => 'replaceWith',
 
-       'event' => 'click',
 
-       'wrapper' => 'taxonomy-term-data-replace',
 
-     ),
 
-   );
 
-   return $form;
 
- }
 
- /**
 
-  * Helper function for generating a table listing the translations
 
-  */
 
- function _taxonomy_manager_form_term_data_translations($term) {
 
-   $module_path = drupal_get_path('module', 'taxonomy_manager') . '/';
 
-   $languages = locale_language_list('name');
 
-   $form['#tree'] = TRUE;
 
-   $form['#theme'] = 'taxonomy_manager_term_data_extra';
 
-   $form['headers'][] = array('#markup' => t('Translations'));
 
-   $form['headers'][] = array('#markup' => t('Language'));
 
-   $form['headers'][] = array('#markup' => '');
 
-   if (!empty($term->i18n_tsid)) {
 
-     $translation_set = i18n_taxonomy_translation_set_load($term->i18n_tsid);
 
-     $translations = $translation_set->get_translations();
 
-     // If the number of translations equals 1, there's only a source translation.
 
-     if (count($translations) > 1) {
 
-       foreach ($translations as $langcode => $translation) {
 
-         if ($translation->tid !== $term->tid) {
 
-           $form['data'][$translation->tid][] = array(
 
-             '#markup' => l($translation->name, 'admin/structure/taxonomy_manager/termdata/' . $translation->tid, array('attributes' => array('class' => 'taxonomy-term-data-name-link'))),
 
-             '#row-class' => 'taxonomy-term-data-name',
 
-             '#row-id' => 'term-' . $translation->tid,
 
-             '#tree' => TRUE,
 
-           );
 
-           $form['data'][$translation->tid][] = array(
 
-             '#markup' => check_plain($languages[$translation->language]),
 
-             '#row-class' => 'taxonomy-term-data-language',
 
-             '#row-id' => 'term-' . $translation->language,
 
-             '#tree' => TRUE,
 
-           );
 
-           $form['data'][$translation->tid][0]['tid'] = array(
 
-             '#type' => 'hidden',
 
-             '#value' => $translation->tid,
 
-           );
 
-           $form['data'][$translation->tid]['remove'] = array(
 
-             '#type' => 'image_button',
 
-             '#attributes' => array('title' => t('Remove')),
 
-             '#submit' => array('taxonomy_manager_term_data_form_submit_translation_remove'),
 
-             '#validate' => array('taxonomy_manager_term_data_form_validate_translation_remove'),
 
-             '#src' => $module_path . "images/list-remove.png",
 
-             '#row-class' => 'taxonomy-term-data-operations',
 
-           );
 
-           $form['data'][$translation->tid]['remove']['#ajax'] = array(
 
-             'callback' => 'taxonomy_manager_term_data_form_ajax_callback',
 
-             'progress' => array('type' => ''),
 
-             'method' => 'replaceWith',
 
-             'event' => 'click',
 
-             'wrapper' => 'taxonomy-term-data-replace',
 
-           );
 
-         }
 
-       }
 
-     }
 
-   }
 
-   $form['op'] = array();
 
-   $form['op']['add'] = array(
 
-     '#type' => 'textfield',
 
-     '#prefix' => '<div class="term-data-autocomplete">',
 
-     '#autocomplete_path' => 'taxonomy_manager/autocomplete/' . $term->vid,
 
-     '#suffix' => '</div>',
 
-     '#size' => 35,
 
-   );
 
-   // Translations have a different language than the original term.
 
-   unset($languages[$term->language]);
 
-   $form['op']['language'] = array(
 
-     '#type' => 'select',
 
-     '#options' => $languages,
 
-   );
 
-   $form['op']['add_button'] = array(
 
-     '#type' => 'image_button',
 
-     '#attributes' => array('title' => t('Add')),
 
-     '#submit' => array('taxonomy_manager_term_data_form_submit_translation_add'),
 
-     '#validate' => array('taxonomy_manager_term_data_form_validate_translation_add'),
 
-     '#src' => $module_path . "images/list-add.png",
 
-     '#row-class' => 'term-data-autocomplete-add',
 
-     '#ajax' => array(
 
-       'callback' => 'taxonomy_manager_term_data_form_ajax_callback',
 
-       'progress' => array('type' => ''),
 
-       'method' => 'replaceWith',
 
-       'event' => 'click',
 
-       'wrapper' => 'taxonomy-term-data-replace',
 
-     ),
 
-   );
 
-   return $form;
 
- }
 
- /**
 
-  * Returns html markup for (un)select all checkboxes buttons.
 
-  */
 
- function _taxonomy_manager_select_all_helpers_markup() {
 
-   return '<span class="taxonomy-manager-select-helpers">' .
 
-             '<span class="select-all-children" title="' . t("Select all") . '">    </span>' .
 
-            '<span class="deselect-all-children" title="' . t("Remove selection") . '">    </span>' .
 
-          '</span>';
 
- }
 
- /**
 
-  * submit handler for loading term data form
 
-  */
 
- function taxonomy_manager_load_tid_submit($form, &$form_state) {
 
-   // Unset input, so that the term data form has fresh values.
 
-   unset($form_state['input']);
 
-   if ($form_state['values']['load-tid-refresh-tree']) {
 
-     form_set_value(array('#parents' => array('tree-update')), array('update' => TRUE), $form_state);
 
-   }
 
-   $form_state['rebuild'] = TRUE;
 
- }
 
- /**
 
-  * validates the form (only search button)
 
-  **/
 
- function taxonomy_manager_form_validate($form, &$form_state) {
 
-   if ($form_state['clicked_button']['#value'] == t('Search') && empty($form_state['values']['search']['field'])) {
 
-     form_set_error('search', t('Search field is empty'));
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
- }
 
- /**
 
-  * submits the taxonomy manager form (only search button)
 
-  **/
 
- function taxonomy_manager_form_submit($form, &$form_state) {
 
-   if ($form_state['values']['delete'] === TRUE) {
 
-     return taxonomy_manager_term_confirm_delete_submit($form, $form_state);
 
-   }
 
-   $voc = $form_state['values']['voc'];
 
-   if (isset($form_state['values']['voc2'])) {
 
-     $voc2 = $form_state['values']['voc2'];
 
-     $url_prefix = 'admin/structure/taxonomy_manager/double-tree/' . $voc->machine_name . '/' . $voc2->machine_name;
 
-   }
 
-   else {
 
-     $url_prefix = 'admin/structure/taxonomy_manager/voc/' . $voc->machine_name;
 
-   }
 
-   $search_string = $form_state['values']['search']['field'];
 
-   $terms = array();
 
-   $include_synonyms = FALSE;
 
-   $selected_tids = array();
 
-   $language = "";
 
-   // @todo
 
-   /*if ($form_state['values']['search']['options']['synonyms']) {
 
-     $include_synonyms = TRUE;
 
-   }*/
 
-   if ($form_state['values']['search']['options']['subtrees']) {
 
-     $selected_tids = $form_state['values']['taxonomy']['manager']['tree']['selected_terms'];
 
-   }
 
-   if (isset($form_state['values']['search']['options']['language'])) {
 
-     $language = $form_state['values']['taxonomy']['manager']['top']['language'];
 
-   }
 
-   $terms = taxonomy_manager_autocomplete_search_terms($search_string, $voc->vid, $include_synonyms, $selected_tids, $language);
 
-   if (count($terms) == 1) {
 
-     $tid = $terms[0];
 
-     drupal_set_message(t("Your search string matches exactly one term"));
 
-     drupal_goto($url_prefix . '/' . $tid);
 
-   }
 
-   elseif (count($terms) > 1) {
 
-     $matched_text_list = array();
 
-     foreach ($terms as $matched_tid) {
 
-       $matched_term = taxonomy_term_load($matched_tid);
 
-       $parents = array();
 
-       foreach (taxonomy_get_parents($matched_tid) as $parent) {
 
-         $parents[] = check_plain($parent->name);
 
-       }
 
-       $parent_text = count($parents) ? implode(' | ', $parents) . " › " : "";
 
-       $matched_text_list[] = $parent_text . l($matched_term->name, $url_prefix . '/' . $matched_term->tid, array('attributes' => array('title' => taxonomy_manager_tree_term_extra_info($matched_term)))) . " (" . $matched_term->tid . (!empty($matched_term->language) ? '-' . check_plain($matched_term->language) : '') . ")";
 
-     }
 
-     form_set_value($form, array('searched_terms' => $terms), $form_state);
 
-     drupal_set_message(t("Your search string matches !count terms:", array('!count' => count($terms))) . theme('item_list', array('items' => $matched_text_list)));
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
-   else {
 
-     drupal_set_message(t("No match found. Filtering root level terms starting with @search_string.", array('@search_string' => $search_string)));
 
-     drupal_set_message(l(t("Show unfiltered tree"), $url_prefix));
 
-     drupal_goto($url_prefix . '/0/' . $search_string);
 
-   }
 
- }
 
- /**
 
-  * validates taxonomy manager double tree
 
-  **/
 
- function taxonomy_manager_double_tree_form_validate($form, &$form_state) {
 
-   taxonomy_manager_form_validate($form, $form_state);
 
- }
 
- /**
 
-  * submits the taxonomy manager double tree
 
- **/
 
- function taxonomy_manager_double_tree_form_submit($form, &$form_state) {
 
-   taxonomy_manager_form_submit($form, $form_state);
 
- }
 
- /**
 
-  * Submit handler for adding terms
 
-  */
 
- function taxonomy_manager_form_add_submit($form, &$form_state) {
 
-   $parents = isset($form_state['values']['taxonomy']['manager']['tree']['selected_terms']) ? $form_state['values']['taxonomy']['manager']['tree']['selected_terms'] : array();
 
-   $lang = isset($form_state['values']['taxonomy']['manager']['top']['language']) ? $form_state['values']['taxonomy']['manager']['top']['language'] : "";
 
-   $term_names_too_long = array();
 
-   $new_terms = taxonomy_manager_mass_add_terms($form_state['values']['add']['mass_add'], $form_state['values']['voc']->vid, $parents, $lang, $term_names_too_long);
 
-   $term_names = array();
 
-   foreach ($new_terms as $term) {
 
-     $term_names[] = $term->name;
 
-   }
 
-   if (module_exists('i18n_taxonomy') && !empty($lang) && i18n_taxonomy_vocabulary_mode($form_state['values']['voc']->vid, I18N_MODE_TRANSLATE)) {
 
-     drupal_set_message(t("Saving terms to language @lang", array('@lang' => locale_language_name($form_state['values']['taxonomy']['manager']['top']['language']))));
 
-   }
 
-   if (count($term_names_too_long)) {
 
-     drupal_set_message(t("Following term names were too long and truncated to 255 characters: %names.", array('%names' => implode(', ', $term_names_too_long))), 'warning');
 
-   }
 
-   drupal_set_message(t("Terms added: %terms", array('%terms' => implode(', ', $term_names))));
 
- }
 
- /**
 
-  * Helper function for mass adding of terms.
 
-  *
 
-  * @param $input
 
-  *   The textual input with terms. Each line contains a single term. Child term
 
-  *   can be prefixed with a dash '-' (one dash for each level). Term names
 
-  *   starting with a dash and should not become a child term need to be wrapped
 
-  *   in quotes.
 
-  * @param $vid
 
-  *   The vocabulary id.
 
-  * @param int $parents
 
-  *   An array of parent term ids for the new inserted terms. Can be 0.
 
-  * @param $lang
 
-  *   The i18n language, if i18n exists.
 
-  * @param $term_names_too_long
 
-  *   Return value that is used to indicate that some term names were too long
 
-  *   and truncated to 255 characters.
 
-  *
 
-  * @return An array of the newly inserted term objects
 
-  */
 
- function taxonomy_manager_mass_add_terms($input, $vid, $parents, $lang = "", &$term_names_too_long = array()) {
 
-   $new_terms = array();
 
-   $terms = explode("\n", str_replace("\r", '', $input));
 
-   $parents = count($parents) ? $parents : 0;
 
-   // Stores the current lineage of newly inserted terms.
 
-   $last_parents = array();
 
-   foreach ($terms as $name) {
 
-     if (empty($name)) {
 
-       continue;
 
-     }
 
-     $matches = array();
 
-     // Child term prefixed with one or more dashes
 
-     if (preg_match('/^(-){1,}/', $name, $matches)) {
 
-       $depth = strlen($matches[0]);
 
-       $name = substr($name, $depth);
 
-       $current_parents = isset($last_parents[$depth-1]) ? $last_parents[$depth-1]->tid : 0;
 
-     }
 
-     // Parent term containing dashes at the beginning and is therefore wrapped
 
-     // in double quotes
 
-     elseif (preg_match('/^\"(-){1,}.*\"/', $name, $matches)) {
 
-       $name = substr($name, 1, -1);
 
-       $depth = 0;
 
-       $current_parents = $parents;
 
-     }
 
-     else {
 
-       $depth = 0;
 
-       $current_parents = $parents;
 
-     }
 
-     // Truncate long string names that will cause database exceptions.
 
-     if (strlen($name) > 255) {
 
-       $term_names_too_long[] = $name;
 
-       $name = substr($name, 0, 255);
 
-     }
 
-     $term = new stdClass;
 
-     $term->name = $name;
 
-     $term->vid = $vid;
 
-     $term->parent = $current_parents;
 
-     if (module_exists('i18n_taxonomy') && !empty($lang) && i18n_taxonomy_vocabulary_mode($vid, I18N_MODE_TRANSLATE)) {
 
-       $term->language = $lang;
 
-     }
 
-     taxonomy_term_save($term);
 
-     $new_terms[] = $term;
 
-     $last_parents[$depth] = $term;
 
-   }
 
-   return $new_terms;
 
- }
 
- /**
 
-  * Validation handler for deleting terms
 
-  */
 
- function taxonomy_manager_form_delete_validate($form, &$form_state) {
 
-   $selected_tids = array();
 
-   $selected_tids = $form_state['values']['taxonomy']['manager']['tree']['selected_terms'];
 
-   if (count($selected_tids) < 1) {
 
-     form_set_error('delete', t("No terms for deleting selected"));
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
- }
 
- /**
 
-  * Submit handler for deleting terms
 
-  */
 
- function taxonomy_manager_form_delete_submit($form, &$form_state) {
 
-   $selected_tids = array();
 
-   $selected_tids = $form_state['values']['taxonomy']['manager']['tree']['selected_terms'];
 
-   if ($form_state['values']['delete'] === TRUE) {
 
-     return taxonomy_manager_term_confirm_delete_submit($form, $form_state);
 
-   }
 
-   // Rebuild the form to confirm term deletion.
 
-   $form_state['rebuild'] = TRUE;
 
-   $form_state['confirm_delete'] = TRUE;
 
- }
 
- /**
 
-  * Form builder for the term delete form.
 
-  *
 
-  */
 
- function taxonomy_manager_term_confirm_delete($form, &$form_state, $vid, $vid2 = NULL) {
 
-   $voc = taxonomy_vocabulary_load($vid);
 
-   if (isset($vid2)) {
 
-     $voc2 = taxonomy_vocabulary_load($vid2);
 
-     $form['voc2'] = array('#type' => 'value', '#value' => $voc2);
 
-     $url = 'admin/structure/taxonomy_manager/double-tree/' . $voc->machine_name . '/' . $voc2->machine_name;
 
-   }
 
-   else {
 
-     $url = 'admin/structure/taxonomy_manager/voc/' . $voc->machine_name;
 
-   }
 
-   $selected = $form_state['values']['taxonomy']['manager']['tree']['selected_terms'];
 
-   $form['selected_terms'] = array('#prefix' => '<ul>', '#suffix' => '</ul>', '#tree' => TRUE);
 
-   foreach ($selected as $tid) {
 
-     $term = taxonomy_term_load($tid);
 
-     $form['selected_terms'][$tid] = array('#type' => 'hidden', '#value' => $tid, '#prefix' => '<li>', '#suffix' => check_plain($term->name) . "</li>\n");
 
-   }
 
-   $form['delete'] = array('#type' => 'value', '#value' => TRUE);
 
-   $form['voc'] = array('#type' => 'value', '#value' => $voc);
 
-   $form['options'] = array('#type' => 'value', '#value' => $form_state['values']['delete']['options']);
 
-   $msg = !empty($form_state['values']['delete']['options']['delete_orphans']) ? t('Deleting a term will delete all its children if there are any.') : '';
 
-   $msg .= t('This action cannot be undone.');
 
-   return confirm_form($form,
 
-       t('Are you sure you want to delete the following terms:'),
 
-       $url,
 
-       $msg,
 
-       t('Delete'),
 
-       t('Cancel'));
 
- }
 
- /**
 
-  * Submit handler to delete a term after confirmation.
 
-  *
 
-  */
 
- function taxonomy_manager_term_confirm_delete_submit($form, &$form_state) {
 
-   $info = taxonomy_manager_delete_terms($form_state['values']['selected_terms'], $form_state['values']['options']);
 
-   $deleted_term_names = array();
 
-   $remaining_child_term_names = array();
 
-   foreach ($info['deleted_terms'] as $term) {
 
-     $deleted_term_names[] = $term->name;
 
-   }
 
-   foreach ($info['remaining_child_terms'] as $term) {
 
-     $remaining_child_term_names[] = $term->name;
 
-   }
 
-   if (isset($form_state['values']['voc2'])) {
 
-     $form_state['redirect'] = 'admin/structure/taxonomy_manager/double-tree/' . $form_state['values']['voc']->machine_name . '/' . $form_state['values']['voc2']->machine_name;
 
-   }
 
-   else {
 
-     $form_state['redirect'] = 'admin/structure/taxonomy_manager/voc/' . $form_state['values']['voc']->machine_name;
 
-   }
 
-   drupal_set_message(t("Deleted terms: %deleted_term_names", array('%deleted_term_names' => check_plain(implode(', ', $deleted_term_names)))));
 
-   if (count($remaining_child_term_names)) {
 
-     drupal_set_message(t("Remaining child terms with different parents: %remaining_child_term_names", array('%remaining_child_term_names' => check_plain(implode(', ', $remaining_child_term_names)))));
 
-   }
 
-   return;
 
- }
 
- /**
 
-  * Validation handler for moving terms
 
-  */
 
- function taxonomy_manager_form_move_validate($form, &$form_state) {
 
-   $selected_tids = array();
 
-   $selected_tids = $form_state['values']['taxonomy']['manager']['tree']['selected_terms'];
 
-   $error_msg = "";
 
-   if (count($selected_tids) < 1) {
 
-     form_set_error('move', t("Please selected terms you want to move in the hierarchy"));
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
-   elseif (_taxonomy_manager_check_duplicates($form_state['values']['voc']->vid, $form_state['values']['move']['parents'], $error_msg)) {
 
-     form_set_error('move', t("Warning: Your input matches with multiple terms, because of duplicated term names. Please enter a unique term name or the term id with 'term-id:[tid]'") . " (" . $error_msg . ").");
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
-   $typed_parents = taxonomy_manager_autocomplete_tags_get_tids($form_state['values']['move']['parents'], $form_state['values']['voc']->vid, FALSE);
 
-   $parents = array();
 
-   foreach ($typed_parents as $parent_info) {
 
-     $parents[(int) $parent_info['tid']] = (int) $parent_info['tid'];
 
-   }
 
-   if (!taxonomy_manager_check_circular_hierarchy($selected_tids, $parents)) {
 
-     form_set_error('move', t('Invalid selection. The resulting hierarchy would contain circles, which is not allowed. A term cannot be a parent of itself.'));
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
-   elseif (!taxonomy_manager_check_language($form_state['values']['voc']->vid, $selected_tids, $typed_parents)) {
 
-     form_set_error('move', t('Terms must be of the same language'));
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
- }
 
- /**
 
-  * checks for circles in the hierarchy, e.g. 1 -> 2 -> 3 -> 1
 
-  * a term can't contain itself as a parent
 
-  *
 
-  * returns TRUE if resulting hierarchy is valid, else FALSE
 
-  */
 
- function taxonomy_manager_check_circular_hierarchy($tids, $new_parents_tids) {
 
-   if (is_array($tids) && is_array($new_parents_tids)) {
 
-     //directly same term
 
-     foreach ($tids as $tid) {
 
-       if (in_array($tid, $new_parents_tids)) {
 
-         return FALSE;
 
-       }
 
-     }
 
-     //same term over more hierarchy levels
 
-     $all_parents = array();
 
-     foreach ($new_parents_tids as $parent_tid) {
 
-       $parents = taxonomy_get_parents_all($parent_tid);
 
-       foreach ($parents as $parent) {
 
-         $all_parents[$parent->tid] = $parent->tid;
 
-       }
 
-     }
 
-     foreach ($tids as $tid) {
 
-       if (in_array($tid, $all_parents)) {
 
-         return FALSE;
 
-       }
 
-     }
 
-   }
 
-   return TRUE;
 
- }
 
- /**
 
-  * checks if terms in move or merge operation are of the same language
 
-  *
 
-  * returns TRUE if operation allowed, else FALSE (different languages)
 
-  */
 
- function taxonomy_manager_check_language($vid, $selected_tids, $parents) {
 
-   if (module_exists('i18_ntaxonomy')) {
 
-     if (count($parents) && count($selected_tids)) {
 
-       $term = array_pop($parents);
 
-       $lang = $term->language;
 
-       if (i18n_taxonomy_vocabulary_mode($voc->vid, I18N_MODE_TRANSLATE)) {
 
-         foreach ($parents as $parent) {
 
-           if (_taxonomy_manager_term_get_lang($parent['tid']) != $lang) {
 
-             return FALSE;
 
-           }
 
-         }
 
-         foreach ($selected_tids as $tid) {
 
-           if (_taxonomy_manager_term_get_lang($tid) != $lang) {
 
-             return FALSE;
 
-           }
 
-         }
 
-       }
 
-     }
 
-   }
 
-   return TRUE;
 
- }
 
- /**
 
-  * Submit handler for moving terms
 
-  */
 
- function taxonomy_manager_form_move_submit($form, $form_state) {
 
-   $selected_tids = array();
 
-   $selected_tids = $form_state['values']['taxonomy']['manager']['tree']['selected_terms'];
 
-   $lang = isset($form_state['values']['taxonomy']['manager']['top']['language']) ? $form_state['values']['taxonomy']['manager']['top']['language'] : NULL;
 
-   $typed_parents = taxonomy_manager_autocomplete_tags_get_tids($form_state['values']['move']['parents'], $form_state['values']['voc']->vid, TRUE, $lang);
 
-   $parents = array();
 
-   foreach ($typed_parents as $parent_info) {
 
-     $parents[] = $parent_info['tid'];
 
-   }
 
-   if (count($parents) == 0) $parents[0] = 0; //if empty, delete all parents
 
-   taxonomy_manager_move($parents, $selected_tids, $form_state['values']['move']['options']);
 
-   if ($form_state['values']['move']['options']['keep_old_parents']) {
 
-     $parents[] = 1; //++ parent count for hierarchy update (-> multi hierarchy)
 
-   }
 
-   taxonomy_manager_update_voc($form_state['values']['voc']->vid, $parents);
 
-   $term_names_array = array();
 
-   foreach ($selected_tids as $selected_tid) {
 
-     $term = taxonomy_term_load($selected_tid);
 
-     $term_names_array[] = $term->name;
 
-   }
 
-   $term_names = implode(', ', $term_names_array);
 
-   $parent_names = "";
 
-   if (count($typed_parents) == 0) {
 
-     $parent_names = t("root level");
 
-   }
 
-   else {
 
-     $parent_names = $form_state['values']['move']['parents'];
 
-   }
 
-   drupal_set_message(t("Terms %term_names moved to %parent_names", array('%term_names' => $term_names, '%parent_names' => $parent_names)));
 
- }
 
- /**
 
-  * Validation handler for validating terms
 
-  */
 
- function taxonomy_manager_form_term_merge_validate($form, &$form_state) {
 
-   $selected_tids = array();
 
-   $selected_tids = $form_state['values']['taxonomy']['manager']['tree']['selected_terms'];
 
-   $dest_terms = array();
 
-   $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x';
 
-   preg_match_all($regexp, $form_state['values']['term_merge']['dest_term'], $matches);
 
-   $dest_terms = $matches[1];
 
-   $error_msg = "";
 
-   $typed_terms = taxonomy_manager_autocomplete_tags_get_tids($form_state['values']['term_merge']['dest_term'], $form_state['values']['voc']->vid, FALSE);
 
-   if (!is_array($dest_terms) || count($dest_terms) == 0 || empty($dest_terms[0])) {
 
-     form_set_error('term_merge][dest_term', t('Please enter a name into "Destination term"'));
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
-   elseif (count($dest_terms) > 1) {
 
-     form_set_error('term_merge][dest_term', t('Please only enter single names into "Destination term"'));
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
-   if (count($selected_tids) < 1) {
 
-     form_set_error('term_merge', t("Please selecte terms you want to merge"));
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
-   elseif (_taxonomy_manager_check_duplicates($form_state['values']['voc']->vid, $form_state['values']['term_merge']['dest_term'], $error_msg)) {
 
-     form_set_error('term_merge', t("Warning: Your input matches with multiple terms, because of duplicated term names. Please enter a unique term name or the term id with 'term-id:[tid]'") . " (" . $error_msg . ").");
 
-     $form_state['rebuild'] = TRUE;
 
-   }
 
- }
 
- /**
 
-  * Submit handler for term merge
 
-  */
 
- function taxonomy_manager_form_term_merge_submit($form, $form_state) {
 
-   $selected_tids = array();
 
-   $selected_tids = $form_state['values']['taxonomy']['manager']['tree']['selected_terms'];
 
-   $dest_term_ids = taxonomy_manager_autocomplete_tags_get_tids($form_state['values']['term_merge']['dest_term'], $form_state['values']['voc']->vid, TRUE);
 
-   $dest_term_id = array_shift($dest_term_ids);
 
-   $dest_term = taxonomy_term_load($dest_term_id['tid']);
 
-   $term_names_array = array();
 
-   foreach ($selected_tids as $selected_tid) {
 
-     $term = taxonomy_term_load($selected_tid);
 
-     $term_names_array[] = $term->name;
 
-   }
 
-   $term_names = implode($term_names_array, ', ');
 
-   if (module_exists('term_merge')) {
 
-     term_merge($selected_tids, $dest_term->tid, $form_state['values']['term_merge']['options']['keep_merged']);
 
-     drupal_set_message(t("Terms %term_names merged into %dest_term", array('%term_names' => $term_names, '%dest_term' => $dest_term->name)));
 
-   }
 
-   else {
 
-     drupal_set_message(t('Term merge module not found'));
 
-   }
 
- }
 
- /**
 
-  * returns TRUE if term with same name exists more often
 
-  */
 
- function _taxonomy_manager_check_duplicates($vid, $autocomplete_value, &$msg) {
 
-   $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x';
 
-   preg_match_all($regexp, $autocomplete_value, $matches);
 
-   foreach ($matches[1] as $match) {
 
-     $terms = array();
 
-     $terms = taxonomy_manager_autocomplete_tags_get_tids($match, $vid, FALSE);
 
-     if (count($terms) > 1) {
 
-       $tids = array();
 
-       foreach ($terms as $t) {
 
-         $term = taxonomy_term_load($t['tid']);
 
-         $tids[] = $term->tid . (!empty($term->language) ? '-' . check_plain($term->language) : '');
 
-       }
 
-       $msg .= check_plain($match) . ": " . implode(", ", $tids);
 
-       return TRUE;
 
-     }
 
-   }
 
-   return FALSE;
 
- }
 
- function taxonomy_manager_form_double_tree_submit($form, &$form_state) {
 
-   drupal_goto('admin/structure/taxonomy_manager/double-tree/' . $form_state['values']['voc']->machine_name . '/' . $form_state['values']['double-tree-settings']['voc2_machine_name']);
 
- }
 
- function taxonomy_manager_form_double_tree_disable_submit($form, &$form_state) {
 
-   drupal_goto('admin/structure/taxonomy_manager/voc/' . $form_state['values']['voc']->machine_name);
 
- }
 
- /**
 
-  * Defines a settings form.
 
-  */
 
- function taxonomy_manager_settings($form) {
 
-   $form['taxonomy_manager_disable_mouseover'] = array(
 
-     '#type' => 'checkbox',
 
-     '#title' => t('Disable mouse-over effect for terms (weights and direct link)'),
 
-     '#default_value' => variable_get('taxonomy_manager_disable_mouseover', 0),
 
-     '#description' => t('Disabeling this feature speeds up the Taxonomy Manager'),
 
-   );
 
-   $form['taxonomy_manager_pager_tree_page_size'] = array(
 
-     '#type' => 'select',
 
-     '#title' => t('Pager count'),
 
-     '#options' => array(25 => 25, 50 => 50, 75 => 75, 100 => 100, 150 => 150, 200 => 200, 250 => 250, 300 => 300, 400 => 400, 500 => 500, 1000 => 1000, 2500 => 2500, 5000 => 5000, 10000 => 10000),
 
-     '#default_value' => variable_get('taxonomy_manager_pager_tree_page_size', TAXONOMY_MANAGER_PAGER_TREE_PAGE_SIZE_DEFAULT),
 
-     '#description' => t('Select how many terms should be listed on one page. Huge page counts can slow down the Taxonomy Manager'),
 
-   );
 
-   return system_settings_form($form);
 
- }
 
- function taxonomy_manager_term_data_form_ajax_callback($form, $form_state) {
 
-   $commands = array();
 
-   $commands[] = ajax_command_insert(NULL, drupal_render($form['term_data']));
 
-   $commands[] = ajax_command_after('#term-data-close', theme('status_messages'));
 
-   // Update tree if necessary.
 
-   if (isset($form_state['values']['tree-update'])) {
 
-     if (isset($form_state['values']['tree-update']['update']) && $form_state['values']['tree-update']['update']) {
 
-       $commands[] = ajax_command_insert('#taxonomy-manager .form-item-taxonomy-manager-tree', drupal_render($form['taxonomy']['manager']['tree']));
 
-       if (isset($form['taxonomy2'])) {
 
-         $commands[] = ajax_command_insert('#taxonomy-manager .form-item-taxonomy2-manager-tree', drupal_render($form['taxonomy2']['manager']['tree']));
 
-       }
 
-     }
 
-     elseif (isset($form_state['values']['tree-update']['update-name'])) {
 
-       $selector = 'a.term-data-link-id-' . $form_state['values']['tree-update']['update-name']['tid'];
 
-       $commands[] = ajax_command_html($selector, '<span>' . check_plain($form_state['values']['tree-update']['update-name']['name']) . '</span>');
 
-     }
 
-   }
 
-   return array('#type' => 'ajax', '#commands' => $commands);
 
- }
 
- function taxonomy_manager_term_data_form_submit($form, &$form_state) {
 
-   $old_term = taxonomy_term_load($form_state['values']['tid']);
 
-   $term = taxonomy_form_term_submit_build_taxonomy_term($form, $form_state);
 
-   if ($term->weight != $old_term->weight) {
 
-     form_set_value(array('#parents' => array('tree-update')), array('update' => TRUE), $form_state);
 
-   }
 
-   elseif ($term->name != $old_term->name) {
 
-     form_set_value(array('#parents' => array('tree-update')), array('update-name' => array('name' => $term->name, 'tid' => $term->tid)), $form_state);
 
-   }
 
-   elseif (isset($term->language) && $term->language != $old_term->language) {
 
-     form_set_value(array('#parents' => array('tree-update')), array('update' => TRUE), $form_state);
 
-   }
 
-   taxonomy_term_save($term);
 
-   drupal_set_message(t('Updated term data'));
 
-   $form_state['rebuild'] = TRUE;
 
- }
 
- function taxonomy_manager_term_data_form_validate_parents_add($form, &$form_state) {
 
-   $term_data = $form_state['values'];
 
-   $term = taxonomy_term_load($term_data['tid']);
 
-   $parent_names = $term_data['parents']['op']['add'];
 
-   $typed_terms = taxonomy_manager_autocomplete_tags_get_tids($parent_names, $term->vid, FALSE);
 
-   $error_msg = "";
 
-   if ($parent_names == "") {
 
-     form_set_error('parents][op][add', t("Parent field is required."));
 
-   }
 
-   elseif (_taxonomy_manager_check_duplicates($term->vid, $parent_names, $error_msg)) {
 
-     form_set_error('parents][op][add', t("Warning: Your input matches with multiple terms, because of duplicated term names. Please enter a unique term name or the term id with 'term-id:[tid]' (!error_msg)", array('!error_msg' => $error_msg)));
 
-   }
 
-   elseif (!taxonomy_manager_check_language($term->vid, array($term->tid), $typed_terms)) {
 
-     form_set_error('parents][op][add', t("Terms must be of the same language."));
 
-   }
 
-   else {
 
-     //validation for consistent hierarchy
 
-     $parents = array();
 
-     foreach ($typed_terms as $parent_info) {
 
-       $parents[$parent_info['tid']] = $parent_info['tid'];
 
-     }
 
-     if (!taxonomy_manager_check_circular_hierarchy(array($term->tid => $term->tid), $parents)) {
 
-       form_set_error('parents][op][add', t('Invalid parent. The resulting hierarchy would contain circles, which is not allowed. A term cannot be a parent of itself.'));
 
-     }
 
-   }
 
- }
 
- /**
 
-  * Submit handler for adding parents for a term.
 
-  */
 
- function taxonomy_manager_term_data_form_submit_parents_add($form, &$form_state) {
 
-   $term_data = $form_state['values'];
 
-   $term = taxonomy_term_load($term_data['tid']);
 
-   $parent_names = $term_data['parents']['op']['add'];
 
-   $typed_terms = taxonomy_manager_autocomplete_tags_get_tids($parent_names, $term->vid, TRUE); //insert terms
 
-   if (!isset($term->parent)) {
 
-     $term->parent = array();
 
-   }
 
-   foreach ($typed_terms as $parent_info) {
 
-     $term->parent[] = $parent_info['tid'];
 
-   }
 
-   //remove root level entry
 
-   db_delete('taxonomy_term_hierarchy')
 
-     ->condition('tid', $term->tid)
 
-     ->condition('parent', 0)
 
-     ->execute();
 
-   taxonomy_term_save($term); //executes hooks and clears caches
 
-   taxonomy_manager_update_voc($term->vid, taxonomy_get_parents($term->tid)); // update hierarchy settings, if necessary
 
-   drupal_set_message(t('Updated hierarchy'));
 
-   $form_state['rebuild'] = TRUE;
 
-   form_set_value(array('#parents' => array('tree-update')), array('update' => TRUE), $form_state);
 
- }
 
- function taxonomy_manager_term_data_form_validate_parents_remove($form, &$form_state) {
 
-   $splits = explode('][', $form_state['triggering_element']['#name']);
 
-   if (count($splits) == 3 && is_numeric($splits[1])) {
 
-     form_set_value(array('#parents' => array('remove_parent_tid')), $splits[1], $form_state);
 
-   }
 
-   else {
 
-     form_set_error('parents', t('Invalid term selection.'));
 
-   }
 
- }
 
- /**
 
-  * Submit handler for removing a parent of a term.
 
-  */
 
- function taxonomy_manager_term_data_form_submit_parents_remove($form, &$form_state) {
 
-   $term = taxonomy_term_load($form_state['values']['tid']);
 
-   $parent = $form_state['values']['remove_parent_tid'];
 
-   $parents = taxonomy_get_parents($term->tid);
 
-   if (!isset($term->parent)) {
 
-     $term->parent = array();
 
-   }
 
-   // Ensure that a term has a least parent 0.
 
-   if (count($parents) == 1) {
 
-     $term->parent[] = 0;
 
-   }
 
-   $term->parent = array_diff($term->parent, array($parent));
 
-   taxonomy_term_save($term); //executes hooks and clears caches
 
-   drupal_set_message(t("Removed parent"));
 
-   $form_state['rebuild'] = TRUE;
 
-   form_set_value(array('#parents' => array('tree-update')), array('update' => TRUE), $form_state);
 
- }
 
- /**
 
-  * Validation handler for adding a single translation on the term data form.
 
-  */
 
- function taxonomy_manager_term_data_form_validate_translation_add($form, &$form_state) {
 
-   $term_data = $form_state['values'];
 
-   $term1 = taxonomy_term_load($term_data['tid']);
 
-   $input = $term_data['translations']['op']['add'];
 
-   $language = $term_data['translations']['op']['language'];
 
-   $typed_terms = taxonomy_manager_autocomplete_tags_get_tids($term_data['translations']['op']['add'], $term1->vid, FALSE, $language);
 
-   if (empty($input) || count($typed_terms) > 1) {
 
-     form_set_error('translations][op][add', t("Please input one term with an appropriate language."));
 
-   }
 
-   elseif ($term1->language == $language) {
 
-     form_set_error('translations][op', t("Added term is of the same language."));
 
-     return;
 
-   }
 
-   elseif (!is_null(i18n_taxonomy_term_get_translation($term1, $language))) {
 
-     form_set_error('translations][op][language', t('A translation for this language already exists.'));
 
-     return;
 
-   }
 
-   elseif (count($typed_terms) == 1) {
 
-     $entry = array_shift($typed_terms);
 
-     $term2 = taxonomy_term_load($entry['tid']);
 
-     if (!is_null(i18n_taxonomy_term_get_translation($term2, $term1->language))) {
 
-       form_set_error('translations][op][add', t('A translation for this term already exists.'));
 
-     }
 
-   }
 
- }
 
- /**
 
-  * Submit handler for adding a single translation on the term data form.
 
-  */
 
- function taxonomy_manager_term_data_form_submit_translation_add($form, &$form_state) {
 
-   $term_data = $form_state['values'];
 
-   $term1 = taxonomy_term_load($term_data['tid']);
 
-   $voc = taxonomy_vocabulary_load($term1->vid);
 
-   $typed_terms = taxonomy_manager_autocomplete_tags_get_tids($term_data['translations']['op']['add'], $term1->vid, TRUE, $term_data['translations']['op']['language']);
 
-   $entry = array_shift($typed_terms);
 
-   $term2 = taxonomy_term_load($entry['tid']);
 
-   taxonomy_manager_add_translation($term1, $term2, $voc);
 
-   drupal_set_message(t('The translation has been added'));
 
-   $form_state['rebuild'] = TRUE;
 
-   form_set_value(array('#parents' => array()), array('update' => TRUE), $form_state);
 
- }
 
- /**
 
-  * Validation handler for removing a single translation on the term data form.
 
-  */
 
- function taxonomy_manager_term_data_form_validate_translation_remove($form, &$form_state) {
 
-   $splits = explode('][', $form_state['triggering_element']['#name']);
 
-   if (count($splits) == 3 && is_numeric($splits[1])) {
 
-     form_set_value(array('#parents' => array('remove_translation_tid')), $splits[1], $form_state);
 
-   }
 
-   else {
 
-     form_set_error('translations', t('Invalid term selection.'));
 
-   }
 
- }
 
- /**
 
-  * Submit handler for removing a single translation on the term data form.
 
-  */
 
- function taxonomy_manager_term_data_form_submit_translation_remove($form, &$form_state) {
 
-   $term = taxonomy_term_load($form_state['values']['tid']);
 
-   $term_to_remove = taxonomy_term_load($form_state['values']['remove_translation_tid']);
 
-   $translation_set = i18n_translation_set_load($term->i18n_tsid);
 
-   $translation_set->remove_language($term_to_remove->language)
 
-     ->update_delete();
 
-   drupal_set_message(t("Removed term from translation."));
 
-   $form_state['rebuild'] = TRUE;
 
-   form_set_value(array('#parents' => array()), array('update' => TRUE), $form_state);
 
- }
 
- function taxonomy_manager_double_tree_ajax_callback($form, $form_state) {
 
-   $commands = array();
 
-   $commands[] = ajax_command_prepend(NULL, theme('status_messages'));
 
-   if ($form_state['values']['double_tree_values']['update_tree_left']) {
 
-     $commands[] = ajax_command_insert('#taxonomy-manager .form-item-taxonomy-manager-tree', drupal_render($form['taxonomy']['manager']['tree']));
 
-   }
 
-   if ($form_state['values']['double_tree_values']['update_tree_right']) {
 
-     $commands[] = ajax_command_insert('#taxonomy-manager .form-item-taxonomy2-manager-tree', drupal_render($form['taxonomy2']['manager']['tree']));
 
-   }
 
-   return array('#type' => 'ajax', '#commands' => $commands);
 
- }
 
- function taxonomy_manager_double_tree_move_validate($form, &$form_state) {
 
-   $values = array();
 
-   if (strpos($form_state['input']['_triggering_element_name'], 'right') !== FALSE) {
 
-     //move right
 
-     $values = array(
 
-       'selected_parents' => $form_state['values']['taxonomy2']['manager']['tree']['selected_terms'],
 
-       'selected_terms' => $form_state['values']['taxonomy']['manager']['tree']['selected_terms'],
 
-       'selected_terms_direct_parents' => $form_state['values']['taxonomy']['manager']['tree']['selected_terms_direct_parents'],
 
-       'left_tree_expand_terms' => $form_state['values']['taxonomy']['manager']['tree']['selected_terms_direct_parents'],
 
-       'right_tree_expand_terms' => $form_state['values']['taxonomy2']['manager']['tree']['selected_terms'],
 
-     );
 
-   }
 
-   else {
 
-     //move left
 
-     $values = array(
 
-       'selected_parents' => $form_state['values']['taxonomy']['manager']['tree']['selected_terms'],
 
-       'selected_terms' => $form_state['values']['taxonomy2']['manager']['tree']['selected_terms'],
 
-       'selected_terms_direct_parents' => $form_state['values']['taxonomy2']['manager']['tree']['selected_terms_direct_parents'],
 
-       'left_tree_expand_terms' => $form_state['values']['taxonomy']['manager']['tree']['selected_terms'],
 
-       'right_tree_expand_terms' => $form_state['values']['taxonomy2']['manager']['tree']['selected_terms_direct_parents'],
 
-     );
 
-   }
 
-   $values['update_tree_right'] = TRUE;
 
-   $values['update_tree_left'] = TRUE;
 
-   if (!count($values['selected_terms'])) {
 
-     form_set_error('', t("No terms selected."));
 
-   }
 
-   elseif (is_array($values['selected_parents']) && count($values['selected_parents'])) {
 
-     $p_array = array();
 
-     foreach ($values['selected_parents'] as $parent) {
 
-       $p_array[$parent]['tid'] = $parent;
 
-     }
 
-     if (!taxonomy_manager_check_language($form_state['values']['voc']->vid, $values['selected_terms'], $p_array)) {
 
-       form_set_error('', t("Terms must be of the same language."));
 
-     }
 
-     elseif (!taxonomy_manager_check_circular_hierarchy($values['selected_terms'], $values['selected_parents'])) {
 
-       form_set_error('', t('Invalid parent. The resulting hierarchy would contain circles, which is not allowed. A term cannot be a parent of itself.'));
 
-     }
 
-   }
 
-   form_set_value(array('#parents' => array('double_tree_values')), $values, $form_state);
 
- }
 
- function taxonomy_manager_double_tree_move_submit($form, &$form_state) {
 
-   $selected_terms = $form_state['values']['double_tree_values']['selected_terms'];
 
-   $selected_parents = $form_state['values']['double_tree_values']['selected_parents'];
 
-   $selected_terms_direct_parents = $form_state['values']['double_tree_values']['selected_terms_direct_parents'];
 
-   $selected_terms_names = array();
 
-   foreach ($selected_terms as $tid) {
 
-     $selected_term = taxonomy_term_load($tid);
 
-     $selected_terms_names[] = $selected_term->name;
 
-     //reset all parents, except the direct parent in the tree
 
-     $term_parents = taxonomy_get_parents($tid);
 
-     $term_parents_array = array();
 
-     $direct_parent = isset($selected_terms_direct_parents[$tid]) ? $selected_terms_direct_parents[$tid] : 0;
 
-     foreach ($term_parents as $term_parent) {
 
-       if ($direct_parent != $term_parent->tid) {
 
-         $term_parents_array[$term_parent->tid] = $term_parent->tid;
 
-       }
 
-     }
 
-     $selected_parent_names = array();
 
-     if (count($selected_parents)) {
 
-       foreach ($selected_parents as $parent) {
 
-         $term = taxonomy_term_load($parent);
 
-         $selected_parent_names[] = $term->name;
 
-         $term_parents_array[$term->tid] = $term->tid;
 
-       }
 
-     }
 
-     if (count($term_parents_array) == 0) {
 
-       $term_parents_array[0] = 0;
 
-     }
 
-     taxonomy_manager_move($term_parents_array, array($tid), array('keep_old_parents' => FALSE));
 
-     taxonomy_manager_update_voc($form_state['values']['voc']->vid, $term_parents_array);
 
-   }
 
-   $term_names = implode(', ', $selected_terms_names);
 
-   if (count($selected_parents) == 0) {
 
-     drupal_set_message(t("Removed current parent form terms %terms.", array('%terms' => $term_names)));
 
-   }
 
-   else {
 
-     drupal_set_message(t("Terms %terms moved to parents %parents.", array('%terms' => $term_names, '%parents' => implode(', ', $selected_parent_names))));
 
-   }
 
-   $form_state['rebuild'] = TRUE;
 
- }
 
- function taxonomy_manager_double_tree_switch_validate($form, &$form_state) {
 
-   $values = array();
 
-   if (strpos($form_state['input']['_triggering_element_name'], 'right') !== FALSE) {
 
-     //move right
 
-     $values = array(
 
-       'selected_parents' => $form_state['values']['taxonomy2']['manager']['tree']['selected_terms'],
 
-       'selected_terms' => $form_state['values']['taxonomy']['manager']['tree']['selected_terms'],
 
-       'left_tree_expand_terms' => $form_state['values']['taxonomy']['manager']['tree']['selected_terms_direct_parents'],
 
-       'right_tree_expand_terms' => $form_state['values']['taxonomy']['manager']['tree']['selected_terms'],
 
-       'voc1' => $form_state['values']['voc']->vid,
 
-       'voc2' => $form_state['values']['voc2']->vid,
 
-     );
 
-   }
 
-   else {
 
-     //move left
 
-     $values = array(
 
-       'selected_parents' => $form_state['values']['taxonomy']['manager']['tree']['selected_terms'],
 
-       'selected_terms' => $form_state['values']['taxonomy2']['manager']['tree']['selected_terms'],
 
-       'left_tree_expand_terms' => $form_state['values']['taxonomy2']['manager']['tree']['selected_terms'],
 
-       'right_tree_expand_terms' => $form_state['values']['taxonomy2']['manager']['tree']['selected_terms_direct_parents'],
 
-       'voc1' => $form_state['values']['voc2']->vid,
 
-       'voc2' => $form_state['values']['voc']->vid,
 
-     );
 
-   }
 
-   $values['update_tree_right'] = TRUE;
 
-   $values['update_tree_left'] = TRUE;
 
-   if (!count($values['selected_terms'])) {
 
-     form_set_error('', t("No terms selected."));
 
-   }
 
-   form_set_value(array('#parents' => array('double_tree_values')), $values, $form_state);
 
- }
 
- function taxonomy_manager_double_tree_copy_validate($form, &$form_state) {
 
-   taxonomy_manager_double_tree_switch_validate($form, $form_state);
 
-   $values = $form_state['values']['double_tree_values'];
 
-   if (strpos($form_state['input']['_triggering_element_name'], 'right') !== FALSE) {
 
-     $form_state['values']['double_tree_values']['update_tree_left'] = FALSE;
 
-   }
 
-   else {
 
-     $form_state['values']['double_tree_values']['update_tree_right'] = FALSE;
 
-   }
 
- }
 
- function taxonomy_manager_double_tree_copy_submit($form, &$form_state) {
 
-   $selected_terms = $form_state['values']['double_tree_values']['selected_terms'];
 
-   $selected_parents = $form_state['values']['double_tree_values']['selected_parents'];
 
-   $voc1 = $form_state['values']['double_tree_values']['voc1'];
 
-   $voc2 = $form_state['values']['double_tree_values']['voc2'];
 
-   $voc1 = taxonomy_vocabulary_load($voc1);
 
-   $voc2 = taxonomy_vocabulary_load($voc2);
 
-   $new_tids = taxonomy_manager_copy($selected_terms, $voc1->vid, $voc2->vid, $selected_parents);
 
-   if (count($new_tids)) {
 
-     $new_tid = array_pop($new_tids);
 
-     $form_state['values']['double_tree_values']['left_tree_expand_terms'] = array($new_tid);
 
-     $form_state['values']['double_tree_values']['right_tree_expand_terms'] = array($new_tid);
 
-   }
 
-   $selected_terms_names = array();
 
-   foreach ($selected_terms as $tid) {
 
-     $term = taxonomy_term_load($tid);
 
-     $selected_terms_names[] = $term->name;
 
-   }
 
-   $selected_parent_names = array();
 
-   if (count($selected_parents)) {
 
-     foreach ($selected_parents as $parent) {
 
-       $term = taxonomy_term_load($parent);
 
-       $selected_parent_names[] = $term->name;
 
-       $term_parents_array[$term->tid] = $term->tid;
 
-     }
 
-   }
 
-   $term_names = implode(', ', $selected_terms_names);
 
-   if (count($selected_parents) == 0) {
 
-     drupal_set_message(t("Copied %terms to vocabulary %voc.", array('%terms' => $term_names, '%voc' => $voc2->name)));
 
-   }
 
-   else {
 
-     drupal_set_message(t("Copied %terms to vocabulary %voc under parents %parents.", array('%terms' => $term_names, '%voc' => $voc2->name, '%parents' => implode(', ', $selected_parent_names))));
 
-   }
 
-   $form_state['rebuild'] = TRUE;
 
- }
 
- function taxonomy_manager_double_tree_switch_submit($form, &$form_state) {
 
-   $selected_terms = $form_state['values']['double_tree_values']['selected_terms'];
 
-   $selected_parents = $form_state['values']['double_tree_values']['selected_parents'];
 
-   $voc1 = $form_state['values']['double_tree_values']['voc1'];
 
-   $voc2 = $form_state['values']['double_tree_values']['voc2'];
 
-   $voc1 = taxonomy_vocabulary_load($voc1);
 
-   $voc2 = taxonomy_vocabulary_load($voc2);
 
-   taxonomy_manager_switch($selected_terms, $voc1->vid, $voc2->vid, $selected_parents);
 
-   $selected_terms_names = array();
 
-   foreach ($selected_terms as $tid) {
 
-     $term = taxonomy_term_load($tid);
 
-     $selected_terms_names[] = $term->name;
 
-   }
 
-   $selected_parent_names = array();
 
-   if (count($selected_parents)) {
 
-     foreach ($selected_parents as $parent) {
 
-       $term = taxonomy_term_load($parent);
 
-       $selected_parent_names[] = $term->name;
 
-       $term_parents_array[$term->tid] = $term->tid;
 
-     }
 
-   }
 
-   $term_names = implode(', ', $selected_terms_names);
 
-   if (count($selected_parents) == 0) {
 
-     drupal_set_message(t("Terms %terms moved to vocabulary %voc.", array('%terms' => $term_names, '%voc' => $voc2->name)));
 
-   }
 
-   else {
 
-     drupal_set_message(t("Terms %terms moved to vocabulary %voc under parents %parents.", array('%terms' => $term_names, '%voc' => $voc2->name, '%parents' => implode(', ', $selected_parent_names))));
 
-   }
 
-   $form_state['rebuild'] = TRUE;
 
- }
 
- /**
 
-  * Validation handler for adding a translation.
 
-  */
 
- function taxonomy_manager_double_tree_add_translation_validate($form, &$form_state) {
 
-   if (!module_exists('i18n_taxonomy')) {
 
-     form_set_error('', t("i18n taxonomy module is not enabled."));
 
-     return;
 
-   }
 
-   if (!count($form_state['values']['taxonomy']['manager']['tree']['selected_terms']) || !count($form_state['values']['taxonomy2']['manager']['tree']['selected_terms'])) {
 
-     form_set_error('', t("No terms selected."));
 
-     return;
 
-   }
 
-   $term1 = taxonomy_term_load(array_shift($form_state['values']['taxonomy']['manager']['tree']['selected_terms']));
 
-   $term2 = taxonomy_term_load(array_shift($form_state['values']['taxonomy2']['manager']['tree']['selected_terms']));
 
-   $voc = $form_state['values']['voc'];
 
-   if (!i18n_taxonomy_vocabulary_mode($voc->vid, I18N_MODE_TRANSLATE)) {
 
-     form_set_error('', t('This is not a multilingual vocabulary.'));
 
-     return;
 
-   }
 
-   elseif ($term1->language == $term2->language) {
 
-     form_set_error('', t("Selected terms are of the same language."));
 
-     return;
 
-   }
 
-   elseif (!is_null(i18n_taxonomy_term_get_translation($term1, $term2->language)) ||
 
-     !is_null(i18n_taxonomy_term_get_translation($term2, $term1->language))) {
 
-     form_set_error('', t('A translation for this term or language already exists.'));
 
-     return;
 
-   }
 
-   // Set the values for the submit handler.
 
-   $values = array(
 
-     'term1' => $term1,
 
-     'term2' => $term2,
 
-     'voc' => $voc,
 
-   );
 
-   form_set_value(array('#parents' => array('double_tree_values')), $values, $form_state);
 
- }
 
- /**
 
-  * Submit handler for adding a translation.
 
-  */
 
- function taxonomy_manager_double_tree_add_translation_submit($form, &$form_state) {
 
-   $term1 = $form_state['values']['double_tree_values']['term1'];
 
-   $term2 = $form_state['values']['double_tree_values']['term2'];
 
-   $voc = $form_state['values']['double_tree_values']['voc'];
 
-   taxonomy_manager_add_translation($term1, $term2, $voc);
 
-   drupal_set_message(t("Translation for %term2 - %term1 added.", array('%term2' => $term2->name, '%term1' => $term1->name)));
 
- }
 
- /**
 
-  * Helper function for adding a translation between two terms.
 
-  */
 
- function taxonomy_manager_add_translation($term1, $term2, $voc) {
 
-   if (!module_exists('i18n_taxonomy')) {
 
-     return;
 
-   }
 
-   if (!empty($term1->i18n_tsid)) {
 
-     $translation_set = i18n_taxonomy_translation_set_load($term1->i18n_tsid);
 
-   }
 
-   else {
 
-     // No translation set yet, build a new one with the source term.
 
-     $translation_set = i18n_translation_set_create('taxonomy_term', $voc->machine_name)
 
-       ->add_item($term1);
 
-   }
 
-   $translation_set->add_item($term2)->save();
 
- }
 
- /**
 
-  * Duplicates a term to another voc
 
-  */
 
- function taxonomy_manager_copy($tids, $from_voc, $to_voc, $selected_parents) {
 
-   $new_tids = array();
 
-   foreach ($tids as $tid) {
 
-     $term = taxonomy_term_load($tid);
 
-     $new_term = clone $term;
 
-     unset($new_term->tid);
 
-     $new_term->parent = count($selected_parents) ? $selected_parents : 0;
 
-     $new_term->vid = $to_voc;
 
-     // UUID integration: unset uuid on copy.
 
-     if (isset($new_term->uuid)) {
 
-       unset($new_term->uuid);
 
-     }
 
-     taxonomy_term_save($new_term);
 
-     $new_tids[] = $new_term->tid;
 
-   }
 
-   taxonomy_manager_update_voc($to_voc, $selected_parents);
 
-   taxonomy_terms_static_reset();
 
-   return $new_tids;
 
- }
 
- /**
 
-  * Changes vocabulary of given terms and its children
 
-  * conflicts might be possible with multi-parent terms!
 
-  */
 
- function taxonomy_manager_switch($tids, $from_voc, $to_voc, $parents = array()) {
 
-   foreach ($tids as $tid) {
 
-     //hook to inform modules about the changes
 
-     module_invoke_all('taxonomy_manager_term', 'switch', $tid, $from_voc, $to_voc);
 
-     $children = taxonomy_get_tree($from_voc, $tid);
 
-     $terms_to_switch = array();
 
-     foreach ($children as $child) {
 
-       $terms_to_switch[] = $child->tid;
 
-     }
 
-     $terms_to_switch[] = $tid;
 
-     db_update('taxonomy_term_data')
 
-       ->fields(array('vid' => $to_voc))
 
-       ->condition('tid', $terms_to_switch, 'IN')
 
-       ->execute();
 
-     taxonomy_terms_static_reset();
 
-     //delete references to parents from the old voc
 
-     foreach ($children as $child) {
 
-       $term_parents = taxonomy_get_parents($child->tid);
 
-       foreach ($term_parents as $term_parent) {
 
-         if ($term_parent->vid != $to_voc) {
 
-           db_delete('taxonomy_term_hierarchy')
 
-             ->condition('tid', $child->tid)
 
-             ->condition('parent', $term_parent->tid)
 
-             ->execute();
 
-         }
 
-       }
 
-     }
 
-     //set parent of the selected term
 
-     if (!count($parents)) {
 
-       $parents[0] = 0;
 
-     }
 
-     taxonomy_manager_move($parents, array($tid));
 
-     taxonomy_manager_update_voc($to_voc, $parents);
 
-   }
 
-   //TODO invoke update hook!!
 
-   taxonomy_terms_static_reset();
 
- }
 
- /**
 
-  * checks if voc has terms
 
-  *
 
-  * @param $vid voc id
 
-  * @return true, if terms already exists, else false
 
-  */
 
- function _taxonomy_manager_voc_is_empty($vid) {
 
-   $has_rows = (bool) db_query_range("SELECT 1 FROM {taxonomy_term_data} t INNER JOIN {taxonomy_term_hierarchy} h ON t.tid = h.tid WHERE vid = :vid AND h.parent = 0", 0, 1, array(':vid' => $vid))->fetchField();
 
-   return !$has_rows;
 
- }
 
- /**
 
-  * deletes terms from the database
 
-  * optional orphans (terms where parent get deleted) can be deleted as well
 
-  *
 
-  * (difference to taxonomy_term_delete: deletion of orphans optional)
 
-  *
 
-  * @param $tids array of term id to delete
 
-  * @param $options associative array with options
 
-  *   if $options['delete_orphans'] is true, orphans get deleted
 
-  */
 
- function taxonomy_manager_delete_terms($tids, $options = array()) {
 
-   $deleted_term = array();
 
-   $remaining_child_terms = array();
 
-   if (!is_array($tids)) array($tids);
 
-   while (count($tids) > 0) {
 
-     $orphans = array();
 
-     foreach ($tids as $tid) {
 
-       if ($children = taxonomy_get_children($tid)) {
 
-         foreach ($children as $child) {
 
-           $parents = taxonomy_get_parents($child->tid);
 
-           if ($options['delete_orphans']) {
 
-             if (count($parents) == 1) {
 
-               $orphans[$child->tid] = $child->tid;
 
-             }
 
-             else {
 
-               $remaining_child_terms[$child->tid] = $child;
 
-             }
 
-           }
 
-           else {
 
-             $remaining_child_terms[$child->tid] = $child;
 
-             db_delete('taxonomy_term_hierarchy')
 
-               ->condition('tid', $child->tid)
 
-               ->condition('parent', $tid)
 
-               ->execute();
 
-             if (count($parents) == 1) {
 
-               $is_root = (bool) db_query_range("SELECT 1 FROM {taxonomy_term_hierarchy} h WHERE h.tid = :tid AND h.parent = 0", 0, 1, array(':tid' => $child->tid))->fetchField();
 
-               if (!$is_root) {
 
-                 db_insert('taxonomy_term_hierarchy')
 
-                   ->fields(array('tid', 'parent'))
 
-                   ->values(array('tid' => $child->tid, 'parent' => 0))
 
-                   ->execute();
 
-               }
 
-             }
 
-           }
 
-         }
 
-       }
 
-       $term = taxonomy_term_load($tid);
 
-       if ($term) {
 
-         $deleted_terms[] = $term;
 
-         db_delete('taxonomy_term_data')
 
-           ->condition('tid', $tid)
 
-           ->execute();
 
-         db_delete('taxonomy_term_hierarchy')
 
-           ->condition('tid', $tid)
 
-           ->execute();
 
-         field_attach_delete('taxonomy_term', $term);
 
-         module_invoke_all('taxonomy_term_delete', $term);
 
-         // Reset cache after each deletion as it might affect parents/children information that is used later on.
 
-         taxonomy_terms_static_reset();
 
-       }
 
-     }
 
-     $tids = $orphans;
 
-   }
 
-   return array('deleted_terms' => $deleted_terms, 'remaining_child_terms' => $remaining_child_terms);
 
- }
 
- /**
 
-  * Moves terms in hierarchies to other parents
 
-  *
 
-  * @param $parents
 
-  *   Array of parent term ids to where children can be moved.
 
-  *   Array should only contain more parents if multi hierarchy is enabled.
 
-  *   If array contains 0, terms get moved to root level
 
-  * @param $children
 
-  *   Array of term ids to move
 
-  * @param $options
 
-  *   Array of additional options for moving
 
-  *   'keep_old_parents': if true, existing parents does not get deleted (only
 
-  *      possible with multi hierarchies).
 
-  */
 
- function taxonomy_manager_move($parents, $children, $options = array()) {
 
-   if (!is_array($parents)) {
 
-     $parents = array($parents);
 
-   }
 
-   // Key parent terms array by tid, so that it is always unique.
 
-   $keyed_array = array();
 
-   foreach ($parents as $parent) {
 
-     $keyed_array[$parent] = $parent;
 
-   }
 
-   $parents = $keyed_array;
 
-   foreach ($children as $child) {
 
-     $term = taxonomy_term_load($child);
 
-     $term_parents = $parents;
 
-     if (isset($options['keep_old_parents']) && $options['keep_old_parents']) {
 
-       // Add existing parents to $term_parents array
 
-       $results = db_select('taxonomy_term_hierarchy', 'h')
 
-         ->condition('tid', $child)
 
-         ->fields('h')
 
-         ->execute();
 
-       foreach ($results as $p) {
 
-         $term_parents[$p->parent] = $p->parent;
 
-       }
 
-     }
 
-     $term->parent = $term_parents;
 
-     taxonomy_term_save($term);
 
-   }
 
-   taxonomy_terms_static_reset();
 
- }
 
- /**
 
-  * helper function for getting out of term ids from autocomplete fields
 
-  * non-exsiting terms get inserted autmatically
 
-  * the input gets parsed for term names, optional a term id can be directly passed with prefixing the input with 'term-id:'
 
-  *
 
-  * @param $typed_input input string of form field
 
-  * @param $vid vocabulary id
 
-  * @param $insert_new TRUE if non-existing terms should be inserted
 
-  * @param $lang define the language (optional)
 
-  * @return array of term ids
 
-  */
 
- function taxonomy_manager_autocomplete_tags_get_tids($typed_input, $vid, $insert_new = TRUE, $lang = NULL) {
 
-   $tids = array();
 
-   $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x';
 
-   preg_match_all($regexp, $typed_input, $matches);
 
-   $typed_terms = array_unique($matches[1]);
 
-   foreach ($typed_terms as $typed_term) {
 
-     $typed_term = str_replace('""', '"', preg_replace('/^"(.*)"$/', '\1', $typed_term));
 
-     $typed_term = trim($typed_term);
 
-     if ($typed_term != "") {
 
-       if (substr($typed_term, 0, 8) == "term-id:") {
 
-         $id = substr($typed_term, 8);
 
-         $term = taxonomy_term_load($id);
 
-         if ($term->vid == $vid) {
 
-           $tids[$term->tid]['tid'] = $term->tid;
 
-         }
 
-       }
 
-       else {
 
-         $possibilities = taxonomy_get_term_by_name($typed_term);
 
-         $typed_term_tid = NULL; // tid match if any.
 
-         foreach ($possibilities as $possibility) {
 
-           if ($possibility->vid == $vid && !($lang && $lang != $possibility->language)) {
 
-             $typed_term_tid = $possibility->tid;
 
-             $tids[$typed_term_tid]['tid'] = $typed_term_tid;
 
-           }
 
-         }
 
-         if (!$typed_term_tid && $insert_new) {
 
-           // Truncate long string names that will cause database exceptions.
 
-           if (strlen($typed_term) > 255) {
 
-             $typed_term = substr($typed_term, 0, 255);
 
-           }
 
-           $edit = new stdClass;
 
-           $edit->name = $typed_term;
 
-           $edit->vid = $vid;
 
-           if (module_exists('i18n_taxonomy') && $lang != "" && i18n_taxonomy_vocabulary_mode($vid, I18N_MODE_TRANSLATE)) {
 
-             $edit->language = $lang;
 
-           }
 
-           $status = taxonomy_term_save($edit);
 
-           $typed_term_tid = $edit->tid;
 
-           $tids[$typed_term_tid]['tid'] = $typed_term_tid;
 
-           $tids[$typed_term_tid]['new'] = TRUE;
 
-         }
 
-       }
 
-     }
 
-   }
 
-   return $tids;
 
- }
 
- /**
 
-  * similar to taxonomy_manager_autocomplete_tags_get_tids, but used for searching terms
 
-  * takes synonyms and selected subtrees into account
 
-  *
 
-  * @param $typed_input input string of form field
 
-  * @param $vid vocabulary id
 
-  * @param $include_synonyms TRUE if search should include synonyms
 
-  * @param $parents array of parents
 
-  * @return array of term ids
 
-  */
 
- function taxonomy_manager_autocomplete_search_terms($typed_input, $vid, $include_synonyms = FALSE, $parents = array(), $language = NULL) {
 
-   $tids = array();
 
-   if ($language != NULL && $language == "no language") {
 
-     $language = "";
 
-   }
 
-   $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x';
 
-   preg_match_all($regexp, $typed_input, $matches);
 
-   $typed_terms = array_unique($matches[1]);
 
-   foreach ($typed_terms as $typed_term) {
 
-     $typed_term = str_replace('""', '"', preg_replace('/^"(.*)"$/', '\1', $typed_term));
 
-     $typed_term = trim($typed_term);
 
-     if ($typed_term == "") {
 
-       continue;
 
-     }
 
-     //TODO
 
-     /*if ($include_synonyms) {
 
-       if ($language != NULL) {
 
-         $search_sql = db_query("SELECT td.tid FROM {term_data} td LEFT JOIN {term_synonym} ts ON td.tid = ts.tid WHERE td.vid = %d AND (td.name = '%s' OR ts.name = '%s') AND td.language = '%s'", $vid, $typed_term, $typed_term, $language);
 
-       }
 
-       else {
 
-         $search_sql = db_query("SELECT td.tid FROM {term_data} td LEFT JOIN {term_synonym} ts ON td.tid = ts.tid WHERE td.vid = %d AND (td.name = '%s' OR ts.name = '%s')", $vid, $typed_term, $typed_term);
 
-       }
 
-     }
 
-     else {
 
-       if ($language != NULL) {
 
-         $search_sql = db_query("SELECT td.tid FROM {term_data} td WHERE td.vid = %d AND td.name = '%s' AND td.language = '%s'", $vid, $typed_term, $language);
 
-       }
 
-       else {
 
-         $search_sql = db_query("SELECT td.tid FROM {term_data} td WHERE td.vid = %d AND td.name = '%s'", $vid, $typed_term);
 
-       }
 
-     }*/
 
-     $terms = taxonomy_get_term_by_name($typed_term);
 
-     foreach ($terms as $term) {
 
-       if ($term->vid == $vid) {
 
-         $tids[] = $term->tid;
 
-       }
 
-     }
 
-     if (count($parents)) {
 
-       $filtered_tids = array();
 
-       foreach ($tids as $tid) {
 
-         $parents_all = taxonomy_get_parents_all($tid);
 
-         foreach ($parents_all as $key => $parent) {
 
-           if (in_array($parent->tid, $parents)) {
 
-             $filtered_tids[] = $tid;
 
-             break;
 
-           }
 
-         }
 
-       }
 
-       $tids = $filtered_tids;
 
-     }
 
-   }
 
-   return $tids;
 
- }
 
- /**
 
-  * callback for updating weights
 
-  * data send through AJAX, $_POST
 
-  * $_POST[$tid] => $weight
 
-  *
 
-  */
 
- function taxonomy_manager_update_weights() {
 
-   $submitted_data = $_POST;
 
-   if (isset($submitted_data['form_token']) && isset($submitted_data['form_id']) && !empty($submitted_data['weights']) && is_array($submitted_data['weights'])) {
 
-     if (drupal_valid_token($submitted_data['form_token'], $submitted_data['form_id'])) {
 
-       foreach ($submitted_data['weights'] as $tid => $weight) {
 
-         if (is_numeric($tid) && is_numeric($weight)) {
 
-           $term = taxonomy_term_load($tid);
 
-           $term->weight = $weight;
 
-           taxonomy_term_save($term);
 
-         }
 
-       }
 
-     }
 
-   }
 
-   exit();
 
- }
 
- /**
 
-  * Submit handler for the export form.
 
-  */
 
- function taxonomy_manager_export_form_submit($form, &$form_state) {
 
-   $voc = $form_state['values']['voc'];
 
-   $selected_tids = $selected_tids = $form_state['values']['taxonomy']['manager']['tree']['selected_terms'];
 
-   $selected_tid = count($selected_tids) ? array_pop($selected_tids) : 0;
 
-   $options = $form_state['values']['export'];
 
-   $options['depth'] = !empty($options['depth']) ? $options['depth'] : NULL;
 
-   $tree = taxonomy_manager_export_get_tree($voc->vid, $selected_tid, $options['depth'], $options['scope']);
 
-   $data = '';
 
-   if ($options['format'] == 'csv') {
 
-     $data = taxonomy_manager_export_csv($tree, $options['csv']['delimiter']);
 
-   }
 
-   elseif ($options['format'] == 'term_tree') {
 
-     $data = taxonomy_manager_export_term_tree($tree);
 
-   }
 
-   $form_state['values']['export']['data'] = $data;
 
-   $form_state['rebuild'] = TRUE;
 
- }
 
- /**
 
-  * Ajax handler for the export form.
 
-  */
 
- function taxonomy_manager_export_ajax_callback($form, $form_state) {
 
-   return $form['export']['data'];
 
- }
 
- /**
 
-  * Generates the CVS Ouput
 
-  */
 
- function taxonomy_manager_export_csv($tree, $delimiter = ";") {
 
-   $output = "";
 
-   foreach ($tree as $term) {
 
-     $array = array();
 
-     $array[] = '"' . $term->vid . '"';
 
-     $array[] = '"' . $term->tid . '"';
 
-     $array[] = '"' . $term->name . '"';
 
-     $array[] = '"' . $term->description . '"';
 
-     foreach ($term->parents as $parent) {
 
-       $array[] = '"' . $parent . '"';
 
-     }
 
-     $output .= implode($delimiter, $array) . "\n";
 
-   }
 
-   return $output;
 
- }
 
- /**
 
-  * Generates term tree export that prefixes child term with dashes.
 
-  *
 
-  * The same format can be used for importing terms (see Add button).
 
-  */
 
- function taxonomy_manager_export_term_tree($tree) {
 
-   $output = "";
 
-   foreach ($tree as $term) {
 
-     // If a term already starts with dashes, we have to escape the name.
 
-     if (substr($term->name, 0, 1) == '-') {
 
-       $name = '"' . $term->name . '"';
 
-     }
 
-     else {
 
-       $name = $term->name;
 
-     }
 
-     $output .= str_repeat('-', $term->depth) . $name . "\n";
 
-   }
 
-   return $output;
 
- }
 
- /**
 
-  * Helper for loading the tree to export.
 
-  */
 
- function taxonomy_manager_export_get_tree($vid, $selected_tid, $depth, $scope) {
 
-   $tree = array();
 
-   if ($scope == 'whole_voc') {
 
-     $tree = taxonomy_get_tree($vid, 0, $depth);
 
-   }
 
-   elseif ($scope == 'children' && $selected_tid) {
 
-     $tree = taxonomy_get_tree($vid, $selected_tid, $depth);
 
-   }
 
-   elseif ($scope == 'root_terms') {
 
-     $tree = taxonomy_get_tree($vid, 0, 1);
 
-   }
 
-   return $tree;
 
- }
 
- /**
 
-  * Helper function that updates the hierarchy settings of a voc
 
-  */
 
- function taxonomy_manager_update_voc($vid, $parents = array()) {
 
-   $voc = taxonomy_vocabulary_load($vid);
 
-   if ($voc->vid == $vid) {
 
-     $current_hierarchy = count($parents);
 
-     if ($current_hierarchy > 2) {
 
-       $current_hierarchy = 2;
 
-     }
 
-     if ($current_hierarchy > $voc->hierarchy) {
 
-       $voc->hierarchy = $current_hierarchy;
 
-       taxonomy_vocabulary_save($voc);
 
-     }
 
-   }
 
- }
 
- /**
 
-  * Retrieve a pipe delimited string of autocomplete suggestions (+synonyms)
 
-  */
 
- function taxonomy_manager_autocomplete_load($vid, $tags_typed = '') {
 
-   // If the request has a '/' in the search text, then the menu system will have
 
-   // split it into multiple arguments, recover the intended $tags_typed.
 
-   $args = func_get_args();
 
-   // Shift off the $field_name argument.
 
-   array_shift($args);
 
-   $tags_typed = implode('/', $args);
 
-   // The user enters a comma-separated list of tags. We only autocomplete the last tag.
 
-   $tags_typed = drupal_explode_tags($tags_typed);
 
-   $last_string = drupal_strtolower(array_pop($tags_typed));
 
-   $matches = array();
 
-   if ($last_string != '') {
 
-     $query = db_select('taxonomy_term_data', 't');
 
-     $query->addTag('translatable');
 
-     $query->addTag('term_access');
 
-     // Do not select already entered terms.
 
-     if (!empty($tags_typed)) {
 
-       $query->condition('t.name', $tags_typed, 'NOT IN');
 
-     }
 
-     // Select rows that match by term name.
 
-     $tags_return = $query
 
-       ->fields('t', array('tid', 'name'))
 
-       ->condition('t.vid', $vid)
 
-       ->condition('t.name', '%' . db_like($last_string) . '%', 'LIKE')
 
-       ->range(0, 30)
 
-       ->execute()
 
-       ->fetchAllKeyed();
 
-     $prefix = count($tags_typed) ? drupal_implode_tags($tags_typed) . ', ' : '';
 
-     $matches = array();
 
-     foreach ($tags_return as $tid => $name) {
 
-       $n = $name;
 
-       // Term names containing commas or quotes must be wrapped in quotes.
 
-       if (strpos($name, ',') !== FALSE || strpos($name, '"') !== FALSE) {
 
-         $n = '"' . str_replace('"', '""', $name) . '"';
 
-       }
 
-       // Add term name to list of matches.
 
-       $matches[$prefix . $n] = check_plain($name);
 
-     }
 
-   }
 
-   drupal_json_output($matches);
 
- }
 
- /**
 
-  * theme function for taxonomy manager form
 
-  */
 
- function theme_taxonomy_manager_form($variables) {
 
-   $form = $variables['form'];
 
-   $pager = theme('pager');
 
-   $tree = drupal_render($form['taxonomy']);
 
-   $term_data = drupal_render($form['term_data']);
 
-   $top = drupal_render_children($form);
 
-   $output = $top . $pager;
 
-   $output .= '<div id="taxonomy-manager" class="admin clear-block">';
 
-   $output .= '<div id="taxonomy-manager-tree-outer-div" class="left clear-block">';
 
-   $output .= $tree;
 
-   $output .= '</div>';
 
-   $output .= '<div id="taxonomy-term-data" class="right clear-block">';
 
-   $output .= $term_data;
 
-   $output .= '</div>';
 
-   $output .= '</div>';
 
-   return $output;
 
- }
 
- /**
 
-  * theme function for taxonomy manager form
 
-  */
 
- function theme_taxonomy_manager_double_tree_form($variables) {
 
-   $form = $variables['form'];
 
-   $pager = theme('pager');
 
-   $tree1 = drupal_render($form['taxonomy']);
 
-   $tree2 = drupal_render($form['taxonomy2']);
 
-   $operations = drupal_render($form['double-tree']);
 
-   $term_data = drupal_render($form['term_data']);
 
-   $top = drupal_render_children($form);
 
-   $output = $top . $pager;
 
-   $output .= '<div id="taxonomy-manager" class="admin clear-block">';
 
-   $output .= '<div id="taxonomy-manager-tree-outer-div" class="left clear-block">';
 
-   $output .= $tree1;
 
-   $output .= '</div>';
 
-   $output .= '<div id="taxonomy-manager-double-tree-operations">';
 
-   $output .= $operations;
 
-   $output .= '</div>';
 
-   $output .= '<div id="taxonomy2-manager-tree-outer-div" class="left clear-block">';
 
-   $output .= $tree2;
 
-   $output .= '</div>';
 
-   $output .= '<div id="taxonomy-term-data" class="term-data-overlay">';
 
-   $output .= $term_data;
 
-   $output .= '</div>';
 
-   $output .= '</div>';
 
-   return $output;
 
- }
 
- /**
 
-  * themes a real button form type (no form submit)
 
-  */
 
- function theme_no_submit_button($variables) {
 
-   $element = $variables['element'];
 
-   /* Make sure not to overwrite classes.
 
-   if (isset($element['#attributes']['class'])) {
 
-     $element['#attributes']['class'][] = 'form-'. $element['#button_type'] .' '. $element['#attributes']['class'];
 
-   }
 
-   else {
 
-     $element['#attributes']['class'][] = 'form-'. $element['#button_type'];
 
-   }*/
 
-   return '<input type="button" ' . (empty($element['#name']) ? '' : 'name="' . $element['#name'] . '" ') . 'id="' . $element['#id'] . '" value="' . check_plain($element['#value']) . '" ' . drupal_attributes($element['#attributes']) . " />\n";
 
- }
 
- /**
 
-  * themes a image type button
 
-  */
 
- function theme_taxonomy_manager_image_button($element) {
 
-   //TODO still used?
 
-   //Make sure not to overwrite classes
 
-   if (isset($element['#attributes']['class'])) {
 
-     $element['#attributes']['class'] = 'form-' . $element['#button_type'] . ' ' . $element['#attributes']['class'];
 
-   }
 
-   else {
 
-     $element['#attributes']['class'] = 'form-' . $element['#button_type'];
 
-   }
 
-   // here the novelty begins: check if #button_type is normal submit button or image button
 
-   $return_string = '<input ';
 
-   if ($element['#button_type'] == 'image') {
 
-     $return_string .= 'type="image" ';
 
-   }
 
-   else {
 
-     $return_string .= 'type="submit" ';
 
-   }
 
-   $return_string .= (empty($element['#id']) ? '' : 'id="' . $element['#id'] . '" ');
 
-   $return_string .= (empty($element['#name']) ? '' : 'name="' . $element['#name'] . '" ');
 
-   $return_string .= 'value="' . check_plain($element['#value']) . '" ';
 
-   $return_string .= drupal_attributes($element['#attributes']) . " />\n";
 
-   return $return_string;
 
- }
 
- function theme_taxonomy_manager_term_data_extra($variables) {
 
-   $element = $variables['element'];
 
-   $rows = array();
 
-   $headers = array();
 
-   foreach (element_children($element['headers']) as $key) {
 
-     if (is_array($element['headers'][$key])) {
 
-       $headers[] = drupal_render($element['headers'][$key]);
 
-     }
 
-   }
 
-   foreach (element_children($element['data']) as $tid) {
 
-     $row = array();
 
-     foreach (element_children($element['data'][$tid]) as $key) {
 
-       if (is_array($element['data'][$tid][$key])) {
 
-         $row[] = array(
 
-           'data' => drupal_render($element['data'][$tid][$key]) . drupal_render($element['data'][$tid][$key]['tid']),
 
-           'class' => isset($element['data'][$tid][$key]['#row-class']) ? $element['data'][$tid][$key]['#row-class'] : '',
 
-         );
 
-       }
 
-     }
 
-     $rows[] = $row;
 
-   }
 
-   $row = array();
 
-   foreach (element_children($element['op']) as $key) {
 
-     if (is_array($element['op'][$key])) {
 
-       //$row[] = drupal_render($element['op'][$key]);
 
-       $row[] = array(
 
-           'data' => drupal_render($element['op'][$key]),
 
-           'class' => isset($element['op'][$key]['#row-class']) ? $element['op'][$key]['#row-class'] : '',
 
-         );
 
-     }
 
-   }
 
-   $rows[] = $row;
 
-   return theme('table', array('header' => $headers, 'rows' => $rows));
 
- }
 
 
  |