Completed
Push — master ( dbda3c...d37ed5 )
by Nicolaas
01:26
created

code/model/PageRating.php (54 issues)

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
/**
4
 *@author nicolaas [at] sunnysideup . co . nz
5
 *
6
 **/
7
8
class PageRating extends DataObject
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...
9
{
10
11
    /**
12
     * @var bool
13
     */
14
    private static $admin_can_create = true;
0 ignored issues
show
The property $admin_can_create 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...
15
16
    /**
17
     * @var bool
18
     */
19
    private static $admin_can_edit = true;
0 ignored issues
show
The property $admin_can_edit 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...
20
21
    /**
22
     * @var bool
23
     */
24
    private static $admin_can_delete = true;
0 ignored issues
show
The property $admin_can_delete 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...
25
26
    /**
27
     * @var boolean
28
     */
29
    private static $round_rating = true;
0 ignored issues
show
The property $round_rating 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...
30
31
    /**
32
     * @var array
33
     */
34
    private static $stars = array(
0 ignored issues
show
The property $stars 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...
35
        '1' => array("Code" => 'OneStar', "Title" => "One Star"),
36
        '2' => array("Code" => 'TwoStar', "Title" => "Two Stars"),
37
        '3' => array("Code" => 'ThreeStar', "Title" => "Three Stars"),
38
        '4' => array("Code" => 'FourStar', "Title" => "Four Stars"),
39
        '5' => array("Code" => 'FiveStar', "Title" => "Five Stars")
40
    );
41
42
    /**
43
     *
44
     * @return array
0 ignored issues
show
Should the return type not be array|integer|double|string|boolean?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
45
     */
46
    protected static function get_stars()
47
    {
48
        return Config::inst()->get("PageRating", "stars");
49
    }
50
51
    /**
52
     * returns something like OneStar
53
     * @param int $value
54
     *
55
     * @return string
56
     */
57 View Code Duplication
    public static function get_star_entry_code($value)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
58
    {
59
        $stars = self::get_stars();
60
        if (isset($stars[$value]["Code"])) {
61
            return $stars[$value]["Code"];
62
        }
63
        return "N/A";
64
    }
65
66
    /**
67
     * returns something like One Star
68
     * @param int $value
69
     *
70
     * @return string
71
     */
72 View Code Duplication
    public static function get_star_entry_name($value)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
73
    {
74
        $stars = self::get_stars();
75
        if (isset($stars[$value]["Title"])) {
76
            return $stars[$value]["Title"];
77
        }
78
        return "N/A";
79
    }
80
81
    /**
82
     * returns something like
83
     *
84
     *     1 => One Star,
85
     *     2 => Two Star
86
     *
87
     * @return array
88
     */
89
    public static function get_star_dropdowndown()
90
    {
91
        $stars = self::get_stars();
92
        $newArray = array();
93
        if (count($stars)) {
94
            foreach ($stars as $key => $star) {
0 ignored issues
show
The expression $stars of type array|integer|double|string|boolean is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
95
                $newArray[$key] = $star["Title"];
96
            }
97
        }
98
        return $newArray;
99
    }
100
101
    /**
102
     * return int
103
     */
104
    public static function get_number_of_stars()
105
    {
106
        return count(self::get_stars());
107
    }
108
109
    private static $_star_details_as_array_data = array();
110
111
    /**
112
     *
113
     *
114
     * @return ArrayData
115
     */
116
    public static function get_star_details_as_array_data($score, $parentID, $method = "unkown")
117
    {
118
        $key = $score."_".$parentID."_".$method;
119
        if (! isset(self::$_star_details_as_array_data[$key])) {
120
            $stars = $score;
121
            if (Config::inst()->get("PageRating", "round_rating")) {
122
                $stars = round($stars);
123
            }
124
            $widthOutOfOneHundredForEachStar = 100 / PageRating::get_number_of_stars();
125
            $percentage = round($score * $widthOutOfOneHundredForEachStar);
126
            $roundedPercentage = round($stars * $widthOutOfOneHundredForEachStar);
127
            $reversePercentage = round(100 - $percentage);
128
            $reverseRoundedPercentage = round(100 - $roundedPercentage);
129
            $starClass = PageRating::get_star_entry_code($stars);
130
            $page = SiteTree::get()->byId($parentID);
131
            self::$_star_details_as_array_data[$key] = ArrayData::create(
132
                array(
133
                    'Rating' => "Stars",
134
                    'Method' => $method,
135
                    'Score' => $score,
136
                    'Stars' => $stars,
137
                    'Percentage' => $percentage,
138
                    'RoundedPercentage' => $percentage,
139
                    'ReversePercentage' => $reversePercentage,
140
                    'ReverseRoundedPercentage' => $reverseRoundedPercentage,
141
                    'StarClass' => $starClass,
142
                    'Page' => $page
143
                )
144
            );
145
        }
146
        return self::$_star_details_as_array_data[$key];
147
    }
148
149
    private static $db = 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...
The property $db 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...
150
        "Rating" => "Int",
151
        "Name" => "Varchar(100)",
152
        "Title" => "Varchar(100)",
153
        "Comment" => "Text",
154
        "IsApproved" => "Boolean",
155
        "IsDefault" => "Boolean"
156
    );
