source: sipes/modules_contrib/content_taxonomy/content_taxonomy_tree.module @ c43ea01

stableversion-3.0
Last change on this file since c43ea01 was 177a560, checked in by José Gregorio Puentes <jpuentes@…>, 8 años ago

se agrego el directorio de modulos contribuidos de drupal

  • Propiedad mode establecida a 100755
File size: 6.4 KB
Línea 
1<?php
2
3// $Id: content_taxonomy_tree.module,v 1.1.2.5 2009/05/14 16:58:22 mh86 Exp $
4
5
6
7/**
8 * Implementation of hook_theme().
9 */
10function content_taxonomy_tree_theme() {
11  return array(
12    'content_taxonomy_tree' => array(
13      'arguments' => array('element' => NULL),
14    ),
15  );
16}
17
18/**
19 * Implementation of hook_widget_info().
20 */
21function content_taxonomy_tree_widget_info() {
22  return array(
23    'content_taxonomy_tree' => array(
24      'label' => t('Tree'),
25      'field types' => array('content_taxonomy'),
26      'multiple values' => CONTENT_HANDLE_MODULE,
27      'callbacks' => array(
28        'default value' => CONTENT_CALLBACK_DEFAULT,
29      ),
30    ),
31  );
32  return $items;
33}
34
35/**
36 * Implementation of hook_widget_settings
37 */
38function content_taxonomy_tree_widget_settings($op, $widget) {
39  switch ($op) {
40    case 'form':
41      $form['settings'] = array(
42        '#type' => 'fieldset',
43        '#title' => t('Settings for Trees'),
44        '#collapsible' => TRUE,
45        '#weight' => 10,
46      );
47      $form['settings']['expand_all'] = array(
48        '#type' => 'checkbox',
49        '#title' => t('Expand whole tree by default'),
50        '#default_value' => isset($widget['expand_all']) ? $widget['expand_all'] : 0,
51        '#description' => t('Otherwise only branches, where a term is selected get expanded by default'),
52      );
53      return $form;
54
55    case 'save':
56      return array('expand_all');
57  }
58}
59
60/**
61 * Implementation of hook_elements().
62 */
63function content_taxonomy_tree_elements() {
64  return array(
65    'content_taxonomy_tree' => array(
66      '#input' => TRUE,
67      '#columns' => array('value'),
68      '#delta' => 0,
69      '#process' => array('content_taxonomy_tree_process'),
70      '#element_validate' => array('content_taxonomy_tree_validate'),
71      '#autocomplete_path' => FALSE,
72      ),
73    );
74}
75
76/**
77 * Implementation of hook_widget().
78 */
79function content_taxonomy_tree_widget(&$form, &$form_state, $field, $items, $delta = NULL) {
80  $element = array(
81    '#type' => 'content_taxonomy_tree',
82    '#default_value' => !empty($items) ? $items : array(),
83  );
84  return $element;
85}
86
87/**
88 * Processes the content_taxonomy_tree form element
89 *
90 * uses the 'taxonomy_manager_tree' element type
91 */
92function content_taxonomy_tree_process($element, $edit, &$form_state, $form) {
93  $field_name = $element['#field_name'];
94  $field = $form['#field_info'][$field_name];
95  $field_key  = $element['#columns'][0];
96
97  if (is_array($element['#value'])) {
98    if (array_key_exists($field_key, $element['#value'])) {
99      //validation function where values are set haven't been called yet for this form element
100      //because some other element might have caused an validation error
101      //so we have to do the processing of the values here
102      if ($field['multiple']) {
103        $selected_terms = _taxonomy_manager_tree_get_selected_terms($element['#value']['value']);
104        $element['#value'] = content_transpose_array_rows_cols(array($field_key => array_values($selected_terms)));
105      }
106    }
107    $element['#value'] = content_taxonomy_tree_data2form($element, $element['#value'], $field);
108  }
109 
110  $element[$field_key] = array(
111    '#type' => 'taxonomy_manager_tree',
112    '#default_value' => isset($element['#value']) ? $element['#value'] : '',
113    '#vid' => $field['vid'],
114    '#parent' => content_taxonomy_field_get_parent($field),
115    '#default_value' => is_array($element['#value']) ? $element['#value'] : array(),
116    '#render_whole_tree' => TRUE,
117    '#pager' => FALSE,
118    '#add_term_info' => FALSE,
119    '#expand_all' => $field['widget']['expand_all'],
120    '#tree_is_required' => $field['required'],  //using tree_is_required instead of required, prevents that error messages are shown twice
121    '#required' => FALSE,
122    '#multiple' => isset($field['multiple']) ? $field['multiple'] : FALSE,
123    '#field_name' => $element['#field_name'],
124    '#delta' => $element['#delta'],
125    '#columns' => $element['#columns'],
126    '#title' => $element['#title'],
127    '#description' => $element['#description'],
128  );
129 
130 
131  // Make sure field info will be available to the validator which
132  // does not get the values in $form.
133  $form_state['#field_info'][$field['field_name']] = $field;
134 
135  return $element;
136}
137
138/**
139 * Validation function for the content_taxonomy_tree element
140 *
141 * assigns the selected terms to the element
142 * additionally checks if terms are selected for required fields (if this check isn't already done by form.inc)
143 */
144function content_taxonomy_tree_validate($element, &$form_state) {
145  $field = $form_state['#field_info'][$element['#field_name']];
146  $field_key  = $element['#columns'][0];
147
148  $values = content_taxonomy_tree_form2data($element, $form_state, $field);
149 
150  //check for required fields
151  //if $element['#value'] is empty, it's validated by form.inc
152  //otherwise we have to check this by our own
153  if ($field['required'] && is_null($values[0]['value']) && !empty($element['#value'])) {
154    form_error($element[$field_key], t('!name field is required.', array('!name' => $element['#title'])));
155  }
156  if (($field['multiple'] >= 2) && (count($element['#value']) > $field['multiple'])) {
157      form_error($element[$field_key], t('%name: this field cannot hold more than @count values.', array('%name' => t($field['widget']['label']), '@count' => $field['multiple'])));
158   }
159 
160  form_set_value($element, $values, $form_state);
161 
162}
163
164/**
165 * Helper function to transpose the values as stored in the database
166 * to the format the content_taxonomy_tree needs to select the values
167 */
168function content_taxonomy_tree_data2form($element, $values, $field) {
169  $terms = array();
170  foreach ($values as $delta => $entry) {
171    if ($entry['value']) {
172      $terms[] = $entry['value'];
173    }
174  }
175  return $terms;
176}
177
178/**
179 * Helper function to transpose the values returned by submitting the content_taxonomy_tree
180 * to the format to be stored in the field
181 */
182function content_taxonomy_tree_form2data($element, &$form_state, $field) {
183  $field_key  = $element['#columns'][0];
184  $selected_terms = $form_state['values'][$element['#field_name']][$field_key]['selected_terms'];
185
186  if (!is_array($selected_terms) || !count($selected_terms)) {
187    $selected_terms[] = NULL;
188  }
189 
190  $form_state['#field_info'][$field['field_name']] = $field;
191  return content_transpose_array_rows_cols(array($element['#columns'][0] => array_values($selected_terms)));
192}
193
194/**
195 * FAPI theme for content_taxonomy_tree
196 *
197 * element already rendered by taxonomy_manager_tree
198 */
199function theme_content_taxonomy_tree($element) {
200  return $element['#children'];
201}
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.