class scheduler_handler_field_scheduler_countdown in Scheduler 6
Field handler to display a countdown until a scheduled action
Hierarchy
- class \scheduler_handler_field_scheduler_countdown extends \views_handler_field
Expanded class hierarchy of scheduler_handler_field_scheduler_countdown
1 string reference to 'scheduler_handler_field_scheduler_countdown'
- scheduler_views_data in ./
scheduler.views.inc - @file Views integration file for Scheduler module.
File
- ./
scheduler_handler_field_scheduler_countdown.inc, line 10 - Implementation of scheduler_handler_scheduler_countdown field handler
View source
class scheduler_handler_field_scheduler_countdown extends views_handler_field {
const SECOND_SCALE = 1;
const MINUTE_SCALE = 60;
const HOUR_SCALE = 3600;
const DAY_SCALE = 86400;
const WEEK_SCALE = 604800;
private $render_params = array(
'seconds' => array(
'scale' => self::SECOND_SCALE,
'singular' => 'second',
'plural' => 'seconds',
'abbreviated' => 's',
),
'minutes' => array(
'scale' => self::MINUTE_SCALE,
'singular' => 'minute',
'plural' => 'minutes',
'abbreviated' => 'min',
),
'hours' => array(
'scale' => self::HOUR_SCALE,
'singular' => 'hour',
'plural' => 'hours',
'abbreviated' => 'h',
),
'days' => array(
'scale' => self::DAY_SCALE,
'singular' => 'day',
'plural' => 'days',
'abbreviated' => 'd',
),
'weeks' => array(
'scale' => self::WEEK_SCALE,
'singular' => 'week',
'plural' => 'weeks',
'abbreviated' => 'w',
),
);
function query() {
$this
->ensure_my_table();
$this->node_table = $this->query
->ensure_table('node', $this->relationship);
$time_field = $this->definition['timestamp_field'];
$this->field_alias = $this->query
->add_field(NULL, 'IF(' . $time_field . ' AND ' . $time_field . ' > UNIX_TIMESTAMP(), ' . $time_field . ' - UNIX_TIMESTAMP(), NULL)', $this->table_alias . '_' . $this->field);
}
function option_definition() {
$options = parent::option_definition();
$options['countdown_display'] = array(
'default' => 'smart',
);
$options['units_display'] = array(
'default' => 'long',
);
return $options;
}
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['countdown_display'] = array(
'#title' => t('Display countdown as'),
'#type' => 'radios',
'#options' => array(
'smart' => t('Smart mode'),
'seconds' => t('Seconds'),
'minutes' => t('Minutes'),
'hours' => t('Hours'),
'days' => t('Days'),
'weeks' => t('Weeks'),
),
'#default_value' => $this->options['countdown_display'],
);
$form['units_display'] = array(
'#title' => t('Display time units'),
'#type' => 'radios',
'#options' => array(
'long' => t('Long (e.g. 3 days)'),
'short' => t('Short (e.g. 3d)'),
'none' => t('No units at all'),
),
'#default_value' => $this->options['units_display'],
);
}
function render($values) {
$countdown_display = $this->options['countdown_display'];
$value = $values->{$this->field_alias};
if ($countdown_display == 'smart') {
if ($value > self::WEEK_SCALE) {
$countdown_display = 'weeks';
}
elseif ($value > self::DAY_SCALE) {
$countdown_display = 'days';
}
elseif ($value > self::HOUR_SCALE) {
$countdown_display = 'hours';
}
elseif ($value > self::MINUTE_SCALE) {
$countdown_display = 'minutes';
}
else {
$countdown_display = 'seconds';
}
}
$params = $this->render_params[$countdown_display];
$scaled_value = round($value / $params['scale']);
switch ($this->options['units_display']) {
case 'long':
$rendered_value = format_plural($scaled_value, '1 ' . $params['singular'], '@count ' . $params['plural']);
break;
case 'short':
$rendered_value = $scaled_value . $params['abbreviated'];
break;
case 'none':
$rendered_value = $scaled_value;
break;
}
return $rendered_value;
}
}