From 430074ffa822c2456cabbbe77413fd2d615db7d4 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Fri, 3 Mar 2023 20:05:20 +0000 Subject: [PATCH] adjustments due to phpstan report, fixes #2257 Closes #2257 Merge request studip/studip!1490 --- lib/classes/ContentBar.php | 7 ++++--- lib/classes/CoursewarePDFCertificate.php | 7 +++---- .../JsonApi/Routes/Courseware/UnitsCopy.php | 10 ++++++++-- .../JsonApi/Routes/Courseware/UnitsCreate.php | 2 +- .../JsonApi/Routes/Courseware/UnitsUpdate.php | 2 ++ .../JsonApi/Routes/Files/FileRefsContentShow.php | 2 +- lib/classes/Virusscanner.php | 7 +++++++ lib/cronjobs/remind_oer_upload.class.php | 15 ++++++--------- lib/cronjobs/send_mail_notifications.class.php | 2 +- lib/models/QuestionnaireInfo.php | 4 +--- lib/models/User.class.php | 5 ++++- 11 files changed, 38 insertions(+), 25 deletions(-) diff --git a/lib/classes/ContentBar.php b/lib/classes/ContentBar.php index 53b3dfce981..0e6a664dcb0 100644 --- a/lib/classes/ContentBar.php +++ b/lib/classes/ContentBar.php @@ -36,18 +36,19 @@ class ContentBar public static function get(): ContentBar { if (static::$instance === null) { - static::$instance = new static; + static::$instance = new static(); } return static::$instance; } /** * Private constructor to ensure that the singleton Get() method is always - * used. + * used. The constructor is finalized so that the call to get() will never + * fail. * * @see ContentBar::get */ - protected function __construct() + protected final function __construct() { } diff --git a/lib/classes/CoursewarePDFCertificate.php b/lib/classes/CoursewarePDFCertificate.php index e3ef02f70bb..ca6e704c27b 100644 --- a/lib/classes/CoursewarePDFCertificate.php +++ b/lib/classes/CoursewarePDFCertificate.php @@ -2,13 +2,12 @@ class CoursewarePDFCertificate extends TCPDF { + protected $background; + public function __construct($background = false, $orientation = 'P', $unit = 'mm', $format = 'A4', $unicode = true, $encoding = 'UTF-8') { - $this->config = Config::get(); - if ($this->config->getValue('LOAD_EXTERNAL_MEDIA') === 'proxy') { - $this->media_proxy = new MediaProxy(); - } parent::__construct($orientation, $unit, $format, $unicode, $encoding, false); + if ($background) { $fileRef = FileRef::find($background); $this->background = $fileRef->file->getPath(); diff --git a/lib/classes/JsonApi/Routes/Courseware/UnitsCopy.php b/lib/classes/JsonApi/Routes/Courseware/UnitsCopy.php index 53654598d52..61ffa956cf2 100644 --- a/lib/classes/JsonApi/Routes/Courseware/UnitsCopy.php +++ b/lib/classes/JsonApi/Routes/Courseware/UnitsCopy.php @@ -32,7 +32,13 @@ class UnitsCopy extends NonJsonApiController $rangeType = $data['rangeType']; $modified = $data['modified']; - if (!Authority::canCreateUnit($user)) { + try { + $range = \RangeFactory::createRange($rangeType, $rangeId); + } catch (\Exception $e) { + throw new RecordNotFoundException('Range could not be found'); + } + + if (!Authority::canCreateUnit($user, $range)) { throw new AuthorizationFailedException(); } @@ -43,4 +49,4 @@ class UnitsCopy extends NonJsonApiController return $response; } -} \ No newline at end of file +} diff --git a/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php b/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php index c10961984d4..f8fb17b6b52 100644 --- a/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php +++ b/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php @@ -3,12 +3,12 @@ namespace JsonApi\Routes\Courseware; use JsonApi\Errors\AuthorizationFailedException; +use JsonApi\Errors\RecordNotFoundException; use JsonApi\JsonApiController; use JsonApi\Routes\ValidationTrait; use JsonApi\Schemas\Courseware\Unit as UnitSchema; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; -use Studip\Activity\Activity; /** * Create a block in a container. diff --git a/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php b/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php index 53fccd3358f..762fb0437e8 100644 --- a/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php +++ b/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php @@ -6,6 +6,7 @@ use Courseware\Unit; use JsonApi\Errors\AuthorizationFailedException; use JsonApi\Errors\RecordNotFoundException; use JsonApi\JsonApiController; +use JsonApi\Routes\TimestampTrait; use JsonApi\Routes\ValidationTrait; use JsonApi\Schemas\Courseware\Unit as UnitSchema; use Psr\Http\Message\ResponseInterface as Response; @@ -17,6 +18,7 @@ use Psr\Http\Message\ServerRequestInterface as Request; class UnitsUpdate extends JsonApiController { use EditBlockAwareTrait; + use TimestampTrait; use ValidationTrait; /** diff --git a/lib/classes/JsonApi/Routes/Files/FileRefsContentShow.php b/lib/classes/JsonApi/Routes/Files/FileRefsContentShow.php index b2b67ce0246..e2d19c4a95b 100644 --- a/lib/classes/JsonApi/Routes/Files/FileRefsContentShow.php +++ b/lib/classes/JsonApi/Routes/Files/FileRefsContentShow.php @@ -114,7 +114,7 @@ class FileRefsContentShow extends NonJsonApiController $fileRef->incrementDownloadCounter(); - $stream = Psr7\stream_for(fopen($pathFile, 'rb')); + $stream = Psr7\Utils::streamFor(fopen($pathFile, 'rb')); return $response->withBody($stream); } diff --git a/lib/classes/Virusscanner.php b/lib/classes/Virusscanner.php index 628fdbac42d..077e3e26de5 100644 --- a/lib/classes/Virusscanner.php +++ b/lib/classes/Virusscanner.php @@ -88,6 +88,13 @@ class Virusscanner return []; } + /** + * Finalized constructor so that the instantition in scan() will never fail. + */ + protected final function __construct() + { + } + /** * Establishes a connection to virus scanner via socket or TCP, depending on Stud.IP configuration. * diff --git a/lib/cronjobs/remind_oer_upload.class.php b/lib/cronjobs/remind_oer_upload.class.php index 9ac20e799d6..a1a8ee1984c 100644 --- a/lib/cronjobs/remind_oer_upload.class.php +++ b/lib/cronjobs/remind_oer_upload.class.php @@ -39,10 +39,10 @@ class RemindOerUpload extends CronJob $filetype = $file_ref->getFileType(); $file_to_suggest = $filetype->convertToStandardFile(); - $this->author = $file_ref->owner->username; - $this->link_to_share = URLHelper::getURL('dispatch.php/file/share_oer/' . $result['file_ref_id']); - $this->linktext = _('Klicken Sie hier, um das Material im OER-Campus zu veröffentlichen.'); - $this->formatted_link = '['. $this->linktext .']' . $this->link_to_share; + $author = $file_ref->owner->username; + $link_to_share = URLHelper::getURL('dispatch.php/file/share_oer/' . $result['file_ref_id']); + $linktext = _('Klicken Sie hier, um das Material im OER-Campus zu veröffentlichen.'); + $formatted_link = '['. $linktext .']' . $link_to_share; $oer_reminder_message = sprintf(_("Sie wollten daran erinnert werden, die folgende Datei im OER-Campus zu veröffentlichen:\n\n" . "Dateiname: %s \n" @@ -50,14 +50,14 @@ class RemindOerUpload extends CronJob . "%s \n\n"), $file_to_suggest->getFilename(), $file_to_suggest->getDescription(), - $this->formatted_link + $formatted_link ); $messaging = new messaging(); $messaging->insert_message( $oer_reminder_message, - $this->author, + $author, '____%system%____', '', Request::option('message_id'), @@ -67,10 +67,7 @@ class RemindOerUpload extends CronJob ); OERPostUpload::deleteBySQL("file_ref_id = ?", [$result['file_ref_id']]); - } - } - } } diff --git a/lib/cronjobs/send_mail_notifications.class.php b/lib/cronjobs/send_mail_notifications.class.php index c336308194e..08882943b94 100644 --- a/lib/cronjobs/send_mail_notifications.class.php +++ b/lib/cronjobs/send_mail_notifications.class.php @@ -114,7 +114,7 @@ class SendMailNotificationsJob extends CronJob return; } - $GLOBALS['user'] = new Seminar_user($user); + $GLOBALS['user'] = new Seminar_User($user); $ok = false; $mailmessage = $notification->getAllNotifications($user->id); diff --git a/lib/models/QuestionnaireInfo.php b/lib/models/QuestionnaireInfo.php index 75965866f7e..0b1493c5d6b 100644 --- a/lib/models/QuestionnaireInfo.php +++ b/lib/models/QuestionnaireInfo.php @@ -1,6 +1,4 @@ <?php -require_once 'lib/classes/QuestionType.interface.php'; - class QuestionnaireInfo extends QuestionnaireQuestion implements QuestionType { public static function getIcon(bool $active = false) : Icon @@ -45,7 +43,7 @@ class QuestionnaireInfo extends QuestionnaireQuestion implements QuestionType public function createAnswer() { - + return new QuestionnaireAnswer(); // Unused but necessary } public function getUserIdsOfFilteredAnswer($answer_option) diff --git a/lib/models/User.class.php b/lib/models/User.class.php index 82709db4b4e..0653f5ce7e9 100644 --- a/lib/models/User.class.php +++ b/lib/models/User.class.php @@ -237,7 +237,10 @@ class User extends AuthUserMd5 implements Range, PrivacyObject */ public static function build($data, $is_new = true) { - $user = new static(); + // Note: This should be used instead of `new static()` since PHPStan + $class = get_called_class(); + $user = new $class(); + $user->info = new UserInfo(); $user->setData($data); $user->setNew($is_new); -- GitLab