Browse Source

[TOOLS] Fix all errors found by PHPStan level 1

remotes/upstream/experimental
Hugo Sales 9 months ago
parent
commit
add8f4a52f
Signed by: someonewithpc <hugo@hsal.es> GPG Key ID: 7D0C7EAFC9D835A0
19 changed files with 83 additions and 54 deletions
  1. +5
    -5
      components/Avatar/Controller/Avatar.php
  2. +3
    -0
      config/bootstrap.php
  3. +1
    -1
      plugins/ActivityStreamsTwo/Util/Response/TypeResponse.php
  4. +2
    -0
      plugins/ActivityStreamsTwo/Util/Type/AbstractObject.php
  5. +24
    -20
      plugins/Favourite/Favourite.php
  6. +1
    -1
      plugins/Repeat/Repeat.php
  7. +1
    -0
      src/Controller/AdminPanel.php
  8. +1
    -6
      src/Controller/Note.php
  9. +2
    -2
      src/Core/Cache.php
  10. +5
    -0
      src/Core/Controller.php
  11. +4
    -1
      src/Core/DB/DB.php
  12. +13
    -1
      src/Core/HTTPClient.php
  13. +1
    -1
      src/Core/I18n/I18n.php
  14. +3
    -0
      src/Core/Log.php
  15. +4
    -11
      src/Core/ModuleManager.php
  16. +5
    -2
      src/Core/Router/Router.php
  17. +4
    -2
      src/Core/Security.php
  18. +2
    -0
      src/Util/Bitmap.php
  19. +2
    -1
      tests/Entity/AttachmentTest.php

+ 5
- 5
components/Avatar/Controller/Avatar.php View File

@@ -86,6 +86,7 @@ class Avatar extends Controller
$form->addError(new FormError(_m('No avatar set, so cannot delete')));
}
} else {
$attachment = null;
if (isset($data['hidden'])) {
// Cropped client side
$matches = [];
@@ -95,26 +96,25 @@ class Avatar extends Controller
$data_user = base64_decode($data_user);
$tempfile = new TemporaryFile(['prefix' => 'gs-avatar']);
$tempfile->write($data_user);
$attachment = GSFile::sanitizeAndStoreFileAsAttachment($tempfile);
} else {
Log::info('Avatar upload got an invalid encoding, something\'s fishy and/or wrong');
}
}
} elseif (isset($data['avatar'])) {
// Cropping failed (e.g. disabled js), use file as uploaded
$file = $data['avatar'];
$file = $data['avatar'];
$attachment = GSFile::sanitizeAndStoreFileAsAttachment($file);
} else {
throw new ClientException('Invalid form');
}
$attachment = GSFile::sanitizeAndStoreFileAsAttachment(
$file
);
// Delete current avatar if there's one
$avatar = DB::find('avatar', ['gsactor_id' => $gsactor_id]);
$avatar?->delete();
DB::persist($attachment);
// Can only get new id after inserting
DB::flush();
DB::persist(AvatarEntity::create(['gsactor_id' => $gsactor_id, 'attachment_id' => $attachment->getId(), 'filename' => $file->getClientOriginalName()]));
DB::persist(AvatarEntity::create(['gsactor_id' => $gsactor_id, 'attachment_id' => $attachment->getId()]));
DB::flush();
Event::handle('AvatarUpdate', [$user->getId()]);
}


+ 3
- 0
config/bootstrap.php View File

