You are here

ModalForm.inc in Slickgrid 7

Same filename and directory in other branches
  1. 7.2 plugins/editors/ModalForm.inc

Provides an inline cell editor

File

plugins/editors/ModalForm.inc
View source
<?php

/**
 * @file
 * Provides an inline cell editor
 */

// Plugin definition
$plugin = array(
  'title' => t('Modal form'),
  'description' => t('Open the field\'s part of the node form in a pop up.'),
  'js' => array(
    'file' => 'slickgrid.editors.js',
  ),
  'css' => array(
    'file' => 'slickgrid.editors.css',
  ),
  'handler' => array(
    'class' => 'slickgrid_editors',
  ),
  'field_types' => array_keys(field_info_formatter_types()),
  // Works for all fields
  'process' => 'slickgrid_plugin_modal_form_process',
  'error' => 'slickgrid_plugin_modal_form_error',
);

// No specified field_types, so this plugin can be used for all fields

/**
 * 
 * Retrieve form / process a modal form
 * This uses ctools ajax & the whole form so it works with all fields
 * @param object $editor
 */
function slickgrid_plugin_modal_form_process($editor) {

  // Include the ctools stuff
  ctools_include('modal');
  ctools_include('ajax');
  $form_state['values'] = $_POST;

  // Additional form_state settings required for ctools modal forms
  $editor->entity_info = entity_get_info($editor->entity_type);
  $form_state['title'] = format_plural(count($editor->entities), 'Update 1 %type', 'Update @count %types', array(
    '%type' => strtolower($editor->entity_info['label']),
  ));
  $form_state['ajax'] = true;

  // Pass the editor object into the form_state
  $form_state['editor'] = $editor;
  $output = ctools_modal_form_wrapper('slickgrid_editor_form', $form_state);
  if (!empty($form_state['executed'])) {

    // Form has succesfully completed
    // We're going to exit the process, so get editor result manually
    $result = $form_state['editor']
      ->get_result();
    slickgrid_callback_get_messages($result);

    // Build a ctools ajax output array
    $output = array(
      array(
        'command' => 'slickgrid',
        'response' => array(
          'result' => $result,
        ),
      ),
    );
  }
  print ajax_render($output);
  exit;
}
function slickgrid_plugin_modal_form_error($id, $error, $op) {

  // If we're not in the submission process print error & exit
  if ($op != 'submit') {
    print ctools_modal_render(t('Error'), $error);
    exit;
  }
}

Functions

Namesort descending Description
slickgrid_plugin_modal_form_error
slickgrid_plugin_modal_form_process Retrieve form / process a modal form This uses ctools ajax & the whole form so it works with all fields