Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RexStan-Überprüfung: lib/Cronjob/Sync.php #109

Merged
merged 3 commits into from
Sep 9, 2024
Merged

RexStan-Überprüfung: lib/Cronjob/Sync.php #109

merged 3 commits into from
Sep 9, 2024

Conversation

christophboecker
Copy link
Member

RexStan-Überprüfung (Level 6, REDAXO SuperGlobals|Strict-Mode|Deprecation Warnings|phpstan-dba|report mixed|dead code)

'Property FriendsOfRedaxo\Neues\Cronjob\Sync::$counter has no type specified.'

/** @var ... */ hinzugefügt

'PHPDoc tag @var for variable $response contains unknown class .....\Cronjob\rex_socket_response.'
'Call to method xyz() on an unknown class .....\Cronjob\rex_socket_response.'

An zwei Stellen steht

$socket = rex_socket::factoryUrl($socket_url);
/** @var rex_socket_response $response */
$response = $socket->doGet();

Faktisch funtioniert der Code, denn rex_socket ist per Use korrekt eingeordnet und $socket->doGet()liefert ein \rex_socket_response-Objekt. Somit ist der PHPDoc-Tag überflüssig. Rexstan und die IDE werten die Rückgabe auch so korrekt aus.

Damit erledigen sich zugleich die Fehlermeldungen zu 'Call to method xyz() on an unknown class ...\rex_socket_response'.

'Method FriendsOfRedaxo\Neues\Cronjob\Sync::createEntry() has no return type specified.'
'Method FriendsOfRedaxo\Neues\Cronjob\Sync::createEntry() has parameter $current with no value type specified in iterable type array.'

'Method FriendsOfRedaxo\Neues\Cronjob\Sync::createEntry() has parameter $current with no value type specified in iterable type array.'
'Method FriendsOfRedaxo\Neues\Cronjob\Sync::createCategory() has parameter $current with no type specified.'

'Method FriendsOfRedaxo\Neues\Cronjob\Sync::createAuthor() has no return type specified.'
'Method FriendsOfRedaxo\Neues\Cronjob\Sync::createAuthor() has parameter $current with no value type specified in iterable type array.'

Der Paramter ist ersteinmal mangels besserer Erkenntnis auf @param array<string,mixed> $current gesetzt. Der Return-Typ ist passend gesetzt zu dem, was die jeweilige Methode macht (void, Category, Author).

Zu klären wäre, warum createAuthor bzw. createCategory ein entsprechendes Objekt zurückliefern, createEntry aber nicht.

'If condition is always true.'

Kommt an zwei Stellen vor. Hier nur einmal beschrieben:

Da createCategory stets ein Category-Objekt liefert (s.o.), kann die Abfrage entfallen.

$target_category = $this->createCategory($category['attributes']);
if ($target_category) {
    $target_category_ids[] = $target_category->getId();
}

'Only booleans are allowed in &&, FriendsOfRedaxo\Neues\Category|null given on the right side.'

Die Abfrage konkret gestaltet; auf not null abfragen:

if ($this->getParam('neues_category_id') > 0 && null !== Category::get($this->getParam('neues_category_id'))) {

'Only booleans are allowed in an if condition, mixed given.'

Hier sollte wohl eher abgefragt werden, ob das Array-Element existiert.

$author = $current['relationships']['author']['data'];
if ($author) {
    $target_author = $this->createAuthor($author['attributes']);
    $entry->setValue('author_id', $target_author->getId());
}

wird zu

if (isset($current['relationships']['author']['data'])) {
    $author = $current['relationships']['author']['data'];
    $target_author = $this->createAuthor($author['attributes']);
    $entry->setValue('author_id', $target_author->getId());
}

'Only booleans are allowed in an if condition, rex_media|null given.'

Auch hier konkret prüfen (null !== ...).

'Only booleans are allowed in a ternary operator condition, array given.'

return rex_media_service::addMedia(...) ? true : false;

RexStan moniert, dass es kein konkreter Vergleich ist. Erschwerend kommt hinzu, dass immer
ein gefülltes Array geliefert wird; die Abfrage ergibt also immrer True. Im Fehlerfall kommt eine Exception.

Also muss man die Exception abfangen und dann false melden

@alxndr-w alxndr-w merged commit 67988d7 into main Sep 9, 2024
@alxndr-w alxndr-w deleted the cb-15 branch September 9, 2024 09:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants