Projet

Général

Profil

Paste
Télécharger (7,91 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / ldap / ldap_user / ldap_user.test_form.inc @ 91af538d

1 85ad3d82 Assos Assos
<?php
2
3
/**
4
 * @file
5
 */
6
7
/**
8
 * Implements the LDAP user test page.
9
 *
10
 * @param $form_state
11
 *   A form state array.
12
 * @param $op
13
 *   An operatin - add or edit.
14
 * @param $sid
15
 *   A LDAP server ID.
16
 *
17
 * @return
18
 *   The form structure.
19
 */
20
function ldap_user_test_form($form, &$form_state, $op = NULL) {
21
22
  $username = @$_SESSION['ldap_user_test_form']['testing_drupal_username'];
23
24
  $form['#prefix'] = t('<h1>Test LDAP User Configuration</h1>');
25
26
  $form['#prefix'] .= t('This form simply tests an LDAP User configuration against an individual ldap or drupal user.
27
    It makes no changes to the drupal or ldap user.');
28
29 32700c57 Assos Assos
  $form['testing_drupal_username'] = [
30 85ad3d82 Assos Assos
    '#type' => 'textfield',
31
    '#title' => t('Testing Drupal Username'),
32
    '#default_value' => $username,
33
    '#required' => 1,
34
    '#size' => 30,
35
    '#maxlength' => 255,
36
    '#description' => t('This is optional and used for testing this server\'s configuration against an actual username.  The user need not exist in Drupal and testing will not affect the user\'s LDAP or Drupal Account.'),
37 32700c57 Assos Assos
  ];
38
39
  $form['test_mode'] = [
40
    '#type' => 'radios',
41
    '#title' => t('Testing Mode'),
42
    '#required' => 0,
43
    '#default_value' => isset($_SESSION['ldap_user_test_form']['test_mode']) ? $_SESSION['ldap_user_test_form']['test_mode'] : 'query',
44
    '#options' => [
45
      'query' => t('Test Query.  Will not alter anything in drupal or LDAP'),
46
      'execute' => t('Execute Action.  Will perform provisioning configured for events below.  If this is selected only one action should be selected below'),
47
    ],
48
  ];
49 85ad3d82 Assos Assos
50
  $synch_trigger_options = ldap_user_synch_triggers_key_values();
51
52 32700c57 Assos Assos
  $selected_actions = isset($_SESSION['ldap_user_test_form']['action']) ? $_SESSION['ldap_user_test_form']['action'] : [];
53
  $form['action'] = [
54
    '#type' => 'checkboxes',
55
    '#title' => t('Actions/Event Handlers to Test'),
56
    '#required' => 0,
57
    '#default_value' => $selected_actions,
58
    '#options' => $synch_trigger_options,
59
    '#states' => [
60
      'visible' => [
61
        ':input[name="wsEnabled"]' => ['checked' => TRUE],
62
      ],
63
    ],
64
  ];
65
66
  $form['submit'] = [
67 85ad3d82 Assos Assos
    '#type' => 'submit',
68
    '#value' => 'test',
69
    '#weight' => 100,
70 32700c57 Assos Assos
  ];
71 85ad3d82 Assos Assos
72
  return $form;
73
}
74
75 32700c57 Assos Assos
/**
76
 *
77
 */
78 85ad3d82 Assos Assos
function ldap_user_test_form_validate($form, &$form_state) {
79
  if ($form_state['values']['test_mode'] == 'execute'  &&
80 32700c57 Assos Assos
    count(array_filter($form_state['values']['action'])) > 1) {
81 85ad3d82 Assos Assos
    form_set_error('test_mode', t('Only one action may be selected for "Execute Action" testing mode.'));
82
  }
83
84
}
85
86
/**
87
 * Submit hook for the LDAP server form.
88
 */
89
function ldap_user_test_form_submit($form, &$form_state) {
90
91
  $username = $form_state['values']['testing_drupal_username'];
92
  $selected_actions = $form_state['values']['action'];
93
94
  if ($username && count($selected_actions) > 0) {
95
96
    $synch_trigger_options = ldap_user_synch_triggers_key_values();
97
98
    $user_object = user_load_by_name($username);
99
    if ($user_object) {
100 32700c57 Assos Assos
      $user_entities = entity_load('user', [$user_object->uid]);
101 85ad3d82 Assos Assos
      $user_entity = $user_entities[$user_object->uid];
102
    }
103
    else {
104
      $user_entity = NULL;
105
    }
106
107
    $ldap_user_conf = ldap_user_conf();
108 32700c57 Assos Assos
    $test_servers = [];
109 85ad3d82 Assos Assos
    $user_ldap_entry = FALSE;
110
    if ($ldap_user_conf->drupalAcctProvisionServer) {
111
      $test_servers[LDAP_USER_PROV_DIRECTION_TO_DRUPAL_USER] = $ldap_user_conf->drupalAcctProvisionServer;
112
      $user_ldap_entry = ldap_servers_get_user_ldap_data($username, $ldap_user_conf->drupalAcctProvisionServer);
113
    }
114
    if ($ldap_user_conf->ldapEntryProvisionServer) {
115
      $test_servers[LDAP_USER_PROV_DIRECTION_TO_LDAP_ENTRY] = $ldap_user_conf->ldapEntryProvisionServer;
116
      if (!$user_ldap_entry) {
117
        $user_ldap_entry = ldap_servers_get_user_ldap_data($username, $ldap_user_conf->ldapEntryProvisionServer);
118
      }
119
    }
120 32700c57 Assos Assos
    $results = [];
121 85ad3d82 Assos Assos
    $results['username'] = $username;
122
    $results['user object (before provisioning or synching)'] = $user_object;
123
    $results['user entity (before provisioning or synching)'] = $user_entity;
124
    $results['related ldap entry (before provisioning or synching)'] = $user_ldap_entry;
125
    $results['ldap_user_conf'] = $ldap_user_conf;
126
127
    if (is_object($user_object)) {
128 32700c57 Assos Assos
      $authmaps = db_query("SELECT aid, uid, module, authname FROM {authmap} WHERE uid = :uid", [':uid' => $user_object->uid])->fetchAllAssoc('aid', PDO::FETCH_ASSOC);
129 85ad3d82 Assos Assos
    }
130
    else {
131
      $authmaps = 'No authmaps available.  Authmaps only shown if user account exists beforehand';
132 32700c57 Assos Assos
      // Need for testing.
133
      $user_object = new stdClass();
134 85ad3d82 Assos Assos
      $user_object->name = $username;
135
    }
136
    $results['User Authmap'] = $authmaps;
137
    $results['LDAP User Configuration Object'] = $ldap_user_conf;
138
139
    $save = ($form_state['values']['test_mode'] == 'execute');
140
    $test_query = ($form_state['values']['test_mode'] != 'execute');
141 32700c57 Assos Assos
    $user_edit = ['name' => $username];
142 85ad3d82 Assos Assos
143
    foreach (array_filter($selected_actions) as $i => $synch_trigger) {
144
      $synch_trigger_description = $synch_trigger_options[$synch_trigger];
145 32700c57 Assos Assos
      foreach ([LDAP_USER_PROV_DIRECTION_TO_DRUPAL_USER, LDAP_USER_PROV_DIRECTION_TO_LDAP_ENTRY] as $direction) {
146 85ad3d82 Assos Assos
        if ($ldap_user_conf->provisionEnabled($direction, $synch_trigger)) {
147
          if ($direction == LDAP_USER_PROV_DIRECTION_TO_DRUPAL_USER) {
148
            $discard = $ldap_user_conf->provisionDrupalAccount(NULL, $user_edit, NULL, $save);
149
            $results['provisionDrupalAccount method results']["context = $synch_trigger_description"]['proposed'] = $user_edit;
150
          }
151
          else {
152
            $provision_result = $ldap_user_conf->provisionLdapEntry($user_object, NULL, $test_query);
153
            $results['provisionLdapEntry method results']["context = $synch_trigger_description"] = $provision_result;
154
          }
155
        }
156
        else {
157
          if ($direction == LDAP_USER_PROV_DIRECTION_TO_DRUPAL_USER) {
158
            $results['provisionDrupalAccount method results']["context = $synch_trigger_description"] = 'Not enabled.';
159
          }
160
          else {
161
            $results['provisionLdapEntry method results']["context = $synch_trigger_description"] = 'Not enabled.';
162
          }
163
        }
164
      }
165
    }
166 32700c57 Assos Assos
    // Do all synchs second, in case logic of form changes to allow executing mulitple events.
167 85ad3d82 Assos Assos
    foreach (array_filter($selected_actions) as $i => $synch_trigger) {
168
      $synch_trigger_description = $synch_trigger_options[$synch_trigger];
169 32700c57 Assos Assos
      foreach ([LDAP_USER_PROV_DIRECTION_TO_DRUPAL_USER, LDAP_USER_PROV_DIRECTION_TO_LDAP_ENTRY] as $direction) {
170 85ad3d82 Assos Assos
        if ($ldap_user_conf->provisionEnabled($direction, $synch_trigger)) {
171
          if ($direction == LDAP_USER_PROV_DIRECTION_TO_DRUPAL_USER) {
172
            $discard = $ldap_user_conf->synchToDrupalAccount(NULL, $user_edit, NULL, $test_query);
173
            $results['synchToDrupalAccount method results']["context = $synch_trigger_description"]['proposed'] = $user_edit;
174
          }
175 32700c57 Assos Assos
          // To ldap.
176
          else {
177
            $provision_result = $ldap_user_conf->synchToLdapEntry($user_object, $user_edit, [], $test_query);
178 85ad3d82 Assos Assos
            $results['synchToLdapEntry method results']["context = $synch_trigger_description"] = $provision_result;
179
          }
180
        }
181
        else {
182
          if ($direction == LDAP_USER_PROV_DIRECTION_TO_DRUPAL_USER) {
183
            $results['synchToDrupalAccount method results']["context = $synch_trigger_description"] = 'Not enabled.';
184
          }
185 32700c57 Assos Assos
          // To ldap.
186
          else {
187 85ad3d82 Assos Assos
            $results['synchToLdapEntry method results']["context = $synch_trigger_description"] = 'Not enabled.';
188
          }
189
        }
190
      }
191
    }
192
193
    if (function_exists('dpm')) {
194
      dpm($results);
195
    }
196
    else {
197
      drupal_set_message(t('This form will not display results unless the devel module is enabled.'), 'warning');
198
    }
199
  }
200
201
  $_SESSION['ldap_user_test_form']['action'] = $form_state['values']['action'];
202
  $_SESSION['ldap_user_test_form']['test_mode'] = $form_state['values']['test_mode'];
203
  $_SESSION['ldap_user_test_form']['testing_drupal_username'] = $username;
204
205 bc175c27 Assos Assos
  $form_state['redirect'] = LDAP_USER_TEST_FORM_PATH;
206 85ad3d82 Assos Assos
207
}