Completed
Push — master ( d2c602...5348cd )
by Nicolaas
01:07
created

PhoneField::TellLink()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 9
nc 2
nop 1
1
<?php
2
/**
3
 * you can now use the following in your silverstripe templates
4
 * $MyPhoneField.TellLink
5
 * which then removes the first 0
6
 * adds country code at the end
7
 * and adds + and country code
8
 *
9
 * e.g
10
 * 09 5556789
11
 * becomes
12
 * tel:+649555789
13
 *
14
 * if you would like a different country code then use:
15
 * $MyPhoneField.TellLink(55)
16
 */
17
18
class PhoneField extends Varchar
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...
19
{
20
    private static $default_country_code = "64";
0 ignored issues
show
Unused Code introduced by
The property $default_country_code is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
21
22
    private static $casting = array(
0 ignored issues
show
Comprehensibility introduced by
Consider using a different property name as you override a private property of the parent class.
Loading history...
Unused Code introduced by
The property $casting is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
23
        "TellLink" => "Varchar",
24
        "CallToLink" => "Varchar"
25
    );
26
27
    /**
28
     * This method is accessed by other pages!
29
     *
30
     * @param int $countryCode (e.g. 64)
0 ignored issues
show
Documentation introduced by
Should the type for parameter $countryCode not be string|integer?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
31
     *
32
     * @return string
33
     */
34
    public function TellLink($countryCode = "")
35
    {
36
        //remove non digits
37
        if (!$countryCode) {
38
            $countryCode = $this->Config()->default_country_code;
39
        }
40
        //remove non-digits
41
        $phoneNumber = preg_replace('/\D/', '', $this->value);
42
        //remove country code with plus
43
        $phoneNumber = $this->literalLeftTrim($phoneNumber, '+'.$countryCode);
44
        //remove country code
45
        $phoneNumber = $this->literalLeftTrim($phoneNumber, $countryCode);
46
        //remove leading zero
47
        $phoneNumber = $this->literalLeftTrim($phoneNumber, '0');
48
        //combine
49
        $phoneNumber = 'tel:+'.$countryCode.$phoneNumber;
50
        
51
        return $phoneNumber;
52
    }
53
54
55
56
    /**
57
     *
58
     * @param countryCode $countryCode (e.g. 64)
0 ignored issues
show
Documentation introduced by
Should the type for parameter $countryCode not be string|countryCode?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
59
     *
60
     * @return string
61
     */
62
    public function CallToLink($countryCode = "")
63
    {
64
        return str_replace('tel:', 'callto:', $this->TellLink($countryCode));
65
    }
66
    
67
    /**
68
     * @see DBField::scaffoldFormField()
69
     *
70
     * @param string $title (optional)
0 ignored issues
show
Documentation introduced by
Should the type for parameter $title not be string|null?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
71
     * @param array $params (optional)
0 ignored issues
show
Documentation introduced by
Should the type for parameter $params not be array|null?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
72
     *
73
     * @return PhoneNumberField | NullableField
74
     */
75
    public function scaffoldFormField($title = null, $params = null)
76
    {
77
        if (!$this->nullifyEmpty) {
78
            return NullableField::create(PhoneNumberField::create($this->name, $title));
79
        } else {
80
            return PhoneNumberField::create($this->name, $title);
81
        }
82
    }
83
    
84
    protected function literalLeftTrim($str, $prefix)
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...
85
    {
86
        if (substr($str, 0, strlen($prefix)) == $prefix) {
87
            $str = substr($str, strlen($prefix));
88
        }     
89
        return $str;
90
    }
91
    
92
}
93