157
158
    private static $has_one = 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...
The property $has_one 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...
159
        "Parent" => "Page"
160
    );
161
162
    private static $summary_fields = 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...
The property $summary_fields 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...
163
        "Created" => "When",
164
        "Rating" => "Score",
165
        "Parent.Title" => "Page",
166
        "Comment" => "Comment",
167
        "IsApproved.Nice" => "Approved"
168
    );
169
170
    private static $field_labels = 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...
The property $field_labels 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...
171
        "Rating" => "Score",
172
        "Parent.Title" => "Page",
173
        "IsDefault" => "Default Entry Only",
174
        "Parent" => "Rating for",
175
        "IsApproved" => "Approved"
176
    );
177
178
    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...
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...
179
        'Method' => "Varchar",
180
        'Stars' => "Float",
181
        'Percentage' => "Float",
182
        'RoundedPercentage' => "Int",
183
        'ReversePercentage' => "Float",
184
        'ReverseRoundedPercentage' => "Int",
185
        'StarClass' => "Varchar"
186
    );
187
188
    private static $default_sort = "Created DESC";
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...
The property $default_sort 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...
189
190
    private static $singular_name = 'Page Rating';
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...
The property $singular_name 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...
191
192
    private static $plural_name = 'Page Ratings';
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...
The property $plural_name 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...
193
194
195
    public function getCMSFields()
196
    {
197
        $fields = parent::getCMSFields();
198
        $labels = $this->FieldLabels();
199
        $fields->replaceField("Rating", OptionSetField::create("Rating", $labels["Rating"], self::get_star_dropdowndown()));
200
        //$fields->removeFieldFromTab("Root.Main", "Comment");
0 ignored issues
show
Unused Code Comprehensibility introduced by
80% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
201
202
        if ($this->ParentID && $this->Parent() && $this->Parent()->exists()) {
0 ignored issues
show
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
The method Parent() does not exist on PageRating. Did you maybe mean parentClass()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
203
            $fields->addFieldToTab("Root.Main", $readonlyField = ReadonlyField::create("ParentDescription", $labels["Parent"], "<p><a href=\"".$this->Parent()->CMSEditLink()."\">".$this->Parent()->Title."</a></p>"));
0 ignored issues
show
The method Parent() does not exist on PageRating. Did you maybe mean parentClass()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
204
            $readonlyField->dontEscape = true;
205
            $fields->removeFieldFromTab("Root.Main", "ParentID");
206
        } else {
207
            $fields->replaceField(
208
                "ParentID",
209
                TreeDropdownField::create(
210
                    'ParentID',
211
                    'Parent',
212
                    'SiteTree'
213
                )
214
            );
215
        }
216
        if (Config::inst()->get("PageRaterStarField", "allow_name")) {
0 ignored issues
show
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
217
            //do nothing
218
        } else {
219
            $fields->removeFieldFromTab("Root.Main", "Name");
220
        }
221
        if (Config::inst()->get("PageRaterStarField", "allow_title")) {
0 ignored issues
show
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
222
            //do nothing
223
        } else {
224
            $fields->removeFieldFromTab("Root.Main", "Title");
225
        }
226
        if (Config::inst()->get("PageRaterStarField", "allow_comments")) {
0 ignored issues
show
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
227
            //do nothing
228
        } else {
229
            $fields->removeFieldFromTab("Root.Main", "Comment");
230
        }
231
        if (class_exists('DataObjectOneFieldUpdateController')) {
232
            $linkForApproval = DataObjectOneFieldUpdateController::popup_link(
233
                'PageRating',
234
                'IsApproved',
235
                "IsApproved = 0",
236
                '',
237
                'Mass Approve'
238
            );
239
            $linkForDisapproval = DataObjectOneFieldUpdateController::popup_link(
240
                'PageRating',
241
                'IsApproved',
242
                "IsApproved = 1",
243
                '',
244
                'Mass Disapprove'
245
            );
246
            $fields->addFieldToTab(
247
                'Root.Batch',
248
                new LiteralField(
249
                    'QuickActions',
250
                    '<p class="message good">'
251
                        ._t('ProductVariation.QUICK_UPDATE', 'Quick update')
252
                        .': '
253
                        ."<span class=\"action ss-ui-button\">$linkForApproval</span> "
254
                        ."<span class=\"action ss-ui-button\">$linkForDisapproval</span>"
255
                        .'</p>'
256
                ),
257
                'IsDefault'
258
            );
259
        }
260
261
        $fields->makeFieldReadonly("IsDefault");
262
        return $fields;
263
    }
