ShareThisOptions   A
last analyzed

Complexity

Total Complexity 21

Size/Duplication

Total Lines 257
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 107
dl 0
loc 257
rs 10
c 0
b 0
f 0
wmc 21

7 Methods

Rating   Name   Duplication   Size   Complexity  
A facebookLike() 0 4 1
A set_general_data() 0 3 1
A get_all_options() 0 64 1
A get_share_all() 0 18 1
A get_general_data() 0 14 4
A set_variables() 0 11 2
B get_page_specific_data() 0 42 11
1
<?php
2
3
namespace SunnysideUp\ShareThis;
4
5
use SilverStripe\Core\Injector\Injectable;
6
use SilverStripe\Dev\Debug;
7
use SilverStripe\Control\Email\Email;
8
use SilverStripe\Control\Director;
9
use SilverStripe\Core\Config\Config;
10
use SunnysideUp\ShareThis\ShareThisSTE;
11
12
13
/**
14
 * @author nicolaas [at] sunnysideup.co.nz
15
 */
16
class ShareThisOptions
17
{
18
    use Injectable;
19
20
    /**
21
     * @var array
22
     */
23
    private static $page_specific_data;
24
25
    /**
26
     * @var general_data
0 ignored issues
show
Bug introduced by MasseyIsaako
The type SunnysideUp\ShareThis\general_data was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
27
     */
28
    private static $general_data;
29
30
    /**
31
     * @var share_all_data
0 ignored issues
show
Bug introduced by MasseyIsaako
The type SunnysideUp\ShareThis\share_all_data was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
32
     */
33
    private static $share_all_data;
34
35
    /**
36
     * @var non_encoded_page_url
0 ignored issues
show
Bug introduced by MasseyIsaako
The type SunnysideUp\ShareThis\non_encoded_page_url was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
37
     */
38
    private static $non_encoded_page_url;
39
40
    /**
41
     * @var encoded_page_url
0 ignored issues
show
Bug introduced by MasseyIsaako
The type SunnysideUp\ShareThis\encoded_page_url was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
42
     */
43
    private static $encoded_page_url;
44
45
    /**
46
     * @var encoded_page_title
0 ignored issues
show
Bug introduced by MasseyIsaako
The type SunnysideUp\ShareThis\encoded_page_title was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
47
     */
48
    private static $encoded_page_title;
49
50
    /**
51
     * @var encoded_page_title_space_encoded
0 ignored issues
show
Bug introduced by MasseyIsaako
The type SunnysideUp\ShareThis\en...age_title_space_encoded was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
52
     */
53
    private static $encoded_page_title_space_encoded;
54
55
    /**
56
     * @var encoded_description
0 ignored issues
show
Bug introduced by MasseyIsaako
The type SunnysideUp\ShareThis\encoded_description was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
57
     */
58
    private static $encoded_description;
59
60
    /**
61
     * @var icon
0 ignored issues
show
Bug introduced by MasseyIsaako
The type SunnysideUp\ShareThis\icon was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
62
     */
63
    private static $icon;
64
65
    /**
66
     * Get's all options
67
     *
68
     * @return array
69
     */
70
    public static function get_all_options($title, $link, $description)
71
    {
72
        self::set_variables($title, $link, $description);
73
        self::$page_specific_data = [
74
            "email" => [
75
                "url" => "mailto:?".htmlentities("Subject=".self::$encoded_page_title."&Body=".self::$encoded_description."%0D%0A".self::$encoded_page_url),
76
                "faicon" => "fa-send",
77
                "title" => 'Email'
78
            ],
79
            "print" => [
80
                "url" => "#",
81
                "faicon" => "fa-print",
82
                "click" => "window.print(); return false;",
83
                "title" => "Print"
84
            ],
85
            "favourites" => [
86
                "url" => "#",
87
                "faicon" => "fa-bookmark",
88
                "click" => "sharethis.bookmark('".self::$encoded_page_url."', '".self::$encoded_page_title."'); return false;",
89
                "title" => "Add to favourites (Internet Explorer Only)"
90
            ],
91
            "delicious" => [
92
                "url" => "http://del.icio.us/post?".htmlentities("url=".self::$encoded_page_url."&title=".self::$encoded_page_title),
93
                "faicon" => "fa-delicious",
94
                "title" => "Delicious"
95
            ],
96
            "facebook" => [
97
                "url" => "http://www.facebook.com/share.php?".htmlentities("u=".self::$encoded_page_url."&title=".self::$encoded_page_title),
98
                "faicon" => "fa-facebook-square",
99
                "title" => "Facebook"
100
            ],
101
            "googleplus" => [
102
                "url" =>  "https://plus.google.com/share?url=".self::$encoded_page_url,
103
                "faicon" => "fa-google-plus",
104
                "title" => "Google Plus One"
105
            ],
106
            "linkedin" => [
107
                "url" =>  "http://www.linkedin.com/shareArticle?".htmlentities("mini=true&url=".self::$encoded_page_url."&title=".self::$encoded_page_title."&source=".Director::absoluteBaseURL()),
108
                "faicon" => "fa-linkedin-square",
109
                "title" => "LinkedIn"
110
            ],
111
            "pinterest" => [
112
                "url" => "http://pinterest.com/pin/create/bookmarklet/?".htmlentities("media=html&url=".self::$encoded_page_url."&is_video=false&description=".self::$encoded_page_title),
113
                "faicon" => "fa-pinterest",
114
                "title" => "Pinterest"
115
            ],
116
            "reddit" => [
117
                "url" => "http://reddit.com/submit?".htmlentities("url=".self::$encoded_page_url."&title=".self::$encoded_page_title),
118
                "faicon" => "fa-reddit",
119
                "title" => "Reddit"
120
            ],
121
            "twitter" => [
122
                "url" => "http://twitter.com/home?status=".htmlentities(urlencode("currently reading: ").self::$encoded_page_url),
123
                "faicon" => "fa-twitter-square",
124
                "title" => "Twitter"
125
            ],
126
            "tumblr" => [
127
                "url" => "http://www.tumblr.com/share/link?url=".htmlentities(self::$encoded_page_url."&name=".self::$encoded_page_title),
128
                "faicon" => "fa-tumblr-square",
129
                "title" => "Tumblr"
130
            ]
131
        ];
132
133
        return self::$page_specific_data;
134
    }
135
136
    /**
137
     * @param  string $title
138
     * @param  string $link
139
     * @param  string $description
140
     *
141
     * @return array
142
     */
143
    public static function get_page_specific_data($title, $link, $description = '')
144
    {
145
        $originalArray = self::$page_specific_data ? self::$page_specific_data : self::get_all_options($title, $link, $description);
146
        $finalArray = [];
0 ignored issues
show
Unused Code introduced by MasseyIsaako
The assignment to $finalArray is dead and can be removed.
Loading history...
147
        $inc = Config::inst()->get(ShareThisSTE::class, "included_icons");
148
        $exc = Config::inst()->get(ShareThisSTE::class, "excluded_icons");
149
150
        if (count($inc)) {
151
            $new_array_of_icons_to_include = [];
152
153
            foreach ($inc as $key => $value) {
154
                $new_array_of_icons_to_include[$value] = $value;
155
156
                if (! isset($originalArray[$value])) {
157
                    Debug::show("Error in ShareIcons::set_icons_to_include, $key does not exist in bookmark list");
158
                }
159
160
            }
161
162
            foreach ($originalArray as $key => $array) {
163
                if (! isset($new_array_of_icons_to_include[$key])) {
164
                    unset($originalArray[$key]);
165
                }
166
            }
167
        }
168
169
        //which ones do we exclude
170
        if (count($exc)) {
171
            foreach ($exc as $key) {
172
                if (! isset($originalArray[$key])) {
173
                    Debug::show("Error in ShareIcons::set_icons_to_exclude, $key does not exist in bookmark list");
174
                } else {
175
                    unset($originalArray[$key]);
176
                }
177
            }
178
        }
179
180
        if (! $link) {
181
            self::$page_specific_data = null;
182
        }
183
184
        return $originalArray;
185
    }
186
187
    /*
188
        summary: (required) utf-8 string, defaults to document.title
189
        content: (optional) utf-8 string, defaults to null
190
        updated: (optional) ISO 8601 date, defaults to document.lastModified
191
        published: (optional) ISO 8601 date, defaults to null
192
        author: currently not implemented
193
        category: currently not implemented
194
    */
195
    public static function get_share_all()
196
    {
197
        self::$share_all_data = '
0 ignored issues
show
Documentation Bug introduced by MasseyIsaako
It seems like ' <script ty... </script> ' of type string is incompatible with the declared type SunnysideUp\ShareThis\share_all_data of property $share_all_data.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
198
            <script type="text/javascript" src="http://w.sharethis.com/button/sharethis.js#&amp;type=website"></script>
199
            <script type="text/javascript">
200
                SHARETHIS.addEntry(
201
                    {
202
                        title:"' . urldecode(self::$encoded_page_title) . '",
203
                        summary:"' . urldecode(self::$encoded_page_title) . '",
204
                        url:"' . urldecode(self::$encoded_page_url) . '",
205
                        icon:"' . urldecode(self::$icon) . '"
206
                    },
207
                    {button:true}
208
                );
209
            </script>
210
        ';
211
212
        return self::$share_all_data;
213
    }
214
215
    /**
216
     * Sets general data
217
     *
218
     * @return void
219
     */
220
    public static function set_general_data()
221
    {
222
        self::$general_data = null;
223
    }
224
225
    /**
226
     * Get's generic data
227
     */
228
    public static function get_general_data()
229
    {
230
        if (! self::$general_data) {
231
            $array = self::get_page_specific_data('', '', '');
232
            $newArray = [];
233
            if (count($array)) {
234
                foreach ($array as $key => $subArray) {
235
                    $newArray[$key] = $key;
236
                }
237
            }
238
            self::$general_data = $newArray;
0 ignored issues
show
Documentation Bug introduced by sunnysideup
It seems like $newArray of type array or array is incompatible with the declared type SunnysideUp\ShareThis\general_data of property $general_data.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
239
        }
240
241
        return self::$general_data;
242
    }
243
244
    /**
245
     * Set's variables
246
     * @param string
247
     * @param string
248
     * @param string
249
     *
250
     * @return  void
251
     */
252
    private static function set_variables($title, $link, $description)
253
    {
254
        self::$icon = urlencode(Director::absoluteBaseURL() . 'favicon.ico');
0 ignored issues
show
Documentation Bug introduced by sunnysideup
It seems like urlencode(SilverStripe\C...eURL() . 'favicon.ico') of type string is incompatible with the declared type SunnysideUp\ShareThis\icon of property $icon.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
255
        self::$non_encoded_page_url = Director::absoluteURL($link);
0 ignored issues
show
Documentation Bug introduced by sunnysideup
It seems like SilverStripe\Control\Director::absoluteURL($link) of type string is incompatible with the declared type SunnysideUp\ShareThis\non_encoded_page_url of property $non_encoded_page_url.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
256
        self::$encoded_page_url = urlencode(self::$non_encoded_page_url);
0 ignored issues
show
Documentation Bug introduced by sunnysideup
It seems like urlencode(self::non_encoded_page_url) of type string is incompatible with the declared type SunnysideUp\ShareThis\encoded_page_url of property $encoded_page_url.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
257
        self::$encoded_page_title = urlencode($title);
0 ignored issues
show
Documentation Bug introduced by sunnysideup
It seems like urlencode($title) of type string is incompatible with the declared type SunnysideUp\ShareThis\encoded_page_title of property $encoded_page_title.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
258
        self::$encoded_page_title_space_encoded = str_replace('+', '%20', urlencode($title));
0 ignored issues
show
Documentation Bug introduced by sunnysideup
It seems like str_replace('+', '%20', urlencode($title)) of type string is incompatible with the declared type SunnysideUp\ShareThis\en...age_title_space_encoded of property $encoded_page_title_space_encoded.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
259
        if ($description) {
260
            self::$encoded_description = urlencode($description);
0 ignored issues
show
Documentation Bug introduced by sunnysideup
It seems like urlencode($description) of type string is incompatible with the declared type SunnysideUp\ShareThis\encoded_description of property $encoded_description.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
261
        } else {
262
            self::$encoded_description = self::$encoded_page_title;
263
        }
264
    }
265
266
    /**
267
     * @return string
268
     */
269
    private function facebookLike()
0 ignored issues
show
Unused Code introduced by sunnysideup
The method facebookLike() is not used, and could be removed.

This check looks for private methods that have been defined, but are not used inside the class.

Loading history...
270
    {
271
        //see http://developers.facebook.com/docs/reference/plugins/like/
272
        return '<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=231498950207168&amp;xfbml=1"></script><fb:like href="www.test.com" send="false" width="450" show_faces="true" font="lucida grande"></fb:like>';
273
    }
274
}
275