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
<?php
2

    
3
/**
4
 * @file
5
 * FeedsDrupalUserLdapEntryFetcher.
6
 */
7

    
8
define('LDAP_FEEDS_DRUPAL_USER_FETCHER_FILTER_AUTHENTICATED', FALSE);
9
define('LDAP_FEEDS_DRUPAL_USER_FETCHER_FILTER_ROLES', FALSE);
10
/**
11
 *
12
 */
13
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
   * Overrides parent::getRaw();.
34
   */
35
  public function getRaw() {
36

    
37
    // Needs to loop through all users, and query ldap for each, one at a time.
38
    $query = new EntityFieldQuery();
39
    $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
      $filterOnRoles = (boolean) (count($selectedRoles));
46
    }
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
          $ldap_user['attr'][$attr_conf['token']][0] = (string) $user->{$attr_name};
68
        }
69

    
70
        $results[] = $ldap_user;
71
      }
72
    }
73
    $results['count'] = count($results);
74
    return $results;
75
  }
76

    
77
}
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
    return [
98
      'filterLdapAuthenticated' => [],
99
      'availableDrupalUserAttributes' => ldap_feeds_drupal_user_attributes(),
100
      'filterRoles' => [],
101
    ];
102
  }
103

    
104
  /**
105
   * Override parent::configForm().
106
   */
107
  public function configForm(&$form_state) {
108

    
109
    $form = [];
110
    $form['filterLdapAuthenticated'] = [
111
      '#type' => 'checkbox',
112
      '#title' => t('Only return ldap authenticated users.'),
113
      '#default_value' => $this->config['filterLdapAuthenticated'],
114
      '#description' => t('If checked, only users who are associated with ldap accounts will be returned.'),
115
    ];
116

    
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
    $tokens = [
132
      '!edit_link' => l(t('Edit Feed'), 'admin/structure/feeds/' . $this->id),
133
    ];
134

    
135
    $form_state = [];
136
    $form = $this->configForm($form_state);
137
    $form['addendum'] = [
138
      '#type' => 'markup',
139
      '#markup' => t('This import is configured at !edit_link.', $tokens),
140
    ];
141

    
142
    return $form;
143
  }
144

    
145
}