You are here

function services_edit_form_endpoint_resources in Services 6.3

Same name and namespace in other branches
  1. 7.3 plugins/export_ui/services_ctools_export_ui.class.php \services_edit_form_endpoint_resources()

services_edit_form_endpoint_resources function.

Parameters

array &$form_state:

object $endpoint:

Return value

Form

2 string references to 'services_edit_form_endpoint_resources'
services_ctools_export_ui::resources_page in plugins/export_ui/services_ctools_export_ui.class.php
Page callback for the resources page.
services_edit_endpoint_resources in plugins/export_ui/services_ctools_export_ui.class.php
services_edit_endpoint_resources function.

File

plugins/export_ui/services_ctools_export_ui.class.php, line 239
Export-ui handler for the Services module.

Code

function services_edit_form_endpoint_resources(&$form_state, $endpoint) {
  module_load_include('resource_build.inc', 'services');
  module_load_include('runtime.inc', 'services');
  $form = array();
  drupal_add_js('misc/tableselect.js');
  drupal_add_js(drupal_get_path('module', 'services') . '/js/services.admin.js');
  drupal_add_css(drupal_get_path('module', 'services') . '/css/services.admin.css');
  $form['endpoint_object'] = array(
    '#type' => 'value',
    '#value' => $endpoint,
  );
  $ops = array(
    'create' => t('Create'),
    'retrieve' => t('Retrieve'),
    'update' => t('Update'),
    'delete' => t('Delete'),
    'index' => t('Index'),
  );

  // Call _services_build_resources() directly instead of
  // services_get_resources to bypass caching.
  $resources = _services_build_resources();

  // Apply the endpoint in a non-strict mode, so that the non-active resources
  // are preserved.
  _services_apply_endpoint($resources, $endpoint, FALSE);
  $form['instructions'] = array(
    '#type' => 'item',
    '#title' => t('Resources'),
    '#description' => t('Select the resource(s) or methods you would like to enable and click <em>Save</em>.'),
  );
  $form['resources'] = array(
    '#theme' => 'services_resource_table',
    '#tree' => TRUE,
  );

  // Collect authentication module info for later use and
  // append the default settings for authentication modules
  $auth_info = array();
  $class_names = services_operation_class_info();
  foreach ($endpoint->authentication as $module => $settings) {
    $auth_info[$module] = services_authentication_info($module);

    // Append the default settings for the authentication module.
    $default_settings = services_auth_invoke($module, 'default_security_settings');
    if (is_array($default_settings) && is_array($settings)) {
      $settings += $default_settings;
    }
    $endpoint->authentication[$module] = $settings;
  }

  // Generate the list of methods arranged by resource.
  foreach ($resources as $resource_name => $resource) {
    $resource_conf = array();
    if (isset($endpoint->resources[$resource_name])) {
      $resource_conf = $endpoint->resources[$resource_name];
    }
    $res_item = array(
      '#collapsed' => TRUE,
      '#collapsible' => TRUE,
    );
    $alias = '';
    if (isset($endpoint->resources[$resource_name]['alias'])) {
      $alias = $endpoint->resources[$resource_name]['alias'];
    }
    elseif (isset($resource_conf['alias'])) {
      $alias = $resource_conf['alias'];
    }
    $res_item['alias'] = array(
      '#type' => 'textfield',
      '#default_value' => $alias,
      '#size' => 20,
    );
    foreach ($class_names as $class => $info) {
      if (!empty($resource[$class])) {
        $res_item[$class] = array(
          '#type' => 'item',
          '#title' => $info['title'],
        );
        foreach ($resource[$class] as $op_name => $op) {
          $description = isset($op['help']) ? $op['help'] : t('No description is available');
          $default_value = 0;
          if (isset($resource_conf[$class][$op_name]['enabled'])) {
            $default_value = $resource_conf[$class][$op_name]['enabled'];
          }
          $res_item[$class][$op_name] = array(
            '#type' => 'item',
            '#title' => $op_name,
            '#description' => $description,
          );
          $res_item[$class][$op_name]['enabled'] = array(
            '#type' => 'checkbox',
            '#default_value' => $default_value,
          );
          $controller_settings = array();
          foreach ($endpoint->authentication as $module => $settings) {
            $auth_settings = services_auth_invoke($module, 'controller_settings', $settings, $op, $endpoint->authentication[$module], $class, $op_name);
            if (is_array($auth_settings)) {
              $auth_settings = array(
                '#title' => $auth_info[$module]['title'],
                '#type' => 'item',
              ) + $auth_settings;
              $controller_settings[$module] = $auth_settings;
            }
          }
          $res_item[$class][$op_name]['settings'] = $controller_settings;
        }
      }
    }
    $form['resources'][$resource_name] = $res_item;
  }
  $form['save'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  return $form;
}