canylmz /
laravel-rating
| 1 | <?php |
||||||||||
| 2 | |||||||||||
| 3 | namespace Canylmz\Rating; |
||||||||||
| 4 | |||||||||||
| 5 | use Canylmz\Rating\Contracts\Rating; |
||||||||||
| 6 | use Canylmz\Rating\Contracts\Rateable; |
||||||||||
| 7 | use Canylmz\Rating\Exceptions\ModelNotRateable; |
||||||||||
| 8 | use Canylmz\Rating\Exceptions\RatingAlreadyExists; |
||||||||||
| 9 | |||||||||||
| 10 | trait CanRate |
||||||||||
| 11 | { |
||||||||||
| 12 | /** |
||||||||||
| 13 | * Relationship for models that this model currently rated. |
||||||||||
| 14 | * |
||||||||||
| 15 | * @param Model $model The model types of the results. |
||||||||||
| 16 | * @return morphToMany The relationship. |
||||||||||
|
0 ignored issues
–
show
|
|||||||||||
| 17 | */ |
||||||||||
| 18 | public function ratings($model = null) |
||||||||||
| 19 | { |
||||||||||
| 20 | return $this->morphToMany(($model) ?: $this->getMorphClass(), 'rater', 'ratings', 'rater_id', 'rateable_id') |
||||||||||
|
0 ignored issues
–
show
It seems like
getMorphClass() must be provided by classes using this trait. How about adding it as abstract method to this trait?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
It seems like
morphToMany() must be provided by classes using this trait. How about adding it as abstract method to this trait?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||||||
| 21 | ->withPivot('rateable_type', 'rating') |
||||||||||
| 22 | ->wherePivot('rateable_type', ($model) ?: $this->getMorphClass()) |
||||||||||
| 23 | ->wherePivot('rater_type', $this->getMorphClass()); |
||||||||||
| 24 | } |
||||||||||
| 25 | |||||||||||
| 26 | /** |
||||||||||
| 27 | * Check if a model can be rated. |
||||||||||
| 28 | * |
||||||||||
| 29 | * @param Model $model The model to check |
||||||||||
| 30 | * @return bool |
||||||||||
| 31 | */ |
||||||||||
| 32 | public function isRateable($model): bool |
||||||||||
| 33 | { |
||||||||||
| 34 | if (! $model instanceof Rateable && ! $model instanceof Rating) { |
||||||||||
| 35 | throw ModelNotRateable::create($model); |
||||||||||
| 36 | } |
||||||||||
| 37 | |||||||||||
| 38 | return true; |
||||||||||
| 39 | } |
||||||||||
| 40 | |||||||||||
| 41 | /** |
||||||||||
| 42 | * Check if the current model is rating another model. |
||||||||||
| 43 | * |
||||||||||
| 44 | * @param Model $model The model which will be checked against. |
||||||||||
| 45 | * @return bool |
||||||||||
| 46 | */ |
||||||||||
| 47 | public function hasRated($model): bool |
||||||||||
| 48 | { |
||||||||||
| 49 | if (! $this->isRateable($model)) { |
||||||||||
| 50 | return false; |
||||||||||
| 51 | } |
||||||||||
| 52 | |||||||||||
| 53 | return (bool) ! is_null($this->ratings($model->getMorphClass())->find($model->getKey())); |
||||||||||
|
0 ignored issues
–
show
The method
getKey() does not exist on Canylmz\Rating\Contracts\Rateable. It seems like you code against a sub-type of said class. However, the method does not exist in Canylmz\Rating\Contracts\Rating. Are you sure you never get one of those?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
The method
getMorphClass() does not exist on Canylmz\Rating\Contracts\Rateable. It seems like you code against a sub-type of said class. However, the method does not exist in Canylmz\Rating\Contracts\Rating. Are you sure you never get one of those?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
The method
getKey() does not exist on Canylmz\Rating\Contracts\Rating. Since it exists in all sub-types, consider adding an abstract or default implementation to Canylmz\Rating\Contracts\Rating.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
The method
getMorphClass() does not exist on Canylmz\Rating\Contracts\Rating. Since it exists in all sub-types, consider adding an abstract or default implementation to Canylmz\Rating\Contracts\Rating.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||||||
| 54 | } |
||||||||||
| 55 | |||||||||||
| 56 | /** |
||||||||||
| 57 | * Add rating for a certain model. |
||||||||||
| 58 | * |
||||||||||
| 59 | * @param Model $model The model which will be rated. |
||||||||||
| 60 | * @param float $rating The rate amount. |
||||||||||
| 61 | * @return bool |
||||||||||
| 62 | */ |
||||||||||
| 63 | public function addRatingFor($model, $rating): bool |
||||||||||
| 64 | { |
||||||||||
| 65 | if (! $this->isRateable($model)) { |
||||||||||
| 66 | return false; |
||||||||||
| 67 | } |
||||||||||
| 68 | |||||||||||
| 69 | if ($this->hasRated($model)) { |
||||||||||
| 70 | throw RatingAlreadyExists::create($model); |
||||||||||
|
0 ignored issues
–
show
It seems like
$model can also be of type Canylmz\Rating\Contracts\Rating; however, parameter $className of Canylmz\Rating\Exception...AlreadyExists::create() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||||||
| 71 | } |
||||||||||
| 72 | |||||||||||
| 73 | $this->ratings()->attach($this->getKey(), [ |
||||||||||
|
0 ignored issues
–
show
It seems like
getKey() must be provided by classes using this trait. How about adding it as abstract method to this trait?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||||||
| 74 | 'rater_id' => $this->getKey(), |
||||||||||
| 75 | 'rateable_type' => $model->getMorphClass(), |
||||||||||
| 76 | 'rateable_id' => $model->getKey(), |
||||||||||
| 77 | 'rating' => (float) $rating, |
||||||||||
| 78 | ]); |
||||||||||
| 79 | |||||||||||
| 80 | return true; |
||||||||||
| 81 | } |
||||||||||
| 82 | |||||||||||
| 83 | /** |
||||||||||
| 84 | * Update or add rating for a certain model. |
||||||||||
| 85 | * |
||||||||||
| 86 | * @param Model $model The model which will be rated. |
||||||||||
| 87 | * @param float $rating The rate amount. |
||||||||||
| 88 | * @return bool |
||||||||||
| 89 | */ |
||||||||||
| 90 | public function updateRatingFor($model, $rating): bool |
||||||||||
| 91 | { |
||||||||||
| 92 | if (! $this->isRateable($model)) { |
||||||||||
| 93 | return false; |
||||||||||
| 94 | } |
||||||||||
| 95 | |||||||||||
| 96 | if ($this->hasRated($model)) { |
||||||||||
| 97 | $this->deleteRatingFor($model); |
||||||||||
| 98 | } |
||||||||||
| 99 | |||||||||||
| 100 | return $this->addRatingFor($model, $rating); |
||||||||||
| 101 | } |
||||||||||
| 102 | |||||||||||
| 103 | /** |
||||||||||
| 104 | * Rate a certain model. |
||||||||||
| 105 | * |
||||||||||
| 106 | * @param Model $model The model which will be rated. |
||||||||||
| 107 | * @param float $rating The rate amount. |
||||||||||
| 108 | * @param bool $can_update Set to false if a rating can only be added once |
||||||||||
| 109 | * @return bool |
||||||||||
| 110 | */ |
||||||||||
| 111 | public function rate($model, $rating, $can_update = true): bool |
||||||||||
| 112 | { |
||||||||||
| 113 | if ($can_update === true) { |
||||||||||
| 114 | return $this->updateRatingFor($model, $rating); |
||||||||||
| 115 | } |
||||||||||
| 116 | |||||||||||
| 117 | return $this->addRatingFor($model, $rating); |
||||||||||
| 118 | } |
||||||||||
| 119 | |||||||||||
| 120 | /** |
||||||||||
| 121 | * Delete rating for a certain model. |
||||||||||
| 122 | * |
||||||||||
| 123 | * @param Model $model The model which will be unrated. |
||||||||||
| 124 | * @return bool |
||||||||||
| 125 | */ |
||||||||||
| 126 | public function deleteRatingFor($model): bool |
||||||||||
| 127 | { |
||||||||||
| 128 | if (! $this->isRateable($model)) { |
||||||||||
| 129 | return false; |
||||||||||
| 130 | } |
||||||||||
| 131 | |||||||||||
| 132 | if (! $this->hasRated($model)) { |
||||||||||
| 133 | return false; |
||||||||||
| 134 | } |
||||||||||
| 135 | |||||||||||
| 136 | return (bool) $this->ratings($model->getMorphClass())->detach($model->getKey()); |
||||||||||
| 137 | } |
||||||||||
| 138 | |||||||||||
| 139 | /** |
||||||||||
| 140 | * Unrate a certain model. |
||||||||||
| 141 | * |
||||||||||
| 142 | * @param Model $model The model which will be unrated. |
||||||||||
| 143 | * @return bool |
||||||||||
| 144 | */ |
||||||||||
| 145 | public function unrate($model): bool |
||||||||||
| 146 | { |
||||||||||
| 147 | return $this->deleteRatingFor($model); |
||||||||||
| 148 | } |
||||||||||
| 149 | } |
||||||||||
| 150 |
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:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths