Projet

Général

Profil

Paste
Télécharger (4,04 ko) Statistiques
| Branche: | Révision:

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

1 85ad3d82 Assos Assos
<?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
class FeedsDrupalUserLdapEntryFetcherResult extends FeedsFetcherResult {
12
13
  public $filterLdapAuthenticated;
14
  public $availableDrupalUserAttributes;
15
  public $filterRoles;
16
17
  /**
18
   * Constructor.
19
   */
20
  public function __construct($source_config) {
21
    $this->availableDrupalUserAttributes = ldap_feeds_drupal_user_attributes();
22
    $this->filterLdapAuthenticated = isset($source_config['filterLdapAuthenticated']) ? $source_config['filterLdapAuthenticated'] : LDAP_FEEDS_DRUPAL_USER_FETCHER_FILTER_AUTHENTICATED;
23
    $this->filterRoles = isset($source_config['filterRoles']) ? $source_config['filterRoles'] : LDAP_FEEDS_DRUPAL_USER_FETCHER_FILTER_ROLES;
24
25
    parent::__construct('');
26
    $this->ldap_result = $this->getRaw();
27
    return $this->ldap_result;
28
  }
29
30
  /**
31
   * Overrides parent::getRaw();
32
   */
33
  public function getRaw() {
34
35
    // needs to loop through all users, and query ldap for each, one at a time
36
37
    $query = new EntityFieldQuery;
38
    $entities = $query
39
      ->entityCondition('entity_type', 'user')
40
      ->execute();
41
    $users = entity_load('user', array_keys($entities['user']));
42
    if ($this->filterRoles) {
43
      $selectedRoles = array_filter($this->filterRoles);
44
      $filterOnRoles = (boolean)(count($selectedRoles));
45
    }
46
    else {
47
      $filterOnRoles = FALSE;
48
    }
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
   // drupal_set_message("<pre>" . print_r($results, TRUE));
75
    return $results;
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 array(
98
      'filterLdapAuthenticated' => array(),
99
      'availableDrupalUserAttributes' => ldap_feeds_drupal_user_attributes(),
100
      'filterRoles' => array(),
101
    );
102
  }
103
104
  /**
105
   * Override parent::configForm().
106
   */
107
  public function configForm(&$form_state) {
108
109
    $form = array();
110
    $form['filterLdapAuthenticated'] = array(
111
      '#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
    );
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 = array(
132 bc175c27 Assos Assos
      '!edit_link' => l(t('Edit Feed'), 'admin/structure/feeds/' . $this->id),
133 85ad3d82 Assos Assos
    );
134
135
    $form_state = array();
136
    $form = $this->configForm($form_state);
137
    $form['addendum'] = array(
138
      '#type' => 'markup',
139
      '#markup' => t('This import is configured at !edit_link.', $tokens),
140
    );
141
142
    return $form;
143
  }
144
145
146
147
}