~fabiocbalbuquerque/sahana-agasti/web-services

« back to all changes in this revision

Viewing changes to apps/frontend/lib/packages/agWebservicesPackage/lib/agWebservicesHelper.class.php

  • Committer: Fabio Albuquerque
  • Date: 2011-08-20 19:17:20 UTC
  • Revision ID: fabiocbalbuquerque@gmail.com-20110820191720-tllqbrgm3zc3tp6w
Improvements in functional tests, 'where' clauses using filters

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 * */
17
17
class agWebservicesHelper
18
18
{
 
19
    /**
 
20
     * Retrieve staff from database based on filters.
 
21
     * Possible array indices:
 
22
     *          - is_available: 0|1
 
23
     *          - person: \d+
 
24
     *          - org: \d+
 
25
     *          - limit: \d+
 
26
     *          - order: person|staff|organization
 
27
     * @param array $filters
 
28
     */
19
29
    public static function getStaff(array $filters)
20
30
    {
21
31
        $whereIsAvailable = 'srs.is_available = ?';
22
32
        $wherePerson = 'p.id = ?';
23
33
        $whereOrg = 'org.id = ?';
24
 
        
 
34
 
25
35
        $staff_dql = agDoctrineQuery::create()
26
36
        ->select('st.*, p.*, sr.id, srs.*, srt.*, org.*')
27
37
        ->from('agStaff st')
31
41
        ->leftJoin('sr.agOrganization org')
32
42
        ->leftJoin('sr.agStaffResourceType srt');
33
43
 
34
 
        if ($filters['is_available']) {
35
 
            $staff_dql->andWhere($whereIsAvailable);
36
 
        }
37
 
        if ($filters['person']) {
38
 
            $staff_dql->andWhere($wherePerson);
39
 
        }
40
 
        if ($filters['org']) {
41
 
            $staff_dql->andWhere($whereOrg);
42
 
        }
43
 
        
 
44
        if (isset($filters['is_available'])) {
 
45
            $staff_dql->andWhere($whereIsAvailable, $filters['is_available']);
 
46
        }
 
47
        if (isset($filters['person'])) {
 
48
            $staff_dql->andWhere($wherePerson, $filters['person']);
 
49
        }
 
50
        if (isset($filters['org'])) {
 
51
            $staff_dql->andWhere($whereOrg, $filters['org']);
 
52
        }
 
53
        $staff_dql->limit(isset($filters['limit'])?$filters['limit']:30);
 
54
 
 
55
        if (isset($filters['order'])) {
 
56
            switch($filters['order']) {
 
57
                case 'person': $staff_dql->orderBy('p.id'); break;
 
58
                case 'staff' : $staff_dql->orderBy('st.id'); break;
 
59
                case 'org'   : $staff_dql->orderBy('org.id'); break;
 
60
            }
 
61
        }
44
62
        return self::asStaffArray($staff_dql->execute());
45
63
    }
46
64
 
48
66
     * Prototype for persons - should be edited to 'public' when is done
49
67
     * @param $personId
50
68
     */
51
 
    private static function getPerson($personId) 
 
69
    private static function getPerson($personId)
52
70
    {
53
71
 
54
72
        $person_dql = agDoctrineQuery::create()
143
161
    private static function asStaffArray($result)
144
162
    {
145
163
        $results = $result->toArray();
146
 
        var_dump($results[0]['agStaffResource']);die;
147
164
        $response = array();
148
165
        foreach ($results as $result) {
149
166
            // Resources
162
179
            // at last, we create an associative array to facilitate the creation of json and xml documents
163
180
            $response[$result['id']] = array(
164
181
             'id' => $result['id'],
 
182
             'person_id' => $result['agPerson']['id'],
165
183
             'person' => $result['agPerson'],
166
184
             'id' => $result['id'],
167
185
             'created_at' => $result['created_at'],
187
205
              'description' => $array['description'],
188
206
              'created_at' => $array['created_at'],
189
207
              'updated_at' => $array['updated_at'],
190
 
              // avoid empty values or get subvalues of the result array
 
208
            // avoid empty values or get subvalues of the result array
191
209
              'branch' => (!empty($array['agBranch'])) ? $array['agBranch']['branch'] : null,
192
210
              'phone' => (!empty($array['agEntity']['agEntityPhoneContact']['agPhoneContact'])) ? $array['agEntity']['agEntityPhoneContact']['agPhoneContact']['phone_contact'] : null,
193
211
              'email' => (!empty($array['agEntity']['agEntityEmailContact']['agEmailContact'])) ? $array['agEntity']['agEntityEmailContact']['agEmailContact']['email_contact'] : null,