Projet

Général

Profil

Paste
Télécharger (3,96 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / ldap / ldap_feeds / FeedsDrupalUserLdapEntryFetcher.inc @ 91af538d

1 85ad3d82 Assos Assos
<?php
2
3
/**
4
 * @file
5 32700c57 Assos Assos
 * FeedsDrupalUserLdapEntryFetcher.
6 85ad3d82 Assos Assos
 */
7
8
define('LDAP_FEEDS_DRUPAL_USER_FETCHER_FILTER_AUTHENTICATED', FALSE);
9
define('LDAP_FEEDS_DRUPAL_USER_FETCHER_FILTER_ROLES', FALSE);
10 32700c57 Assos Assos
/**
11
 *
12
 */
13 85ad3d82 Assos Assos
class FeedsDrupalUserLdapEntryFetcherResult extends FeedsFetcherResult {
14
15
  public $filterLdapAuthenticated;
16
  public $availableDrupalUserAttributes;
17
  public $filterRoles;
18
19
  /**
20
   * Constructor.
21
   */
22
  public function __construct($source_config) {
23
    $this->availableDrupalUserAttributes = ldap_feeds_drupal_user_attributes();
24
    $this->filterLdapAuthenticated = isset($source_config['filterLdapAuthenticated']) ? $source_config['filterLdapAuthenticated'] : LDAP_FEEDS_DRUPAL_USER_FETCHER_FILTER_AUTHENTICATED;
25
    $this->filterRoles = isset($source_config['filterRoles']) ? $source_config['filterRoles'] : LDAP_FEEDS_DRUPAL_USER_FETCHER_FILTER_ROLES;
26
27
    parent::__construct('');
28
    $this->ldap_result = $this->getRaw();
29
    return $this->ldap_result;
30
  }
31
32
  /**
33 32700c57 Assos Assos
   * Overrides parent::getRaw();.
34 85ad3d82 Assos Assos
   */
35
  public function getRaw() {
36
37 32700c57 Assos Assos
    // Needs to loop through all users, and query ldap for each, one at a time.
38
    $query = new EntityFieldQuery();
39 85ad3d82 Assos Assos
    $entities = $query
40
      ->entityCondition('entity_type', 'user')
41
      ->execute();
42
    $users = entity_load('user', array_keys($entities['user']));
43
    if ($this->filterRoles) {
44
      $selectedRoles = array_filter($this->filterRoles);
45 32700c57 Assos Assos
      $filterOnRoles = (boolean) (count($selectedRoles));
46 85ad3d82 Assos Assos
    }
47
    else {
48
      $filterOnRoles = FALSE;
49
    }
50
51
    foreach ($users as $uid => $user) {
52
      if (
53
        $uid == 0 ||
54
        $uid == 1 ||
55
        ($this->filterLdapAuthenticated && !isset($user->data['ldap_user'])) ||
56
        ($filterOnRoles && !array_intersect(array_values($selectedRoles), array_keys($user->roles)))
57
        ) {
58
        continue;
59
      }
60
61
      if ($ldap_user = ldap_servers_get_user_ldap_data($user)) {
62
        unset($ldap_user['mail']);
63
        $ldap_user['attr']['count'] = $ldap_user['attr']['count'] + count($this->availableDrupalUserAttributes);
64
        foreach ($this->availableDrupalUserAttributes as $attr_name => $attr_conf) {
65
          $ldap_user['attr'][] = $attr_conf['token'];
66
          $ldap_user['attr'][$attr_conf['token']]['count'] = 1;
67 32700c57 Assos Assos
          $ldap_user['attr'][$attr_conf['token']][0] = (string) $user->{$attr_name};
68 85ad3d82 Assos Assos
        }
69
70
        $results[] = $ldap_user;
71
      }
72
    }
73
    $results['count'] = count($results);
74
    return $results;
75
  }
76 32700c57 Assos Assos
77 85ad3d82 Assos Assos
}
78
79
/**
80
 * Fetches data via LDAP Query.
81
 */
82
class FeedsDrupalUserLdapEntryFetcher extends FeedsFetcher {
83
84
  /**
85
   * Implements FeedsFetcher::fetch().
86
   */
87
  public function fetch(FeedsSource $source) {
88
    $source_config = $source->getConfigFor($this);
89
    $result = new FeedsDrupalUserLdapEntryFetcherResult($source_config);
90
    return $result;
91
  }
92
93
  /**
94
   * Override parent::configDefaults().
95
   */
96
  public function configDefaults() {
97 32700c57 Assos Assos
    return [
98
      'filterLdapAuthenticated' => [],
99 85ad3d82 Assos Assos
      'availableDrupalUserAttributes' => ldap_feeds_drupal_user_attributes(),
100 32700c57 Assos Assos
      'filterRoles' => [],
101
    ];
102 85ad3d82 Assos Assos
  }
103
104
  /**
105
   * Override parent::configForm().
106
   */
107
  public function configForm(&$form_state) {
108
109 32700c57 Assos Assos
    $form = [];
110
    $form['filterLdapAuthenticated'] = [
111 85ad3d82 Assos Assos
      '#type' => 'checkbox',
112
      '#title' => t('Only return ldap authenticated users.'),
113 bc175c27 Assos Assos
      '#default_value' => $this->config['filterLdapAuthenticated'],
114 85ad3d82 Assos Assos
      '#description' => t('If checked, only users who are associated with ldap accounts will be returned.'),
115 32700c57 Assos Assos
    ];
116 85ad3d82 Assos Assos
117
    return $form;
118
  }
119
120
  /**
121
   * Override parent::sourceFormValidate().
122
   */
123
  public function sourceFormValidate(&$values) {
124
125
  }
126
127
  /**
128
   * Override parent::sourceForm().
129
   */
130
  public function sourceForm($source_config) {
131 32700c57 Assos Assos
    $tokens = [
132 bc175c27 Assos Assos
      '!edit_link' => l(t('Edit Feed'), 'admin/structure/feeds/' . $this->id),
133 32700c57 Assos Assos
    ];
134 85ad3d82 Assos Assos
135 32700c57 Assos Assos
    $form_state = [];
136 85ad3d82 Assos Assos
    $form = $this->configForm($form_state);
137 32700c57 Assos Assos
    $form['addendum'] = [
138 85ad3d82 Assos Assos
      '#type' => 'markup',
139
      '#markup' => t('This import is configured at !edit_link.', $tokens),
140 32700c57 Assos Assos
    ];
141 85ad3d82 Assos Assos
142
    return $form;
143
  }
144
145
}