Projet

Général

Profil

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

root / drupal7 / sites / all / modules / ldap / ldap_feeds / FeedsLdapQueryFetcher.inc @ 7547bb19

1
<?php
2

    
3
/**
4
 * @file
5
 * FeedsLdapQueryFetcher
6
 */
7

    
8

    
9
/**
10
 * FeedsLdapQueryFetcherResult
11
 */
12
class FeedsLdapQueryFetcherResult extends FeedsFetcherResult {
13
  public $query_ids = array();
14
  public $ldap_result;
15

    
16
  /**
17
   * Constructor.
18
   */
19
  public function __construct($source_config) {
20
    $this->query_ids = (isset($source_config['query_ids']) && is_array($source_config['query_ids'])) ? $source_config['query_ids'] : array();
21
    parent::__construct('');
22
    $this->ldap_result = $this->getRaw();
23
    return $this->ldap_result;
24
  }
25

    
26
  /**
27
   * Overrides parent::getRaw();
28
   */
29
  public function getRaw() {
30

    
31
    $results = array();
32
    $count = 0;
33
    foreach ($this->query_ids as $i => $query_id) {
34
      $ldapQuery = ldap_query_get_queries($query_id, 'enabled', TRUE);
35
      $more_results = $ldapQuery->query();
36
      if (is_array($more_results)) {
37
        $count += $more_results['count'];
38
        $results = array_merge($results, $more_results);
39
      }
40
    }
41
    if ($count) {
42
      $results['count'] = $count;
43
    }
44
    return $results;
45
  }
46
}
47

    
48
/**
49
 * Fetches data via LDAP Query.
50
 */
51
class FeedsLdapQueryFetcher extends FeedsFetcher {
52

    
53
  /**
54
   * Implements FeedsFetcher::fetch().
55
   */
56
  public function fetch(FeedsSource $source) {
57
    $source_config = $source->getConfigFor($this);
58
    $result = new FeedsLdapQueryFetcherResult($source_config);
59
    return $result;
60
  }
61

    
62

    
63
  /**
64
   * Override parent::configDefaults().
65
   */
66
  public function configDefaults() {
67
    return array(
68
      'query_ids' => array(),
69
    );
70
  }
71

    
72
    /**
73
   * Override parent::configForm().
74
   */
75
  public function configForm(&$form_state) {
76
    $queries = ldap_query_get_queries(NULL, 'enabled');
77
    $query_options = array(0 => '--- select one or more queries ---');
78
    foreach ($queries as $qid => $query) {
79
      $query_options[$qid] = $query->name;
80
    }
81
    $form = array();
82
    $form['query_ids'] = array(
83
      '#type' => 'select',
84
      '#title' => t('LDAP Query'),
85
      '#multiple' => TRUE,
86
      '#size' => min(10, count($query_options)),
87
      '#required' => TRUE,
88
      '#default_value' => $this->config['query_ids'],
89
      '#description' => t('If more than one query is selected, results from all the queries will be returned.') .
90
        ' ' .
91
        t('Queries can be added and edited at !link', array('!link' => l(t('LDAP Query Admin'), LDAP_QUERY_INDEX_BASE_PATH))),
92
      '#options' => $query_options,
93
    );
94

    
95
    return $form;
96
  }
97

    
98
  /**
99
   * Override parent::sourceForm().
100
   */
101
  public function sourceForm($source_config) {
102

    
103
    $tokens = array(
104
      '!edit_link' => l(t('Edit Feed'), 'admin/structure/feeds/edit/' . $this->id),
105
    );
106

    
107
    $form_state = array();
108
    $form = $this->configForm($form_state);
109
    $form['preamble'] = array(
110
      '#type' => 'markup',
111
      '#markup' => t('This import is configured at !edit_link.', $tokens),
112
    );
113

    
114
    return $form;
115
  }
116

    
117
  /**
118
   * Override parent::sourceFormValidate().
119
   */
120
  public function sourceFormValidate(&$values) {
121
     // could execute query and see if it returns anything for validation
122
  }
123

    
124
}