@@ -29,6 +29,7 @@ define('PUBLICDIR', INSTALLDIR . '/public');
define('GNUSOCIAL_ENGINE_NAME', 'GNU social');
// MERGE Change to https://gnu.io/social/
define('GNUSOCIAL_PROJECT_URL', 'https://gnusocial.rocks/');
define('GNUSOCIAL_ENGINE_URL', GNUSOCIAL_PROJECT_URL);
// MERGE Change to https://git.gnu.io/gnu/gnu-social
define('GNUSOCIAL_REPOSITORY_URL', 'https://code.undefinedhackers.net/GNUsocial/gnu-social');
// Current base version, major.minor.patch
@@ -39,6 +40,8 @@ define('GNUSOCIAL_VERSION', GNUSOCIAL_BASE_VERSION . '-' . GNUSOCIAL_LIFECYCLE);
define('GNUSOCIAL_CODENAME', 'Big bang');
define('URL_REGEX_DOMAIN_NAME', '(?:(?!-)[A-Za-z0-9\-]{1,63}(?<!-)\.)+[A-Za-z]{2,10}');

define('MODULE_CACHE_FILE', INSTALLDIR . '/var/cache/module_manager.php');

// Work internally in UTC
date_default_timezone_set('UTC');



+ 1
- 1
plugins/ActivityStreamsTwo/Util/Response/TypeResponse.php View File

@@ -12,7 +12,7 @@ class TypeResponse extends JsonResponse
*
* @return JsonResponse
*/
public function __construct($data = null, int $status = 202, array $headers = [], bool $json = false)
public function __construct($data = null, int $status = 202)
{
parent::__construct(
data: !is_null($data) ? $data->toJson() : null,


+ 2
- 0
plugins/ActivityStreamsTwo/Util/Type/AbstractObject.php View File

@@ -31,6 +31,8 @@ abstract class AbstractObject
*/
private array $_props = [];

protected string $type = 'AbstractObject';

/**
* Standard setter method
* - Perform content validation if a validator exists


+ 24
- 20
plugins/Favourite/Favourite.php View File

@@ -77,28 +77,32 @@ class Favourite extends NoteHandlerPlugin

// Form handler
$ret = self::noteActionHandle(
$request, $form_fav, $note, "favourite-{$note->getId()}", /**
* Called from form handler
*
* @param $note Note to be favourited
* @param $data Form input
*
* @throws RedirectException Always thrown in order to prevent accidental form re-submit from browser
*/ function ($note, $data) use ($opts, $request) {
$favourite_note = DB::find('favourite', $opts);
if ($data["favourite-{$note->getId()}"] === '0' && $favourite_note === null) {
DB::persist(Entity\Favourite::create($opts));
DB::flush();
} else if ($data["favourite-{$note->getId()}"] === '1' && $favourite_note !== null) {
DB::remove($favourite_note);
DB::flush();
}
$request, $form_fav, $note, "favourite-{$note->getId()}",
/**
* Called from form handler
*
* @param $note Note to be favourited
* @param $data Form input
*
* @throws RedirectException Always thrown in order to prevent accidental form re-submit from browser
*/
function ($note, $data) use ($opts) {
$favourite_note = DB::find('favourite', $opts);
if ($data["favourite-{$note->getId()}"] === '0' && $favourite_note === null) {
DB::persist(Entity\Favourite::create($opts));
DB::flush();
} else {
if ($data["favourite-{$note->getId()}"] === '1' && $favourite_note !== null) {
DB::remove($favourite_note);
DB::flush();
}
}

// Prevent accidental refreshes from resubmitting the form
throw new RedirectException();
// Prevent accidental refreshes from resubmitting the form
throw new RedirectException();

return Event::stop;
});
return Event::stop;
});

