Skip to content

Commit

Permalink
Merge pull request #5491 from BookStackApp/deprecations
Browse files Browse the repository at this point in the history
Addressing PHP 8.4 Deprecations
  • Loading branch information
ssddanbrown authored Feb 23, 2025
2 parents 0e343c4 + 5050719 commit d2542d6
Show file tree
Hide file tree
Showing 17 changed files with 53 additions and 40 deletions.
8 changes: 4 additions & 4 deletions app/Access/Ldap.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public function setVersion($ldapConnection, int $version): bool
*
* @return \LDAP\Result|array|false
*/
public function search($ldapConnection, string $baseDn, string $filter, array $attributes = null)
public function search($ldapConnection, string $baseDn, string $filter, array $attributes = [])
{
return ldap_search($ldapConnection, $baseDn, $filter, $attributes);
}
Expand All @@ -66,7 +66,7 @@ public function search($ldapConnection, string $baseDn, string $filter, array $a
*
* @return \LDAP\Result|array|false
*/
public function read($ldapConnection, string $baseDn, string $filter, array $attributes = null)
public function read($ldapConnection, string $baseDn, string $filter, array $attributes = [])
{
return ldap_read($ldapConnection, $baseDn, $filter, $attributes);
}
Expand All @@ -87,7 +87,7 @@ public function getEntries($ldapConnection, $ldapSearchResult): array|false
*
* @param resource|\LDAP\Connection $ldapConnection
*/
public function searchAndGetEntries($ldapConnection, string $baseDn, string $filter, array $attributes = null): array|false
public function searchAndGetEntries($ldapConnection, string $baseDn, string $filter, array $attributes = []): array|false
{
$search = $this->search($ldapConnection, $baseDn, $filter, $attributes);

Expand All @@ -99,7 +99,7 @@ public function searchAndGetEntries($ldapConnection, string $baseDn, string $fil
*
* @param resource|\LDAP\Connection $ldapConnection
*/
public function bind($ldapConnection, string $bindRdn = null, string $bindPassword = null): bool
public function bind($ldapConnection, ?string $bindRdn = null, ?string $bindPassword = null): bool
{
return ldap_bind($ldapConnection, $bindRdn, $bindPassword);
}
Expand Down
2 changes: 1 addition & 1 deletion app/Access/SocialDriverManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public function addSocialDriver(
string $driverName,
array $config,
string $socialiteHandler,
callable $configureForRedirect = null
?callable $configureForRedirect = null
) {
$this->validDrivers[] = $driverName;
config()->set('services.' . $driverName, $config);
Expand Down
6 changes: 3 additions & 3 deletions app/App/helpers.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ function user(): User
* Check if the current user has a permission. If an ownable element
* is passed in the jointPermissions are checked against that particular item.
*/
function userCan(string $permission, Model $ownable = null): bool
function userCan(string $permission, ?Model $ownable = null): bool
{
if ($ownable === null) {
if (is_null($ownable)) {
return user()->can($permission);
}

Expand All @@ -71,7 +71,7 @@ function userCanOnAny(string $action, string $entityClass = ''): bool
*
* @return mixed|SettingService
*/
function setting(string $key = null, $default = null)
function setting(?string $key = null, mixed $default = null): mixed
{
$settingService = app()->make(SettingService::class);

Expand Down
1 change: 1 addition & 0 deletions app/Config/exports.php
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@
* @var array
*/
'allowed_protocols' => [
"data://" => ["rules" => []],
'file://' => ['rules' => []],
'http://' => ['rules' => []],
'https://' => ['rules' => []],
Expand Down
4 changes: 2 additions & 2 deletions app/Entities/Controllers/BookController.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public function index(Request $request)
/**
* Show the form for creating a new book.
*/
public function create(string $shelfSlug = null)
public function create(?string $shelfSlug = null)
{
$this->checkPermission('book-create-all');

Expand All @@ -93,7 +93,7 @@ public function create(string $shelfSlug = null)
* @throws ImageUploadException
* @throws ValidationException
*/
public function store(Request $request, string $shelfSlug = null)
public function store(Request $request, ?string $shelfSlug = null)
{
$this->checkPermission('book-create-all');
$validated = $this->validate($request, [
Expand Down
4 changes: 2 additions & 2 deletions app/Entities/Controllers/PageController.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public function __construct(
*
* @throws Throwable
*/
public function create(string $bookSlug, string $chapterSlug = null)
public function create(string $bookSlug, ?string $chapterSlug = null)
{
if ($chapterSlug) {
$parent = $this->entityQueries->chapters->findVisibleBySlugsOrFail($bookSlug, $chapterSlug);
Expand Down Expand Up @@ -69,7 +69,7 @@ public function create(string $bookSlug, string $chapterSlug = null)
*
* @throws ValidationException
*/
public function createAsGuest(Request $request, string $bookSlug, string $chapterSlug = null)
public function createAsGuest(Request $request, string $bookSlug, ?string $chapterSlug = null)
{
$this->validate($request, [
'name' => ['required', 'string', 'max:255'],
Expand Down
4 changes: 2 additions & 2 deletions app/Entities/Queries/QueryPopular.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ public function __construct(
) {
}

public function run(int $count, int $page, array $filterModels = null): Collection
public function run(int $count, int $page, array $filterModels): Collection
{
$query = $this->permissions
->restrictEntityRelationQuery(View::query(), 'views', 'viewable_id', 'viewable_type')
->select('*', 'viewable_id', 'viewable_type', DB::raw('SUM(views) as view_count'))
->groupBy('viewable_id', 'viewable_type')
->orderBy('view_count', 'desc');

if ($filterModels) {
if (!empty($filterModels)) {
$query->whereIn('viewable_type', $this->entityProvider->getMorphClasses($filterModels));
}

Expand Down
2 changes: 1 addition & 1 deletion app/Entities/Repos/RevisionRepo.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public function getNewDraftForCurrentUser(Page $page): PageRevision
/**
* Store a new revision in the system for the given page.
*/
public function storeNewForPage(Page $page, string $summary = null): PageRevision
public function storeNewForPage(Page $page, ?string $summary = null): PageRevision
{
$revision = new PageRevision();

Expand Down
2 changes: 1 addition & 1 deletion app/Theming/ThemeService.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public function readThemeActions(): void
/**
* @see SocialDriverManager::addSocialDriver
*/
public function addSocialDriver(string $driverName, array $config, string $socialiteHandler, callable $configureForRedirect = null): void
public function addSocialDriver(string $driverName, array $config, string $socialiteHandler, ?callable $configureForRedirect = null): void
{
$driverManager = app()->make(SocialDriverManager::class);
$driverManager->addSocialDriver($driverName, $config, $socialiteHandler, $configureForRedirect);
Expand Down
20 changes: 13 additions & 7 deletions app/Uploads/ImageRepo.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ public function getPaginatedByType(
string $type,
int $page = 0,
int $pageSize = 24,
int $uploadedTo = null,
string $search = null,
callable $whereClause = null
?int $uploadedTo = null,
?string $search = null,
?callable $whereClause = null
): array {
$imageQuery = Image::query()->where('type', '=', strtolower($type));

Expand Down Expand Up @@ -91,7 +91,7 @@ public function getEntityFiltered(
$parentFilter = function (Builder $query) use ($filterType, $contextPage) {
if ($filterType === 'page') {
$query->where('uploaded_to', '=', $contextPage->id);
} elseif ($filterType === 'book') {
} else if ($filterType === 'book') {
$validPageIds = $contextPage->book->pages()
->scopes('visible')
->pluck('id')
Expand All @@ -109,8 +109,14 @@ public function getEntityFiltered(
*
* @throws ImageUploadException
*/
public function saveNew(UploadedFile $uploadFile, string $type, int $uploadedTo = 0, int $resizeWidth = null, int $resizeHeight = null, bool $keepRatio = true): Image
{
public function saveNew(
UploadedFile $uploadFile,
string $type,
int $uploadedTo = 0,
?int $resizeWidth = null,
?int $resizeHeight = null,
bool $keepRatio = true
): Image {
$image = $this->imageService->saveNewFromUpload($uploadFile, $type, $uploadedTo, $resizeWidth, $resizeHeight, $keepRatio);

if ($type !== 'system') {
Expand Down Expand Up @@ -184,7 +190,7 @@ public function updateImageFile(Image $image, UploadedFile $file): void
*
* @throws Exception
*/
public function destroyImage(Image $image = null): void
public function destroyImage(?Image $image = null): void
{
if ($image) {
$this->imageService->destroy($image);
Expand Down
4 changes: 2 additions & 2 deletions app/Uploads/ImageService.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ public function saveNewFromUpload(
UploadedFile $uploadedFile,
string $type,
int $uploadedTo = 0,
int $resizeWidth = null,
int $resizeHeight = null,
?int $resizeWidth = null,
?int $resizeHeight = null,
bool $keepRatio = true,
string $imageName = '',
): Image {
Expand Down
4 changes: 2 additions & 2 deletions app/Users/Controllers/UserApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public function __construct(UserRepo $userRepo)
});
}

protected function rules(int $userId = null): array
protected function rules(?int $userId = null): array
{
return [
'create' => [
Expand All @@ -54,7 +54,7 @@ protected function rules(int $userId = null): array
'string',
'email',
'min:2',
(new Unique('users', 'email'))->ignore($userId ?? null),
(new Unique('users', 'email'))->ignore($userId),
],
'external_auth_id' => ['string'],
'language' => ['string', 'max:15', 'alpha_dash'],
Expand Down
7 changes: 6 additions & 1 deletion app/Util/SsrUrlValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,16 @@

use BookStack\Exceptions\HttpFetchException;

/**
* Validate the host we're connecting to when making a server-side-request.
* Will use the given hosts config if given during construction otherwise
* will look to the app configured config.
*/
class SsrUrlValidator
{
protected string $config;

public function __construct(string $config = null)
public function __construct(?string $config = null)
{
$this->config = $config ?? config('app.ssr_hosts') ?? '';
}
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"ext-xml": "*",
"ext-zip": "*",
"bacon/bacon-qr-code": "^3.0",
"dompdf/dompdf": "^3.0",
"dompdf/dompdf": "^3.1",
"guzzlehttp/guzzle": "^7.4",
"intervention/image": "^3.5",
"knplabs/knp-snappy": "^1.5",
Expand Down
12 changes: 6 additions & 6 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dev/docs/logical-theme-system.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ This method allows you to register a custom social authentication driver within
- string $driverName
- array $config
- string $socialiteHandler
- callable|null $configureForRedirect = null

**Example**

Expand Down
10 changes: 5 additions & 5 deletions tests/Entity/PageEditorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -191,20 +191,20 @@ public function test_editor_type_switch_options_show()
{
$resp = $this->asAdmin()->get($this->page->getUrl('/edit'));
$editLink = $this->page->getUrl('/edit') . '?editor=';
$this->withHtml($resp)->assertElementContains("a[href=\"${editLink}markdown-clean\"]", '(Clean Content)');
$this->withHtml($resp)->assertElementContains("a[href=\"${editLink}markdown-stable\"]", '(Stable Content)');
$this->withHtml($resp)->assertElementContains("a[href=\"${editLink}wysiwyg2024\"]", '(In Alpha Testing)');
$this->withHtml($resp)->assertElementContains("a[href=\"{$editLink}markdown-clean\"]", '(Clean Content)');
$this->withHtml($resp)->assertElementContains("a[href=\"{$editLink}markdown-stable\"]", '(Stable Content)');
$this->withHtml($resp)->assertElementContains("a[href=\"{$editLink}wysiwyg2024\"]", '(In Alpha Testing)');

$resp = $this->asAdmin()->get($this->page->getUrl('/edit?editor=markdown-stable'));
$editLink = $this->page->getUrl('/edit') . '?editor=';
$this->withHtml($resp)->assertElementContains("a[href=\"${editLink}wysiwyg\"]", 'Switch to WYSIWYG Editor');
$this->withHtml($resp)->assertElementContains("a[href=\"{$editLink}wysiwyg\"]", 'Switch to WYSIWYG Editor');
}

public function test_editor_type_switch_options_dont_show_if_without_change_editor_permissions()
{
$resp = $this->asEditor()->get($this->page->getUrl('/edit'));
$editLink = $this->page->getUrl('/edit') . '?editor=';
$this->withHtml($resp)->assertElementNotExists("a[href*=\"${editLink}\"]");
$this->withHtml($resp)->assertElementNotExists("a[href*=\"{$editLink}\"]");
}

public function test_page_editor_type_switch_does_not_work_without_change_editor_permissions()
Expand Down

0 comments on commit d2542d6

Please sign in to comment.