Passed
Branch master (6f4de6)
by Sathish
01:37
created

UserReport::sourceRecords()   B

Complexity

Conditions 9
Paths 48

Size

Total Lines 29
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 21
nc 48
nop 1
dl 0
loc 29
rs 8.0555
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
        $filter = false;
48
        if ($end) {
49
            $end = date('Y-m-d', strtotime($end) + 86400);
50
        }
51
52
        if ($start && $end) {
53
            $filter = "Member.Created BETWEEN '$start' AND '$end'";
54
        } elseif ($start) {
55
            $filter = "Member.Created > '$start'";
56
        } elseif ($end) {
57
            $filter = "Member.Created <= '$end'";
58
        }
59
        if ($firstName) {
60
            $filter = ($filter)? $filter . " AND FirstName Like '%$firstName%'" : "FirstName Like '%$firstName%'";
61
        }
62
        $config = SiteConfig::current_site_config();
63
        $member = Member::get()->filter('Groups.Title', $config->CustomerGroup()->Title);
64
        if ($filter) {
65
            return $member->where($filter);
66
        }
67
        return $member;
68
    }
69
70
    // which fields on that object we want to show
71
    public function columns()
72
    {
73
        $fields = [
74
            'FirstName' => 'FirstName',
75
            'Surname' => 'Surname',
76
            'Email' => 'Email'
77
        ];
78
        $config = SiteConfig::current_site_config();
79
        if ($config->getField("ExportFields")) {
80
            $ExportFields = json_decode($config->getField("ExportFields"), true);
81
            $ExtraFields = array_combine($ExportFields, $ExportFields);
82
            $fields = array_merge($fields, $ExtraFields);
83
        }
84
85
86
        return $fields;
87
    }
88
89
    public function parameterFields()
90
    {
91
        $member = Security::getCurrentUser() ? Security::getCurrentUser() : Member::create();
92
        $dateformat = $member->getDateFormat();
0 ignored issues
show
Unused Code introduced by
The assignment to $dateformat is dead and can be removed.
Loading history...
93
        $fields = FieldList::create(
94
            $firstName = TextField::create('FirstName', 'FirstName'),
95
            $start = DateField::create('StartPeriod', 'Start Date'),
96
            $end = DateField::create('EndPeriod', 'End Date')
97
        );
98
        
99
        return $fields;
100
    }
101
}
102