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
<?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
      '#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 = array(
132
      '!edit_link' => l(t('Edit Feed'), 'admin/structure/feeds/' . $this->id),
133
    );
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
}