View source
<?php
class draggableviews_plugin_style_draggabletable extends views_plugin_style_table {
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['#theme'] = 'draggableviews_ui_style_plugin_draggabletable';
$handlers = $this->display->handler
->get_handlers('field');
$displayObj = $this->view->display['default'];
$current = $displayObj->display_options['style_options'];
foreach (node_get_types('types') as $node_type) {
$node_types[$node_type->type] = $node_type->type;
}
$form['tabledrag_options'] = array();
$form['tabledrag_depth_fields'] = array();
$form['tabledrag_types'] = array();
$leaveIndex = -1;
$leaveIndex_type = -1;
$extra_rows = 0;
$extra_rows_type = 0;
if (module_exists('realtimeedit')) {
$form['realtimeedit_enabled_fields'] = array();
$leaveIndex_realtimeedit = -1;
$extra_rows_realtimeedit = 0;
}
if (count($form_state['input']) > 0) {
if (isset($form_state['input']['tabledrag_action_add_button'])) {
$extra_rows = 1;
}
for ($i = 0; $i < count($form_state['input']['style_options']['tabledrag_options']); $i++) {
if (isset($form_state['input']['tabledrag_action_del_button_' . $i])) {
$leaveIndex = $i;
}
}
if (isset($form_state['input']['tabledrag_type_add_button'])) {
$extra_rows_type = 1;
}
for ($i = 0; $i < count($form_state['input']['style_options']['tabledrag_types']); $i++) {
if (isset($form_state['input']['tabledrag_type_del_button_' . $i])) {
$leaveIndex_type = $i;
}
}
if (module_exists('realtimeedit')) {
if (isset($form_state['input']['realtimeedit_add_button'])) {
$extra_rows_realtimeedit = 1;
}
for ($i = 0; $i < count($form_state['input']['style_options']['realtimeedit_enabled_fields']); $i++) {
if (isset($form_state['input']['realtimeedit_del_button_' . $i])) {
$leaveIndex_realtimeedit = $i;
}
}
}
$current = $form_state['input']['style_options'];
}
$form['head_draggabletable_markup'] = array(
'#prefix' => '<div class="">',
'#suffix' => '</div>',
'#value' => t('Draggable Table Settings:'),
);
$form['description_draggabletable_markup'] = array(
'#prefix' => '<div class="description form-item">',
'#suffix' => '</div>',
'#value' => t('Draggable Table description.'),
);
$form['head_draggabletable_markup'] = array(
'#prefix' => '<div class="">',
'#suffix' => '</div>',
'#value' => t('Add new tabledrag:'),
);
$form['description_draggabletable_content_type'] = array(
'#prefix' => '<div class="description form-item">',
'#suffix' => '</div>',
'#value' => t('Type "root" cannot be subordinated.<br>Type "leaf" cannot have child nodes.<br>Content types with type "root" assigned will own an link to collapse/expand the subordinated nodes (if checked below).'),
);
for ($i = 0, $button_index = 0; $i < count($current['tabledrag_options']) + $extra_rows; $i++) {
if ($i == $leaveIndex) {
continue;
}
$overwrite = $i < count($current['tabledrag_options']) ? true : false;
if ($overwrite == true) {
$tmpOptions = $current['tabledrag_options'][$i];
}
$form['tabledrag_options'][] = array(
'#weight' => 10,
'tabledrag_action' => array(
'#type' => 'select',
'#options' => array(
'match' => 'match',
'order' => 'order',
),
'#value' => $overwrite ? $tmpOptions['tabledrag_action'] : 'match',
),
'tabledrag_relationship' => array(
'#type' => 'select',
'#options' => array(
'parent' => 'parent',
'sibling' => 'sibling',
),
'#value' => $overwrite ? $tmpOptions['tabledrag_relationship'] : 'parent',
),
'tabledrag_source' => array(
'#type' => 'select',
'#options' => _draggableviews_filter_fields(array(
'number',
'nodereference',
), $handlers),
'#value' => $overwrite ? $tmpOptions['tabledrag_source'] : $available_fields[0],
),
'tabledrag_action_del_button' => array(
'#type' => 'button',
'#name' => 'tabledrag_action_del_button_' . $button_index,
'#value' => t('Delete'),
),
);
$button_index++;
}
$form['tabledrag_action_add_button'] = array(
'#type' => 'button',
'#name' => 'tabledrag_action_add_button',
'#value' => t('Add Tabledrag'),
);
$tabledrag_depth = isset($current['tabledrag_depth_fields']) ? $current['tabledrag_depth'] : 1;
for ($i = 0; $i < $tabledrag_depth; $i++) {
$tmpDepthField = $current['tabledrag_depth_fields']['field_' . $i];
$form['tabledrag_depth_fields']['field_' . $i] = array(
'#type' => 'select',
'#options' => _draggableviews_filter_fields(array(
'number',
), $handlers),
'#value' => $tmpDepthField ? $tmpDepthField : $available_fields[0],
);
}
$form['tabledrag_set_depth_button'] = array(
'#type' => 'button',
'#name' => 'button_set_depth',
'#value' => t('Set depth'),
);
$form['tabledrag_depth'] = array(
'#type' => 'select',
'#options' => array(
1 => 1,
2 => 2,
3 => 3,
4 => 4,
),
'#default_value' => $tabledrag_depth,
);
for ($i = 0, $button_index = 0; $i < count($current['tabledrag_types']) + $extra_rows_type; $i++) {
if ($i == $leaveIndex_type) {
continue;
}
$overwrite = $i < count($current['tabledrag_types']) ? true : false;
$tmpOtions = $current['tabledrag_types'][$i];
$form['tabledrag_types'][] = array(
'#weight' => 10,
'field_type' => array(
'#type' => 'select',
'#options' => $node_types,
'#value' => $overwrite ? $tmpOtions['field_type'] : $node_types[0],
),
'type' => array(
'#type' => 'select',
'#options' => array(
'root' => 'root',
'leaf' => 'leaf',
),
'#value' => $overwrite ? $tmpOtions['type'] : 'root',
),
'tabledrag_type_del_button' => array(
'#type' => 'button',
'#name' => 'tabledrag_type_del_button_' . $button_index,
'#value' => t('Delete'),
),
);
$button_index++;
}
$form['tabledrag_type_add_button'] = array(
'#type' => 'button',
'#name' => 'tabledrag_type_add_button',
'#value' => t('Add type'),
);
$form['tabledrag_expand'] = array(
'#type' => 'checkboxes',
'#name' => 'tabledrag_expand',
'#options' => array(
'expand_links' => 'Show expand Links?',
'collapsed' => 'default is collapsed',
),
'#title' => t('Decide whether expand/collapse Links should be shown or not'),
'#default_value' => isset($current['tabledrag_expand']) ? $current['tabledrag_expand'] : array(
'expand_links',
),
);
$form['tabledrag_visible'] = array(
'#type' => 'checkboxes',
'#name' => 'tabledrag_visible',
'#options' => array(
'visible' => 'Show input fields?',
),
'#title' => t('Decide whether input fields (e.g. weight, parent) should be visible or not'),
'#default_value' => isset($current['tabledrag_visible']) ? $current['tabledrag_visible'] : array(),
);
if (module_exists('realtimeedit')) {
$form['realtimeedit_enabled_fields'] = array();
$leaveIndex_type = -1;
$extra_rows_type = 0;
$max_count = count($current['realtimeedit_enabled_fields']) + $extra_rows_realtimeedit;
$button_index = 0;
for ($i = 0; $i < $max_count; $i++) {
if ($i == $leaveIndex_realtimeedit) {
continue;
}
$overwrite = $i < count($current['realtimeedit_enabled_fields']) ? true : false;
$tmpOtions = $current['realtimeedit_enabled_fields'][$i];
$form['realtimeedit_enabled_fields'][] = array(
'#weight' => 10,
'field' => array(
'#type' => 'select',
'#options' => $available_fields,
'#value' => $overwrite ? $tmpOtions['field'] : $available_fields[0],
),
'realtimeedit_del_button' => array(
'#type' => 'button',
'#name' => 'realtimeedit_del_button_' . $button_index,
'#value' => t('Delete'),
),
);
$button_index++;
}
$form['realtimeedit_add_button'] = array(
'#type' => 'button',
'#name' => 'realtimeedit_add_button',
'#value' => t('Enable new field'),
);
}
}
function render() {
return drupal_get_form('draggableviews_view_draggabletable_form', &$this);
}
}
function theme_draggableviews_ui_style_plugin_draggabletable($form) {
$output = drupal_render($form['description_markup']);
$header = array(
t('Field'),
t('Column'),
t('Separator'),
array(
'data' => t('Sortable'),
'align' => 'center',
),
array(
'data' => t('Default sort'),
'align' => 'center',
),
);
$rows = array();
foreach (element_children($form['columns']) as $id) {
$row = array();
$row[] = drupal_render($form['info'][$id]['name']);
$row[] = drupal_render($form['columns'][$id]);
$row[] = drupal_render($form['info'][$id]['separator']);
if (!empty($form['info'][$id]['sortable'])) {
$row[] = array(
'data' => drupal_render($form['info'][$id]['sortable']),
'align' => 'center',
);
$row[] = array(
'data' => drupal_render($form['default'][$id]),
'align' => 'center',
);
}
else {
$row[] = '';
$row[] = '';
}
$rows[] = $row;
}
$rows[] = array(
t('None'),
'',
'',
'',
array(
'align' => 'center',
'data' => drupal_render($form['default'][-1]),
),
);
$output .= theme('table', $header, $rows);
$labels = array(
t('Action'),
t('Relationship'),
t('Source'),
' ',
);
$labels_types = array(
t('Content type'),
t('Tabledrag type'),
' ',
);
$labels_orderfields = array(
t('Save order in..'),
);
$rows = array();
$rows_types = array();
$rows_orderfields = array();
$submit_button = drupal_render($form['tabledrag_action_add_button']);
$add_type_button = drupal_render($form['tabledrag_type_add_button']);
$set_depth_button = drupal_render($form['tabledrag_set_depth_button']);
$set_depth_select = drupal_render($form['tabledrag_depth']);
$tabledrag_expand = drupal_render($form['tabledrag_expand']);
$tabledrag_visible = drupal_render($form['tabledrag_visible']);
$description_content_type = drupal_render($form['description_draggabletable_content_type']);
foreach (element_children($form['tabledrag_options']) as $id) {
$columns =& $form['tabledrag_options'][$id];
$tmpRow = array();
foreach (element_children($columns) as $el_id) {
$tmpRow[] = drupal_render($columns[$el_id]);
}
$rows[] = $tmpRow;
}
foreach (element_children($form['tabledrag_types']) as $id) {
$columns =& $form['tabledrag_types'][$id];
$tmpRow = array();
foreach (element_children($columns) as $el_id) {
$tmpRow[] = drupal_render($columns[$el_id]);
}
$rows_types[] = $tmpRow;
}
foreach (element_children($form['tabledrag_depth_fields']) as $id) {
$column =& $form['tabledrag_depth_fields'][$id];
$rows_orderfields[] = array(
drupal_render($column),
);
}
if (module_exists('realtimeedit')) {
$add_realtimeedit_button = drupal_render($form['realtimeedit_add_button']);
$labels_realtimeeditfields = array(
t('Enabled Fields'),
' ',
);
foreach (element_children($form['realtimeedit_enabled_fields']) as $id) {
$columns =& $form['realtimeedit_enabled_fields'][$id];
$tmpRow = array();
foreach (element_children($columns) as $el_id) {
$tmpRow[] = drupal_render($columns[$el_id]);
}
$rows_realtimeedit_fields[] = $tmpRow;
}
}
$output .= drupal_render($form);
$output .= theme('table', $labels, $rows);
$output .= $submit_button;
$output .= theme('table', $labels_types, $rows_types);
$output .= $add_type_button;
$output .= $description_content_type;
$output .= theme('table', $labels_orderfields, $rows_orderfields);
$output .= theme('table', array(
"",
"",
), array(
array(
$set_depth_select,
$set_depth_button,
),
));
$output .= $tabledrag_expand;
$output .= $tabledrag_expand_default;
$output .= $tabledrag_visible;
if (module_exists('realtimeedit')) {
$output .= theme('table', $labels_realtimeeditfields, $rows_realtimeedit_fields);
$output .= $add_realtimeedit_button;
}
return $output;
}