? flexifilter-admin-list.tpl.php ? flexifilter_ui.patch Index: flexifilter.admin.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/flexifilter/flexifilter.admin.inc,v retrieving revision 1.13 diff -u -p -r1.13 flexifilter.admin.inc --- flexifilter.admin.inc 24 Jan 2008 01:57:10 -0000 1.13 +++ flexifilter.admin.inc 29 Jan 2008 01:05:20 -0000 @@ -4,10 +4,24 @@ /** * Generates the form for the admin overview page */ -function flexifilter_filter_list_form() { +function flexifilter_admin_list_form($form_state) { drupal_set_title("Flexifilters overview"); $path = drupal_get_path('module', 'flexifilter') .'/flexifilter.css'; drupal_add_css($path, 'module', 'all', FALSE); + if (isset($form_state['values']['enabled'])) { + foreach ($form_state['values']['enabled']['statuses'] as $fid => $value) { + if ($value == 'disabled') { + db_query('UPDATE {flexifilters} SET enabled = 0 WHERE fid = %d', $fid); + } + } + } + if (isset($form_state['values']['disabled'])) { + foreach ($form_state['values']['disabled']['statuses'] as $fid => $value) { + if ($value == 'enabled') { + db_query('UPDATE {flexifilters} SET enabled = 1 WHERE fid = %d', $fid); + } + } + } $form = array(); $form['enabled_header'] = array( @@ -21,7 +35,23 @@ function flexifilter_filter_list_form() '#suffix' => t('If a flexifilter is disabled, then it cannot be used within input formats, although it can be used within other flexifilters.') .'
', ); $form['disabled'] = flexifilter_filter_list_form_table(FALSE); - + + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Save'), + '#ahah' => array( + 'path' => 'admin/build/flexifilters/js/list_form', + 'selector' => '.flexifilter-status', + 'wrapper' => 'flexifilter-admin-list-form', + 'event' => 'change', + 'effect' => 'none', + 'method' => 'replace', + ), + ); + if (!isset($form_state['values'])) { + $form['#theme'] = 'flexifilter_filter_admin_form'; + } + return $form; } @@ -29,39 +59,63 @@ function flexifilter_filter_list_form() * Helper function for flexifilter_filter_list_form. Returns the table for the overview page. * * @param $enabled - * Is TRUE if we're theming the currently enabled filters.s + * Is TRUE if we're theming the currently enabled filters. */ function flexifilter_filter_list_form_table($enabled) { - $show_disable_link = $enabled; - $show_enable_link = !$enabled && flexifilter_get_number_enabled_filters() < FLEXIFILTER_MAX_FILTERS; - $header = array(t('Label'), t('Description'), t('Edit'), t('Delete'), t($enabled ? 'Disable' : 'Enable')); - $rows = array(); - $filters = flexifilter_get_filters(); + $options = array(); + if (flexifilter_get_number_enabled_filters() < FLEXIFILTER_MAX_FILTERS) { + $options['enabled'] = t('Enabled'); + } + $options['disabled'] = t('Disabled'); + $rowinfo = array(); + $statuses = array(); + $filters = flexifilter_get_filters(); foreach ($filters as $id => $filter) { if ($filter['enabled'] == $enabled) { - $row = array($filter['label'], $filter['description']); - $row[] = l(t('Edit'), 'admin/build/flexifilters/'. $id .'/edit', array(), drupal_get_destination()); - $row[] = l(t('Delete'), 'admin/build/flexifilters/'. $id .'/delete', array(), drupal_get_destination()); - if ($show_disable_link) { - $row[] = l(t('Disable'), 'admin/build/flexifilters/'. $id .'/disable', array(), drupal_get_destination()); - } - else if ($show_enable_link) { - $row[] = l(t('Enable'), 'admin/build/flexifilters/'. $id .'/enable', array(), drupal_get_destination()); - } - else { - $row[] = ''; - } - $rows[] = $row; + $rowinfo[] = array( + 'label' => $filter['label'], + 'description' => $filter['description'], + 'edit' => l(t('Edit'), 'admin/build/flexifilters/'. $id .'/edit', array(), drupal_get_destination()), + ); + $statuses[$filter['id']] = array( + '#type' => 'select', + '#title' => t('Status'), + '#options' => $options, + '#default_value' => ($enabled? 'enabled' : 'disabled'), + '#attributes' => array('class' => 'flexifilter-status'), + ); } } - if (count($rows)) { - return array('#value' => theme('table', $header, $rows, array('class' => 'flexifilters-list'))); + if (count($rowinfo)) { + return array('#theme' => 'flexifilter_admin_list', '#rowinfo' => $rowinfo, 'statuses' => $statuses, '#tree' => TRUE); } else { - return array('#value' => t('None.')); + return array('#value' => ''. t('There are no @status filters at this moment.', array('@status' => ($enabled? t('enabled') : t('disabled')))) .'
'); } } +function template_preprocess_flexifilter_admin_list(&$variables) { + $variables['table'] = array(); + foreach ($variables['form']['#rowinfo'] as $index => $rowinfo) { + $variables['table'][$index] = $rowinfo; + } + $count = 0; + foreach (element_children($variables['form']['statuses']) as $key) { + unset($variables['form']['statuses'][$key]['#title']); + $variables['table'][$count]['status'] = drupal_render($variables['form']['statuses'][$key]); + $count++; + } + $variables['label'] = t('Label'); + $variables['description'] = t('Description'); + $variables['status'] = t('Status'); +} + +function theme_flexifilter_filter_admin_form($form) { + unset($form['submit']); + return '
'. drupal_render($form) .'
'; +} + + /** * Helper function for flexifilter_filter_edit_form; removes the automatic * naming of submit controls. @@ -728,42 +782,6 @@ function flexifilter_filter_delete_form_ $form_state['redirect'] = 'admin/build/flexifilters'; } -function flexifilter_filter_disable_form($form_state, $flexifilter) { - $form = array(); - $form['fid'] = array('#type' => 'hidden', '#value' => $flexifilter['id']); - - return confirm_form($form, t('Are you sure you want to disable the flexifilter "%flexifilter"?', array('%flexifilter' => $flexifilter['label'])), 'admin/build/flexifilters', t('If you disable the flexifilter, then it cannot be used in any Input Formats.'), t('Disable'), t('Cancel')); -} - -function flexifilter_filter_disable_form_submit($form, &$form_state) { - $fid = $form_state['values']['fid']; - $filters = flexifilter_get_filters(); - $filter = $filters[$fid]; - if ($filter['enabled']) { - flexifilter_remove_from_filters($filter['delta']); - db_query('UPDATE {flexifilters} SET enabled = 0 WHERE fid = %d', $fid); - drupal_set_message(t('Flexifilter disabled.')); - } - $form_state['redirect'] = 'admin/build/flexifilters'; -} - -function flexifilter_filter_enable_form($form_state, $flexifilter) { - $form = array(); - $form['fid'] = array('#type' => 'hidden', '#value' => $flexifilter['id']); - - return confirm_form($form, t('Are you sure you want to enable the flexifilter "%flexifilter"?', array('%flexifilter' => $flexifilter['label'])), 'admin/build/flexifilters', t(''), t('Enable'), t('Cancel')); -} - -function flexifilter_filter_enable_form_submit($form, &$form_state) { - $fid = $form_state['values']['fid']; - $filters = flexifilter_get_filters(); - $filter = $filters[$fid]; - if (!$filter['enabled'] && flexifilter_get_number_enabled_filters() < FLEXIFILTER_MAX_FILTERS) { - db_query('UPDATE {flexifilters} SET enabled = 1, delta = %d WHERE fid = %d', flexifilter_get_unused_delta(), $fid); - drupal_set_message(t('Flexifilter enabled.')); - } - $form_state['redirect'] = 'admin/build/flexifilters'; -} function flexifilter_filter_export_form($form_state, $flexifilter) { $form = array(); @@ -847,4 +865,46 @@ function flexifilter_filter_default_form } flexifilter_install_flexifilters('flexifilter', $to_be_saved); $form_state['redirect'] = 'admin/build/flexifilters'; -} \ No newline at end of file +} + +function flexifilter_js($parameter = '') { + switch ($parameter) { + case 'list_form': + $form = _flexifilter_js(); + $output = '
'; + foreach (element_children($form) as $key) { + $output .= drupal_render($form[$key]); + } + drupal_json(array('status' => TRUE, 'data' => $output .'
')); + break; + } +} + +function _flexifilter_js() { + $form_state = array('storage' => NULL, 'submitted' => FALSE); + $form_build_id = $_POST['form_build_id']; + $form = form_get_cache($form_build_id, &$form_state); + // #parameters has $form_id, $form_state and then whatever was passed to + // drupal_get_form. + $args = $form['#parameters']; + $form_id = array_shift($args); + $form['#post'] = $_POST; + $form['#redirect'] = FALSE; + // This will set up $form_state['clicked_button'] and + // $form_state['storage']['mlid']. + drupal_process_form($form_id, $form, $form_state); + // Recreate and re-cache the form. + $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id); + // Pick up the parents of the pressed button. + $array_parents = $form_state['clicked_button']['#array_parents']; + // The last parent is the button itself, we need the wrapper instead. + $button_index = array_pop($array_parents); + while ($array_parents) { + $parent = array_shift($array_parents); + $form = $form[$parent]; + } + // Remove the button. + unset($form[$button_index]); + // Render messages and selects. + return $form; +} Index: flexifilter.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/flexifilter/flexifilter.module,v retrieving revision 1.14 diff -u -p -r1.14 flexifilter.module --- flexifilter.module 23 Jan 2008 22:43:16 -0000 1.14 +++ flexifilter.module 29 Jan 2008 01:05:20 -0000 @@ -21,7 +21,7 @@ function flexifilter_menu() { 'description' => t('Create new flexible input filters without writing any code.'), 'page callback' => 'drupal_get_form', 'access arguments' => array('administer flexifilter'), - 'page arguments' => array('flexifilter_filter_list_form'), + 'page arguments' => array('flexifilter_admin_list_form'), 'file' => 'flexifilter.admin.inc', ); $items['admin/build/flexifilters/list'] = array( @@ -78,23 +78,22 @@ function flexifilter_menu() { 'page arguments' => array('flexifilter_filter_delete_form', 3), 'file' => 'flexifilter.admin.inc', ); - $items['admin/build/flexifilters/%flexifilter/enable'] = array( - 'title' => t('Enable'), + $items['admin/build/flexifilters/js'] = array( + 'title' => t('JavaScript Callback'), 'type' => MENU_CALLBACK, - 'page callback' => 'drupal_get_form', - 'page arguments' => array('flexifilter_filter_enable_form', 3), - 'file' => 'flexifilter.admin.inc', - ); - $items['admin/build/flexifilters/%flexifilter/disable'] = array( - 'title' => t('Disable'), - 'type' => MENU_CALLBACK, - 'page callback' => 'drupal_get_form', - 'page arguments' => array('flexifilter_filter_disable_form', 3), + 'page callback' => 'flexifilter_js', 'file' => 'flexifilter.admin.inc', ); return $items; } +function flexifilter_theme() { + return array( + 'flexifilter_admin_list' => array('template' => 'flexifilter-admin-list', 'file' => 'flexifilter.admin.inc', 'arguments' => array('form' => NULL)), + 'flexifilter_filter_admin_form' => array('file' => 'flexifilter.admin.inc', 'arguments' => array('form' => NULL)), + ); +} + /** * Implementation of hook_help() */