This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * Wraps the Image object. We have to replace a few more methods |
||
4 | * with Image because things like formatting and dimensions don't |
||
5 | * work the same with a placeholder file. |
||
6 | * |
||
7 | * @mixin CloudFileExtension |
||
8 | * |
||
9 | * @author Mark Guinn <[email protected]> |
||
10 | * @date 01.10.2014 |
||
11 | * @package cloudassets |
||
12 | * @subpackage wrappers |
||
13 | */ |
||
14 | class CloudImage extends Image implements CloudAssetInterface |
||
15 | { |
||
16 | private static $has_many = array( |
||
0 ignored issues
–
show
Comprehensibility
introduced
by
![]() |
|||
17 | 'DerivedImages' => 'CloudImageCachedStore', |
||
18 | ); |
||
19 | |||
20 | |||
21 | public function Link() |
||
22 | { |
||
23 | $this->createLocalIfNeeded(); |
||
0 ignored issues
–
show
The method
createLocalIfNeeded does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
24 | return $this->CloudStatus == 'Live' ? $this->getCloudURL() : parent::Link(); |
||
0 ignored issues
–
show
The property
CloudStatus does not exist on object<CloudImage> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?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. ![]() The method
getCloudURL does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
25 | } |
||
26 | |||
27 | public function RelativeLink() |
||
28 | { |
||
29 | $this->createLocalIfNeeded(); |
||
0 ignored issues
–
show
The method
createLocalIfNeeded does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
30 | return $this->CloudStatus == 'Live' ? $this->getCloudURL() : parent::RelativeLink(); |
||
0 ignored issues
–
show
The property
CloudStatus does not exist on object<CloudImage> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?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. ![]() The method
getCloudURL does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
31 | } |
||
32 | |||
33 | public function getURL() |
||
34 | { |
||
35 | $this->createLocalIfNeeded(); |
||
0 ignored issues
–
show
The method
createLocalIfNeeded does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
36 | return $this->CloudStatus == 'Live' ? $this->getCloudURL() : parent::getURL(); |
||
0 ignored issues
–
show
The property
CloudStatus does not exist on object<CloudImage> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?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. ![]() The method
getCloudURL does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
37 | } |
||
38 | |||
39 | public function getAbsoluteURL() |
||
40 | { |
||
41 | $this->createLocalIfNeeded(); |
||
0 ignored issues
–
show
The method
createLocalIfNeeded does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
42 | return $this->CloudStatus == 'Live' ? $this->getCloudURL() : parent::getAbsoluteURL(); |
||
0 ignored issues
–
show
The property
CloudStatus does not exist on object<CloudImage> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?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. ![]() The method
getCloudURL does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
43 | } |
||
44 | |||
45 | public function getAbsoluteSize() |
||
46 | { |
||
47 | $this->createLocalIfNeeded(); |
||
0 ignored issues
–
show
The method
createLocalIfNeeded does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
48 | return $this->CloudStatus == 'Live' ? $this->CloudSize : parent::getAbsoluteSize(); |
||
0 ignored issues
–
show
The property
CloudStatus does not exist on object<CloudImage> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?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. ![]() The property
CloudSize does not exist on object<CloudImage> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?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. ![]() |
|||
49 | } |
||
50 | |||
51 | public function exists() |
||
52 | { |
||
53 | $this->createLocalIfNeeded(); |
||
0 ignored issues
–
show
The method
createLocalIfNeeded does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
54 | return parent::exists(); |
||
55 | } |
||
56 | |||
57 | |||
58 | /** |
||
59 | * Save the dimensions before we potentially wipe out the file |
||
60 | */ |
||
61 | public function onBeforeCloudPut() |
||
62 | { |
||
63 | $this->setCloudMeta('Dimensions', $this->getDimensions('live')); |
||
0 ignored issues
–
show
The method
setCloudMeta does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
64 | } |
||
65 | |||
66 | |||
67 | /** |
||
68 | * @param string $dim - 'string' or 0 (width) or 1 (height) |
||
69 | * @return int|string |
||
70 | */ |
||
71 | public function getDimensions($dim = "string") |
||
72 | { |
||
73 | // give an option to get the real dimensions |
||
74 | if ($dim === 'live') { |
||
75 | return parent::getDimensions(); |
||
76 | } |
||
77 | if ($this->CloudStatus != 'Live') { |
||
0 ignored issues
–
show
The property
CloudStatus does not exist on object<CloudImage> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?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. ![]() |
|||
78 | return parent::getDimensions($dim); |
||
79 | } |
||
80 | |||
81 | // otherwise we need to resort to stored dimensions because the |
||
82 | // file may be in the cloud and the local may be a placeholder |
||
83 | $val = $this->getCloudMeta('Dimensions'); |
||
0 ignored issues
–
show
The method
getCloudMeta does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
84 | if (empty($val) || !preg_match('/^\d+x\d+$/', $val)) { |
||
85 | $this->downloadFromCloud(); |
||
0 ignored issues
–
show
The method
downloadFromCloud does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
86 | $val = parent::getDimensions('string'); |
||
87 | $this->convertToPlaceholder(); |
||
0 ignored issues
–
show
The method
convertToPlaceholder does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
88 | |||
89 | if (preg_match('/^\d+x\d+$/', $val)) { |
||
90 | $this->setCloudMeta('Dimensions', $val); |
||
0 ignored issues
–
show
The method
setCloudMeta does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
91 | $this->write(); |
||
92 | } else { |
||
93 | CloudAssets::inst()->getLogger()->error("Corrupted image/metadata in {$this->ID} => {$val}"); |
||
94 | $val = "1x1"; |
||
95 | } |
||
96 | } |
||
97 | |||
98 | if ($dim === 'string') { |
||
99 | return $val; |
||
100 | } |
||
101 | |||
102 | $val = explode('x', $val); |
||
103 | return $val[$dim]; |
||
104 | } |
||
105 | |||
106 | |||
107 | /** |
||
108 | * Return an image object representing the image in the given format. |
||
109 | * This image will be generated using generateFormattedImage(). |
||
110 | * The generated image is cached, to flush the cache append ?flush=1 to your URL. |
||
111 | * |
||
112 | * Just pass the correct number of parameters expected by the working function |
||
113 | * |
||
114 | * @param string $format The name of the format. |
||
115 | * @return CloudImageCached|null |
||
116 | */ |
||
117 | public function getFormattedImage($format) |
||
0 ignored issues
–
show
This operation has 8328 execution paths which exceeds the configured maximum of 200.
A high number of execution paths generally suggests many nested conditional statements and make the code less readible. This can usually be fixed by splitting the method into several smaller methods. You can also find more information in the “Code” section of your repository. ![]() getFormattedImage uses the super-global variable $_GET which is generally not recommended.
Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable: // Bad
class Router
{
public function generate($path)
{
return $_SERVER['HOST'].$path;
}
}
// Better
class Router
{
private $host;
public function __construct($host)
{
$this->host = $host;
}
public function generate($path)
{
return $this->host.$path;
}
}
class Controller
{
public function myAction(Request $request)
{
// Instead of
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
// Better (assuming you use the Symfony2 request)
$page = $request->query->get('page', 1);
}
}
![]() |
|||
118 | { |
||
119 | $args = func_get_args(); |
||
120 | $logger = CloudAssets::inst()->getLogger(); |
||
121 | |||
122 | if ($this->ID && $this->Filename && Director::fileExists($this->Filename)) { |
||
0 ignored issues
–
show
The expression
$this->Filename of type string|null is loosely compared to true ; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.
In PHP, under loose comparison (like For '' == false // true
'' == null // true
'ab' == false // false
'ab' == null // false
// It is often better to use strict comparison
'' === false // false
'' === null // false
![]() |
|||
123 | $cacheFile = call_user_func_array(array($this, "cacheFilename"), $args); |
||
124 | $cachePath = Director::baseFolder()."/".$cacheFile; |
||
125 | |||
126 | /** @var CloudImageCachedStore $stored */ |
||
127 | $stored = CloudImageCachedStore::get()->filter('Filename', $cacheFile)->first(); |
||
128 | if ($stored && !$stored->exists()) { |
||
129 | $stored = null; |
||
130 | } |
||
131 | |||
132 | // If ?flush is present, always wipe existing data and start clean |
||
133 | if (isset($_GET['flush'])) { |
||
134 | // There was a bug here caused by the fact that GDBackend tries |
||
135 | // to read the size off the cached image, which would be a placeholder |
||
136 | // in certain cases. |
||
137 | // I'm not 100% sure what the correct behaviour is here. For now |
||
138 | // we'll destroy the existing image, causing it to be re-uploaded |
||
139 | // every time. That seems safer if a little bit wasteful. |
||
140 | $logger->debug("CloudAssets: deleting cached image because of flush: $cachePath"); |
||
141 | if (file_exists($cachePath)) { |
||
142 | unlink($cachePath); |
||
143 | } |
||
144 | |||
145 | // delete the existing meta if it existed |
||
146 | if ($stored) { |
||
147 | $stored->delete(); |
||
148 | $stored = null; |
||
149 | } |
||
150 | } |
||
151 | |||
152 | // start building out the record |
||
153 | $cached = new CloudImageCached($cacheFile); |
||
154 | $cached->Title = $this->Title; |
||
155 | $cached->ParentID = $this->ParentID; |
||
156 | |||
157 | // Is there a meta record for this formatted file? |
||
158 | if ($stored) { |
||
159 | // Has it been successfully uploaded to the cloud? |
||
160 | // If so, we can just send this puppy on |
||
161 | // If not, is there a local file that's present and correct? |
||
162 | // If not, we need to wipe the meta and anything local and regenerate |
||
163 | if ($stored->CloudStatus !== 'Live' && $cached->isLocalMissing()) { |
||
0 ignored issues
–
show
The method
isLocalMissing does not exist on object<CloudImageCached> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() The property
CloudStatus does not exist on object<CloudImageCachedStore> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?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. ![]() |
|||
164 | $stored->delete(); |
||
165 | $stored = null; |
||
166 | if (file_exists($cachePath)) { |
||
167 | unlink($cachePath); |
||
168 | } |
||
169 | } else { |
||
170 | $cached->setStoreRecord($stored); |
||
171 | } |
||
172 | } |
||
173 | |||
174 | // If there is no meta record (or an invalid one), is there a local file or placeholder? |
||
175 | if (!$stored) { |
||
176 | // if the local exists as a placeholder, we need to check if the cloud version is valid |
||
177 | if (file_exists($cachePath) && $cached->containsPlaceholder()) { |
||
0 ignored issues
–
show
The method
containsPlaceholder does not exist on object<CloudImageCached> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
178 | try { |
||
179 | $cached->downloadFromCloud(); |
||
0 ignored issues
–
show
The method
downloadFromCloud does not exist on object<CloudImageCached> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
180 | } catch (Exception $e) { |
||
181 | // We want to fail silently here if there is any trouble |
||
182 | // because we can always regenerate the thumbnail |
||
183 | if (CloudAssets::config()->missing_image) { |
||
184 | return new CloudImageMissing($this, $args); |
||
0 ignored issues
–
show
The return type of
return new \CloudImageMissing($this, $args); (CloudImageMissing ) is incompatible with the return type of the parent method Image::getFormattedImage of type Image_Cached|null .
If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design. Let’s take a look at an example: class Author {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
abstract class Post {
public function getAuthor() {
return 'Johannes';
}
}
class BlogPost extends Post {
public function getAuthor() {
return new Author('Johannes');
}
}
class ForumPost extends Post { /* ... */ }
function my_function(Post $post) {
echo strtoupper($post->getAuthor());
}
Our function ![]() |
|||
185 | } |
||
186 | } |
||
187 | } |
||
188 | |||
189 | // If we don't have a valid local version at this point... |
||
190 | if ($cached->isLocalMissing()) { |
||
0 ignored issues
–
show
The method
isLocalMissing does not exist on object<CloudImageCached> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
191 | // delete whatever might have been there |
||
192 | if (file_exists($cachePath)) { |
||
193 | unlink($cachePath); |
||
194 | } |
||
195 | $logger->debug("CloudAssets: generating formatted image at $cachePath"); |
||
196 | |||
197 | // Regenerate the formatted image |
||
198 | if ($this->CloudStatus === 'Live' && $this->isLocalMissing()) { |
||
0 ignored issues
–
show
The property
CloudStatus does not exist on object<CloudImage> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?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. ![]() The method
isLocalMissing does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
199 | try { |
||
200 | $this->downloadFromCloud(); |
||
0 ignored issues
–
show
The method
downloadFromCloud does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
201 | } catch (Exception $e) { |
||
202 | if (CloudAssets::config()->missing_image) { |
||
203 | return new CloudImageMissing($this, $args); |
||
0 ignored issues
–
show
The return type of
return new \CloudImageMissing($this, $args); (CloudImageMissing ) is incompatible with the return type of the parent method Image::getFormattedImage of type Image_Cached|null .
If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design. Let’s take a look at an example: class Author {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
abstract class Post {
public function getAuthor() {
return 'Johannes';
}
}
class BlogPost extends Post {
public function getAuthor() {
return new Author('Johannes');
}
}
class ForumPost extends Post { /* ... */ }
function my_function(Post $post) {
echo strtoupper($post->getAuthor());
}
Our function ![]() |
|||
204 | } |
||
205 | } |
||
206 | |||
207 | call_user_func_array(array($this, "generateFormattedImage"), $args); |
||
208 | $this->convertToPlaceholder(); |
||
0 ignored issues
–
show
The method
convertToPlaceholder does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
209 | } else { |
||
210 | call_user_func_array(array($this, "generateFormattedImage"), $args); |
||
211 | } |
||
212 | } |
||
213 | |||
214 | // If we now have a valid image, generate a stored meta record for it |
||
215 | if (file_exists($cachePath)) { |
||
216 | $stored = new CloudImageCachedStore(); |
||
217 | $stored->Filename = $cacheFile; |
||
0 ignored issues
–
show
The property
Filename does not exist on object<CloudImageCachedStore> . Since you implemented __set , maybe consider adding a @property annotation.
Since your code implements the magic setter <?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.");
}
}
}
Since the property has write access only, you can use the @property-write 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. ![]() |
|||
218 | $stored->SourceID = $this->ID; |
||
0 ignored issues
–
show
The property
SourceID does not exist on object<CloudImageCachedStore> . Since you implemented __set , maybe consider adding a @property annotation.
Since your code implements the magic setter <?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.");
}
}
}
Since the property has write access only, you can use the @property-write 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. ![]() |
|||
219 | $stored->write(); |
||
220 | // all the other fields will get set when the cloud status is updated |
||
221 | $cached->setStoreRecord($stored); |
||
222 | } |
||
223 | } |
||
224 | |||
225 | // upload to cloud if needed |
||
226 | $cached->updateCloudStatus(); |
||
0 ignored issues
–
show
The method
updateCloudStatus does not exist on object<CloudImageCached> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
227 | |||
228 | return $cached; |
||
0 ignored issues
–
show
The return type of
return $cached; (CloudImageCached ) is incompatible with the return type of the parent method Image::getFormattedImage of type Image_Cached|null .
If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design. Let’s take a look at an example: class Author {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
abstract class Post {
public function getAuthor() {
return 'Johannes';
}
}
class BlogPost extends Post {
public function getAuthor() {
return new Author('Johannes');
}
}
class ForumPost extends Post { /* ... */ }
function my_function(Post $post) {
echo strtoupper($post->getAuthor());
}
Our function ![]() |
|||
229 | } |
||
230 | } |
||
231 | |||
232 | |||
233 | /** |
||
234 | * Checks if the local file is an image that can be used and not |
||
235 | * a placeholder or a corrupted file. |
||
236 | * |
||
237 | * @return bool |
||
238 | */ |
||
239 | public function isLocalValid() |
||
240 | { |
||
241 | $path = $this->getFullPath(); |
||
242 | if (!file_exists($path)) { |
||
243 | return false; |
||
244 | } |
||
245 | return (getimagesize($path) !== false); |
||
246 | } |
||
247 | |||
248 | |||
249 | /** |
||
250 | * @return int The number of formatted images deleted |
||
251 | */ |
||
252 | public function deleteFormattedImages() |
||
253 | { |
||
254 | foreach ($this->DerivedImages() as $store) { |
||
0 ignored issues
–
show
The method
DerivedImages does not exist on object<CloudImage> ? Since you implemented __call , maybe consider adding a @method annotation.
If you implement This is often the case, when class ParentClass {
private $data = array();
public function __call($method, array $args) {
if (0 === strpos($method, 'get')) {
return $this->data[strtolower(substr($method, 3))];
}
throw new \LogicException(sprintf('Unsupported method: %s', $method));
}
}
/**
* If this class knows which fields exist, you can specify the methods here:
*
* @method string getName()
*/
class SomeClass extends ParentClass { }
![]() |
|||
255 | $img = $store->getCloudImageCached(); |
||
256 | $img->delete(); |
||
257 | } |
||
258 | |||
259 | // The above should have covered everything but this will clean up any |
||
260 | // loose ends that were maybe created before wrapping or fell through a crack |
||
261 | parent::deleteFormattedImages(); |
||
262 | } |
||
263 | } |
||
264 |