/[drupal]/contributions/modules/viewfield/viewfield.module
ViewVC logotype

Diff of /contributions/modules/viewfield/viewfield.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.16, Tue Apr 7 19:03:41 2009 UTC revision 1.17, Sun May 24 05:33:35 2009 UTC
# Line 1  Line 1 
1  <?php  <?php
2  // $Id: viewfield.module,v 1.15 2009/04/07 18:42:31 darrenoh Exp $  // $Id: viewfield.module,v 1.16 2009/04/07 19:03:41 darrenoh Exp $
3    
4  /**  /**
5   * @file   * @file
6   * Core functions.   * Core functions.
7   */   */
8    
 define('VIEWFIELD_DEFAULT_VNAME', '<default>');  
   
9  /**  /**
10   * Implementation of hook_field_info().   * Implementation of hook_field_info().
11   */   */
# Line 30  function viewfield_field_info() { Line 28  function viewfield_field_info() {
28  function viewfield_field_settings($op, $field) {  function viewfield_field_settings($op, $field) {
29    switch ($op) {    switch ($op) {
30      case 'form':      case 'form':
       $view_options = array();  
       $all_views = views_get_all_views();  
       foreach ($all_views as $view) {  
         $view_options[$view->name] = $view->name;  
       }  
31        $form['allowed_views'] = array(        $form['allowed_views'] = array(
32          '#type' => 'checkboxes',          '#type' => 'checkboxes',
33          '#title' => t('Allowed views'),          '#title' => t('Allowed views'),
34          '#default_value' => is_array($field['allowed_views']) ? $field['allowed_views'] : array(),          '#default_value' => is_array($field['allowed_views']) ? $field['allowed_views'] : array(),
35          '#options' => $view_options,          '#options' => drupal_map_assoc(array_keys(views_get_all_views())),
36          '#description' => t('Only allow users to select from the specified views. If no views are selected, all will be available. If only one is selected, the user will only be able to specify the arguments.'),          '#description' => t('Only allow users to select from the specified views. If no views are selected, all will be available.'),
37        );        );
38        $form['super_default'] = array(        $form['super_default'] = array(
39          '#type' => 'checkbox',          '#type' => 'checkbox',
# Line 56  function viewfield_field_settings($op, $ Line 49  function viewfield_field_settings($op, $
49          );          );
50        }        }
51        $form_state = NULL;        $form_state = NULL;
       $form['super_default_widget'] = array('#tree' => TRUE);  
52        $form['#node'] = (object) array('type' => $field['type_name']);        $form['#node'] = (object) array('type' => $field['type_name']);
53        $field_form = content_field_form($form, $form_state, $field);        module_load_include('inc', 'content', 'includes/content.node_form');
54        $form['super_default_widget'][0] = &$field_form[$field['field_name']][0];        $field_form = content_field_form($form, $form_state, $field, 0);
55          $form['super_default_widget'] = &$field_form[$field['field_name']][0];
56          $form['super_default_widget']['#tree'] = TRUE;
57          unset($form['super_default_widget']['#weight']);
58        return $form;        return $form;
59      case 'validate':      case 'validate':
60        if ($field['force_default'] && $field['multiple']) {        if ($field['force_default'] && $field['multiple']) {
# Line 80  function viewfield_field_settings($op, $ Line 75  function viewfield_field_settings($op, $
75   * Implementation of hook_field().   * Implementation of hook_field().
76   */   */
77  function viewfield_field($op, &$node, $field, &$items, $teaser, $page) {  function viewfield_field($op, &$node, $field, &$items, $teaser, $page) {
   list($field_key_vname, $field_key_vargs) = array_keys($field['columns']);  
78    switch ($op) {    switch ($op) {
79      case 'presave':      case 'presave':
       $super_defaults = array($field_key_vname => VIEWFIELD_DEFAULT_VNAME, $field_key_vargs => NULL);  
80        foreach ($items as $delta => $item) {        foreach ($items as $delta => $item) {
81          if (empty($item) || (!$field['super_default'] && empty($item[$field_key_vname]))) {          if ($field['super_default'] && empty($item['override_default']) || $field['widget']['force_default']) {
82            unset($items[$delta]);            $items[$delta] = array('vname' => NULL, 'vargs' => NULL);
83          }          }
84          elseif ($field['super_default'] && empty($item['override_default'])) {          elseif (empty($item['vname'])) {
85            $items[$delta] = $super_defaults;            unset($items[$delta]);
           $items[$delta]['default'] = TRUE;  
86          }          }
87        }        }
88        break;        break;
89      case 'load':      case 'load':
       $additions = array();  
90        foreach ($items as $delta => $item) {        foreach ($items as $delta => $item) {
91          if ($item[$field_key_vname] == VIEWFIELD_DEFAULT_VNAME) {          $item = empty($item['vname']) || $field['widget']['force_default'] ? $field['super_default_widget'] : $item;
92            // If the field has been set as default, load the defaults accordingly.          if ($field['super_default']) {
93            $items[$delta] = _viewfield_get_super_defaults($field);            $item['override_default'] = !empty($item['vname']);
           $items[$delta]['default'] = TRUE;  
94          }          }
95          $items[$delta]['token_enabled'] = _viewfield_token_enabled($field);          $item['token_enabled'] = _viewfield_token_enabled($field);
96          $additions[$field['field_name']][$delta] = $items[$delta];          $items[$delta] = $item;
97        }        }
98        return $additions;        return array($field['field_name'] => $items);
99    }    }
100  }  }
101    
# Line 120  function viewfield_content_is_empty($ite Line 110  function viewfield_content_is_empty($ite
110   * Implementation of hook_field_formatter_info().   * Implementation of hook_field_formatter_info().
111   */   */
112  function viewfield_field_formatter_info() {  function viewfield_field_formatter_info() {
113    $formatters = array();    return array(
114    $displays = views_fetch_plugin_data('display');      'default' => array(
115    foreach ($displays as $type => $details) {        'label' => t('Default'),
     $title = isset($details['title']) ? $details['title'] : $type;  
     $formatters[$type] = array(  
       'label' => $title,  
116        'field types' => array('viewfield')        'field types' => array('viewfield')
117      );      ),
118    }    );
   return $formatters;  
119  }  }
120    
121  /**  /**
# Line 142  function viewfield_widget_info() { Line 128  function viewfield_widget_info() {
128        'field types' => array('viewfield'),        'field types' => array('viewfield'),
129        'multiple_values' => CONTENT_HANDLE_CORE,        'multiple_values' => CONTENT_HANDLE_CORE,
130        'callbacks' => array(        'callbacks' => array(
131          'default_value' => CONTENT_CALLBACK_DEFAULT,          'default value' => CONTENT_CALLBACK_NONE,
132        ),        ),
133      ),      ),
134    );    );
# Line 179  function viewfield_widget(&$form, &$form Line 165  function viewfield_widget(&$form, &$form
165    }    }
166    $element = array(    $element = array(
167      '#type' => $field['widget']['type'],      '#type' => $field['widget']['type'],
168      '#default_value' => isset($items[$delta]) ? $items[$delta] : '',      '#default_value' => isset($items[$delta]) ? $items[$delta] : $field['super_default_widget'],
169    );    );
170    return $element;    return $element;
171  }  }
# Line 199  function viewfield_elements() { Line 185  function viewfield_elements() {
185  }  }
186    
187  function viewfield_select_process($element, $edit, $form_state, $form) {  function viewfield_select_process($element, $edit, $form_state, $form) {
188    $field_name = $element['#field_name'];    if (isset($form['#field'])) {
189    $field = $form['#field_info'][$field_name];      $field = $form['#field'];
190    $field_key_vname = $element['#columns'][0];    }
191    $field_key_vargs = $element['#columns'][1];    else {
192    $element['#field_info'] = &$form['#field_info'];      $field = $form['#field_info'][$element['#field_name']];
193      }
194    $node = isset($form['#node']) ? $form['#node'] : (object) array('type' => $field['type_name']);    $node = isset($form['#node']) ? $form['#node'] : (object) array('type' => $field['type_name']);
   // If the super default is enabled, populate the field form accordingly.  
   $super_defaults = _viewfield_get_super_defaults($form['#field_info'][$field_name]);  
195    $field_settings = !isset($node->uid);    $field_settings = !isset($node->uid);
196    // This form is used for both the default value field in the admin as well as    // This form is used for both the default value field in the admin as well as
197    // the node edit form, so we have to make sure we show the default value field    // the node edit form, so we have to make sure we show the default value field
198    // always.    // always.
199    if ($field['widget']['force_default'] && !$field_settings) {    if ($field['widget']['force_default'] && !$field_settings) {
200      $element[$field_key_vname] = array(      $element['vname'] = array(
201        '#type' => 'value',        '#type' => 'value',
202        '#value' => $super_defaults[$field_key_vname],        '#value' => $element['#default_value']['vname'],
203      );      );
204      $element[$field_key_vargs] = array(      $element['vargs'] = array(
205        '#type' => 'value',        '#type' => 'value',
206        '#value' => $super_defaults[$field_key_vargs], // All views share args (for now).        '#value' => $element['#default_value']['vargs'], // All views share args (for now).
207      );      );
208    }    }
209    else {    else {
# Line 229  function viewfield_select_process($eleme Line 214  function viewfield_select_process($eleme
214        $element['override_default'] = array(        $element['override_default'] = array(
215          '#type' => 'checkbox',          '#type' => 'checkbox',
216          '#title' => t('Override default'),          '#title' => t('Override default'),
217          '#default_value' => empty($element['#value']['default']),          '#default_value' => $element['#value']['override_default'],
218        );        );
219      }      }
220      if (count($options) > 1) {      if (count($options) > 1) {
221        $element[$field_key_vname] = array(        $element['vname'] = array(
222          '#type' => 'select',          '#type' => 'select',
223          '#options' => $options,          '#options' => $options,
224          '#default_value' => isset($element['#value'][$field_key_vname]) ? $element['#value'][$field_key_vname] : ($field_settings ? $super_defaults[$field_key_vname] : NULL),          '#default_value' => $element['#default_value']['vname'],
225          '#title' => $element['#title'],          '#title' => $element['#title'],
226          '#required' => $element['#required'],          '#required' => $element['#required'],
227          '#description' => $element['#description'],          '#description' => $element['#description'],
# Line 250  function viewfield_select_process($eleme Line 235  function viewfield_select_process($eleme
235      else {      else {
236        // There's only the one view, so only show the arguments.        // There's only the one view, so only show the arguments.
237        list($key, $label) = each($options);        list($key, $label) = each($options);
238        $element[$field_key_vname] = array(        $element['vname'] = array(
239          '#type' => 'value',          '#type' => 'value',
240          '#value' => $key,          '#value' => $key,
241        );        );
242        $args_title = $field_settings ? t('Arguments') : $field['widget']['label'] ." ($label) ". t('arguments');        $args_title = $field_settings ? t('Arguments') : $field['widget']['label'] ." ($label) ". t('arguments');
243      }      }
244      $element[$field_key_vargs] = array(      $element['vargs'] = array(
245        '#type' => 'textfield',        '#type' => 'textfield',
246        '#title' => $args_title,        '#title' => $args_title,
247        '#default_value' => !empty($element['#value'][$field_key_vargs]) ? $element['#value'][$field_key_vargs] : ($field_settings ? $super_defaults[$field_key_vargs] : ''),        '#default_value' => $element['#default_value']['vargs'],
248        '#required' => FALSE,        '#required' => FALSE,
249        '#description' => t('Provide a comma separated list of arguments to pass to the view. These arguments will be passed to EACH selected view. If an argument contains commas or double quotes, enclose it in double quotes. Replace double quotes that are part of the argument with pairs of double quotes.'),        '#description' => t('Provide a comma separated list of arguments to pass to the view. These arguments will be passed to EACH selected view. If an argument contains commas or double quotes, enclose it in double quotes. Replace double quotes that are part of the argument with pairs of double quotes.'),
250        '#field_name' => $element['#field_name'] .' '. t('arguments'),        '#field_name' => $element['#field_name'] .' '. t('arguments'),
# Line 270  function viewfield_select_process($eleme Line 255  function viewfield_select_process($eleme
255      $token_desc = ($token_enabled = _viewfield_token_enabled($field)) ?      $token_desc = ($token_enabled = _viewfield_token_enabled($field)) ?
256        t('Use the syntax [token] if you want to insert a replacement pattern.') :        t('Use the syntax [token] if you want to insert a replacement pattern.') :
257        t('You may use %nid for the node id of the current node. %author for the node author and %viewer for user viewing the node.');        t('You may use %nid for the node id of the current node. %author for the node author and %viewer for user viewing the node.');
258      $element[$field_key_vargs]['#description'] .= "<br/>\n$token_desc";      $element['vargs']['#description'] .= "<br/>\n$token_desc";
259      // Since tabledrag.js currently cannot handle nested tables, we show the      // Since tabledrag.js currently cannot handle nested tables, we show the
260      // token help inside the fieldset only in the field settings form or in      // token help inside the fieldset only in the field settings form or in
261      // single-value mode.      // single-value mode.
# Line 286  function viewfield_select_process($eleme Line 271  function viewfield_select_process($eleme
271   */   */
272  function _viewfield_potential_references($field_settings = TRUE, $field = array(), $delta = 0) {  function _viewfield_potential_references($field_settings = TRUE, $field = array(), $delta = 0) {
273    $options = array();    $options = array();
274    foreach (views_get_all_views() as $view_name => $view_info) {    $field['allowed_views'] = array_filter($field['allowed_views']);
275      $field['allowed_views'] = empty($field['allowed_views']) ? array_keys(views_get_all_views()) : $field['allowed_views'];
276      foreach ($field['allowed_views'] as $view_name) {
277      $view = views_get_view($view_name);      $view = views_get_view($view_name);
278      if (isset($field['allowed_views'][$view_name]) && $field['allowed_views'][$view_name]) {      foreach ($view->display as $display) {
279        foreach ($view->display as $display) {        $options[$view->name .'|'. $display->id] = $view->name .' - '. $display->display_title;
         $options[$view->name .'|'. $display->id] = $view->name .' - '. $display->display_title;  
       }  
     }  
     else {  
       $field['allowed_views'][$view_name] = $view_name;  
     }  
   }  
   // If no allowed views are selected, allow all views.  
   if (empty($options)) {  
     foreach (views_get_all_views() as $view_name => $view_info) {  
       $view = views_get_view($view_name);  
       foreach ($view->display as $display) {  
         $options[$view->name .'|'. $display->id] = $view->name .' - '. $display->display_title;  
       }  
280      }      }
281    }    }
282    // Add a null option for non-required or multiple fields: handle multiple    // Add a null option for non-required or multiple fields: handle multiple
# Line 339  function _viewfield_get_token_help() { Line 312  function _viewfield_get_token_help() {
312   * Implementation of hook_theme().   * Implementation of hook_theme().
313   */   */
314  function viewfield_theme() {  function viewfield_theme() {
315    $theme_info =  array(    return array(
316      'viewfield_select' => array(      'viewfield_select' => array(
317        'arguments' => array('element' => NULL),        'arguments' => array('element' => NULL),
318        'file' => 'theme/viewfield.theme.inc',        'file' => 'theme/viewfield.theme.inc',
319      )      ),
320    );      'viewfield_formatter_default' => array(
   $displays = views_fetch_plugin_data('display');  
   foreach ($displays as $type => $details) {  
     $theme_info['viewfield_formatter_'. $type] = array(  
321        'arguments' => array('element' => NULL),        'arguments' => array('element' => NULL),
       'function' => 'theme_viewfield_formatter',  
322        'file' => 'theme/viewfield.theme.inc',        'file' => 'theme/viewfield.theme.inc',
323      );      ),
324    }    );
   return $theme_info;  
325  }  }
326    
327  /**  /**
# Line 370  function viewfield_views_api() { Line 338  function viewfield_views_api() {
338   * If the super defaults are enabled return them, otherwise return blank values   * If the super defaults are enabled return them, otherwise return blank values
339   */   */
340  function _viewfield_get_super_defaults($field) {  function _viewfield_get_super_defaults($field) {
341    return $field['super_default'] ? $field['super_default_widget'][0] : array('vname' => NULL, 'vargs' => NULL);    return $field['super_default'] ? $field['super_default_widget'] : array('vname' => NULL, 'vargs' => NULL);
342  }  }
343    
344  /**  /**

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

  ViewVC Help
Powered by ViewVC 1.1.2