LeadsAPI::hasPositionAccess()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
nc 4
nop 0
dl 0
loc 10
rs 9.9332
c 0
b 0
f 0
1
<?php
2
class LeadsAPI extends ProfilesAdminDataAPI
3
{
4
    public function __construct()
5
    {
6
        parent::__construct('profiles', 'position', 'short_name');
7
    }
8
9
    public function setup($app)
10
    {
11
        parent::setup($app);
12
    }
13
14
    protected function canCreate($request)
15
    {
16
        $this->validateIsAdmin($request);
17
        return true;
18
    }
19
20
    protected function canUpdate($request, $entity)
21
    {
22
        $this->validateIsAdmin($request);
23
        return true;
24
    }
25
26
    protected function hasPositionAccess()
27
    {
28
        if(!isset($this->positionAccess))
29
        {
30
            $this->positionAccess = ($this->user->isInGroupNamed('Leads') ||
31
                $this->user->isInGroupNamed('CC') ||
32
                $this->user->isInGroupNamed('AFs'));
33
        }
34
        return $this->positionAccess;
35
    }
36
37
    protected function getPositionsByType($type, $auth)
38
    {
39
        switch($type)
40
        {
41
            case 'aar':
42
                $aarGroup = $auth->getGroupByName('AAR');
43
                return $aarGroup->members(true, false);
44
            case 'af':
45
                $afGroup = $auth->getGroupByName('AFs');
46
                return $afGroup->members(true, false);
47
            case 'cc':
48
                $ccGroup = $auth->getGroupByName('CC');
49
                return $ccGroup->members(true, false);
50
            case 'lead':
51
                $leadGroup = $auth->getGroupByName('Leads');
52
                return $leadGroup->members(true, false);
53
            default:
54
                $filter = new \Flipside\Data\Filter('ou eq '.$type);
55
                return $auth->getUsersByFilter($filter);
56
        }
57
    }
58
59
    protected function getPositionsWithParams($params)
60
    {
61
        $auth = \Flipside\AuthProvider::getInstance();
62
        if(isset($params['type']))
63
        {
64
            return $this->getPositionsByType($params['type'], $auth);
65
        }
66
        $leads = array();
67
        $leadGroup = $auth->getGroupByName('Leads');
68
        $aarGroup  = $auth->getGroupByName('AAR');
69
        $afGroup   = $auth->getGroupByName('AFs');
70
        $ccGroup   = $auth->getGroupByName('CC');
71
        $leads     = array_merge($leads, $leadGroup->members(true, false));
72
        $leads     = array_merge($leads, $aarGroup->members(true, false));
73
        $leads     = array_merge($leads, $afGroup->members(true, false));
74
        $leads     = array_merge($leads, $ccGroup->members(true, false));
75
        return $leads;
76
    }
77
78
    public function readEntries($request, $response, $args)
79
    {
80
        if($this->canRead($request) === false || $this->hasPositionAccess() === false)
81
        {
82
            return $response->withStatus(401);
83
        }
84
        $odata = $request->getAttribute('odata', new \Flipside\ODataParams(array()));
85
        $leads = $this->getPositionsWithParams($request->getQueryParams());
86
        $leads = $odata->filterArrayPerSelect($leads);
87
        return $response->withJson($leads);
88
    }
89
}
90
/* vim: set tabstop=4 shiftwidth=4 expandtab: */
91