123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761 |
- <?php
- function tode_menu() {
- $items = array();
-
-
-
-
-
-
-
-
-
-
- return $items;
- }
- function tode_theme() {
- return array(
- 'tode' => array(
- 'arguments' => array('element' => NULL),
- ),
- );
- }
- function tode_init() {
-
- drupal_add_css(drupal_get_path('module', 'tode') .'/tode.css');
- }
- function tode_field_widget_info() {
-
- return array(
- 'tode' => array(
- 'label' => t('Create update/change'),
- 'field types' => array('taxonomy_term_reference'),
- 'behaviors' => array(
- 'multiple values' => FIELD_BEHAVIOR_DEFAULT,
- 'default value' => FIELD_BEHAVIOR_NONE,
- ),
- 'settings' => array(
- 'size' => 60,
- 'show_term_form'=> 0,
- 'maxlength'=> 255,
- ),
- ),
- );
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- function tode_field_widget_settings_form($field, $instance){
- 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'),
- );
-
-
- $form['tode']['maxlength'] = array(
- '#type' => 'textfield',
- '#title' => t('Maximum length of term'),
- '#default_value' => $settings['maxlength'],
- '#element_validate' => array('_tode_widget_settings_maxlength_validate'),
- '#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(
- '#type' => 'checkbox',
- '#title' => t('Show taxonomy term edit form ?'),
- '#default_value' => $settings['show_term_form'],
- );
-
-
-
-
-
-
-
-
-
-
- return $form;
-
- }
- function _tode_widget_settings_maxlength_validate($element, &$form_state) {
- $value = $form_state['values']['maxlength'];
- if (!is_numeric($value) || intval($value) != $value || $value <= 0) {
- form_error($element, t('"Maximum length" must be a positive integer.'));
- }
- }
- function tode_element_info() {
- return array(
- 'tode' => array(
- '#input' => TRUE,
- '#columns' => array('value'),
- '#delta' => 0,
- '#process' => array('tode_element_process'),
- ),
- );
- }
- 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');
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $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;
- }
- $element['tode_tid'] = array('#type' => 'hidden', '#value' => $term_tid,'#delta' => $element['#delta'],);
-
- $element += array(
- '#type' => 'textfield',
- '#default_value' => $term_name,
- '#size' => $instance['widget']['settings']['size'],
- '#maxlength' => $instance['widget']['settings']['maxlength'],
- '#element_validate' => array('tode_validate'),
- );
-
-
-
-
-
- return $element;
- }
- function tode_element_process($element, $edit, $form_state, $form) {
-
-
-
- $field_name = $element['#field_name'];
- $field = $form['#field_info'][$field_name];
- $field_key = $element['#columns'][0];
-
- $widget = $field['widget'];
- $value = NULL;
- if (count($element['#default_value'])) {
- $term = taxonomy_get_term($element['#default_value'][0][$field_key]);
-
- $value = $term->name;
- }
-
-
- $element['#default_value'][0][$field_key] = $value;
- $element['#value'][$field_key] = $value;
-
-
- 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,
- );
-
- if(isset($value))
- _tode_add_term_form($element, $term, $widget['show_term_form']);
-
-
- if (empty($element[$field_key]['#element_validate']))
- $element[$field_key]['#element_validate'] = array();
-
- array_unshift($element[$field_key]['#element_validate'], 'tode_validate');
-
-
-
-
- return $element;
- }
- function _tode_add_term_form(&$element, $term, $show){
- module_load_include('inc', 'taxonomy', 'taxonomy.admin');
-
- $term_form = _tode_term_form($term->tid);
-
-
- 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>';
-
- $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']);
-
-
-
- $element['term_form'] = array(
- '#type' => 'fieldset',
- '#title' => t('Term edit'),
- '#tree' => TRUE,
- '#collapsible' => TRUE,
- '#collapsed' => FALSE,
- '#weight'=>1,
- '#group'=>'additional_settings',
- );
-
- if(!$show){
- $element['term_form']['#prefix'] = '<div style="display:none;">';
- $element['term_form']['#suffix'] = '</div>';
- }
- $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'],);
-
-
-
-
- }
- }
- function tode_validate($element, &$form_state){
- dsm('tode_validate');
- dsm($form_state, 'form_state');
- dsm($element, 'element');
- $value = array();
- if ($typed_term = $element['#value']) {
- $field = field_widget_field($element, $form_state);
- dsm($field, 'field');
- $vocabularies = array();
- foreach ($field['settings']['allowed_values'] as $tree) {
- if ($vocabulary = taxonomy_vocabulary_machine_name_load($tree['vocabulary'])) {
- $vocabularies[$vocabulary->vid] = $vocabulary;
- }
- }
-
-
-
-
-
-
- if($tid = $element['tode_tid']['#value']){
- $term = taxonomy_term_load($tid);
- }else{
- $vocabulary = reset($vocabularies);
- $term = array(
- 'tid' => 'autocreate',
- 'vid' => $vocabulary->vid,
- 'name' => $typed_term,
- 'vocabulary_machine_name' => $vocabulary->machine_name,
- );
- }
-
- dsm($term, '$term');
-
- $value[] = (array)$term;
-
- }
- dsm($value, '$value');
- form_set_value($element, $value, $form_state);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- function tode_field_widget_error($element, $error, $form, &$form_state) {
-
- form_error($element['value'], $error['message']);
- }
- function tode_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL){
-
- switch($op){
-
- case 'update':
-
- break;
- }
- }
- function tode_save($node) {
-
- module_load_include('inc', 'taxonomy', 'taxonomy.admin');
-
-
-
- $tode_fields = _tode_get_tode_fields_def($node->type);
-
- if(!count($tode_fields))
- return;
-
- 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;
- }
-
- $values = _tode_prefix_form($values, $prefix, FALSE);
-
-
- $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']);
-
-
-
- $form_state = array();
- $form_state['values'] = $values;
- $form_state['values']['op'] = t('Save');
-
-
-
- drupal_execute('taxonomy_form_term', $form_state, taxonomy_vocabulary_load($array_term['vid']), $array_term);
-
- }
- }
- function theme_tode($element) {
- return $element['#children'];
- }
- function tode_form_alter(&$form, $form_state, $form_id){
-
- if (stripos($form_id, 'node_delete_confirm') !== false){
-
-
- _tode_node_delete_form_alter($form, $form_state);
-
- }
- }
- function _tode_node_delete_form_alter(&$form){
-
-
- $node = $form['#parameters'][2];
-
-
-
-
-
-
- $tode_fields = _tode_get_tode_fields_def($node->type);
-
-
- if(count($tode_fields) == 0)
- return;
-
- $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;
- }
- }
- if(count($terms)){
-
-
- $form['description']['#value'] .= '<br />'.t('this will also delete taxonomy terms : %terms', array('%terms'=>implode(', ', $terms)));
- $form['tode_delete'] = array( '#type' => 'hidden', '#value' => serialize($tids),);
- $form['tode_terms'] = array('#type' => 'hidden', '#value' => serialize($terms),);
- $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);
-
- $terms = unserialize($form['tode_terms']['#value']);
- drupal_set_message(t('Following Taxonomy terms have been deleted : %terms', array('%terms' => implode(', ', $terms) )), 'status');
- }
- function _tode_clean_form($form){
- foreach ($form as $key => $value) {
- if(strpos($key,'#') !== false){
- unset($form[$key]);
- }elseif(is_array($value)){
- $form[$key] = _tode_clean_form($value);
- }
- }
- return $form;
- }
- 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)))
- $value = _tode_prefix_form($value, $prefix, $add);
-
- if($add){
- $form[$prefix.$key] = $value;
- unset($form[$key]);
- }elseif(strpos($key, $prefix) !== false ){
- $form[str_replace($prefix, '', $key)] = $value;
- unset($form[$key]);
- }
-
- }
- }
-
- return $form;
- }
- function _tode_term_form($tid){
-
- if ($array_term = (array)taxonomy_get_term($tid)) {
-
- $form_state = array();
- $term_form = drupal_retrieve_form('taxonomy_form_term', $form_state, taxonomy_vocabulary_load($array_term['vid']), $array_term);
- drupal_prepare_form('taxonomy_form_term', $term_form, $form_state);
-
- return $term_form;
- }else{
- return false;
- }
-
- }
- function _tode_trim_options(&$form, $item){
- foreach ($form[$item] as $field_name => $field) {
- if(((is_array($field)) && $field['#type'] == 'select') && $field['#multiple']){
- $options = $field['#options'];
- for ($i=0; $i < count($options); $i++) {
- if(!isset($options[$i]->option))
- continue;
-
- $op = array();
- foreach ($options[$i]->option as $key => $value)
- $op[$key] = strlen($value) > 25 ? substr_replace ($value, ' [...] ', 15, -10) : $value;
-
- $options[$i]->option = $op;
- }
- $field['#options'] = $options;
- $form[$item][$field_name] = $field;
- }
- }
- }
- function _tode_get_tode_fields_def($type){
-
-
- $type_fields = content_types($type);
-
-
- $tode_fields = array();
- foreach ($type_fields['fields'] as $field_name => $field) {
- if($field['widget']['type'] == 'tode')
- $tode_fields[$field_name] = $field;
- }
- return $tode_fields;
- }
|