View source
<?php
class flag_lists_handler_field_ops extends views_handler_field {
function option_definition() {
$options = parent::option_definition();
$options['flo'] = array(
'contains' => array(
'force_single' => array(
'default' => FALSE,
),
'operation' => array(
'default' => 'flag',
),
),
);
return $options;
}
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['flo'] = array(
'#type' => 'fieldset',
'#title' => t('Flag lists operations'),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
);
$form['flo']['force_single'] = array(
'#type' => 'checkbox',
'#title' => t('Force single'),
'#default_value' => $this->options['flo']['force_single'],
'#description' => t('Check this box to restrict selection to a single value.'),
);
$form['flo']['operation'] = array(
'#type' => 'radios',
'#title' => t('Operation'),
'#default_value' => $this->options['flo']['operation'],
'#description' => t('The flag lists operation for this selection.'),
'#options' => array(
'flag' => 'Add to list',
'unflag' => 'Remove from list',
),
'#required' => TRUE,
);
}
function label() {
if ($this->view->style_plugin instanceof views_plugin_style_table && !$this->options['flo']['force_single']) {
return '<!--flag-lists-ops-select-all-->';
}
else {
return parent::label();
}
}
function render($values) {
return '<!--form-item-' . $this->options['id'] . '--' . $this->view->row_index . '-->';
}
function views_form(&$form, &$form_state) {
if (empty($this->view->result)) {
return;
}
$form[$this->options['id']] = array(
'#tree' => TRUE,
);
foreach ($this->view->result as $row_index => $row) {
$entity_id = $this
->get_value($row);
if ($this->options['flo']['force_single']) {
$form[$this->options['id']][$row_index] = array(
'#type' => 'radio',
'#parents' => array(
$this->options['id'],
),
'#return_value' => $entity_id,
);
}
else {
$form[$this->options['id']][$row_index] = array(
'#type' => 'checkbox',
'#return_value' => $entity_id . (isset($row->flag_lists_flags_fid) ? '-' . $row->flag_lists_flags_fid : ''),
'#default_value' => FALSE,
'#attributes' => array(
'class' => array(
'flo-select',
),
),
);
}
}
}
}