You are here

function cmis_sync_admin_form in CMIS API 6.2

Implementation for hook_form() hook.

'cmis_sync_map' var setting has the following form: $cmis_sync_map = array( 'drupal_content_type1' => array( // synchronization state for 'drupal_content_type1' // Drupal content type 'enabled' => TRUE,

// cmis type used on cmis repository side. 'cmis_type' => 'document',

// cmis folder used for synchronization 'cmis_root' => 'workspace://SpacesStore/234wed23redaaa'

// node field considered as content for cmis objects 'content_field' => 'body'

// used to map node fields to cmis object properties 'fields' => array( 'title' => 'cmisObjectProperty1', 'body' => 'cmisObjectProperty2' ) ), ... );

@todo Add proper validation, optimization and ux

1 string reference to 'cmis_sync_admin_form'
cmis_sync_menu in cmis_sync/cmis_sync.module
Implementation of hook_menu() for CMIS sync module.

File

cmis_sync/cmis_sync.admin.inc, line 33

Code

function cmis_sync_admin_form(&$form_state, $type_name = NULL) {
  module_load_include('api.inc', 'cmis');
  $cmis_sync_map = variable_get('cmis_sync_map', array());
  $cmis_sync_enabled = array_key_exists($type_name, $cmis_sync_map) && $cmis_sync_map[$type_name]['enabled'];
  $form['cmis_sync_drupal_type'] = array(
    '#type' => 'value',
    '#value' => $type_name,
  );
  $form['cmis_sync_settings'] = array(
    '#type' => 'fieldset',
    '#title' => t('CMIS Sync for @type_name', array(
      '@type_name' => $type_name,
    )),
    '#description' => t('Settings for cmis synchronization'),
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,
  );
  $settings_fieldset =& $form['cmis_sync_settings'];
  $form['cmis_sync_submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  $settings_fieldset['cmis_sync_enabled'] = array(
    '#type' => 'select',
    '#title' => t('Enable synchronization for @type_name content type', array(
      '@type_name' => $type_name,
    )),
    '#options' => array(
      FALSE => 'Disabled',
      TRUE => 'Enabled',
    ),
    '#default_value' => $cmis_sync_enabled,
    '#description' => t('Enable synchronization for this content type'),
  );
  if ($cmis_sync_enabled) {
    $settings_fieldset['cmis_sync_folder'] = array(
      '#type' => 'textfield',
      '#title' => t('CMIS folder'),
      '#default_value' => $cmis_sync_map[$type_name]['cmis_root'],
      '#autocomplete_path' => 'cmis/autocomplete',
      '#description' => t('CMIS folder to which drupal content is synchronized.'),
    );
    try {
      $repository = cmisapi_getRepositoryInfo();
      $cmis_types = cmisapi_getTypes($repository->repositoryId, 'document');
    } catch (CMISException $e) {
      cmis_error_handler('cmis_sync', $e);
      return;
    }
    $cmis_types_info = array(
      'not_set' => t('Not set'),
    );
    foreach ($cmis_types as $cmis_type) {
      $cmis_types_info[$cmis_type->id] = $cmis_type->title;
    }
    $settings_fieldset['cmis_sync_cmis_type'] = array(
      '#type' => 'select',
      '#title' => t('CMIS type'),
      '#options' => $cmis_types_info,
      '#default_value' => $cmis_sync_map[$type_name]['cmis_type'],
    );
    if ($cmis_sync_map[$type_name]['cmis_type'] && $cmis_sync_map[$type_name]['cmis_type'] != 'not_set') {

      // CMIS fields definition
      $cmis_type_fields_info = array(
        'not_set' => t('Not set'),
        'title' => t('Title'),
      );
      try {
        $cmis_type_info = cmisapi_getTypeDefinition($repository->repositoryId, $cmis_sync_map[$type_name]['cmis_type']);
      } catch (CMISException $e) {
        cmis_error_handler('cmis_sync', $e);
        return;
      }
      foreach ($cmis_type_info->fields as $cmis_type_field_name => $cmis_type_field_info) {
        $cmis_type_fields_info[$cmis_type_field_name] = $cmis_type_field_name;
      }

      // Drupal fields definition
      $content_type = content_types($type_name);
      $drupal_fields = array_merge(array(
        'nid' => array(
          'field_name' => 'nid',
          'type' => 'text',
        ),
        'title' => array(
          'field_name' => 'title',
          'type' => 'text',
        ),
        'body' => array(
          'field_name' => 'body',
          'type' => 'text',
        ),
      ), $content_type['fields']);
      $drupal_fields_set = array(
        'not_set' => t('Not set'),
      );
      foreach ($drupal_fields as $field_name => $field_details) {
        if (in_array($field_details['type'], array(
          'text',
          'filefield',
        ))) {
          $drupal_fields_set[$field_name] = sprintf('%s (%s)', $field_details['field_name'], $field_details['type']);
        }
      }

      // Content handling
      $settings_fieldset['cmis_sync_content_handling'] = array(
        '#type' => 'fieldset',
        '#title' => t('Map content to a specific Drupal node field'),
        '#collapsible' => TRUE,
        '#collapsed' => !isset($cmis_sync_map[$type_name]['content_field']),
      );
      $settings_fieldset['cmis_sync_content_handling']['cmis_sync_content'] = array(
        '#type' => 'select',
        '#title' => t('Content field'),
        '#options' => $drupal_fields_set,
        '#default_value' => $cmis_sync_map[$type_name]['content_field'],
        '#description' => t('Which field should be handled as node content for @type_name drupal content type', array(
          '@type_name' => $type_name,
        )),
      );

      // Fields map handling
      $settings_fieldset['cmis_fields_map'] = array(
        '#tree' => TRUE,
        '#type' => 'fieldset',
        '#title' => t('Fields synchronization'),
        '#collapsible' => TRUE,
        '#collapsed' => count($cmis_sync_map[$type_name]['fields']) == 0,
        '#theme' => 'cmis_sync_admin_field_map_table',
      );
      if (isset($cmis_sync_map[$type_name]['fields'])) {
        foreach ($cmis_sync_map[$type_name]['fields'] as $cmis_sync_field_rule) {
          $settings_fieldset['cmis_fields_map'][] = array(
            'rule_enabled' => array(
              '#type' => 'checkbox',
              '#default_value' => TRUE,
            ),
            'drupal_field' => array(
              '#type' => 'select',
              '#options' => $drupal_fields_set,
              '#default_value' => $cmis_sync_field_rule['drupal'],
            ),
            'cmis_field' => array(
              '#type' => 'select',
              '#options' => $cmis_type_fields_info,
              '#default_value' => $cmis_sync_field_rule['cmis'],
            ),
            'drupal_to_cmis' => array(
              '#type' => 'checkbox',
              '#default_value' => array_key_exists('drupal to cmis', $cmis_sync_field_rule) ? $cmis_sync_field_rule['drupal to cmis'] : TRUE,
            ),
            'cmis_to_drupal' => array(
              '#type' => 'checkbox',
              '#default_value' => array_key_exists('cmis to drupal', $cmis_sync_field_rule) ? $cmis_sync_field_rule['cmis to drupal'] : TRUE,
            ),
          );
        }
      }
      foreach (array_keys($drupal_fields_set) as $cmis_sync_field_rule) {
        $settings_fieldset['cmis_fields_map'][] = array(
          'rule_enabled' => array(
            '#type' => 'checkbox',
            '#default_value' => FALSE,
          ),
          'drupal_field' => array(
            '#type' => 'select',
            '#options' => $drupal_fields_set,
            '#default_value' => $cmis_sync_field_rule,
          ),
          'cmis_field' => array(
            '#type' => 'select',
            '#options' => $cmis_type_fields_info,
          ),
          'drupal_to_cmis' => array(
            '#type' => 'checkbox',
            '#default_value' => FALSE,
          ),
          'cmis_to_drupal' => array(
            '#type' => 'checkbox',
            '#default_value' => FALSE,
          ),
        );
      }

      // Advanced sync rules
      $settings_fieldset['cmis_sync_advanced'] = array(
        '#type' => 'fieldset',
        '#title' => t('Advanced synchronization options'),
        '#collapsible' => TRUE,
        '#collapsed' => TRUE,
      );
      $settings_fieldset['cmis_sync_advanced']['cmis_sync_full_sync_next_cron'] = array(
        '#type' => 'select',
        '#title' => t('Full synchronization at next cron'),
        '#default_value' => $cmis_sync_map[$type_name]['full_sync_next_cron'],
        '#options' => array(
          TRUE => 'True',
          FALSE => 'False',
        ),
        '#description' => t('Do a full synchronization next time when CMIS sync process runs.'),
      );
      $settings_fieldset['cmis_sync_advanced']['cmis_sync_subfolders'] = array(
        '#type' => 'select',
        '#title' => t('Synchronize CMIS sub-folders'),
        '#default_value' => $cmis_sync_map[$type_name]['subfolders'],
        '#options' => array(
          FALSE => 'Disabled',
          TRUE => 'Enabled',
        ),
      );
      $settings_fieldset['cmis_sync_advanced']['cmis_sync_deletes'] = array(
        '#type' => 'select',
        '#title' => t('Synchronize CMIS deletes'),
        '#default_value' => $cmis_sync_map[$type_name]['deletes'],
        '#options' => array(
          FALSE => 'Disabled',
          TRUE => 'Enabled',
        ),
      );
    }
  }
  return $form;
}