Passed
Push — master ( 6f4de6...26c14f )
by Sathish
02:11
created

UserReport::sourceRecords()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 18
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 13
nc 4
nop 1
dl 0
loc 18
rs 9.8333
c 0
b 0
f 0
1
<?php
2
namespace UserManagement\Reports;
3
4
use SilverStripe\Forms\CheckboxField;
5
use SilverStripe\Forms\DateField;
6
use SilverStripe\Forms\DropdownField;
7
use SilverStripe\Forms\FieldList;
8
use SilverStripe\Forms\GridField\GridFieldConfig;
9
use SilverStripe\Forms\GridField\GridFieldDataColumns;
10
use SilverStripe\Forms\GridField\GridFieldExportButton;
11
use SilverStripe\i18n\i18nEntityProvider;
12
use SilverStripe\ORM\DataObject;
13
use SilverStripe\ORM\DB;
14
use SilverStripe\Reports\Report;
15
use SilverStripe\Security\Member;
16
use SilverStripe\Security\Security;
17
use SilverStripe\Forms\TextField;
18
use SilverStripe\SiteConfig\SiteConfig;
19
20
/**
21
 *
22
 * Base class for creating reports that can be filtered to a specific range.
23
 * Record grouping is also supported.
24
 *
25
 * @package user-management
26
 *
27
 */
28
class UserReport extends Report
29
{
30
    protected $periodfield = '"Member"."Created"';
31
32
     // the name of the report
33
    public function title()
34
    {
35
        return 'Customer List';
36
    }
37
38
    // what we want the report to return
39
    public function sourceRecords($params)
40
    {
41
        
42
        $fields = $this->parameterFields();
43
        $fields->setValues($params);
44
        $start = $fields->fieldByName('StartPeriod')->dataValue();
45
        $end = $fields->fieldByName('EndPeriod')->dataValue();
46
        $firstName = $fields->fieldByName('FirstName')->dataValue();
47
        if ($end) {
48
            $end = date('Y-m-d', strtotime($end) + 86400);
49
        }
50
        $config = SiteConfig::current_site_config();
51
        $member = Member::get()->filter('Groups.Title', $config->CustomerGroup()->Title);
52
        $filter = $this->applyFilter($start, $end, $firstName);
53
        if ($filter) {
54
            return $member->where($filter);
55
        }
56
        return $member;
57
    }
58
59
    // which fields on that object we want to show
60
    public function columns()
61
    {
62
        $fields = [
63
            'FirstName' => 'FirstName',
64
            'Surname' => 'Surname',
65
            'Email' => 'Email'
66
        ];
67
        $config = SiteConfig::current_site_config();
68
        if ($config->getField("ExportFields")) {
69
            $ExportFields = json_decode($config->getField("ExportFields"), true);
70
            $ExtraFields = array_combine($ExportFields, $ExportFields);
71
            $fields = array_merge($fields, $ExtraFields);
72
        }
73
74
75
        return $fields;
76
    }
77
78
    public function parameterFields()
79
    {
80
        $member = Security::getCurrentUser() ? Security::getCurrentUser() : Member::create();
81
        $dateformat = $member->getDateFormat();
0 ignored issues
show
Unused Code introduced by
The assignment to $dateformat is dead and can be removed.
Loading history...
82
        $fields = FieldList::create(
83
            $firstName = TextField::create('FirstName', 'FirstName'),
84
            $start = DateField::create('StartPeriod', 'Start Date'),
85
            $end = DateField::create('EndPeriod', 'End Date')
86
        );
87
        
88
        return $fields;
89
    }
90
91
    public function applyFilter($start, $end, $firstName)
92
    {
93
        $filter = false;
94
        if ($start && $end) {
95
            $filter = "Member.Created BETWEEN '$start' AND '$end'";
96
        } elseif ($start) {
97
            $filter = "Member.Created > '$start'";
98
        } elseif ($end) {
99
            $filter = "Member.Created <= '$end'";
100
        }
101
        if ($firstName) {
102
            $filter = ($filter)? $filter . " AND FirstName Like '%$firstName%'" : "FirstName Like '%$firstName%'";
103
        }
104
105
        return $filter;
106
    }
107
}
108