You are here

function access_filter_form_filter in Access Filter 7

Form builder for the filter editing form.

See also

access_filter_form_filter_submit()

access_filter_form_filter_validate()

1 string reference to 'access_filter_form_filter'
access_filter_menu in ./access_filter.module
Implements hook_menu().

File

./access_filter.admin.inc, line 249
Administration pages for access filters.

Code

function access_filter_form_filter($form, &$form_state, $filter = NULL) {
  if (!isset($form_state['term'])) {
    $defaults = array(
      'status' => ACCESS_FILTER_STATUS_ENABLED,
      'name' => '',
      'is_strict' => TRUE,
      'paths' => '',
      'rules' => '',
      'deny_action_settings' => (object) array(
        'type' => ACCESS_FILTER_DENY_ACTION_403,
        'error_message' => array(
          'value' => '',
          'format' => NULL,
        ),
        'redirect_destination' => '',
        'force_logout' => FALSE,
      ),
      'weight' => 0,
    );
    if (!$filter) {
      $filter = new stdClass();
    }
    foreach ($defaults as $key => $value) {
      if (!isset($filter->{$key})) {
        $filter->{$key} = $value;
      }
      elseif (is_object($value)) {
        foreach ((array) $value as $sub_key => $sub_value) {
          if (!isset($filter->{$key}->{$sub_key})) {
            $filter->{$key}->{$sub_key} = $sub_value;
          }
        }
      }
    }
    $form_state['filter'] = $filter;
  }
  else {
    $filter = $form_state['filter'];
  }
  if (isset($filter->fid)) {
    $form['vid'] = array(
      '#type' => 'value',
      '#value' => $filter->fid,
    );
  }
  $form['basics'] = array(
    '#type' => 'fieldset',
    '#title' => t('Basics'),
  );
  $form['basics']['status'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enabled'),
    '#default_value' => $filter->status,
  );
  $form['basics']['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Name'),
    '#default_value' => $filter->name,
  );
  $form['path'] = array(
    '#type' => 'fieldset',
    '#title' => 'Paths',
  );
  $form['path']['paths'] = array(
    '#type' => 'textarea',
    '#default_value' => $filter->paths,
  );
  $form['path']['paths']['#description'] = '<div>' . t('Enter one path per line.') . '</div>';
  $form['path']['paths']['#description'] .= '<div>' . t('Format: %format', array(
    '%format' => t('Type[+Modifiers,...]:Pattern'),
  )) . '</div>';
  $form['path']['paths']['#description'] .= '<div>' . t('Types:') . '</div>';
  $form['path']['paths']['#description'] .= '<ul>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_DRUPAL . ' = ' . t('Drupal path') . '</li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_URI . ' = ' . t('Request uri (contains parameters)') . '</li>';
  $form['path']['paths']['#description'] .= '</ul>';
  $form['path']['paths']['#description'] .= '<div>' . t('Modifiers:') . '</div>';
  $form['path']['paths']['#description'] .= '<ul>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_MODIFIER_REGEX . ' = ' . t('Use regex') . '</li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_MODIFIER_BLIND . ' = ' . t('Blind mode (disable looking up aliases)') . '</li>';
  $form['path']['paths']['#description'] .= '</ul>';
  $form['path']['paths']['#description'] .= '<div>' . t('Exapmles:') . '</div>';
  $form['path']['paths']['#description'] .= '<ul>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_DRUPAL . ':&lt;front&gt; <i>' . t('# Front page') . '</i></li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_DRUPAL . ':&lt;admin&gt; <i>' . t('# Admin paths') . '</i></li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_DRUPAL . ':admin/config/people/access_filter/*</li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_DRUPAL . '+' . ACCESS_FILTER_PATH_MODIFIER_BLIND . ':node/3</li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_DRUPAL . '+' . ACCESS_FILTER_PATH_MODIFIER_REGEX . ACCESS_FILTER_PATH_MODIFIER_BLIND . ':^node/[123]$</li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_DRUPAL . '+' . ACCESS_FILTER_PATH_MODIFIER_REGEX . ':^admin\\/config\\/people\\/access_filter\\/[0-9]+\\/edit$</li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_URI . ':admin/config/people/access_filter</li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_URI . ':admin/config/people/access_filter?mode=sample&type=1</li>';
  $form['path']['paths']['#description'] .= '  <li>' . ACCESS_FILTER_PATH_TYPE_URI . '+' . ACCESS_FILTER_PATH_MODIFIER_REGEX . ':^admin\\/config\\/people\\/access_filter\\?mode=(ex1|ex2)</li>';
  $form['path']['paths']['#description'] .= '</ul>';
  $form['rule'] = array(
    '#type' => 'fieldset',
    '#title' => t('Rules'),
  );
  $form['rule']['rules'] = array(
    '#type' => 'textarea',
    '#default_value' => $filter->rules,
  );
  $form['rule']['rules']['#description'] = '<div>' . t('Enter one rule per line.') . '</div>';
  $form['rule']['rules']['#description'] .= '<div>' . t('Format: %format', array(
    '%format' => t('Process type:IP address'),
  )) . '</div>';
  $form['rule']['rules']['#description'] .= '<div>' . t('Process types:') . '</div>';
  $form['rule']['rules']['#description'] .= '<ul>';
  $form['rule']['rules']['#description'] .= '  <li>' . ACCESS_FILTER_PROCESS_TYPE_DENY . ' = ' . t('Deny') . '</li>';
  $form['rule']['rules']['#description'] .= '  <li>' . ACCESS_FILTER_PROCESS_TYPE_ALLOW . ' = ' . t('Allow') . '</li>';
  $form['rule']['rules']['#description'] .= '</ul>';
  $form['rule']['rules']['#description'] .= '<div>' . t("'*' is matches any IP addresses.") . '</div>';
  $form['rule']['rules']['#description'] .= '<div>' . t('Exapmles:') . '</div>';
  $form['rule']['rules']['#description'] .= '<div>' . t('Allow from only @allowed except @denied.', array(
    '@allowed' => '192.168.0.0/24',
    '@denied' => '192.168.0.10-192.168.0.20',
  )) . '</div>';
  $form['rule']['rules']['#description'] .= '<ul>';
  $form['rule']['rules']['#description'] .= '  <li>' . ACCESS_FILTER_PROCESS_TYPE_DENY . ':*</li>';
  $form['rule']['rules']['#description'] .= '  <li>' . ACCESS_FILTER_PROCESS_TYPE_ALLOW . ':192.168.0.0/24</li>';
  $form['rule']['rules']['#description'] .= '  <li>' . ACCESS_FILTER_PROCESS_TYPE_DENY . ':192.168.0.10-192.168.0.20</li>';
  $form['rule']['rules']['#description'] .= '</ul>';
  $form['deny_action_settings'] = array(
    '#type' => 'fieldset',
    '#title' => t('On deny'),
    '#tree' => TRUE,
  );
  $form['deny_action_settings']['type'] = array(
    '#type' => 'select',
    '#title' => t('Response'),
    '#options' => array(
      ACCESS_FILTER_DENY_ACTION_403 => t('Error') . ': 403 Access Forbidden',
      ACCESS_FILTER_DENY_ACTION_404 => t('Error') . ': 404 Not Found',
      ACCESS_FILTER_DENY_ACTION_301 => t('Redirect') . ': 301 Moved Permanently',
      ACCESS_FILTER_DENY_ACTION_302 => t('Redirect') . ': 302 Moved Temporarily',
      ACCESS_FILTER_DENY_ACTION_200 => '200 OK',
    ),
    '#default_value' => $filter->deny_action_settings->type,
  );
  $form['deny_action_settings']['error_message'] = array(
    '#type' => 'text_format',
    '#title' => t('Error message'),
    '#default_value' => $filter->deny_action_settings->error_message['value'],
    '#format' => $filter->deny_action_settings->error_message['format'],
  );
  $form['deny_action_settings']['redirect_destination'] = array(
    '#type' => 'textfield',
    '#title' => t('Redirect URL'),
    '#default_value' => $filter->deny_action_settings->redirect_destination,
  );
  $form['deny_action_settings']['force_logout'] = array(
    '#type' => 'checkbox',
    '#title' => t('Force logout'),
    '#default_value' => $filter->deny_action_settings->force_logout,
  );
  $form['actions'] = array(
    '#type' => 'actions',
  );
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  $form['actions']['back'] = array(
    '#type' => 'submit',
    '#value' => t('Back'),
  );
  $form['#validate'][] = 'access_filter_form_filter_validate';
  $form['test'] = array(
    '#type' => 'fieldset',
    '#title' => t('Test'),
    '#weight' => 1000,
  );
  $form['test']['test_result'] = array(
    '#type' => 'markup',
    '#markup' => '<div id="test-result"></div>',
  );
  $form['test']['test_path'] = array(
    '#type' => 'textfield',
    '#title' => t('Path/URL'),
    '#field_prefix' => 'http://' . $_SERVER['HTTP_HOST'] . '/',
    '#default_value' => current_path(),
  );
  $form['test']['test_ip'] = array(
    '#type' => 'textfield',
    '#title' => t('IP address'),
    '#size' => 15,
    '#default_value' => ip_address(),
  );
  $form['test']['submit'] = array(
    '#type' => 'button',
    '#value' => t('Test'),
    '#ajax' => array(
      'callback' => 'access_filter_form_filter_callback_test',
      'wrapper' => 'test-result',
    ),
  );
  $form['#attached']['js'] = array(
    drupal_get_path('module', 'access_filter') . '/access_filter.js',
  );
  return $form;
}