Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
66ff837039 | ||
|
|
626ec7eabc | ||
|
|
691ecd7d61 | ||
|
|
930913e764 |
+330
-387
@@ -1,6 +1,4 @@
|
||||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* developed by www.g-u-i.net
|
||||
* 2011
|
||||
@@ -16,6 +14,7 @@
|
||||
/**
|
||||
* Implementation of hook_menu().
|
||||
*/
|
||||
/*
|
||||
function tode_menu() {
|
||||
$items = array();
|
||||
|
||||
@@ -32,6 +31,7 @@ function tode_menu() {
|
||||
|
||||
return $items;
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implementation of hook_theme().
|
||||
@@ -55,12 +55,11 @@ function tode_init() {
|
||||
/**
|
||||
* Implementation of hook_field_widget_info().
|
||||
*/
|
||||
# BUG PLUS
|
||||
function tode_field_widget_info() {
|
||||
|
||||
return array(
|
||||
'tode' => array(
|
||||
'label' => t('Create update/change'),
|
||||
'label' => t('Tode (create then update one unique term)'),
|
||||
'field types' => array('taxonomy_term_reference'),
|
||||
'behaviors' => array(
|
||||
'multiple values' => FIELD_BEHAVIOR_DEFAULT,
|
||||
@@ -68,53 +67,28 @@ function tode_field_widget_info() {
|
||||
),
|
||||
'settings' => array(
|
||||
'size' => 60,
|
||||
'show_term_form'=> 0,
|
||||
'show_term_form'=> -1,
|
||||
'choose_term_parent'=> -1,
|
||||
'maxlength'=> 255,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
# from taxonomy
|
||||
// return array(
|
||||
// 'taxonomy_autocomplete' => array(
|
||||
// 'label' => t('Autocomplete term widget (tagging)'),
|
||||
// 'field types' => array('taxonomy_term_reference'),
|
||||
// 'settings' => array(
|
||||
// 'size' => 60,
|
||||
// 'autocomplete_path' => 'taxonomy/autocomplete',
|
||||
// ),
|
||||
// 'behaviors' => array(
|
||||
// 'multiple values' => FIELD_BEHAVIOR_CUSTOM,
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
//
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Implementation of hook_widget_settings
|
||||
*/
|
||||
#hook_field_widget_settings_form($field, $instance)
|
||||
function tode_field_widget_settings_form($field, $instance){
|
||||
dsm($instance, 'tode_field_widget_settings_form : $instance');
|
||||
dsm($field, 'field');
|
||||
// dsm($instance, 'tode_field_widget_settings_form : $instance');
|
||||
// dsm($field, 'field');
|
||||
|
||||
$widget = $instance['widget'];
|
||||
$settings = $widget['settings'];
|
||||
|
||||
|
||||
$form['tode'] = array(
|
||||
'#type' => 'fieldset',
|
||||
'#title' => t('Settings for terms'),
|
||||
'#collapsible' => TRUE,
|
||||
'#weight' => 10,
|
||||
'#description' => t('First time this field will be used, it will create a new term with the value inserted in the textfield, after that, the term (tid) will always be the same, just update term name by updating the value of the field. You can keep synchronized a fixe term with a node, you can set an auto title from this field, The required, number of value at 1 and term_node synch of global field are required'),
|
||||
);
|
||||
|
||||
// '#description' => t('First time this field will be used, it will create a new term with the value inserted in the textfield, after that, the term (tid) will always be the same, just update term name by updating the value of the field. You can keep synchronized a fixe term with a node, you can set an auto title from this field, The required, number of value at 1 and term_node synch of global field are required')
|
||||
|
||||
$form['tode']['maxlength'] = array(
|
||||
$form['maxlength'] = array(
|
||||
'#type' => 'textfield',
|
||||
'#title' => t('Maximum length of term'),
|
||||
'#default_value' => $settings['maxlength'],
|
||||
@@ -122,44 +96,32 @@ function tode_field_widget_settings_form($field, $instance){
|
||||
'#required' => TRUE,
|
||||
'#description' => t('Defines how many characters can be typed into the text field. For values higher than 255, remember that one term name can not be longer than 255 (would be cutted).'),
|
||||
);
|
||||
|
||||
$form['tode']['show_term_form'] = array(
|
||||
|
||||
/*
|
||||
TODO complete the all flow of this
|
||||
*/
|
||||
$form['show_term_form'] = array(
|
||||
'#type' => 'checkbox',
|
||||
'#title' => t('Show taxonomy term edit form ?'),
|
||||
'#default_value' => $settings['show_term_form'],
|
||||
);
|
||||
//
|
||||
|
||||
/*
|
||||
TODO active_tags : leave this in place because of the multi terms feature in the future
|
||||
*/
|
||||
// if (module_exists('active_tags')) {
|
||||
// $form['update']['active_tags'] = array(
|
||||
// '#type' => 'checkbox',
|
||||
// '#title' => t('Use Active Tags style widget'),
|
||||
// '#default_value' => isset($widget['active_tags']) ? $widget['active_tags'] : 0,
|
||||
// '#description' => t('Use the Active Tags module to improve the usability of this autocomplete widget.'),
|
||||
// );
|
||||
// }
|
||||
$form['choose_term_parent'] = array(
|
||||
'#type' => 'checkbox',
|
||||
'#title' => t('Enable taxonomy term parent selection ?'),
|
||||
'#default_value' => $settings['choose_term_parent'],
|
||||
);
|
||||
|
||||
return $form;
|
||||
|
||||
}
|
||||
|
||||
// function tode_form_content_field_edit_form_alter(&$form, &$form_state){
|
||||
// dsm('tode_form_content_field_edit_form_alter');
|
||||
// /*
|
||||
// TODO add the multi terms feature
|
||||
// */
|
||||
// if($form['type']['#value'] == 'content_taxonomy' && $form['widget_module']['#value'] == 'tode'){
|
||||
// $form['field']['multiple']['#default_value'] = 0; // 0 here is 1 value for the cck field
|
||||
// $form['field']['multiple']['#prefix'] = '<div style="display:none">';
|
||||
// $form['field']['multiple']['#suffix'] = '</div>';
|
||||
// }
|
||||
// }
|
||||
|
||||
function _tode_widget_settings_maxlength_validate($element, &$form_state) {
|
||||
$value = $form_state['values']['maxlength'];
|
||||
// dsm('_tode_widget_settings_maxlength_validate');
|
||||
// dsm($element, '$element');
|
||||
// dsm($form_state, '$form_state');
|
||||
$widget = $form_state['values']['instance']['widget'];
|
||||
$value = $widget['settings']['maxlength'];
|
||||
if (!is_numeric($value) || intval($value) != $value || $value <= 0) {
|
||||
form_error($element, t('"Maximum length" must be a positive integer.'));
|
||||
}
|
||||
@@ -180,8 +142,9 @@ function _tode_widget_settings_maxlength_validate($element, &$form_state) {
|
||||
* http://drupal.org/node/224333#hook_element_info
|
||||
*
|
||||
*/
|
||||
#hook_element_info()
|
||||
function tode_element_info() {
|
||||
#hook_element_info() WHY ??
|
||||
/*
|
||||
function tode_element_info(){
|
||||
return array(
|
||||
'tode' => array(
|
||||
'#input' => TRUE,
|
||||
@@ -191,226 +154,189 @@ function tode_element_info() {
|
||||
),
|
||||
);
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implementation of hook_field_widget_form().
|
||||
*/
|
||||
function tode_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
|
||||
dsm('tode_field_widget_form');
|
||||
dsm($items, 'items');
|
||||
dsm($element, '$element');
|
||||
/*
|
||||
$element['#entity_type']
|
||||
$element['#bundle']
|
||||
$element['#field_name']
|
||||
$element['#language']
|
||||
$element['#columns']
|
||||
$element['#title']
|
||||
$element['#description']
|
||||
$element['#required']
|
||||
$element['#delta']
|
||||
$element['#language']
|
||||
*/
|
||||
|
||||
# thats the original D6 $element
|
||||
// $element = array(
|
||||
// '#type' => 'tode',
|
||||
// '#default_value' => isset($items) ? $items : NULL,
|
||||
// '#vid' => $field['vid'],
|
||||
// );
|
||||
|
||||
# example
|
||||
// // use += to avoid overwriting incoming $element
|
||||
// $element['value'] += array(
|
||||
// // Fill in $element.
|
||||
// );
|
||||
|
||||
// $tags = array();
|
||||
// foreach ($items as $item) {
|
||||
// $tags[$item['tid']] = isset($item['taxonomy_term']) ? $item['taxonomy_term'] : taxonomy_term_load($item['tid']);
|
||||
// }
|
||||
|
||||
$term_name = '';
|
||||
$term_tid = 0;
|
||||
|
||||
if(count($items)){
|
||||
$term = isset($items[0]['taxonomy_term']) ? $items[0]['taxonomy_term'] : taxonomy_term_load($items[0]['tid']);
|
||||
$term_name = $term->term_name;
|
||||
$term_tid = $term->tid;
|
||||
}
|
||||
// dsm('- - - - tode_field_widget_form');
|
||||
// dsm($form, '&$form');
|
||||
// dsm($form_state, '&$form_state');
|
||||
// dsm($items, 'items');
|
||||
// dsm($element, '$element');
|
||||
// dsm($field, '$field');
|
||||
// dsm($instance, '$instance');
|
||||
|
||||
$element['tode_tid'] = array('#type' => 'hidden', '#value' => $term_tid,'#delta' => $element['#delta'],);
|
||||
|
||||
$node = $form_state['node'];
|
||||
// dsm($node, '$node');
|
||||
|
||||
if(isset($items[$delta])){
|
||||
$term = taxonomy_term_load($items[$delta]['tid']);
|
||||
// $term = i18n_taxonomy_term_get_translation($term, $node->language); // marche pas avec localized term
|
||||
// dsm($term, '$term');
|
||||
$term_parents = taxonomy_get_parents($term->tid);
|
||||
// dsm($term_parents, '$term_parents');
|
||||
$term_parent = array_pop($term_parents);
|
||||
}
|
||||
|
||||
# no need of $node->translation_source because with node translation (not entity fields translation) tid remains
|
||||
# just have to translate term name on submit
|
||||
// if( !isset($node->id) && isset($node->translation_source) ){
|
||||
// }
|
||||
|
||||
$form['tode_tid'] = array('#type' => 'hidden', '#value' => isset($term) ? $term->tid : 0,'#delta' => $element['#delta'],);
|
||||
|
||||
# parent
|
||||
if( $instance['widget']['settings']['choose_term_parent'] ){
|
||||
// add parent form autocomplete if activated
|
||||
$vocabularies = array();
|
||||
foreach ($field['settings']['allowed_values'] as $tree)
|
||||
if ($vocabulary = taxonomy_vocabulary_machine_name_load($tree['vocabulary']))
|
||||
$vocabularies[$vocabulary->vid] = $vocabulary;
|
||||
|
||||
$vocabulary = reset($vocabularies);
|
||||
// dsm($vocabulary, '$vocabulary');
|
||||
|
||||
$form['tode_vid'] = array('#type' => 'hidden', '#value' => $vocabulary->vid,'#delta' => $element['#delta'],);
|
||||
|
||||
$form['tode_parent_term'] = array(
|
||||
'#title' => 'Parent ' . $vocabulary->name . ' (optional)',
|
||||
'#type' => 'textfield',
|
||||
'#default_value' => isset($term_parent) ? $term_parent->name : '',
|
||||
'#autocomplete_path' => 'taxonomy/autocomplete' . '/' . $field['field_name'],
|
||||
'#size' => 60,
|
||||
'#maxlength' => 1024,
|
||||
'#element_validate' => array('tode_parent_autocomplete_validate'),
|
||||
);
|
||||
|
||||
}else{
|
||||
// if parent selection not enabled set the current parent as hidden input
|
||||
$form['tode_parent_term'] = array(
|
||||
'#type' => 'hidden',
|
||||
'#value' => isset($term_parent) ? $term_parent->name : '',
|
||||
'#delta' => $element['#delta'],
|
||||
);
|
||||
}
|
||||
|
||||
// set element form item
|
||||
$element += array(
|
||||
'#type' => 'textfield',
|
||||
'#default_value' => $term_name,
|
||||
'#default_value' => isset($term) ? i18n_taxonomy_term_name($term, $node->language) : '',
|
||||
'#size' => $instance['widget']['settings']['size'],
|
||||
'#maxlength' => $instance['widget']['settings']['maxlength'],
|
||||
'#element_validate' => array('tode_validate'),
|
||||
);
|
||||
|
||||
|
||||
# add the term edit form
|
||||
// if(isset($value))
|
||||
// _tode_add_term_form($element, $term, $widget['show_term_form']);
|
||||
if(isset($term))
|
||||
_tode_add_term_form($form, $term, $instance, $element['#delta']);
|
||||
|
||||
// dsm($form, 'end tode_field_widget_form :: $form');
|
||||
return $element;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process an individual element.
|
||||
*
|
||||
* Build the form element. When creating a form using FAPI #process,
|
||||
* note that $element['#value'] is already set.
|
||||
*
|
||||
*/
|
||||
# OLD NOT USED ANY MORE, TRANSPOSE THIS CODE (ALL OR PART) ON hook_field_widget_form();
|
||||
function tode_element_process($element, $edit, $form_state, $form) {
|
||||
// dsm('tode widget process');
|
||||
// dsm($form, 'form');
|
||||
// dsm($element, 'element');
|
||||
|
||||
$field_name = $element['#field_name'];
|
||||
$field = $form['#field_info'][$field_name];
|
||||
$field_key = $element['#columns'][0];
|
||||
// dsm($field);
|
||||
$widget = $field['widget'];
|
||||
|
||||
$value = NULL;
|
||||
if (count($element['#default_value'])) {
|
||||
$term = taxonomy_get_term($element['#default_value'][0][$field_key]);
|
||||
// dsm($term);
|
||||
$value = $term->name;
|
||||
}
|
||||
|
||||
# converting the tid to term name on visible value oh the text field, we re-convert terma name to tid on the validat function
|
||||
$element['#default_value'][0][$field_key] = $value;
|
||||
$element['#value'][$field_key] = $value;
|
||||
|
||||
# memorize the tid for the validate function
|
||||
if($value)
|
||||
$element['tode_tid'] = array('#type' => 'hidden', '#value' => $term->tid,'#delta' => $element['#delta'],);
|
||||
|
||||
$element[$field_key] = array(
|
||||
'#type' => 'textfield',
|
||||
'#default_value' => isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : '',
|
||||
'#title' => $element['#title'],
|
||||
'#required' => $element['#required'],
|
||||
'#description' => $element['#description'],
|
||||
'#field_name' => $element['#field_name'],
|
||||
'#type_name' => $element['#type_name'],
|
||||
'#delta' => $element['#delta'],
|
||||
'#columns' => $element['#columns'],
|
||||
'#maxlength' => !empty($field['widget']['maxlength']) ? $field['widget']['maxlength'] : 255,
|
||||
);
|
||||
|
||||
# add the term edit form
|
||||
if(isset($value))
|
||||
_tode_add_term_form($element, $term, $widget['show_term_form']);
|
||||
|
||||
# add validation for the fieldform to retrive tid instead of term name (content taxonomy module), As i know we can't add a submit callback to the form from the widget
|
||||
if (empty($element[$field_key]['#element_validate']))
|
||||
$element[$field_key]['#element_validate'] = array();
|
||||
//
|
||||
array_unshift($element[$field_key]['#element_validate'], 'tode_validate');
|
||||
# replace validate with submit added on form alter
|
||||
|
||||
// dsm($form_state, 'form_state');
|
||||
// dsm($element, 'element');
|
||||
|
||||
return $element;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* _tode_add_term_form($term)
|
||||
*
|
||||
* show the complete taxonomy term form if feature is enabled
|
||||
*
|
||||
*/
|
||||
function _tode_add_term_form(&$element, $term, $show){
|
||||
function _tode_add_term_form(&$form, $term, $instance, $delta){
|
||||
// dsm('- - - - _tode_add_term_form');
|
||||
module_load_include('inc', 'taxonomy', 'taxonomy.admin');
|
||||
|
||||
$term_form = _tode_term_form($term->tid);
|
||||
$term_form = _tode_term_form($term);
|
||||
// dsm($term_form, 'term_form');
|
||||
|
||||
if($term_form){
|
||||
|
||||
$term_form['identification']['#prefix'] = '<div style="display:none;">';
|
||||
$term_form['identification']['#suffix'] = '</div>';
|
||||
$term_form['advanced']['synonyms']['#prefix'] = '<div style="display:none;">';
|
||||
$term_form['advanced']['synonyms']['#suffix'] = '</div>';
|
||||
$term_form['advanced']['weight']['#prefix'] = '<div style="display:none;">';
|
||||
$term_form['advanced']['weight']['#suffix'] = '</div>';
|
||||
$term_form['advanced']['parent']['#prefix'] = '<div style="display:none;">';
|
||||
$term_form['advanced']['parent']['#suffix'] = '</div>';
|
||||
$term_form['advanced']['relations']['#prefix'] = '<div style="display:none;">';
|
||||
$term_form['advanced']['relations']['#suffix'] = '</div>';
|
||||
|
||||
# change appearence of adavnced fiedset to show both fiedlset inline
|
||||
$term_form['advanced']['#collapsible'] = FALSE;
|
||||
$term_form['fields']['#collapsible'] = FALSE;
|
||||
|
||||
_tode_trim_options($term_form, 'advanced');
|
||||
$term_form['advanced']['#attributes'] = array('class'=>'tcu-advanced-options');
|
||||
$term_form['fields']['#attributes'] = array('class'=>'tcu-term-fields');
|
||||
|
||||
foreach($term_form['fields'] as $field_name => $field){
|
||||
if($field['#type'] == 'textfield')
|
||||
$field['#size'] = 30;
|
||||
|
||||
$term_form['fields'][$field_name] = $field;
|
||||
}
|
||||
|
||||
unset($term_form['submit']);
|
||||
unset($term_form['delete']);
|
||||
unset($term_form['actions']);
|
||||
unset($term_form['#action']);
|
||||
unset($term_form['#method']);
|
||||
|
||||
#unset vid info 'cause is in conflict with the node's vid field
|
||||
// unset($term_form['vid']);
|
||||
unset($term_form['vid']);
|
||||
|
||||
$term_form = _tode_clean_form($term_form);
|
||||
|
||||
$element['term_form'] = array(
|
||||
$prefix = 'tode_termform_'.$instance['field_name'];
|
||||
$term_form = _tode_prefix_form($term_form, $prefix.'_');
|
||||
|
||||
$visible = $instance['widget']['settings']['show_term_form'];
|
||||
|
||||
$form[$prefix] = array(
|
||||
'#type' => 'fieldset',
|
||||
'#title' => t('Term edit'),
|
||||
'#tree' => TRUE,
|
||||
'#collapsible' => TRUE,
|
||||
'#collapsed' => FALSE,
|
||||
'#weight'=>1,
|
||||
'#group'=>'additional_settings',
|
||||
// '#group'=>'additional_settings',
|
||||
'#prefix' => $visible ? null : '<div style="display:none;">',
|
||||
'#suffix' => $visible ? null : '</div>',
|
||||
);
|
||||
|
||||
if(!$show){
|
||||
$element['term_form']['#prefix'] = '<div style="display:none;">';
|
||||
$element['term_form']['#suffix'] = '</div>';
|
||||
}
|
||||
|
||||
$form[$prefix] += $term_form;
|
||||
|
||||
$term_form = _tode_prefix_form($term_form, 'tode_termform_'.$element['#field_name'].'_');
|
||||
|
||||
$element['term_form'] += $term_form;
|
||||
|
||||
$element['tode_termform'] = array('#type' => 'hidden', '#value' => 'true','#delta' => $element['#delta'],);
|
||||
// $form['tode_termform'] = array('#type' => 'hidden', '#value' => 'true','#delta' => $delta,);
|
||||
|
||||
// $element['#prefix'] = '<div class="tode-term-edit-form-box">';
|
||||
// $element['#suffix'] = '</div>';
|
||||
|
||||
// dsm($element, 'element');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Form element validate handler for tode parent term autocomplete element.
|
||||
*/
|
||||
function tode_parent_autocomplete_validate($element, &$form_state) {
|
||||
// dsm('- - - - tode_autocomplete_validate');
|
||||
// dsm($element, '$element');
|
||||
// dsm($form_state, '$form_state');
|
||||
|
||||
$value = array();
|
||||
if ($typed_term = $element['#value']) {
|
||||
// Translate term names into actual terms.
|
||||
// See if the term exists in the chosen vocabulary and return the tid;
|
||||
// otherwise, set error.
|
||||
if ($possibilities = taxonomy_term_load_multiple(array(), array('name' => trim($typed_term), 'vid' => $form_state['values']['tode_vid']))) {
|
||||
$term = array_pop($possibilities);
|
||||
$value = (array)$term;
|
||||
}
|
||||
else {
|
||||
form_error($element, t('Parent term can only be an existing term.'));
|
||||
}
|
||||
}
|
||||
//
|
||||
// dsm('form_set_value');
|
||||
form_set_value($element, $value, $form_state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validation function for the tode element
|
||||
*
|
||||
* parses input and sets the values as needed (tid) for storing the data
|
||||
*/
|
||||
function tode_validate($element, &$form_state){
|
||||
dsm('tode_validate');
|
||||
dsm($form_state, 'form_state');
|
||||
dsm($element, 'element');
|
||||
|
||||
// dsm('- - - - tode_validate');
|
||||
// dsm($form_state, 'form_state');
|
||||
// dsm($element, 'element');
|
||||
|
||||
$node = $form_state['node'];
|
||||
|
||||
/*
|
||||
TODO term translation (entity translate + node title question)
|
||||
*/
|
||||
|
||||
$value = array();
|
||||
if ($typed_term = $element['#value']) {
|
||||
$field = field_widget_field($element, $form_state);
|
||||
dsm($field, 'field');
|
||||
// dsm($field, 'field');
|
||||
|
||||
$vocabularies = array();
|
||||
foreach ($field['settings']['allowed_values'] as $tree) {
|
||||
@@ -419,71 +345,35 @@ function tode_validate($element, &$form_state){
|
||||
}
|
||||
}
|
||||
|
||||
// get the parent term tid or 0 (no parents)
|
||||
$parent_tid = isset($form_state['values']['tode_parent_term']['tid']) ? $form_state['values']['tode_parent_term']['tid'] : 0;
|
||||
|
||||
|
||||
|
||||
// See if the term exists in the chosen vocabulary and return the tid;
|
||||
// otherwise, create a new 'autocreate' term for insert/update.
|
||||
if($tid = $element['tode_tid']['#value']){
|
||||
// See if the term already exists and load the term
|
||||
// otherwise, create a new 'autocreate' term for insert.
|
||||
if($tid = $form_state['values']['tode_tid']){
|
||||
$term = taxonomy_term_load($tid);
|
||||
|
||||
$term->name = $typed_term;
|
||||
$term->parent = $parent_tid;
|
||||
|
||||
}else{
|
||||
$vocabulary = reset($vocabularies);
|
||||
$term = array(
|
||||
'tid' => 'autocreate',
|
||||
$term = (object)array(
|
||||
// 'tid' => 'autocreate', // autocreate not nbeeded with direct taxonomy_term_save
|
||||
'vid' => $vocabulary->vid,
|
||||
'name' => $typed_term,
|
||||
'vocabulary_machine_name' => $vocabulary->machine_name,
|
||||
'parent' => $parent_tid,
|
||||
);
|
||||
taxonomy_term_save($term); // save here the new term to directly get the tid on hook_node_validate
|
||||
}
|
||||
|
||||
dsm($term, '$term');
|
||||
|
||||
$value[] = (array)$term;
|
||||
|
||||
// dsm($term, '$term');
|
||||
$value = (array)$term;
|
||||
}
|
||||
dsm($value, '$value');
|
||||
|
||||
// dsm($value, '$value');
|
||||
form_set_value($element, $value, $form_state);
|
||||
|
||||
|
||||
// $field_name = $element['#field_name'];
|
||||
// $field = content_fields($field_name, $element['#type_name']);
|
||||
// $field_key = $element['#columns'][0];
|
||||
//
|
||||
// #if the element parents array contains the field key, we have to remove it
|
||||
// #because otherwise form_set_value won't work. (still the question why is it in)
|
||||
// if ($element['#parents'][count($element['#parents'])-1] == $field_key) {
|
||||
// array_pop($element['#parents']);
|
||||
// array_pop($element['#array_parents']);
|
||||
// }
|
||||
//
|
||||
// $term_name = $element['#value'] != '' ? $element['#value'] : ($element['#default_value'] != '' ? $element['#default_value'] : NULL);
|
||||
// // dsm($term_name, 'term_name');
|
||||
// $form_state['values']['tode_termform_'.$field_name.'_name'] = $term_name;
|
||||
//
|
||||
// $tid = isset($form_state['values'][$field_name]['tode_tid']) ? $form_state['values'][$field_name]['tode_tid'] : NULL;
|
||||
// // dsm($tid, 'tid');
|
||||
// $value = array();
|
||||
// if($tid){
|
||||
// $value[$tid] = $tid;
|
||||
// }else{
|
||||
// # if no tid it says that we create a node so a term
|
||||
// $term = array(
|
||||
// "vid" => $field['vid'],
|
||||
// "name" => $term_name,
|
||||
// "parent" => $field['widget']['extra_parent'] ? $field['widget']['extra_parent'] : content_taxonomy_field_get_parent($field),
|
||||
// );
|
||||
// $status = taxonomy_save_term($term);
|
||||
// $value[$term['tid']] = $term['tid'];
|
||||
// }
|
||||
//
|
||||
// $values = content_transpose_array_rows_cols(array($element['#columns'][0] => $value));
|
||||
// // dsm($values, 'values');
|
||||
// form_set_value($element, $values, $form_state);
|
||||
//
|
||||
// // dsm($element, 'element');
|
||||
// // dsm($form_state, 'form_state');
|
||||
|
||||
// form_set_value($element, $value, $form_state);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -495,84 +385,96 @@ function tode_field_widget_error($element, $error, $form, &$form_state) {
|
||||
}
|
||||
|
||||
/**
|
||||
* implementation of hook_nodeapi()
|
||||
*
|
||||
* process the tode term on node create or update
|
||||
* we make this on nodeapi cause we can't cache field save from a widget … mayde in D7
|
||||
*
|
||||
* Implements hook_node_validate().
|
||||
*
|
||||
* use to save the all term form (steel have to be debuged)
|
||||
*
|
||||
*/
|
||||
/*
|
||||
TODO add term translation feature
|
||||
*/
|
||||
function tode_node_validate($node, $form, &$form_state){
|
||||
// dsm('- - - tode_node_validate');
|
||||
// dsm($node, '$node');
|
||||
// dsm($form, '$form');
|
||||
// dsm($form_state, '$form_state');
|
||||
|
||||
function tode_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL){
|
||||
// dsm($op, 'tode nodeapi : op');
|
||||
switch($op){
|
||||
// case 'presave':
|
||||
case 'update':
|
||||
// tode_save($node);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* submit values
|
||||
*/
|
||||
function tode_save($node) {
|
||||
|
||||
module_load_include('inc', 'taxonomy', 'taxonomy.admin');
|
||||
// module_load_include('inc', 'i18n_string', 'i18n_string.pages');
|
||||
//
|
||||
$tode_fields = _tode_get_tode_fields_def($node);
|
||||
// dsm($tode_fields, '$tode_fields');
|
||||
|
||||
// dsm('tode save');
|
||||
// dsm($node, 'tode submit : node');
|
||||
|
||||
$tode_fields = _tode_get_tode_fields_def($node->type);
|
||||
|
||||
if(!count($tode_fields))
|
||||
return;
|
||||
|
||||
|
||||
$language = $node->language;
|
||||
|
||||
$default_language = language_default('language');
|
||||
// dsm($default_language, '$default_language');
|
||||
|
||||
foreach ($tode_fields as $field_name => $field) {
|
||||
$values = array();
|
||||
$prefix = 'tode_termform_'.$field_name.'_';
|
||||
foreach ($node as $key => $value) {
|
||||
if(strpos($key, $prefix) !== FALSE)
|
||||
$values[$key] = $value;
|
||||
|
||||
// retreive the prefixed termfom values (hidden or visible)
|
||||
$prefix = 'tode_termform_'.$field_name;
|
||||
|
||||
// if we do not have the term form (node creation)
|
||||
if( !isset($form_state['values'][$prefix]) ){
|
||||
$tode_field_term_value = $form_state['values'][$field_name]['und'][0]; // on node creation field language is always to und (sure ?)
|
||||
|
||||
// test the language, if not default language create the term name translation
|
||||
if( $form_state['values']['language'] != 'und' || $form_state['values']['language'] != $default_language){
|
||||
$context= array('term',$tode_field_term_value['tid'],'name');
|
||||
i18n_string_textgroup('taxonomy')->update_translation($context, $language, $tode_field_term_value['name']);
|
||||
}
|
||||
|
||||
continue;
|
||||
}else{
|
||||
// retreive the initial tode_field language
|
||||
$init_language = $form[$field_name]['#language'];
|
||||
|
||||
// retreive the value of term field, to get the typed term name
|
||||
$tode_field_term_value = $form_state['values'][$field_name][$init_language][0];
|
||||
// dsm($tode_field_term_value, '$tode_field_term_value');
|
||||
|
||||
$values = _tode_prefix_form($form_state['values'][$prefix], $prefix.'_', FALSE);
|
||||
// dsm($values, 'values');
|
||||
|
||||
if($language == 'und' || $language == $default_language || !module_exists('i18n_taxonomy')){
|
||||
|
||||
// define the form_state for term_form submit
|
||||
$new_term_form_state = array(
|
||||
'build_info'=>array(
|
||||
'args'=>array(0=>(object)$tode_field_term_value),
|
||||
),
|
||||
"values"=>array(
|
||||
'name'=> $tode_field_term_value['name'], // replace the original (hidden) term name value by the typed in the the entity field
|
||||
'op'=> t('Save'),
|
||||
)
|
||||
);
|
||||
// add new values to form_state
|
||||
$new_term_form_state['values'] += $values;
|
||||
|
||||
// dsm($new_term_form_state, 'form_state');
|
||||
drupal_form_submit('taxonomy_form_term', $new_term_form_state);
|
||||
}else{
|
||||
|
||||
$context= array('term',$values['tid'],'name');
|
||||
|
||||
i18n_string_textgroup('taxonomy')->update_translation($context, $language, $tode_field_term_value['name']);
|
||||
}
|
||||
}
|
||||
// dsm($values, 'values');
|
||||
$values = _tode_prefix_form($values, $prefix, FALSE);
|
||||
// dsm($values, 'values');
|
||||
|
||||
$array_term = (array)taxonomy_get_term($values['tid']);
|
||||
|
||||
foreach ($values as $key => $value) {
|
||||
if(is_array($value))
|
||||
$values += $value;
|
||||
}
|
||||
|
||||
$array_term = (array)taxonomy_get_term($values['tid']);
|
||||
|
||||
// dsm($values, 'values');
|
||||
|
||||
$form_state = array();
|
||||
$form_state['values'] = $values;
|
||||
$form_state['values']['op'] = t('Save');
|
||||
|
||||
// dsm($form_state, 'form_state');
|
||||
|
||||
drupal_execute('taxonomy_form_term', $form_state, taxonomy_vocabulary_load($array_term['vid']), $array_term);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* theme_tode
|
||||
*
|
||||
*/
|
||||
function theme_tode($element) {
|
||||
return $element['#children'];
|
||||
}
|
||||
|
||||
|
||||
// function theme_tode($element) {1
|
||||
// dsm('theme_tode');
|
||||
// dsm($element, '$element');
|
||||
// return $element['#children'];
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
@@ -583,76 +485,110 @@ function theme_tode($element) {
|
||||
*/
|
||||
function tode_form_alter(&$form, $form_state, $form_id){
|
||||
|
||||
/*
|
||||
TODO block the deletion if tode term has children !! cause will delete them to …
|
||||
*/
|
||||
|
||||
if (stripos($form_id, 'node_delete_confirm') !== false){
|
||||
// dsm($form_id, 'tode form_alter form_id');
|
||||
/*
|
||||
TODO test deletion
|
||||
*/
|
||||
_tode_node_delete_form_alter($form, $form_state);
|
||||
// dsm($form);
|
||||
}else if(stripos($form_id, 'node_admin_content') !== false){
|
||||
if(isset($form['operation']) && $form['operation']['#value'] == 'delete'){
|
||||
// dsm($form, 'node_admin_content form');
|
||||
// dsm($form_state, 'form_state');
|
||||
_tode_nodes_delete_form_alter($form, $form_state);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function _tode_node_delete_form_alter(&$form){
|
||||
function _tode_node_delete_form_alter(&$form, $form_state){
|
||||
// dsm($form, '_tode_node_delete_form_alter : form');
|
||||
#get the node
|
||||
$node = $form['#parameters'][2];
|
||||
// dsm($node);
|
||||
|
||||
# why that tnid ???
|
||||
// if($node->tnid != 0)
|
||||
// return;
|
||||
// get the node
|
||||
$node = $form['#node'];
|
||||
// dsm($node, '$node');
|
||||
|
||||
#get the fields defenition of node type
|
||||
$tode_fields = _tode_get_tode_fields_def($node->type);
|
||||
//dsm($tode_fields);
|
||||
$tode_fields = _tode_get_tode_fields_def($node);
|
||||
// dsm($tode_fields);
|
||||
|
||||
if(count($tode_fields) == 0)
|
||||
return;
|
||||
|
||||
#get the terms value
|
||||
$terms = array();
|
||||
$tids = array();
|
||||
foreach ($tode_fields as $field_name => $field) {
|
||||
foreach ($node->$field_name as $term) {
|
||||
$term = taxonomy_get_term($term['value']);
|
||||
$terms[] = $term->name;
|
||||
$tids[] = $term->tid;
|
||||
}
|
||||
$terms = array('names'=>array(), 'tids'=>array());
|
||||
foreach ($tode_fields as $field_name => $field)
|
||||
_tode_populate_terms_node_delete($terms, $node->$field_name);
|
||||
|
||||
_tode_node_delete_prepare_form($form, $terms);
|
||||
}
|
||||
|
||||
function _tode_nodes_delete_form_alter(&$form, $form_state){
|
||||
// dsm($form, '_tode_nodes_delete_form_alter : form');
|
||||
$nodes = array();
|
||||
foreach ($form_state['values']['nodes'] as $nid => $actif)
|
||||
if($actif)
|
||||
$nodes[] = node_load($nid);
|
||||
|
||||
#get the terms value
|
||||
$terms = array('names'=>array(), 'tids'=>array());
|
||||
foreach ($nodes as $node) {
|
||||
#get the fields definition of node type
|
||||
$tode_fields = _tode_get_tode_fields_def($node);
|
||||
//dsm($tode_fields);
|
||||
|
||||
if(count($tode_fields) == 0)
|
||||
continue;
|
||||
|
||||
foreach ($tode_fields as $field_name => $field)
|
||||
_tode_populate_terms_node_delete($terms, $node->$field_name);
|
||||
|
||||
}
|
||||
|
||||
_tode_node_delete_prepare_form($form, $terms);
|
||||
}
|
||||
|
||||
function _tode_populate_terms_node_delete(&$terms, $tode_field){
|
||||
foreach ($tode_field as $language) {
|
||||
foreach ($language as $term) {
|
||||
$term = taxonomy_term_load($term['tid']);
|
||||
if(!in_array($term->tid, $terms['tids'])){
|
||||
$terms['names'][] = $term->name;
|
||||
$terms['tids'][] = $term->tid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _tode_node_delete_prepare_form(&$form, $terms){
|
||||
if(count($terms)){
|
||||
/*
|
||||
TODO add here a checkbox to select terms to delete
|
||||
*/
|
||||
#add some warning in form description
|
||||
$form['description']['#value'] .= '<br />'.t('this will also delete taxonomy terms : %terms', array('%terms'=>implode(', ', $terms)));
|
||||
$form['description']['#markup'] .= '<br />'.t('this will also delete taxonomy terms : %terms', array('%terms'=>implode(', ', $terms['names'])));
|
||||
|
||||
$form['tode_delete'] = array( '#type' => 'hidden', '#value' => serialize($tids),);
|
||||
$form['tode_delete'] = array( '#type' => 'hidden', '#value' => serialize($terms['tids']),);
|
||||
|
||||
$form['tode_terms'] = array('#type' => 'hidden', '#value' => serialize($terms),);
|
||||
$form['tode_terms'] = array('#type' => 'hidden', '#value' => serialize($terms['names']),);
|
||||
|
||||
$form['#submit'][] = 'tode_delete_submit';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function tode_delete_submit($form, &$form_state){
|
||||
$tids = unserialize($form['tode_delete']['#value']);
|
||||
foreach ($tids as $tid)
|
||||
taxonomy_del_term($tid);
|
||||
taxonomy_term_delete($tid);
|
||||
|
||||
$terms = unserialize($form['tode_terms']['#value']);
|
||||
drupal_set_message(t('Following Taxonomy terms have been deleted : %terms', array('%terms' => implode(', ', $terms) )), 'status');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* HELPERS
|
||||
*/
|
||||
@@ -662,13 +598,13 @@ function tode_delete_submit($form, &$form_state){
|
||||
// return $prefix.$k;
|
||||
// }
|
||||
|
||||
|
||||
function _tode_clean_form($form){
|
||||
function _tode_clean_form($form, $level = 0){
|
||||
foreach ($form as $key => $value) {
|
||||
if(strpos($key,'#') !== false){
|
||||
unset($form[$key]);
|
||||
if(strpos($key,'#') !== false || $key == 'form_build_id' || $key == 'form_id' || $key == 'form_token'){
|
||||
if( $level == 0 || $key == "#element_validate")
|
||||
unset($form[$key]);
|
||||
}elseif(is_array($value)){
|
||||
$form[$key] = _tode_clean_form($value);
|
||||
$form[$key] = _tode_clean_form($value, $level+1);
|
||||
}
|
||||
}
|
||||
return $form;
|
||||
@@ -679,7 +615,7 @@ function _tode_prefix_form($form, $prefix = '', $add = TRUE){
|
||||
foreach ($form as $key => $value) {
|
||||
if(strpos($key,'#') === false){
|
||||
|
||||
if($value['#type'] == 'fieldset' || (!$add && is_array($value)))
|
||||
if((isset($value['#type']) && $value['#type'] == 'fieldset') || (!$add && is_array($value)))
|
||||
$value = _tode_prefix_form($value, $prefix, $add);
|
||||
|
||||
if($add){
|
||||
@@ -700,12 +636,19 @@ function _tode_prefix_form($form, $prefix = '', $add = TRUE){
|
||||
* _tode_term_form($tid)
|
||||
*
|
||||
*/
|
||||
function _tode_term_form($tid){
|
||||
|
||||
if ($array_term = (array)taxonomy_get_term($tid)) {
|
||||
function _tode_term_form($term){
|
||||
// dsm('_tode_term_form');
|
||||
if ($term) {
|
||||
|
||||
$form_state = array();
|
||||
$term_form = drupal_retrieve_form('taxonomy_form_term', $form_state, taxonomy_vocabulary_load($array_term['vid']), $array_term);
|
||||
$form_state = array(
|
||||
'build_info'=>array(
|
||||
'args'=>array(0=>$term)
|
||||
),
|
||||
'method'=>'post',
|
||||
);
|
||||
|
||||
// function taxonomy_form_term($form, &$form_state, $edit = array(), $vocabulary = NULL) {
|
||||
$term_form = drupal_retrieve_form('taxonomy_form_term', $form_state);
|
||||
drupal_prepare_form('taxonomy_form_term', $term_form, $form_state);
|
||||
|
||||
return $term_form;
|
||||
@@ -740,18 +683,18 @@ function _tode_trim_options(&$form, $item){
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* OK OK OK
|
||||
*/
|
||||
function _tode_get_tode_fields_def($type){
|
||||
// dsm($type, '_tode_get_fields_def');
|
||||
function _tode_get_tode_fields_def($node){
|
||||
// dsm($node, '_tode_get_fields_def');
|
||||
|
||||
#get the fields defenition of node type
|
||||
$type_fields = content_types($type);
|
||||
$type_fields = field_info_instances('node');
|
||||
// dsm($type_fields, 'type_fields definition');
|
||||
|
||||
#get the tode node fields
|
||||
$tode_fields = array();
|
||||
foreach ($type_fields['fields'] as $field_name => $field) {
|
||||
foreach ($type_fields[$node->type] as $field_name => $field) {
|
||||
if($field['widget']['type'] == 'tode')
|
||||
$tode_fields[$field_name] = $field;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user