if ($ret !== null) {
return $ret;


+ 1
- 1
plugins/Repeat/Repeat.php View File

@@ -61,7 +61,7 @@ class Repeat extends NoteHandlerPlugin

// Handle form
$ret = self::noteActionHandle(
$request, $form_repeat, $note, "repeat-{$note->getId()}", function ($note, $data, $user) use ($opts) {
$request, $form_repeat, $note, "repeat-{$note->getId()}", function ($note, $data, $user) {
if ($data["repeat-{$note->getId()}"] === '0') {
DB::persist(Note::create([
'gsactor_id' => $user->getId(),


+ 1
- 0
src/Controller/AdminPanel.php View File

@@ -79,6 +79,7 @@ class AdminPanel extends Controller
// @codeCoverageIgnoreEnd
}

$value = null;
foreach ([
'int' => FILTER_VALIDATE_INT,
'bool' => FILTER_VALIDATE_BOOL,


+ 1
- 6
src/Controller/Note.php View File

@@ -47,11 +47,6 @@ class Note extends Controller
*/
public function note_show(Request $request, int $id)
{
return $this->note($id, function ($note) use ($id) {
return [
'_template' => 'note/view.html.twig',
'note' => $note,
];
});
return $this->note($id, fn ($note) => ['_template' => 'note/view.html.twig', 'note' => $note]);
}
}

+ 2
- 2
src/Core/Cache.php View File

@@ -199,7 +199,7 @@ abstract class Cache
->lTrim($key, -$max_count ?? 0, -1)
->exec();
} else {
self::set($key, $value, $pool, $beta);
self::set($key, $value, $pool);
}
}

@@ -223,7 +223,7 @@ abstract class Cache
$count = count($res);
$res = array_slice($res, $count - $max_count, $count); // Trim the older values
}
self::set($key, $res, $pool, $beta);
self::set($key, $res, $pool);
}
}



+ 5
- 0
src/Core/Controller.php View File

@@ -46,6 +46,11 @@ use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
* @method int int(string $param)
* @method bool bool(string $param)
* @method string string(string $param)
*/
class Controller extends AbstractController implements EventSubscriberInterface
{
private array $vars = [];


+ 4
- 1
src/Core/DB/DB.php View File

@@ -42,7 +42,10 @@ use Doctrine\ORM\Query;
use Doctrine\ORM\Query\ResultSetMappingBuilder;
use Functional as F;

abstract class DB
/**
* @mixin EntityManagerInterface
*/
class DB
{
private static ?EntityManagerInterface $em;
public static function setManager($m): void


+ 13
- 1
src/Core/HTTPClient.php View File

@@ -20,13 +20,25 @@
namespace App\Core;

use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\ResponseInterface;

/**
* @codeCoverageIgnore
* @mixin HttpClientInterface
*
* @method static ResponseInterface head(string $url, array $options = [])
* @method static ResponseInterface get(string $url, array $options = [])
* @method static ResponseInterface post(string $url, array $options = [])
* @method static ResponseInterface put(string $url, array $options = [])
* @method static ResponseInterface delete(string $url, array $options = [])
* @method static ResponseInterface connect(string $url, array $options = [])
* @method static ResponseInterface options(string $url, array $options = [])
* @method static ResponseInterface trace(string $url, array $options = [])
* @method static ResponseInterface patch(string $url, array $options = [])
*/
abstract class HTTPClient
{
private static ?Httpclientinterface $client;
private static ?HttpClientInterface $client;
public static function setClient(HttpClientInterface $client)
{
self::$client = $client;


+ 1
- 1
src/Core/I18n/I18n.php View File

@@ -316,7 +316,7 @@ function _m(...$args): string
// Get the file where this function was called from, reducing the
// memory and performance impact by not returning the arguments,
// and only 2 frames (this and previous)
$domain = I18n::_mdomain(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)[0]['file'], 2);
$domain = I18n::_mdomain(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[0]['file']);
switch (count($args)) {
case 1:
// Empty parameters, simple message


+ 3
- 0
src/Core/Log.php View File

@@ -34,6 +34,9 @@ namespace App\Core;
use App\Util\Exception\ServerException;
use Psr\Log\LoggerInterface;

/**
* @mixin LoggerInterface
*/
abstract class Log
{
private static ?LoggerInterface $logger;


+ 4
- 11
src/Core/ModuleManager.php View File

@@ -46,13 +46,6 @@ use Symfony\Component\DependencyInjection\Reference;

class ModuleManager
{
public function __construct()
{
if (!defined('CACHE_FILE')) {
define('CACHE_FILE', INSTALLDIR . '/var/cache/module_manager.php');
}
}

protected static $loader;
/** @codeCoverageIgnore */
public static function setLoader($l)
@@ -128,7 +121,7 @@ class ModuleManager

$module_manager->preRegisterEvents();

file_put_contents(CACHE_FILE, "<?php\nreturn " . var_export($module_manager, true) . ';');
file_put_contents(MODULE_CACHE_FILE, "<?php\nreturn " . var_export($module_manager, true) . ';');
}

/**
@@ -150,7 +143,7 @@ class ModuleManager
*/
public function loadModules()
{
if ($_ENV['APP_ENV'] === 'prod' && !file_exists(CACHE_FILE)) {
if ($_ENV['APP_ENV'] === 'prod' && !file_exists(MODULE_CACHE_FILE)) {
// @codeCoverageIgnoreStart
throw new \Exception('The application needs to be compiled before using in production');
// @codeCoverageIgnoreEnd
@@ -158,7 +151,7 @@ class ModuleManager
$rdi = new AppendIterator();
$rdi->append(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(INSTALLDIR . '/components', FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS)));
$rdi->append(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(INSTALLDIR . '/plugins', FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS)));
$time = file_exists(CACHE_FILE) ? filemtime(CACHE_FILE) : 0;
$time = file_exists(MODULE_CACHE_FILE) ? filemtime(MODULE_CACHE_FILE) : 0;

if ($_ENV['APP_ENV'] === 'test' || F\some($rdi, function ($e) use ($time) { return $e->getMTime() > $time; })) {
Log::info('Rebuilding plugin cache at runtime. This means we can\'t update DB definitions');
@@ -166,7 +159,7 @@ class ModuleManager
}
}

$obj = require CACHE_FILE;
$obj = require MODULE_CACHE_FILE;

foreach ($obj->modules as $module) {
$module->loadConfig();


+ 5
- 2
src/Core/Router/Router.php View File

@@ -31,8 +31,11 @@
namespace App\Core\Router;

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\Router as SRouter;
use Symfony\Component\Routing\Router as SymfonyRouter;

/**
* @mixin SymfonyRouter
*/
abstract class Router
{
/**
@@ -58,7 +61,7 @@ abstract class Router
*/
const NETWORK_PATH = UrlGeneratorInterface::NETWORK_PATH;

public static ?SRouter $router = null;
public static ?SymfonyRouter $router = null;
public static ?UrlGeneratorInterface $url_gen = null;

public static function setServices($rtr, $gen): void


+ 4
- 2
src/Core/Security.php View File

@@ -31,17 +31,19 @@
namespace App\Core;

use HtmlSanitizer\SanitizerInterface;
use Symfony\Component\Security\Core\Security as SSecurity;
use Symfony\Component\Security\Core\Security as SymfonySecurity;

/**
* Forwards method calls to either Symfony\Component\Security\Core\Security or
* HtmlSanitizer\SanitizerInterface, calling the first existing method, in that order
*
* @codeCoverageIgnore
* @mixin SymfonySecurity
* @mixin SanitizerInterface
*/
abstract class Security
{
private static ?SSecurity $security;
private static ?SymfonySecurity $security;
private static ?SanitizerInterface $sanitizer;

public static function setHelper($sec, $san): void


+ 2
- 0
src/Util/Bitmap.php View File

@@ -33,6 +33,8 @@ abstract class Bitmap
{
$init = $r;
$class = static::class;
$obj = null;
$vals = null;
if ($instance) {
$obj = new $class;
} else {


+ 2
- 1
tests/Entity/AttachmentTest.php View File

@@ -50,7 +50,8 @@ class AttachmentTest extends GNUsocialTestCase
static::assertTrue($attachment->deleteStorage());
static::assertFalse(file_exists($path));
static::assertNull($attachment->getPath());
DB::flush($attachment);
DB::persist($attachment);
DB::flush();

// Setup the second attachment, re-adding the backed store
$file = new TemporaryFile();


Loading…
Cancel
Save