MemberRoleSmartChimpExtension::signupPage()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
/**
3
 *
4
 * @author nicolaas[at]sunnysideup.co.nz
5
 * @description: adds a newsletter tickbox to member
6
 *
7
 **/
8
9
class MemberRoleSmartChimpExtension extends DataObjectDecorator
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
10
{
11
    protected static $sign_up_checkbox_label = 'Sign-up for newsletter';
12
    public static function set_sign_up_checkbox_label($v)
13
    {
14
        self::$sign_up_checkbox_label = $v;
15
    }
16
    public static function get_sign_up_checkbox_label()
17
    {
18
        return self::$sign_up_checkbox_label;
19
    }
20
21
22
    public function extraDBFields()
23
    {
24
        return array(
25
            'db' => array(
26
                'SignUpForMailChimpNewsletter' => 'Boolean'
27
            )
28
        );
29
    }
30
31
32
    public function updateCMSFields($fields)
0 ignored issues
show
Documentation introduced by
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...
33
    {
34
        if ($this->signupPage()) {
35
            $fields->addFieldToTab('Root.Main', new CheckboxField('SignUpForMailChimpNewsletter', self::get_sign_up_checkbox_label()));
0 ignored issues
show
Documentation introduced by
'SignUpForMailChimpNewsletter' is of type string, but the function expects a object<The>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
Documentation introduced by
self::get_sign_up_checkbox_label() is of type string, but the function expects a object<The>|null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
36
        }
37
        return $fields;
38
    }
39
40
    /**
41
     * Return the member fields to be shown on {@link OrderForm}.
42
     * @return FieldSet
43
     */
44
    public function augmentEcommerceFields($fields)
45
    {
46
        if ($this->signupPage()) {
47
            $fields = $fields->push(new CheckboxField('SignUpForMailChimpNewsletter', self::get_sign_up_checkbox_label()));
0 ignored issues
show
Documentation introduced by
'SignUpForMailChimpNewsletter' is of type string, but the function expects a object<The>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
Documentation introduced by
self::get_sign_up_checkbox_label() is of type string, but the function expects a object<The>|null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
48
        }
49
        return $fields;
50
    }
51
52
53
    public function onAfterWrite()
54
    {
55
        parent::onAfterWrite();
56
        if ($this->owner->changed) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $this->owner->changed of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
57
            if (isset($this->owner->changed["SignUpForMailChimpNewsletter"])) {
58
                if ($page = $this->signupPage()) {
59
                    if ($this->owner->SignUpForMailChimpNewsletter) {
60
                        $outcome = $page->subscribe($this->owner->Email, $this->owner->FirstName, $this->owner->Surname);
61
                        if ($outcome !== true) {
62
                            $subject = "error subscribing ".$this->owner->Email.' ('.$this->owner->ID.'): -- '.$outcome.' -- on '.$page->Title.' ACTION REQUIRED';
63
                            USER_ERROR($subject, E_USER_WARNING);
64
                            $e = new Email($from = Email::getAdminEmail(), $to = Email::getAdminEmail(), $subject, $subject);
65
                            $e->send();
66
                        }
67
                    } else {
68
                        $outcome = $page->unsubscribe($this->owner->Email, $this->owner->FirstName, $this->owner->Surname);
69
                        if ($outcome !== true) {
70
                            $subject = "error unsubscribing ".$this->owner->Email.' ('.$this->owner->ID.'): -- '.$outcome.' -- on '.$page->Title.' ACTION REQUIRED';
71
                            USER_ERROR($subject, E_USER_WARNING);
72
                            mail(Email::getAdminEmail(), $subject, $subject);
73
                            $e = new Email($from = Email::getAdminEmail(), $to = Email::getAdminEmail(), $subject, $subject);
74
                            $e->send();
75
                        }
76
                    }
77
                } else {
78
                    USER_ERROR("There is no default newsletter page setup. This means the person can not be subscribed to the newsletter", E_USER_WARNING);
79
                }
80
            }
81
        }
82
    }
83
84
    public function signupPage()
85
    {
86
        return DataObject::get_one("SmartChimpSignupPage", "`IsDefaultList` = 1");
87
    }
88
}
89