5 * Contains the entity_views_handler_field_duration class.
9 * A handler to provide proper displays for duration properties retrieved via data selection.
11 * This handler may only be used in conjunction with data selection based Views
12 * tables or other base tables using a query plugin that supports data
15 * @see entity_views_field_definition()
16 * @ingroup views_field_handlers
18 class entity_views_handler_field_duration extends views_handler_field {
21 * Stores the entity type of the result entities.
26 * Stores the result entities' metadata wrappers.
28 public $wrappers = array();
31 * Stores the current value when rendering list fields.
33 public $current_value;
36 * Overridden to add the field for the entity ID (if necessary).
38 public function query() {
39 EntityFieldHandlerHelper::query($this);
43 * Adds a click-sort to the query.
45 public function click_sort($order) {
46 EntityFieldHandlerHelper::click_sort($this, $order);
50 * Load the entities for all rows that are about to be displayed.
52 public function pre_render(&$values) {
53 parent::pre_render($values);
54 EntityFieldHandlerHelper::pre_render($this, $values);
58 * Overridden to use a metadata wrapper.
60 public function get_value($values, $field = NULL) {
61 return EntityFieldHandlerHelper::get_value($this, $values, $field);
64 public function option_definition() {
65 $options = parent::option_definition();
66 $options += EntityFieldHandlerHelper::option_definition($this);
68 $options['format_interval'] = array('default' => TRUE);
69 $options['granularity'] = array('default' => 2);
70 $options['prefix'] = array('default' => '', 'translatable' => TRUE);
71 $options['suffix'] = array('default' => '', 'translatable' => TRUE);
76 public function options_form(&$form, &$form_state) {
77 parent::options_form($form, $form_state);
78 EntityFieldHandlerHelper::options_form($this, $form, $form_state);
80 $form['format_interval'] = array(
81 '#type' => 'checkbox',
82 '#title' => t('Format interval'),
83 '#description' => t('If checked, the value will be formatted as a time interval. Otherwise, just the number of seconds will be displayed.'),
84 '#default_value' => $this->options['format_interval'],
86 $form['granularity'] = array(
87 '#type' => 'textfield',
88 '#title' => t('Granularity'),
89 '#default_value' => $this->options['granularity'],
90 '#description' => t('Specify how many different units to display.'),
91 '#dependency' => array('edit-options-format-interval' => array(TRUE)),
94 $form['prefix'] = array(
95 '#type' => 'textfield',
96 '#title' => t('Prefix'),
97 '#default_value' => $this->options['prefix'],
98 '#description' => t('Text to put before the duration text.'),
100 $form['suffix'] = array(
101 '#type' => 'textfield',
102 '#title' => t('Suffix'),
103 '#default_value' => $this->options['suffix'],
104 '#description' => t('Text to put after the duration text.'),
112 * The values retrieved from the database.
114 public function render($values) {
115 return EntityFieldHandlerHelper::render($this, $values);
119 * Render a single field value.
121 public function render_single_value($value, $values) {
122 if ($this->options['format_interval']) {
123 $value = format_interval($value, (int) $this->options['granularity']);
125 // Value sanitization is handled by the wrapper, see
126 // EntityFieldHandlerHelper::get_value().
127 return $this->sanitize_value($this->options['prefix'], 'xss') .
129 $this->sanitize_value($this->options['suffix'], 'xss');