264
265
    /**
266
     * updates Page Rating for a Page and saves it with the Page.
267
     * Updates SiteTree.PageRating field ...
268
     *
269
     * if $siteTreeID is 0 then ALL pages are updated ...
270
     *
271
     * @param  integer $siteTreeID
272
     */
273
    public static function update_ratings($siteTreeID = 0)
274
    {
275
        if ($siteTreeID) {
276
            $where = "PageRating.ParentID = ".$siteTreeID;
277
        } else {
278
            $where = "PageRating.ParentID > 0";
279
        }
280
        DB::query("DELETE FROM PageRating_TEMP;");
281
        DB::query(
282
            "
283
            INSERT INTO PageRating_TEMP
284
            SELECT ParentID, (ROUND(AVG(PageRating.Rating) * 100))
285
            FROM PageRating
286
            WHERE $where
287
            GROUP BY PageRating.ParentID;
288
            "
289
        );
290
        DB::query("
291
            UPDATE SiteTree
292
                INNER JOIN PageRating_TEMP ON SiteTree.ID = PageRating_TEMP.ParentID
293
            SET SiteTree.PageRating = (PageRating_TEMP.Rating / 100);
294
        ");
295
        DB::query("
296
            UPDATE SiteTree_Live
297
                INNER JOIN PageRating_TEMP ON SiteTree_Live.ID = PageRating_TEMP.ParentID
298
            SET SiteTree_Live.PageRating = (PageRating_TEMP.Rating / 100);
299
        ");
300
    }
301
302
    public function onBeforeWrite()
303
    {
304
        parent::onBeforeWrite();
305
        if ($this->ParentID) {
0 ignored issues
show
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
306
            self::update_ratings($this->ParentID);
0 ignored issues
show
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
307
        }
308
    }
309
310
    public function requireDefaultRecords()
311
    {
312
        parent::requireDefaultRecords();
313
        DB::query("DROP TABLE IF EXISTS PageRating_TEMP;");
314
        DB::query("CREATE TABLE PageRating_TEMP (ParentID INTEGER(11), Rating INTEGER);");
315
        DB::query("ALTER TABLE \"PageRating_TEMP\" ADD INDEX ( \"ParentID\" ) ");
316
        DB::query("ALTER TABLE \"PageRating_TEMP\" ADD INDEX ( \"Rating\" ) ");
317
        DB::alteration_message("create PageRating_TEMP", "created");
318
    }
319
320
    public function canCreate($member = null)
321
    {
322
        if ($this->Config()->get("admin_can_create")) {
323
            return parent::canCreate($member);
324
        }
325
        return false;
326
    }
327
328
    public function canDelete($member = null)
329
    {
330
        if ($this->Config()->get("admin_can_delete")) {
331
            return parent::canDelete($member);
332
        }
333
        return false;
334
    }
335
336
    public function canEdit($member = null)
337
    {
338
        if ($this->Config()->get("admin_can_edit")) {
339
            return parent::canEdit($member);
340
        }
341
        return false;
342
    }
343
344
    /**
345
     * @alias
346
     *
347
     * @return string
348
     */
349
    public function Method()
350
    {
351
        return $this->getMethod();
352
    }
353
354
    /**
355
     * casted variable
356
     *
357
     * @return string
358
     */
359
    public function getMethod()
360
    {
361
        $arrayData = self::get_star_details_as_array_data($this->Rating, $this->ParentID);
0 ignored issues
show
The property Rating does not seem to exist. Did you mean round_rating?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
362
        return $arrayData->Method;
0 ignored issues
show
The property Method does not seem to exist. Did you mean built_in_methods?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
363
    }
364
365
    /**
366
     * @alias
367
     *
368
     * @return int | float
369
     */
370
    public function Stars()
371
    {
372
        return $this->getStars();
373
    }
374
375
    /**
376
     * casted variable
377
     *
378
     * @return int | float
379
     */
380
    public function getStars()
381
    {
382
        $arrayData = self::get_star_details_as_array_data($this->Rating, $this->ParentID);
0 ignored issues
show
The property Rating does not seem to exist. Did you mean round_rating?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
383
        return $arrayData->Stars;
384
    }
385
386
    /**
387
     * @alias
388
     *
389
     * @return string
0 ignored issues
show
Should the return type not be double?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
390
     */
391
    public function Percentage()
392
    {
393
        return $this->getPercentage();
394
    }
395
396
    /**
397
     * casted variable
398
     *
399
     * @return float
400
     */
401
    public function getPercentage()
402
    {
403
        $arrayData = self::get_star_details_as_array_data($this->Rating, $this->ParentID);
0 ignored issues
show
The property Rating does not seem to exist. Did you mean round_rating?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
404
        return $arrayData->Percentage;
405
    }
406
407
    /**
408
     * @alias
409
     *
410
     * @return int
411
     */
412
    public function RoundedPercentage()
413
    {
414
        return $this->getRoundedPercentage();
415
    }
416
417
    /**
418
     * casted variable
419
     *
420
     * @return int
421
     */
422
    public function getRoundedPercentage()
423
    {
424
        $arrayData = self::get_star_details_as_array_data($this->Rating, $this->ParentID);
0 ignored issues
show
The property Rating does not seem to exist. Did you mean round_rating?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
425
        return $arrayData->RoundedPercentage;
426
    }
427
428
    /**
429
     * casted alias
430
     *
431
     * @return string
0 ignored issues
show
Should the return type not be double?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
432
     */
433
    public function ReversePercentage()
434
    {
435
        return $this->getReversePercentage();
436
    }
437
438
    /**
439
     * casted variable
440
     *
441
     * @return float
442
     */
443
    public function getReversePercentage()
444
    {
445
        $arrayData = self::get_star_details_as_array_data($this->Rating, $this->ParentID);
0 ignored issues
show
The property Rating does not seem to exist. Did you mean round_rating?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
$arrayData is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
446
        return $arrayDat->ReversePercentage;
0 ignored issues
show
The variable $arrayDat does not exist. Did you mean $arrayData?

This check looks for variables that are accessed but have not been defined. It raises an issue if it finds another variable that has a similar name.

The variable may have been renamed without also renaming all references.

Loading history...
447
    }
448
449
    /**
450
     * @alias
451
     *
452
     * @return int
453
     */
454
    public function ReverseRoundedPercentage()
455
    {
456
        return $this->getReverseRoundedPercentage();
457
    }
458
459
    /**
460
     * casted variable
461
     *
462
     * @return int
463
     */
464
    public function getReverseRoundedPercentage()
465
    {
466
        $arrayData = self::get_star_details_as_array_data($this->Rating, $this->ParentID);
0 ignored issues
show
The property Rating does not seem to exist. Did you mean round_rating?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
467
        return $arrayData->ReverseRoundedPercentage;
468
    }
469
470
    /**
471
     * @alias
472
     *
473
     * @return string
474
     */
475
    public function StarClass()
476
    {
477
        return $this->getStarClass();
478
    }
479
480
    /**
481
     * casted variable
482
     *
483
     * @return string
484
     */
485
    public function getStarClass()
486
    {
487
        $arrayData = self::get_star_details_as_array_data($this->Rating, $this->ParentID);
0 ignored issues
show
The property Rating does not seem to exist. Did you mean round_rating?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
The property ParentID does not exist on object<PageRating>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
488
        return $arrayData->StarClass;
489
    }
490
}
491