Projet

Général

Profil

Paste
Télécharger (13,2 ko) Statistiques
| Branche: | Révision:

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

1 85ad3d82 Assos Assos
<?php
2
3
/**
4
 * @file
5
 * Install, update and uninstall functions for the LDAP User module.
6
 */
7
8
/**
9
 * Implements hook_requirements().
10
 */
11
function ldap_user_requirements($phase) {
12
13 32700c57 Assos Assos
  $requirements = [];
14 85ad3d82 Assos Assos
15
  if ($phase == 'runtime') {
16
17 32700c57 Assos Assos
    // Check for all $user->* fields created.
18 85ad3d82 Assos Assos
    $missing_fields = ldap_user_update_check_user_fields(TRUE);
19
    if (count($missing_fields)) {
20
      $requirements['ldap_user']['title'] = t('User Fields for LDAP User Module Missing');
21
      $requirements['ldap_user']['severity'] = REQUIREMENT_ERROR;
22
      $requirements['ldap_user']['value'] = NULL;
23
24
      $requirements['ldap_user']['description'] = t('Fields are added to the
25
        Drupal User entity for LDAP User module functionality.  These fields should
26
        have been created in LDAP User update 7203. The following userfields are missing:') .
27 32700c57 Assos Assos
        theme('item_list', [
28 85ad3d82 Assos Assos
          'items' => $missing_fields,
29
          'type' => 'ul',
30
          'title' => NULL,
31 32700c57 Assos Assos
        ]) .
32 85ad3d82 Assos Assos
        t('Rerun update 7203 to correct this; it will not write over destroy existing fields.');
33
    }
34
  }
35
36 32700c57 Assos Assos
  // Check that ldapauth not installed.
37 85ad3d82 Assos Assos
  return $requirements;
38
39
}
40
41
/**
42
 * Implements hook_install().
43
 */
44
function ldap_user_install() {
45
46
  foreach (ldap_user_user_entity_fields() as $field_id => $field_conf) {
47
    $field_info = field_info_field($field_id);
48
    if (!$field_info) {
49
      field_create_field($field_conf['field']);
50
      field_create_instance($field_conf['instance']);
51
    }
52
  }
53
54 32700c57 Assos Assos
  // Make ldap user weight slightly less than other ldap modules so it can load
55 85ad3d82 Assos Assos
  // user's associated ldap data first and save on ldap queries.
56
  db_query("UPDATE {system} SET weight = -1 WHERE name = 'ldap_user'");
57
58
  _ldap_user_install_update_authmap();
59
60
}
61
62 32700c57 Assos Assos
/**
63
 *
64
 */
65 85ad3d82 Assos Assos
function _ldap_user_install_update_authmap() {
66
  db_update('authmap')
67 32700c57 Assos Assos
    ->fields(
68
    [
69 85ad3d82 Assos Assos
      'module' => 'ldap_user',
70 32700c57 Assos Assos
    ]
71 85ad3d82 Assos Assos
  )
72 32700c57 Assos Assos
    ->condition('module', 'ldap_authentication')
73
    ->execute();
74 85ad3d82 Assos Assos
75
}
76
77
/**
78
 * Implements hook_uninstall().
79
 */
80
function ldap_user_uninstall() {
81
82
  foreach (ldap_user_user_entity_fields() as $field_id => $field_conf) {
83
84
    $instance = field_info_instance($field_conf['instance']['entity_type'], $field_conf['instance']['field_name'], $field_conf['instance']['bundle']);
85
    if ($instance) {
86
      field_delete_instance($instance);
87
    }
88
89
    $field_info = field_info_field($field_conf['field']['field_name']);
90
    if ($field_info) {
91
      field_delete_field($field_conf['field']['field_name']);
92
    }
93
  }
94
95
  variable_del('ldap_user_conf');
96
  variable_del('ldap_user_cron_last_orphan_checked');
97
  variable_del('ldap_user_cron_last_uid_checked');
98
99
}
100
101
/**
102
 * Implements hook_schema().
103
 */
104
function ldap_user_schema() {
105
106
}
107
108 32700c57 Assos Assos
/**
109
 * See http://api.drupal.org/api/drupal/modules%21field%21field.module/group/field/7.
110
 */
111 85ad3d82 Assos Assos
function ldap_user_user_entity_fields() {
112
113 32700c57 Assos Assos
  $fields = [];
114 85ad3d82 Assos Assos
115
  $field_name = 'ldap_user_puid_sid';
116 32700c57 Assos Assos
  $fields[$field_name]['field'] = [
117 85ad3d82 Assos Assos
    'field_name' => $field_name,
118
    'type' => 'text',
119 32700c57 Assos Assos
    'entity_types' => ['user'],
120 85ad3d82 Assos Assos
    'cardinality' => 1,
121
    'translatable' => 0,
122
    'locked' => 1,
123
    'module' => 'text',
124
    'no_ui' => 1,
125 32700c57 Assos Assos
    'settings' => [],
126
  ];
127 85ad3d82 Assos Assos
128 32700c57 Assos Assos
  $fields[$field_name]['instance'] = [
129
    'field_name' => $field_name,
130
    'entity_type' => 'user',
131
    'bundle' => 'user',
132
    'label' => 'LDAP Server ID that puid was derived from.  NULL if puid is independent of server configuration instance.',
133
    'description' => 'This field should not be edited.',
134
    'required' => 0,
135
    'default_value' => [],
136
    'settings' => [
137
      'text_processing' => 0,
138
    ],
139
    'widget' => [
140
      'type' => 'ldap_user_hidden',
141
      'settings' => [],
142
      'module' => 'ldap_user',
143
    ],
144
    'display' => [
145
      'default' => [
146
        'label' => 'hidden',
147
        'type' => 'hidden',
148
      ],
149
      'full' => [
150
        'label' => 'hidden',
151
        'type' => 'hidden',
152
      ],
153
      'teaser' => [
154
        'label' => 'hidden',
155
        'type' => 'hidden',
156
      ],
157
    ],
158
  ];
159 85ad3d82 Assos Assos
160
  $field_name = 'ldap_user_puid';
161 32700c57 Assos Assos
  $fields[$field_name]['field'] = [
162
    'field_name' => $field_name,
163
    'type' => 'text',
164
    'entity_types' => ['user'],
165
    'cardinality' => 1,
166
    'translatable' => 0,
167
    'locked' => 1,
168
    'module' => 'text',
169
    'no_ui' => 1,
170
    'settings' => [],
171
  ];
172
173
  $fields[$field_name]['instance'] = [
174
    'field_name' => $field_name,
175
    'entity_type' => 'user',
176
    'bundle' => 'user',
177
    'label' => 'Value of user\'s permanent unique id.  This should never change for a given ldap identified user.',
178
    'description' => 'This field should not be edited.',
179
    'required' => 0,
180
    'default_value' => [],
181
    'settings' => [
182
      'text_processing' => 0,
183
    ],
184
    'widget' => [
185
      'type' => 'ldap_user_hidden',
186
      'settings' => [],
187
      'module' => 'ldap_user',
188
    ],
189
    'display' => [
190
      'default' => [
191
        'label' => 'hidden',
192
        'type' => 'hidden',
193
      ],
194
      'full' => [
195
        'label' => 'hidden',
196
        'type' => 'hidden',
197
      ],
198
      'teaser' => [
199
        'label' => 'hidden',
200
        'type' => 'hidden',
201
      ],
202
    ],
203
  ];
204 85ad3d82 Assos Assos
205
  $field_name = 'ldap_user_puid_property';
206 32700c57 Assos Assos
  $fields[$field_name]['field'] = [
207
    'field_name' => $field_name,
208
    'type' => 'text',
209
    'entity_types' => ['user'],
210
    'cardinality' => 1,
211
    'translatable' => 0,
212
    'locked' => 1,
213
    'module' => 'text',
214
    'no_ui' => 1,
215
    'settings' => [],
216
  ];
217
218
  $fields[$field_name]['instance'] = [
219
    'field_name' => $field_name,
220
    'entity_type' => 'user',
221
    'bundle' => 'user',
222
    'label' => 'Property specified as user\'s puid.',
223
    'description' => 'This field should not be edited.',
224
    'required' => 0,
225
    'default_value' => [],
226
    'settings' => [
227
      'text_processing' => 0,
228
    ],
229
    'widget' => [
230
      'type' => 'ldap_user_hidden',
231
      'settings' => [],
232
      'module' => 'ldap_user',
233
    ],
234
    'display' => [
235
      'default' => [
236
        'label' => 'hidden',
237
        'type' => 'hidden',
238
      ],
239
      'full' => [
240
        'label' => 'hidden',
241
        'type' => 'hidden',
242
      ],
243
      'teaser' => [
244
        'label' => 'hidden',
245
        'type' => 'hidden',
246
      ],
247
    ],
248
  ];
249 85ad3d82 Assos Assos
250
  $field_name = 'ldap_user_current_dn';
251 32700c57 Assos Assos
  $fields[$field_name]['field'] = [
252
    'field_name' => $field_name,
253
    'type' => 'text',
254
    'entity_types' => ['user'],
255
    'cardinality' => 1,
256
    'translatable' => 0,
257
    'locked' => 1,
258
    'module' => 'text',
259
    'no_ui' => 1,
260
    'settings' => [],
261
  ];
262
263
  $fields[$field_name]['instance'] = [
264
    'field_name' => $field_name,
265
    'entity_type' => 'user',
266
    'bundle' => 'user',
267
    'label' => 'User LDAP DN',
268
    'description' => 'May change when user\'s DN changes. This field should not be edited.',
269
    'required' => 0,
270
    'default_value' => [],
271
    'settings' => [
272
      'text_processing' => 0,
273
    ],
274
    'widget' => [
275
      'type' => 'ldap_user_hidden',
276
      'settings' => [],
277
      'module' => 'ldap_user',
278
    ],
279
    'display' => [
280
      'default' => [
281
        'label' => 'hidden',
282
        'type' => 'hidden',
283
      ],
284
      'full' => [
285
        'label' => 'hidden',
286
        'type' => 'hidden',
287
      ],
288
      'teaser' => [
289
        'label' => 'hidden',
290
        'type' => 'hidden',
291
      ],
292
    ],
293
  ];
294 85ad3d82 Assos Assos
295
  $field_name = 'ldap_user_prov_entries';
296 32700c57 Assos Assos
  $fields[$field_name]['field'] = [
297 85ad3d82 Assos Assos
    'field_name' => $field_name,
298
    'type' => 'text',
299 32700c57 Assos Assos
    'entity_types' => ['user'],
300 85ad3d82 Assos Assos
    'cardinality' => FIELD_CARDINALITY_UNLIMITED,
301
    'translatable' => 0,
302
    'locked' => 1,
303
    'module' => 'text',
304
    'no_ui' => 1,
305 32700c57 Assos Assos
    'settings' => [],
306
  ];
307
308
  $fields[$field_name]['instance'] = [
309
    'field_name' => $field_name,
310
    'entity_type' => 'user',
311
    'bundle' => 'user',
312
    'label' => 'LDAP Entries that have been provisioned from this Drupal user.',
313
    'description' => 'This field should not be edited.',
314
    'required' => 0,
315
    'default_value' => NULL,
316
    'settings' => [
317
      'text_processing' => 0,
318
    ],
319
    'widget' => [
320
      'type' => 'ldap_user_hidden',
321
      'settings' => [],
322
      'module' => 'ldap_user',
323
    ],
324
    'display' => [
325
      'default' => [
326
        'label' => 'hidden',
327
        'type' => 'hidden',
328
      ],
329
      'full' => [
330
        'label' => 'hidden',
331
        'type' => 'hidden',
332
      ],
333
      'teaser' => [
334
        'label' => 'hidden',
335
        'type' => 'hidden',
336
      ],
337
    ],
338
  ];
339 85ad3d82 Assos Assos
340
  $field_name = 'ldap_user_last_checked';
341 32700c57 Assos Assos
  $fields[$field_name]['field'] = [
342 85ad3d82 Assos Assos
    'field_name' => $field_name,
343
    'type' => 'number_integer',
344 32700c57 Assos Assos
    'entity_types' => ['user'],
345 85ad3d82 Assos Assos
    'cardinality' => 1,
346
    'translatable' => 0,
347
    'locked' => 1,
348
    'module' => 'number',
349
    'no_ui' => 1,
350 32700c57 Assos Assos
    'settings' => [],
351
  ];
352
353
  $fields[$field_name]['instance'] = [
354
    'field_name' => $field_name,
355
    'entity_type' => 'user',
356
    'bundle' => 'user',
357
    'label' => 'Unix timestamp of when Drupal user was compard to ldap entry.  This could be for purposes of synching, deleteing drupal account, etc.',
358
    'description' => 'This field should not be edited.',
359
    'required' => 0,
360
    'default_value' => NULL,
361
    'settings' => [],
362
    'widget' => [
363
      'type' => 'ldap_user_hidden',
364
      'settings' => [],
365
      'module' => 'ldap_user',
366
    ],
367
    'display' => [
368
      'default' => [
369
        'label' => 'hidden',
370
        'type' => 'hidden',
371
      ],
372
      'full' => [
373
        'label' => 'hidden',
374
        'type' => 'hidden',
375
      ],
376
      'teaser' => [
377
        'label' => 'hidden',
378
        'type' => 'hidden',
379
      ],
380
    ],
381
  ];
382 85ad3d82 Assos Assos
383
  $field_name = 'ldap_user_ldap_exclude';
384 32700c57 Assos Assos
  $fields[$field_name]['field'] = [
385 85ad3d82 Assos Assos
    'field_name' => $field_name,
386
    'type' => 'number_integer',
387 32700c57 Assos Assos
    'entity_types' => ['user'],
388 85ad3d82 Assos Assos
    'cardinality' => 1,
389
    'translatable' => 0,
390
    'locked' => 1,
391
    'module' => 'number',
392
    'no_ui' => 1,
393 32700c57 Assos Assos
    'settings' => [],
394
  ];
395
396
  $fields[$field_name]['instance'] = [
397
    'field_name' => $field_name,
398
    'entity_type' => 'user',
399
    'bundle' => 'user',
400
    'label' => 'Whether to exclude the user from LDAP functionality',
401
    'description' => 'This field should not be edited.',
402
    'required' => 0,
403
    'default_value' => 0,
404
    'settings' => [],
405
    'widget' => [
406
      'type' => 'ldap_user_hidden',
407
      'settings' => [],
408
      'module' => 'ldap_user',
409
    ],
410
    'display' => [
411
      'default' => [
412
        'label' => 'hidden',
413
        'type' => 'hidden',
414
      ],
415
      'full' => [
416
        'label' => 'hidden',
417
        'type' => 'hidden',
418
      ],
419
      'teaser' => [
420
        'label' => 'hidden',
421
        'type' => 'hidden',
422
      ],
423
    ],
424
  ];
425
426 85ad3d82 Assos Assos
  return $fields;
427
}
428
429
/**
430 32700c57 Assos Assos
 * Update authmap table, changing ldap_authentication to ldap_user, disable ldap_profile.
431 85ad3d82 Assos Assos
 */
432
function ldap_user_update_7201() {
433
  if (module_exists('ldap_profile')) {
434 32700c57 Assos Assos
    module_disable(['ldap_profile', TRUE]);
435 85ad3d82 Assos Assos
  }
436
  _ldap_user_install_update_authmap();
437
}
438
439
/**
440 32700c57 Assos Assos
 * Attach ldap_user_last_checked field to user entity to track reconciliation of ldap and drupal accounts.
441 85ad3d82 Assos Assos
 */
442
function ldap_user_update_7202() {
443
444
  return t('ldap_user_last_checked field added to user entity.');
445
446
}
447
448
/**
449 32700c57 Assos Assos
 * Make sure all user entity fields are created.
450 85ad3d82 Assos Assos
 */
451
function ldap_user_update_7203() {
452
453
  if (module_exists('ldap_groups')) {
454 32700c57 Assos Assos
    module_disable(['ldap_groups', TRUE]);
455 85ad3d82 Assos Assos
  }
456
457
  $fields_added = ldap_user_update_check_user_fields();
458
459
  if (count($fields_added)) {
460
    $fields = join(', ', $fields_added);
461 32700c57 Assos Assos
    return t('%fields added to user entity.', ['%fields' => $fields]);
462 85ad3d82 Assos Assos
  }
463
  else {
464
    return t('no fields needed to be added to user entity.');
465
  }
466
467
}
468
469
/**
470 32700c57 Assos Assos
 * Make sure all user entity field instances are created.
471 85ad3d82 Assos Assos
 */
472
function ldap_user_update_7204() {
473
474
  $fields_added = ldap_user_update_check_user_fields();
475
476
  if (count($fields_added)) {
477
    $fields = join(', ', $fields_added);
478 32700c57 Assos Assos
    return t('%fields added to user entity.', ['%fields' => $fields]);
479 85ad3d82 Assos Assos
  }
480
  else {
481
    return t('no fields needed to be added to user entity.');
482
  }
483
484
}
485
486
/**
487 32700c57 Assos Assos
 * Make sure all user entity field instances are created.
488 85ad3d82 Assos Assos
 */
489
function ldap_user_update_7205() {
490
491
  return ldap_user_update_7204();
492
493
}
494
495 32700c57 Assos Assos
/**
496
 *
497
 */
498 85ad3d82 Assos Assos
function ldap_user_update_check_user_fields($query = FALSE) {
499
  if (!$query) {
500 32700c57 Assos Assos
    module_enable(['number']);
501 85ad3d82 Assos Assos
  }
502 32700c57 Assos Assos
  $fields_added = [];
503 85ad3d82 Assos Assos
  foreach (ldap_user_user_entity_fields() as $field_id => $field_conf) {
504
    $field_info = field_info_field($field_id);
505
    if (!$field_info) {
506
      $fields_added[] = $field_id;
507
      if (!$query) {
508
        field_create_field($field_conf['field']);
509
      }
510
    }
511
    $field_instance_info = field_info_instance('user', $field_id, 'user');
512
    if (!$field_instance_info) {
513
      $fields_added[] = $field_id . " instance";
514
      if (!$query) {
515
        field_create_instance($field_conf['instance']);
516
      }
517
    }
518
  }
519
  return $fields_added;
520
521
}
522 b42754b9 Assos Assos
523
/**
524
 * Set an appropriate default value for accountsWithSameEmail.
525
 */
526
function ldap_user_update_7206() {
527
  $message = NULL;
528
  $ldap_user_conf = ldap_user_conf('admin', TRUE);
529
  // If the configuration variable is not set, set a reasonable default and
530
  // advise the administrator.
531
  if (module_exists('sharedemail')) {
532
    $message = t('The module "sharedemail" was detected. LDAP User configuration has been set so that user accounts can be provisioned regardless of whether an existing user account has the same email address.');
533
    $ldap_user_conf->accountsWithSameEmail = LDAP_USER_ACCOUNTS_WITH_SAME_EMAIL_ENABLED;
534
  }
535
  else {
536
    // The "sharedemail" module is not enabled; do not enable this setting.
537
    // Do not mention anything in the hook_update_N output.
538
    $ldap_user_conf->accountsWithSameEmail = LDAP_USER_ACCOUNTS_WITH_SAME_EMAIL_DISABLED;
539
  }
540
  $ldap_user_conf->save();
541
542
  return $message;
543
}