From 02fe36b2c8c45d5e99fc87281302a5cf1ed01147 Mon Sep 17 00:00:00 2001 From: Robin Windey Date: Sat, 31 Aug 2024 20:31:21 +0000 Subject: [PATCH] CS Lint fixes NC30 --- lib/AppInfo/Application.php | 2 +- lib/BackgroundJobs/ProcessFileJob.php | 2 +- .../Version2702Date20230908170345.php | 2 +- lib/Model/WorkflowSettings.php | 4 ++-- lib/Notification/Notifier.php | 4 ++-- lib/OcrProcessors/IOcrProcessor.php | 6 +++--- lib/OcrProcessors/OcrMyPdfBasedProcessor.php | 4 ++-- lib/Service/IEventService.php | 2 +- lib/Service/INotificationService.php | 2 +- lib/Service/IOcrService.php | 6 +++--- lib/Service/NotificationService.php | 2 +- lib/Service/OcrService.php | 10 +++++----- lib/Wrapper/ICommand.php | 18 +++++++++--------- lib/Wrapper/ViewWrapper.php | 2 +- tests/Integration/Composer/AutoloaderTest.php | 2 +- .../Unit/BackgroundJobs/ProcessFileJobTest.php | 4 ++-- .../Unit/OcrProcessors/PdfOcrProcessorTest.php | 6 +++--- tests/Unit/OperationTest.php | 10 +++++----- tests/Unit/Service/NotificationServiceTest.php | 6 +++--- .../Unit/Service/OcrBackendInfoServiceTest.php | 6 +++--- tests/Unit/Service/OcrServiceTest.php | 16 ++++++++-------- tests/Unit/Settings/GlobalSettingsTest.php | 4 ++-- tests/Unit/composer/autoloadTest.php | 2 +- 23 files changed, 61 insertions(+), 61 deletions(-) diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 6d1b28f..a8a459d 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -61,7 +61,7 @@ use Psr\Log\LoggerInterface; class Application extends App implements IBootstrap { - public const APP_NAME = "workflow_ocr"; + public const APP_NAME = 'workflow_ocr'; /** * Application constructor. diff --git a/lib/BackgroundJobs/ProcessFileJob.php b/lib/BackgroundJobs/ProcessFileJob.php index 6fe4c36..d2d2f1d 100644 --- a/lib/BackgroundJobs/ProcessFileJob.php +++ b/lib/BackgroundJobs/ProcessFileJob.php @@ -26,11 +26,11 @@ namespace OCA\WorkflowOcr\BackgroundJobs; -use \OCP\Files\File; use OCA\WorkflowOcr\Model\WorkflowSettings; use OCA\WorkflowOcr\Service\INotificationService; use OCA\WorkflowOcr\Service\IOcrService; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Files\File; use Psr\Log\LoggerInterface; /** diff --git a/lib/Migration/Version2702Date20230908170345.php b/lib/Migration/Version2702Date20230908170345.php index 2b6e055..8939856 100644 --- a/lib/Migration/Version2702Date20230908170345.php +++ b/lib/Migration/Version2702Date20230908170345.php @@ -58,7 +58,7 @@ public function description(): string { public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { try { $this->deleteNonDeliverableNotifications(); - } catch(\Throwable $e) { + } catch (\Throwable $e) { $output->warning('Could not delete non-deliverable notifications: ' . $e->getMessage() . '. Please see https://github.com/R0Wi-DEV/workflow_ocr/issues/221.'); } diff --git a/lib/Model/WorkflowSettings.php b/lib/Model/WorkflowSettings.php index 04619dc..a0ca0c7 100644 --- a/lib/Model/WorkflowSettings.php +++ b/lib/Model/WorkflowSettings.php @@ -52,7 +52,7 @@ class WorkflowSettings { /** * @param string $json The serialized JSON string used in frontend as input for the Vue component */ - public function __construct(string $json = null) { + public function __construct(?string $json = null) { $this->setJson($json); } @@ -109,7 +109,7 @@ public static function canConstruct(string $json): bool { /** * @return void */ - private function setJson(string $json = null) { + private function setJson(?string $json = null) { if (!$json) { return; } diff --git a/lib/Notification/Notifier.php b/lib/Notification/Notifier.php index 39463ba..fef355a 100644 --- a/lib/Notification/Notifier.php +++ b/lib/Notification/Notifier.php @@ -37,7 +37,7 @@ use Psr\Log\LoggerInterface; class Notifier implements INotifier { - /** @var IFactory*/ + /** @var IFactory */ private $l10nFactory; /** @var IURLGenerator */ private $urlGenerator; @@ -116,7 +116,7 @@ public function prepare(INotification $notification, string $languageCode): INot return $notification; } - private function tryGetRichParamForFile(string $uid, int $fileId) : array | bool { + private function tryGetRichParamForFile(string $uid, int $fileId) : array|bool { try { $userFolder = $this->rootFolder->getUserFolder($uid); /** @var File[] */ diff --git a/lib/OcrProcessors/IOcrProcessor.php b/lib/OcrProcessors/IOcrProcessor.php index 26dce54..bca2209 100644 --- a/lib/OcrProcessors/IOcrProcessor.php +++ b/lib/OcrProcessors/IOcrProcessor.php @@ -31,9 +31,9 @@ interface IOcrProcessor { /** * Processes OCR on the given file - * @param File $file The file to be processed - * @param WorkflowSettings $settings The settings to be used for this specific workflow - * @param GlobalSettings $globalSettings The global settings configured for all OCR workflows on this system + * @param File $file The file to be processed + * @param WorkflowSettings $settings The settings to be used for this specific workflow + * @param GlobalSettings $globalSettings The global settings configured for all OCR workflows on this system * @return OcrProcessorResult * @throws OcrNotPossibleException */ diff --git a/lib/OcrProcessors/OcrMyPdfBasedProcessor.php b/lib/OcrProcessors/OcrMyPdfBasedProcessor.php index 1aa7cff..2b9cefe 100644 --- a/lib/OcrProcessors/OcrMyPdfBasedProcessor.php +++ b/lib/OcrProcessors/OcrMyPdfBasedProcessor.php @@ -96,9 +96,9 @@ public function ocrFile(File $file, WorkflowSettings $settings, GlobalSettings $ $this->logger->info('Temporary sidecar file at \'{path}\' was empty', ['path' => $this->sidecarFileAccessor->getOrCreateSidecarFile()]); } - $this->logger->debug("OCR processing was successful"); + $this->logger->debug('OCR processing was successful'); - return new OcrProcessorResult($ocrFileContent, "pdf", $recognizedText); + return new OcrProcessorResult($ocrFileContent, 'pdf', $recognizedText); } /** diff --git a/lib/Service/IEventService.php b/lib/Service/IEventService.php index 5f0a177..b6f62c2 100644 --- a/lib/Service/IEventService.php +++ b/lib/Service/IEventService.php @@ -33,7 +33,7 @@ interface IEventService { /** * Emits events * - * @param OcrProcessorResult $result The processed ocr result + * @param OcrProcessorResult $result The processed ocr result * */ public function textRecognized(OcrProcessorResult $result, File $node); diff --git a/lib/Service/INotificationService.php b/lib/Service/INotificationService.php index 5d0f159..a324df9 100644 --- a/lib/Service/INotificationService.php +++ b/lib/Service/INotificationService.php @@ -34,5 +34,5 @@ interface INotificationService { * @param string $message The error message that should be displayed in the notification. * @param int $fileId Optional file ID of the file that failed to OCR. If given, user can jump to the file via link. */ - public function createErrorNotification(?string $userId, string $message, int $fileId = null); + public function createErrorNotification(?string $userId, string $message, ?int $fileId = null); } diff --git a/lib/Service/IOcrService.php b/lib/Service/IOcrService.php index a8c536b..4e8bfe5 100644 --- a/lib/Service/IOcrService.php +++ b/lib/Service/IOcrService.php @@ -32,9 +32,9 @@ interface IOcrService { /** * Processes OCR on the given file. Creates a new file version and emits appropriate events. * - * @param int $fileId The id if the file to be processed - * @param string $uid The id of the user who has access to this file - * @param WorkflowSettings $settings The settings to be used for processing + * @param int $fileId The id if the file to be processed + * @param string $uid The id of the user who has access to this file + * @param WorkflowSettings $settings The settings to be used for processing * * @throws \OCA\WorkflowOcr\Exception\OcrNotPossibleException * @throws \OCA\WorkflowOcr\Exception\OcrProcessorNotFoundException diff --git a/lib/Service/NotificationService.php b/lib/Service/NotificationService.php index 0fdc880..46ce83c 100644 --- a/lib/Service/NotificationService.php +++ b/lib/Service/NotificationService.php @@ -44,7 +44,7 @@ public function __construct(IManager $notificationManager) { /** * @return void */ - public function createErrorNotification(?string $userId, string $message, int $fileId = null) { + public function createErrorNotification(?string $userId, string $message, ?int $fileId = null) { // We don't create unbound notifications if (!$userId) { return; diff --git a/lib/Service/OcrService.php b/lib/Service/OcrService.php index e2ce5db..ca31244 100644 --- a/lib/Service/OcrService.php +++ b/lib/Service/OcrService.php @@ -115,7 +115,7 @@ public function runOcrProcess(int $fileId, string $uid, WorkflowSettings $settin try { $result = $ocrProcessor->ocrFile($file, $settings, $globalSettings); - } catch(OcrResultEmptyException $ex) { + } catch (OcrResultEmptyException $ex) { // #232: it's okay to have an empty result if the file was skipped due to OCR mode if ($settings->getOcrMode() === WorkflowSettings::OCR_MODE_SKIP_FILE) { $this->logger->debug('Skipping empty OCR result for file with id {fileId} because OCR mode is set to \'skip file\'', ['fileId' => $fileId]); @@ -135,7 +135,7 @@ public function runOcrProcess(int $fileId, string $uid, WorkflowSettings $settin if ($result->getRecognizedText() !== '') { $newFilePath = $originalFileExtension === $newFileExtension ? $filePath : - $filePath . ".pdf"; + $filePath . '.pdf'; $this->createNewFileVersion($newFilePath, $fileContent, $fileId); } @@ -204,9 +204,9 @@ private function processTagsAfterSuccessfulOcr(File $file, WorkflowSettings $set } /** - * @param string $filePath The filepath of the file to write - * @param string $ocrContent The new filecontent (which was OCR processed) - * @param int $fileId The id of the file to write. Used for locking. + * @param string $filePath The filepath of the file to write + * @param string $ocrContent The new filecontent (which was OCR processed) + * @param int $fileId The id of the file to write. Used for locking. */ private function createNewFileVersion(string $filePath, string $ocrContent, int $fileId) : void { $dirPath = dirname($filePath); diff --git a/lib/Wrapper/ICommand.php b/lib/Wrapper/ICommand.php index 833fe0a..4465331 100644 --- a/lib/Wrapper/ICommand.php +++ b/lib/Wrapper/ICommand.php @@ -29,19 +29,19 @@ interface ICommand { /** * @param string $command the command or full command string to execute, - * like 'gzip' or 'gzip -d'. You can still call addArg() to add more - * arguments to the command. If $escapeCommand was set to true, the command - * gets escaped with escapeshellcmd(). + * like 'gzip' or 'gzip -d'. You can still call addArg() to add more + * arguments to the command. If $escapeCommand was set to true, the command + * gets escaped with escapeshellcmd(). * @return ICommand for method chaining */ public function setCommand(string $command) : ICommand; /** * @param string $stdIn If set, the string will be piped to the - * command via standard input. This enables the same functionality as - * piping on the command line. It can also be a resource like a file - * handle or a stream in which case its content will be piped into the - * command like an input redirection. + * command via standard input. This enables the same functionality as + * piping on the command line. It can also be a resource like a file + * handle or a stream in which case its content will be piped into the + * command like an input redirection. * @return ICommand for method chaining */ public function setStdIn(string $stdIn) : ICommand; @@ -50,7 +50,7 @@ public function setStdIn(string $stdIn) : ICommand; * Execute the command * * @return bool whether execution was successful. If `false`, error details - * can be obtained from getError(), getStdErr() and getExitCode(). + * can be obtained from getError(), getStdErr() and getExitCode(). */ public function execute() : bool; @@ -63,7 +63,7 @@ public function getOutput(bool $trim = true) : string; /** * @param bool $trim whether to `trim()` the return value. The default is `true`. * @return string the error message, either stderr or an internal message. - * Empty string if none. + * Empty string if none. */ public function getError(bool $trim = true) : string; diff --git a/lib/Wrapper/ViewWrapper.php b/lib/Wrapper/ViewWrapper.php index 0edb683..bc2912f 100644 --- a/lib/Wrapper/ViewWrapper.php +++ b/lib/Wrapper/ViewWrapper.php @@ -26,7 +26,7 @@ namespace OCA\WorkflowOcr\Wrapper; -use \OC\Files\View; +use OC\Files\View; class ViewWrapper implements IView { /** @var View */ diff --git a/tests/Integration/Composer/AutoloaderTest.php b/tests/Integration/Composer/AutoloaderTest.php index 50002d2..1f18123 100644 --- a/tests/Integration/Composer/AutoloaderTest.php +++ b/tests/Integration/Composer/AutoloaderTest.php @@ -46,7 +46,7 @@ protected function tearDown(): void { public function testLoadDynamicClass(): void { $rand = Server::get(ISecureRandom::class); $className = ucfirst($rand->generate(10, ISecureRandom::CHAR_LOWER)); - $namespace = "OCA\\WorkflowOcr"; + $namespace = 'OCA\\WorkflowOcr'; file_put_contents(self::getClassPath($className), << 'myvalue'], "Undefined array key"] + [null, 'Argument is no array'], + [['mykey' => 'myvalue'], 'Undefined array key'] ]; return $arr; } diff --git a/tests/Unit/OcrProcessors/PdfOcrProcessorTest.php b/tests/Unit/OcrProcessors/PdfOcrProcessorTest.php index d372656..2068940 100644 --- a/tests/Unit/OcrProcessors/PdfOcrProcessorTest.php +++ b/tests/Unit/OcrProcessors/PdfOcrProcessorTest.php @@ -36,8 +36,8 @@ use Psr\Log\LoggerInterface; class PdfOcrProcessorTest extends TestCase { - private const FILE_CONTENT_BEFORE = "someFileContentBefore"; - private const FILE_CONTENT_AFTER = "somePDFFileContentAfter"; + private const FILE_CONTENT_BEFORE = 'someFileContentBefore'; + private const FILE_CONTENT_AFTER = 'somePDFFileContentAfter'; private $fileBeforeMimeType; private $ocrMyPdfOutput; @@ -165,7 +165,7 @@ public function testThrowsErrorIfOcrFileWasEmpty() { $this->command->expects($this->once()) ->method('getStdErr') ->willReturn('stdErr'); - $this->ocrMyPdfOutput = ""; + $this->ocrMyPdfOutput = ''; $this->fileBefore->expects($this->once()) ->method('getPath') ->willReturn('/admin/files/somefile.pdf'); diff --git a/tests/Unit/OperationTest.php b/tests/Unit/OperationTest.php index bc0dbb8..3737132 100644 --- a/tests/Unit/OperationTest.php +++ b/tests/Unit/OperationTest.php @@ -61,7 +61,7 @@ class OperationTest extends TestCase { /** @var IRootFolder|MockObject */ private $rootFolder; - private const SETTINGS = "{\"languages\":[\"de\"],\"removeBackground\":true}"; + private const SETTINGS = '{"languages":["de"],"removeBackground":true}'; protected function setUp(): void { parent::setUp(); @@ -209,7 +209,7 @@ public function testDoesNothingOnFileWithoutOwner() { } public function testAddWithCorrectFilePathAndUser() { - $filePath = "/admin/files/path/to/file.pdf"; + $filePath = '/admin/files/path/to/file.pdf'; $fileId = 42; $uid = 'admin'; $this->jobList->expects($this->once()) @@ -435,9 +435,9 @@ public function testFileAddedToQueueOnTagAssignedEvent() { public function dataProvider_InvalidFilePaths() { $arr = [ - ["/user/nofiles/somefile.pdf"], - ["/invalidmount/data/somefile.pdf"], - ["/some/somefile.txt"] + ['/user/nofiles/somefile.pdf'], + ['/invalidmount/data/somefile.pdf'], + ['/some/somefile.txt'] ]; return $arr; } diff --git a/tests/Unit/Service/NotificationServiceTest.php b/tests/Unit/Service/NotificationServiceTest.php index 1f5f839..4c3f1ce 100644 --- a/tests/Unit/Service/NotificationServiceTest.php +++ b/tests/Unit/Service/NotificationServiceTest.php @@ -76,7 +76,7 @@ public function testCreateErrorNotificationWithFileId() { ->method('notify') ->with($this->notification); - $this->service->createErrorNotification("user1", "testnotification", 123); + $this->service->createErrorNotification('user1', 'testnotification', 123); } public function testCreateErrorNotificationWithoutFileId() { @@ -105,7 +105,7 @@ public function testCreateErrorNotificationWithoutFileId() { ->method('notify') ->with($this->notification); - $this->service->createErrorNotification("user1", "testnotification"); + $this->service->createErrorNotification('user1', 'testnotification'); } public function testCreateErrorNotificationDoesNothingIfUserIdIsNotSet() { @@ -124,6 +124,6 @@ public function testCreateErrorNotificationDoesNothingIfUserIdIsNotSet() { $this->notification->expects($this->never()) ->method('setObject'); - $this->service->createErrorNotification(null, "testnotification", 123); + $this->service->createErrorNotification(null, 'testnotification', 123); } } diff --git a/tests/Unit/Service/OcrBackendInfoServiceTest.php b/tests/Unit/Service/OcrBackendInfoServiceTest.php index 96556e6..fcf6a44 100644 --- a/tests/Unit/Service/OcrBackendInfoServiceTest.php +++ b/tests/Unit/Service/OcrBackendInfoServiceTest.php @@ -121,8 +121,8 @@ public function testGetInstalledLanguagesLogsWarningIfCommandStrErrOrErrOutputWa public function testGetInstalledLanguagesThrowsIfCliDidNotProduceAnyOutput() : void { $this->command->expects($this->once()) - ->method('setCommand') - ->with('tesseract --list-langs'); + ->method('setCommand') + ->with('tesseract --list-langs'); $this->command->expects($this->once()) ->method('execute') ->willReturn(true); @@ -142,7 +142,7 @@ public function testGetInstalledLanguagesThrowsIfCliDidNotProduceAnyOutput() : v public function dataProviderInstalledLangs() { return [ - ["List of available languages (4):\neng\ndeu\nosd\nchi", ["eng","deu","chi"]] + ["List of available languages (4):\neng\ndeu\nosd\nchi", ['eng','deu','chi']] ]; } diff --git a/tests/Unit/Service/OcrServiceTest.php b/tests/Unit/Service/OcrServiceTest.php index 3c218ac..6c6d87b 100644 --- a/tests/Unit/Service/OcrServiceTest.php +++ b/tests/Unit/Service/OcrServiceTest.php @@ -57,7 +57,7 @@ class OcrServiceTest extends TestCase { private $ocrProcessorFactory; /** @var IOcrProcessor|MockObject */ private $ocrProcessor; - /** @var IGlobalSettingsService|MockObject*/ + /** @var IGlobalSettingsService|MockObject */ private $globalSettingsService; /** @var ISystemTagObjectMapper|MockObject */ private $systemTagObjectMapper; @@ -170,7 +170,7 @@ public function testCallsOcrProcessor_WithCorrectArguments() { public function testCallsSystemTagObjectManager_WithCorrectArguments() { $mime = 'application/pdf'; $content = 'someFileContent'; - $settings = new WorkflowSettings("{\"tagsToRemoveAfterOcr\": [1,2], \"tagsToAddAfterOcr\": [3,4]}"); + $settings = new WorkflowSettings('{"tagsToRemoveAfterOcr": [1,2], "tagsToAddAfterOcr": [3,4]}'); $globalSettings = new GlobalSettings(); $this->fileInput->method('getMimeType') @@ -193,13 +193,13 @@ public function testCallsSystemTagObjectManager_WithCorrectArguments() { // unassignTags(string $objId, string $objectType, $tagIds); $this->systemTagObjectMapper->expects($this->exactly(2)) ->method('unassignTags') - ->withConsecutive(["42", "files", 1], ["42", "files", 2]); + ->withConsecutive(['42', 'files', 1], ['42', 'files', 2]); // Check call for function: // assignTags(string $objId, string $objectType, $tagIds); $this->systemTagObjectMapper->expects($this->exactly(2)) ->method('assignTags') - ->withConsecutive(["42", "files", 3], ["42", "files", 4]); + ->withConsecutive(['42', 'files', 3], ['42', 'files', 4]); $this->ocrService->runOcrProcess(42, 'usr', $settings); } @@ -207,7 +207,7 @@ public function testCallsSystemTagObjectManager_WithCorrectArguments() { public function testCatchesTagNotFoundException() { $mime = 'application/pdf'; $content = 'someFileContent'; - $settings = new WorkflowSettings("{\"tagsToRemoveAfterOcr\": [1], \"tagsToAddAfterOcr\": [2]}"); + $settings = new WorkflowSettings('{"tagsToRemoveAfterOcr": [1], "tagsToAddAfterOcr": [2]}'); $globalSettings = new GlobalSettings(); $this->fileInput->method('getMimeType') @@ -311,7 +311,7 @@ public function testCreatesNewFileVersionAndEmitsTextRecognizedEvent(string $ori $mimeType = 'application/pdf'; $content = 'someFileContent'; $ocrContent = 'someOcrProcessedFile'; - $ocrResult = new OcrProcessorResult($ocrContent, "pdf", $ocrContent); // Extend this cases if we add new OCR processors + $ocrResult = new OcrProcessorResult($ocrContent, 'pdf', $ocrContent); // Extend this cases if we add new OCR processors $originalFileMock = $this->createValidFileMock($mimeType, $content, $rootFolderPath, $originalFilename); $this->rootFolderGetById42ReturnValue = [$originalFileMock]; @@ -398,7 +398,7 @@ public function testCallsProcessingFileAccessor() { $mimeType = 'application/pdf'; $content = 'someFileContent'; $ocrContent = 'someOcrProcessedFile'; - $ocrResult = new OcrProcessorResult($ocrContent, "pdf", $ocrContent); // Extend this cases if we add new OCR processors + $ocrResult = new OcrProcessorResult($ocrContent, 'pdf', $ocrContent); // Extend this cases if we add new OCR processors $this->rootFolderGetById42ReturnValue = [$this->createValidFileMock($mimeType, $content)]; @@ -441,7 +441,7 @@ public function testDoesNotCreateNewFileVersionIfOcrContentWasEmpty() { $mimeType = 'application/pdf'; $content = 'someFileContent'; $ocrContent = ''; - $ocrResult = new OcrProcessorResult($ocrContent, "pdf", $ocrContent); + $ocrResult = new OcrProcessorResult($ocrContent, 'pdf', $ocrContent); $fileId = 42; $this->rootFolder->expects($this->once()) diff --git a/tests/Unit/Settings/GlobalSettingsTest.php b/tests/Unit/Settings/GlobalSettingsTest.php index 9a2a0d6..0c09554 100644 --- a/tests/Unit/Settings/GlobalSettingsTest.php +++ b/tests/Unit/Settings/GlobalSettingsTest.php @@ -46,12 +46,12 @@ public function testGetPriority() { public function testGetForm() { $templateResponse = $this->adminSettings->getForm(); - $templates = Chain::create(scandir("./templates")) + $templates = Chain::create(scandir('./templates')) ->filter(function ($file) { return is_file("./templates/$file"); }); $this->assertEquals(1, count($templates->array)); - $templateFileName = "./templates/" . $templates->first(); + $templateFileName = './templates/' . $templates->first(); $templateNameWithoutExtension = pathinfo($templateFileName)['filename']; $this->assertEquals($templateNameWithoutExtension, $templateResponse->getTemplateName()); } diff --git a/tests/Unit/composer/autoloadTest.php b/tests/Unit/composer/autoloadTest.php index 539ea73..9c33793 100644 --- a/tests/Unit/composer/autoloadTest.php +++ b/tests/Unit/composer/autoloadTest.php @@ -32,7 +32,7 @@ class composerTest extends TestCase { public function testAutoloaderFileCanBeLoaded() { $app = new App(Application::APP_NAME); $container = $app->getContainer(); - /**@var IAppManager */ + /** @var IAppManager */ $appManager = $container->get(IAppManager::class); $path = $appManager->getAppPath(Application::APP_NAME); $autoloaderFile = $path . '/composer/autoload.php';