Completed
Push — 1 ( fdc87b...27ddc3 )
by Morven
01:40
created

code/forms/Users_EditAccountForm.php (1 issue)

Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
class Users_EditAccountForm extends Form
4
{
5
6
    /**
7
     * These fields will be ignored by the `Users_EditAccountForm`
8
     * when generating fields
9
     */
10
    private static $ignore_member_fields = array(
11
        "LastVisited",
12
        "FailedLoginCount",
13
        "DateFormat",
14
        "TimeFormat",
15
        "VerificationCode",
16
        "Password",
17
        "HasConfiguredDashboard",
18
        "URLSegment",
19
        "BlogProfileSummary",
20
        "BlogProfileImage"
21
    );
22
23
    public function __construct($controller, $name = "Users_EditAccountForm")
24
    {
25
        $member = Member::singleton();
26
        $hidden_fields = array_merge(
27
            $member->config()->hidden_fields,
28
            static::config()->ignore_member_fields
29
        );
30
31
        $fields = $member->getFrontEndFields();
32
33
        // Remove all "hidden fields"
34
        foreach ($hidden_fields as $field_name) {
35
            $fields->removeByName($field_name);
36
        }
37
38
        // Add the current member ID
39
        $fields->add(HiddenField::create("ID"));
40
41
        // Switch locale field
42
        $fields->replaceField(
43
            'Locale',
44
            DropdownField::create(
45
                "Locale",
46
                $member->fieldLabel("Locale"),
47
                i18n::get_existing_translations()
48
            )
49
        );
50
51
        $this->extend("updateFormFields", $fields);
52
53
        $cancel_url = Controller::join_links($controller->Link());
54
55
        $actions = new FieldList(
56
            LiteralField::create(
57
                "cancelLink",
58
                '<a class="btn btn-red" href="'.$cancel_url.'">'. _t("Users.CANCEL", "Cancel") .'</a>'
59
            ),
60
            FormAction::create("doUpdate", _t("CMSMain.SAVE", "Save"))
61
                ->addExtraClass("btn")
62
                ->addExtraClass("btn-green")
63
        );
64
65
        $this->extend("updateFormActions", $actions);
66
67
        $required = new RequiredFields(
68
            $member->config()->required_fields
69
        );
70
71
        $this->extend("updateRequiredFields", $required);
72
73
        parent::__construct(
74
            $controller,
75
            $name,
76
            $fields,
77
            $actions,
78
            $required
79
        );
80
        
81
        $this->extend("updateForm", $this);
82
    }
83
84
    /**
85
     * Register a new member
86
     *
87
     * @param array $data User submitted data
88
     */
89
    public function doUpdate($data)
0 ignored issues
show
The return type could not be reliably inferred; please add a @return annotation.

Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a @return annotation as described here.

Loading history...
90
    {
91
        $filter = array();
92
        $member = Member::get()->byID($data["ID"]);
93
94
        $this->extend("onBeforeUpdate", $data);
95
96
        // Check that a member isn't trying to mess up another users profile
97
        if (Member::currentUserID() && $member->canEdit(Member::currentUser())) {
98
            try {
99
                // Save member
100
                $this->saveInto($member);
101
                $member->write();
102
                
103
                $this->sessionMessage(
104
                    _t("Users.DETAILSUPDATED", "Account details updated"),
105
                    "success"
106
                );
107
            } catch (Exception $e) {
108
                $this->sessionMessage(
109
                    $e->getMessage(),
110
                    "warning"
111
                );
112
            }
113
        } else {
114
            $this->sessionMessage(
115
                _t("Users.CANNOTEDIT", "You cannot edit this account"),
116
                "warning"
117
            );
118
        }
119
120
        $this->extend("onAfterUpdate", $data);
121
122
        return $this->controller->redirectBack();
123
    }
124
}
125