Compare commits

..

14 commits

Author SHA1 Message Date
rxu
d4190df928
[ticket/17151] Adjust code styling
PHPBB3-17151
2023-10-03 12:48:48 +07:00
rxu
fd05c47aae
[ticket/17151] Extend forms tests
PHPBB3-17151
2023-10-02 15:45:36 +07:00
rxu
da04734a2a
[ticket/17151] Revert radio yes_no/enabled_disabled, fix select "selected"
PHPBB3-17151
2023-10-02 12:18:04 +07:00
rxu
bcc917ecbb
[ticket/17151] Reimplement radio buttons yes_no / enabled_disabled shorthands
PHPBB3-17151
2023-09-24 21:43:54 +07:00
rxu
dddd937ac5
[ticket/17151] Fix avatar ACP options
PHPBB3-17151
2023-09-24 10:40:22 +07:00
rxu
a4438ec9c6
[ticket/17151] Refactor radio buttons output logic
PHPBB3-17151
2023-09-24 09:48:07 +07:00
rxu
ddfd6e7f35
[ticket/17151] Adjust template output formatting
PHPBB3-17151
2023-09-24 01:22:38 +07:00
rxu
1c3faaffff
[ticket/17151] Fix PHP warning on board settings page, add ACP pages test
PHPBB3-17151
2023-09-24 01:22:38 +07:00
rxu
8ef91638f2
[ticket/17151] Improve radio input type handling
- allow more than 2 buttons count
- allow custom buttons order
- allow custom button labels

Implemented by allowing JSON data format, backward compatibility preserved.

PHPBB3-17151
2023-09-24 01:22:37 +07:00
rxu
20151f6532
[ticket/17151] Deduplicate code for building configuration options data
PHPBB3-17151
2023-09-24 01:22:37 +07:00
rxu
275a9b6794
[ticket/17151] Fix tests
PHPBB3-17151
2023-09-24 01:22:36 +07:00
rxu
34d0ccc547
[ticket/17151] Fix registration test error
PHPBB3-17151
2023-09-24 01:22:36 +07:00
rxu
438cc94e85
[ticket/17151] Fix test error
PHPBB3-17151
2023-09-24 01:22:35 +07:00
rxu
9dce82c453
[ticket/17151] Make settings forms use macros
PHPBB3-17151
2023-09-24 01:22:31 +07:00
414 changed files with 17213 additions and 13957 deletions

1
.github/check-js.sh vendored
View file

@ -15,5 +15,4 @@ sudo npm install -g > /dev/null
npm ci > /dev/null
set -x
node_modules/eslint/bin/eslint.js "phpBB/**/*.js"
node_modules/eslint/bin/eslint.js "phpBB/**/*.js.twig"
node_modules/eslint/bin/eslint.js "gulpfile.js"

View file

@ -29,7 +29,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v3
with:
fetch-depth: 100
@ -48,7 +48,7 @@ jobs:
cd ..
- name: Cache Composer dependencies
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
@ -166,7 +166,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v3
- id: database-type
env:
@ -192,7 +192,7 @@ jobs:
cd ..
- name: Cache Composer dependencies
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
@ -217,13 +217,6 @@ jobs:
run: |
.github/setup-ldap.sh
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Setup node dependencies
run: npm ci
- name: Setup SPHINX
run: |
.github/setup-sphinx.sh
@ -303,7 +296,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v3
- id: database-type
env:
@ -329,7 +322,7 @@ jobs:
cd ..
- name: Cache Composer dependencies
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
@ -349,13 +342,6 @@ jobs:
run: |
.github/setup-database.sh $DB $MYISAM
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Setup node dependencies
run: npm ci
- name: Run unit tests
env:
DB: ${{steps.database-type.outputs.db}}
@ -410,7 +396,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v3
- id: database-type
env:
@ -441,7 +427,7 @@ jobs:
cd ..
- name: Cache Composer dependencies
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
@ -461,13 +447,6 @@ jobs:
run: |
.github/setup-database.sh $DB $MYISAM
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Setup node dependencies
run: npm ci
- name: Run unit tests
env:
DB: ${{steps.database-type.outputs.db}}
@ -491,7 +470,7 @@ jobs:
git config --system core.autocrlf false
git config --system core.eol lf
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
@ -509,7 +488,7 @@ jobs:
cd ..
- name: Cache Composer dependencies
uses: actions/cache@v4
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
@ -576,14 +555,6 @@ jobs:
psql -c 'create database phpbb_tests;' -U postgres
Set-MpPreference -ExclusionPath "${env:PGDATA}" # Exclude PGDATA directory from Windows Defender
Set-MpPreference -DisableRealtimeMonitoring $true
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Setup node dependencies
run: npm ci
- name: Run unit tests
if: ${{ matrix.type == 'unit' }}
run: |

View file

@ -3,8 +3,8 @@
<project name="phpBB" description="The phpBB forum software" default="all" basedir="../">
<!-- a few settings for the build -->
<property name="newversion" value="4.0.0-a1-dev" />
<property name="prevversion" value="3.3.12-RC1" />
<property name="olderversions" value="3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.7-pl1, 3.1.8, 3.1.9, 3.1.10, 3.1.11, 3.1.12, 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.2.7, 3.2.8, 3.2.9, 3.2.10, 3.2.11, 3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.3.4, 3.3.5, 3.3.6, 3.3.7, 3.3.8, 3.3.9, 3.3.10, 3.3.11" />
<property name="prevversion" value="3.3.10" />
<property name="olderversions" value="3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.7-pl1, 3.1.8, 3.1.9, 3.1.10, 3.1.11, 3.1.12, 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.2.7, 3.2.8, 3.2.9, 3.2.10, 3.2.11, 3.3.0, 3.3.1, 3.3.2, 3.3.3, 3.3.4, 3.3.5, 3.3.6, 3.3.7, 3.3.8, 3.3.9" />
<!-- no configuration should be needed beyond this point -->
<property name="oldversions" value="${olderversions}, ${prevversion}" />

Binary file not shown.

Binary file not shown.

View file

@ -34,12 +34,6 @@ then
ticket_id=$(sed -E 's/(ticket\/)(security\/)?([0-9]+)(.+$)?/\3/gm;t;d' <<< "$branch");
branch_title=$(sed -E 's/(ticket\/)(security\/)?([0-9]+)(.+$)?/\1\2\3/gm;t;d' <<< "$branch");
# Fall back to branch name if no ticket ID
if [ -z "$branch_title" ];
then
branch_title="$branch";
fi
if [ "security/" = "$(sed -E 's/(ticket\/)(security\/)?([0-9]+)(.+$)?/\2/gm;t;d' <<< "$branch")" ];
then
tail="$(printf '\n\nSECURITY-%s' "$ticket_id")";

View file

@ -2,7 +2,8 @@
const gulp = require('gulp');
const rename = require('gulp-rename');
const concat = require('gulp-concat');
const sourcemaps = require('gulp-sourcemaps');
const concat = require('gulp-concat-css');
const postcss = require('gulp-postcss');
const autoprefixer = require('autoprefixer');
const cssnano = require('cssnano');
@ -18,14 +19,16 @@ const paths = {
};
function styles() {
return gulp.src(paths.styles.src, { sourcemaps: true })
return gulp.src(paths.styles.src)
.pipe(sourcemaps.init())
.pipe(
postcss([
autoprefixer(),
sorting(sortOrder),
]),
)
.pipe(gulp.dest(paths.styles.css, { sourcemaps: './' }));
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(paths.styles.css));
}
function minify() {
@ -44,7 +47,8 @@ function minify() {
paths.styles.css + 'colours.css',
paths.styles.css + 'responsive.css',
paths.styles.css + 'bidi.css',
], { sourcemaps: true })
])
.pipe(sourcemaps.init())
.pipe(concat('stylesheet.css'))
.pipe(
postcss([
@ -55,7 +59,8 @@ function minify() {
suffix: '.min',
extname: '.css',
}))
.pipe(gulp.dest(paths.styles.css, { sourcemaps: './' }));
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(paths.styles.css));
}
function watch() {

9844
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -56,7 +56,11 @@
"always"
],
"no-lonely-if": "off",
"unicorn/prefer-module": "off"
"unicorn/prefer-module": "off",
"space-before-function-paren": [
"error",
"never"
]
},
"env": {
"es6": true,
@ -103,14 +107,14 @@
"cssnano": "^5.1.7",
"eslint": "^8.13.0",
"eslint-config-xo": "^0.40.0",
"gulp": "^5.0.0",
"gulp-concat": "^2.6.1",
"gulp": "^4.0.2",
"gulp-concat-css": "^3.1.0",
"gulp-postcss": "^9.0.1",
"gulp-rename": "^2.0.0",
"postcss": "^8.4.31",
"gulp-sourcemaps": "^3.0.0",
"postcss": "^8.4.12",
"postcss-sorting": "^7.0.1",
"stylelint": "^14.7.0",
"stylelint-order": "^5.0.0",
"web-push-testing": "^1.1.1"
"stylelint-order": "^5.0.0"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -63,13 +63,12 @@ $template->set_custom_style(
],
[
$phpbb_admin_path . 'style',
$phpbb_root_path . 'styles/all/imgs/',
$phpbb_root_path . 'styles/all/template/',
],
);
$template->assign_var('T_ASSETS_PATH', $phpbb_path_helper->update_web_root_path($phpbb_root_path . 'assets'));
$template->assign_var('T_TEMPLATE_PATH', $phpbb_path_helper->update_web_root_path($phpbb_root_path . 'style'));
$template->assign_var('T_ASSETS_PATH', $phpbb_root_path . 'assets');
$template->assign_var('T_TEMPLATE_PATH', $phpbb_admin_path . 'style');
// Instantiate new module
$module = new p_master();

View file

@ -17,52 +17,52 @@
<div class="avatar-cropper-buttons" id="avatar-cropper-buttons">
<div class="button-group">
<button class="button" type="button" title="{{ lang('ZOOM_IN') }}" data-cropper-action="zoom,0.1">
{{ Icon('font', 'search-plus', '', true) }}
<i class="icon fa-search-plus fa-fw"></i>
</button>
<button class="button" type="button" title="{{ lang('ZOOM_OUT') }}" data-cropper-action="zoom,-0.1">
{{ Icon('font', 'search-minus', '', true) }}
<i class="icon fa-search-minus fa-fw"></i>
</button>
</div>
<div class="button-group">
<button class="button" type="button" title="{{ lang('MOVE_LEFT') }}" data-cropper-action="move,-10,0">
{{ Icon('font', 'arrow-left', '', true) }}
<i class="icon fa-arrow-left fa-fw"></i>
</button>
<button class="button" type="button" title="{{ lang('MOVE_RIGHT') }}" data-cropper-action="move,10,0">
{{ Icon('font', 'arrow-right', '', true) }}
<i class="icon fa-arrow-right fa-fw"></i>
</button>
<button class="button" type="button" title="{{ lang('MOVE_UP') }}" data-cropper-action="move,0,-10">
{{ Icon('font', 'arrow-up', '', true) }}
<i class="icon fa-arrow-up fa-fw"></i>
</button>
<button class="button" type="button" title="{{ lang('MOVE_DOWN') }}" data-cropper-action="move,0,10">
{{ Icon('font', 'arrow-down', '', true) }}
<i class="icon fa-arrow-down fa-fw"></i>
</button>
</div>
<div class="button-group">
<button class="button" type="button" title="{{ lang('ROTATE_LEFT') }}" data-cropper-action="rotate,-90">
{{ Icon('font', 'rotate-left', '', true) }}
<i class="icon fa-rotate-left fa-fw"></i>
</button>
<button class="button" type="button" title="{{ lang('ROTATE_RIGHT') }}" data-cropper-action="rotate,90">
{{ Icon('font', 'rotate-right', '', true) }}
<i class="icon fa-rotate-right fa-fw"></i>
</button>
</div>
<div class="button-group">
<button class="button" type="button" title="{{ lang('FLIP_HORIZONTALLY') }}" data-cropper-action="scaleX">
{{ Icon('font', 'arrows-left-right', '', true) }}
<i class="icon fa-arrows-h fa-fw"></i>
</button>
<button class="button" type="button" title="{{ lang('FLIP_VERTICALLY') }}" data-cropper-action="scaleY">
{{ Icon('font', 'arrows-up-down', '', true) }}
<i class="icon fa-arrows-v fa-fw"></i>
</button>
</div>
<div class="button-group">
<button class="button" type="button" title="{{ lang('RESET') }}" data-cropper-action="reset">
{{ Icon('font', 'arrows-rotate', '', true) }}
<i class="icon fa-refresh fa-fw"></i>
</button>
<button class="button" type="button" title="{{ lang('CLEAR') }}" data-cropper-action="clear">
{{ Icon('font', 'xmark', '', true) }}
<i class="icon fa-times fa-fw"></i>
</button>
</div>
</div>

View file

@ -11,11 +11,11 @@
<script>
// <![CDATA[
const ban_length = [];
ban_length[-1] = '';
const ban_reason = [];
var ban_length = new Array();
ban_length[-1] = '';
var ban_reason = new Array();
ban_reason[-1] = '';
const ban_give_reason = [];
var ban_give_reason = new Array();
ban_give_reason[-1] = '';
<!-- BEGIN bans -->
@ -43,19 +43,6 @@
}
}
document.addEventListener("DOMContentLoaded", () => {
const $unbanSelect = document.getElementById('unban');
if ($unbanSelect) {
$unbanSelect.addEventListener('change', function () {
if (this.selectedIndex > -1) {
display_details(this.options[this.selectedIndex].value);
} else {
display_details(-1);
}
});
}
});
// ]]>
</script>
@ -73,6 +60,11 @@
<dd><label for="banlength"><select name="banlength" id="banlength" onchange="if(this.value==-1){document.getElementById('banlengthother').style.display = 'block';}else{document.getElementById('banlengthother').style.display='none';}">{S_BAN_END_OPTIONS}</select></label></dd>
<dd id="banlengthother" style="display: none;"><label><input type="text" name="banlengthother" class="inputbox" /><br /><span>{L_YEAR_MONTH_DAY}</span></label></dd>
</dl>
<dl>
<dt><label for="banexclude">{L_BAN_EXCLUDE}{L_COLON}</label><br /><span>{L_BAN_EXCLUDE_EXPLAIN}</span></dt>
<dd><label><input type="radio" name="banexclude" value="1" class="radio" /> {L_YES}</label>
<label><input type="radio" name="banexclude" id="banexclude" value="0" checked="checked" class="radio" /> {L_NO}</label></dd>
</dl>
<dl>
<dt><label for="banreason">{L_BAN_REASON}{L_COLON}</label></dt>
<dd><input name="banreason" type="text" class="text medium" maxlength="255" id="banreason" /></dd>
@ -98,41 +90,44 @@
<p>{L_UNBAN_EXPLAIN}</p>
<form id="acp_unban" method="post" action="{{ U_ACTION }}">
<form id="acp_unban" method="post" action="{U_ACTION}">
<fieldset>
<legend>{{ lang('UNBAN_TITLE') }}</legend>
<legend>{L_UNBAN_TITLE}</legend>
{% if BANNED_SELECT %}
<!-- IF S_BANNED_OPTIONS -->
<dl>
<dt><label for="unban">{{ lang('BAN_CELL') ~ lang('COLON') }}</label></dt>
<dd>
{{ FormsSelect(BANNED_SELECT) }}
</dd>
<dt><label for="unban">{L_BAN_CELL}{L_COLON}</label></dt>
<dd><select id="unban" name="unban[]" multiple="multiple" size="10" style="width: 50%" onchange="if (this.selectedIndex > -1) display_details(this.options[this.selectedIndex].value); else display_details(-1);">{BANNED_OPTIONS}</select></dd>
</dl>
<dl>
<dt><label for="unbanlength">{{ lang('BAN_LENGTH') ~ lang('COLON') }}</label></dt>
<dt><label for="unbanlength">{L_BAN_LENGTH}{L_COLON}</label></dt>
<dd><input style="border: 0;" type="text" class="text full" readonly="readonly" name="unbanlength" id="unbanlength" /></dd>
</dl>
<dl>
<dt><label for="unbanreason">{{ lang('BAN_REASON') ~ lang('COLON') }}</label></dt>
<dt><label for="unbanreason">{L_BAN_REASON}{L_COLON}</label></dt>
<dd><textarea style="border: 0;" class="text full" readonly="readonly" name="unbanreason" id="unbanreason" rows="5" cols="80">&nbsp;</textarea></dd>
</dl>
<dl>
<dt><label for="unbangivereason">{{ lang('BAN_GIVE_REASON') ~ lang('COLON') }}</label></dt>
<dt><label for="unbangivereason">{L_BAN_GIVE_REASON}{L_COLON}</label></dt>
<dd><textarea style="border: 0;" class="text full" readonly="readonly" name="unbangivereason" id="unbangivereason" rows="5" cols="80">&nbsp;</textarea></dd>
</dl>
<p class="submit-buttons">
<input class="button1" type="submit" id="unbansubmit" name="unbansubmit" value="{{ lang('SUBMIT') }}" />&nbsp;
<input class="button2" type="reset" id="unbanreset" name="unbanreset" value="{{ lang('RESET') }}" />
<input class="button1" type="submit" id="unbansubmit" name="unbansubmit" value="{L_SUBMIT}" />&nbsp;
<input class="button2" type="reset" id="unbanreset" name="unbanreset" value="{L_RESET}" />
</p>
{% else %}
<p>{{ lang('NO_BAN_CELL') }}</p>
{% endif %}
{{ S_FORM_TOKEN }}
{S_FORM_TOKEN}
</fieldset>
<!-- ELSE -->
<p>{L_NO_BAN_CELL}</p>
{S_FORM_TOKEN}
</fieldset>
<!-- ENDIF -->
</form>
<!-- INCLUDE overall_footer.html -->

View file

@ -52,7 +52,7 @@
<td style="text-align: center;">
<!-- IF enabled.S_VERSIONCHECK -->
<strong class="<!-- IF enabled.S_UP_TO_DATE -->current-ext<!-- ELSE -->outdated-ext<!-- ENDIF -->">{enabled.META_VERSION}</strong>
<!-- IF not enabled.S_UP_TO_DATE -->{{ Icon('font', 'circle-exclamation', '', true, 'fas outdated-ext') }}<!-- ENDIF -->
<!-- IF not enabled.S_UP_TO_DATE --><i class="fa fa-exclamation-circle outdated-ext" aria-hidden="true"></i><!-- ENDIF -->
<!-- ELSE -->
{enabled.META_VERSION}
<!-- ENDIF -->
@ -78,7 +78,7 @@
<td style="text-align: center;">
<!-- IF disabled.S_VERSIONCHECK -->
<strong class="<!-- IF disabled.S_UP_TO_DATE -->current-ext<!-- ELSE -->outdated-ext<!-- ENDIF -->">{disabled.META_VERSION}</strong>
<!-- IF not disabled.S_UP_TO_DATE -->{{ Icon('font', 'circle-exclamation', '', true, 'fas outdated-ext') }}<!-- ENDIF -->
<!-- IF not disabled.S_UP_TO_DATE --><i class="fa fa-exclamation-circle outdated-ext" aria-hidden="true"></i><!-- ENDIF -->
<!-- ELSE -->
{disabled.META_VERSION}
<!-- ENDIF -->

View file

@ -348,7 +348,7 @@
<!-- EVENT acp_forums_rules_settings_append -->
</fieldset>
</div>
<!-- EVENT acp_forums_custom_settings -->
<fieldset class="submit-buttons">
@ -472,17 +472,7 @@
<tbody>
<!-- BEGIN forums -->
<tr>
<td class="folder">
<span class="fa-stack fa-2x">
{{ Icon('font', 'circle', '', true, 'fas fa-stack-2x') }}
{{ Icon('font', {
'link' : forums.S_FORUM_LINK,
'lock' : forums.S_FORUM_LOCKED,
'comments' : forums.S_SUBFORUMS,
'comment' : true,
}, '', true, 'fas fa-inverse fa-stack-1x') }}
</span>
</td>
<td class="folder">{forums.FOLDER_IMAGE}</td>
<td class="forum-desc">
<!-- IF forums.FORUM_IMAGE --><div style="float: {S_CONTENT_FLOW_BEGIN}; margin-right: 5px;">{forums.FORUM_IMAGE}</div><!-- ENDIF -->
<strong><!-- IF forums.S_FORUM_LINK -->{forums.FORUM_NAME}<!-- ELSE --><a href="{forums.U_FORUM}">{forums.FORUM_NAME}</a><!-- ENDIF --></strong>

View file

@ -8,11 +8,11 @@
<div class="send-stats-row">
<!-- EVENT acp_help_phpbb_stats_before -->
<div class="send-stats-tile">
<h2>{{ Icon('font', 'chart-column', lang('SEND_STATISTICS')) }}</h2>
<h2><i class="icon fa-bar-chart"></i>{L_SEND_STATISTICS}</h2>
<p>{L_EXPLAIN_SEND_STATISTICS}</p>
<div class="send-stats-row">
<div class="send-stats-data-row send-stats-data-only-row">
<a id="trigger-configlist" data-ajax="toggle_link" data-overlay="false" data-toggle-text="{L_HIDE_STATISTICS}"><span>{L_SHOW_STATISTICS}</span>{{ Icon('font', 'angle-down', '', true) }}</a>
<a id="trigger-configlist" data-ajax="toggle_link" data-overlay="false" data-toggle-text="{L_HIDE_STATISTICS}"><span>{L_SHOW_STATISTICS}</span><i class="icon fa-angle-down"></i></a>
</div>
<div class="send-stats-data-row">
<div class="configlist" id="configlist">

View file

@ -35,15 +35,6 @@
<p>{UPGRADE_INSTRUCTIONS}</p>
</div>
<!-- ENDIF -->
{% if S_CAPTCHA_UNSAFE %}
<div class="errorbox">
<p>{{ lang('CAPTCHA_UNSAFE_WARNING') }}</p>
</div>
{% elseif S_CAPTCHA_INCOMPLETE %}
<div class="errorbox">
<p>{{ lang('CAPTCHA_INCOMPLETE_WARNING') }}</p>
</div>
{% endif %}
<!-- IF S_SEARCH_INDEX_MISSING -->
<div class="errorbox">

View file

@ -132,16 +132,7 @@
<tbody>
<!-- BEGIN modules -->
<tr>
<td style="width: 5%; text-align: center;">
<span class="fa-stack fa-2x">
{{ Icon('font', 'circle', '', true, 'fas fa-stack-2x') }}
{{ Icon('font', {
'lock' : not modules.MODULE_ENABLED,
'folder-tree' : modules.S_SUB_MODULE,
'folder' : true,
}, '', true, 'fas fa-inverse fa-stack-1x') }}
</span>
</td>
<td style="width: 5%; text-align: center;">{modules.MODULE_IMAGE}</td>
<td><a href="{modules.U_MODULE}">{modules.MODULE_TITLE}</a><!-- IF not modules.MODULE_DISPLAYED --> <span class="small">[{L_HIDDEN_MODULE}]</span><!-- ENDIF --></td>
<td style="width: 15%; white-space: nowrap; text-align: center; vertical-align: middle;">&nbsp;<!-- IF modules.MODULE_ENABLED --><a href="{modules.U_DISABLE}">{L_DISABLE}</a><!-- ELSE --><a href="{modules.U_ENABLE}">{L_ENABLE}</a><!-- ENDIF -->&nbsp;</td>
<td class="actions">

View file

@ -288,10 +288,6 @@ li {
padding-right: 10px;
}
.w-50 {
width: 50%;
}
@media only screen and (max-width: 700px), only screen and (max-device-width: 700px) {
#wrap,
#page-body,
@ -334,8 +330,7 @@ li {
}
#content {
background: #f3f3f3;
background: linear-gradient(to bottom, #dbdee2 0%, #e0e2e5 27%, #ecedee 65%, #f3f3f3 100%);
background: #f3f3f3 url("../images/innerbox_bg.gif") repeat-x top;
padding: 5px;
}
@ -502,8 +497,7 @@ li {
/* Main Panel
---------------------------------------- */
#acp {
background: #f3f3f3;
background: linear-gradient(to bottom, #dbdee2 0%, #e0e2e5 27%, #ecedee 65%, #f3f3f3 100%);
background: #f3f3f3 url("../images/innerbox_bg.gif") repeat-x top;
border: 1px #999999 solid;
border-radius: 5px;
box-shadow: #ffffff 0 0 0 1px inset;
@ -519,8 +513,7 @@ li {
}
.panel {
background: #f3f3f3;
background: linear-gradient(to bottom, #dbdee2 0%, #e0e2e5 27%, #ecedee 65%, #f3f3f3 100%);
background: #f3f3f3 url("../images/innerbox_bg.gif") repeat-x top;
border-radius: 5px;
overflow: hidden;
padding: 5px 0;
@ -607,47 +600,25 @@ li {
#menu li#activemenu a span {
font-weight: bold;
text-decoration: none;
background: transparent url("../images/arrow_right.gif") 0% 50% no-repeat;
color: #1180b7;
}
.rtl #menu li#activemenu a span {
background: transparent url("../images/arrow_left.gif") 100% 50% no-repeat;
}
#menu li#activemenu a:hover span,
#menu li#activemenu span {
font-weight: bold;
text-decoration: none;
background: #ffffff url("../images/arrow_right.gif") 1% 50% no-repeat;
color: #bc2a4d;
}
#menu li#activemenu a span:before,
#menu li#activemenu a:hover span:before,
#menu li#activemenu span:before {
font-family: "Font Awesome 6 Free";
color: #515f77;
margin-right: 3px;
margin-left: -10px;
content: "\f105";
}
#menu li#activemenu a:hover span:before,
#menu li#activemenu span:before {
margin-right: 1px;
margin-left: -8px;
}
.rtl #menu li#activemenu a span:before,
.rtl #menu li#activemenu a:hover span:before,
.rtl #menu li#activemenu span:before {
font-family: "Font Awesome 6 Free";
color: #515f77;
margin-right: -10px;
margin-left: 3px;
content: "\f104";
}
.rtl #menu li#activemenu a:hover span:before,
.rtl #menu li#activemenu span:before {
margin-right: -8px;
margin-left: 1px;
.rtl #menu li#activemenu a:hover span,
.rtl #menu li#activemenu span {
background: #ffffff url("../images/arrow_left.gif") 99% 50% no-repeat;
}
#menu li a:active,
@ -658,30 +629,16 @@ li {
#menu li span.completed {
text-decoration: none;
background: url("../images/arrow_down.gif") 1% 50% no-repeat;
padding: 3px 3px 3px 12px;
}
#menu li span.completed:before {
font-family: "Font Awesome 6 Free";
color: #515f77;
margin-right: 1px;
margin-left: -8px;
content: "\f107";
}
.rtl #menu li span.completed {
text-decoration: none;
background: url("../images/arrow_down.gif") 99% 50% no-repeat;
padding: 3px 12px 3px 3px;
}
.rtl #menu li span.completed:before {
font-family: "Font Awesome 6 Free";
color: #515f77;
margin-right: -8px;
margin-left: 1px;
content: "\f107";
}
#menu .header {
font-family: Tahoma, Helvetica, sans-serif;
font-size: 0.75em;
@ -773,8 +730,7 @@ th {
font-size: 0.75em;
text-align: left;
text-transform: uppercase;
background: #70aed3;
background: linear-gradient(to bottom, #70aed3 0%, #5ba0c9 100%);
background: #70aed3 url("../images/gradient2b.gif") bottom left repeat-x;
border-top: 1px solid #6dacd2;
border-bottom: 1px solid #327aa5;
color: #ffffff;
@ -1059,8 +1015,7 @@ table.fixed-width-table {
font-weight: bold;
text-align: left;
text-transform: uppercase;
background: #70aed3;
background: linear-gradient(to bottom, #70aed3 0%, #5ba0c9 100%);
background: #70aed3 url("../images/gradient2b.gif") bottom left repeat-x;
border-top: 1px solid #6dacd2;
border-bottom: 1px solid #327aa5;
color: #ffffff;
@ -1760,8 +1715,7 @@ a.button2,
input.button2 {
font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif;
font-size: 0.85em;
background: #efefef;
background: linear-gradient(to bottom, #ffffff 0%, #d2d2d2 4%, #dfdfdf 26%, #efefef 65%, #efefef 100%);
background: #efefef url("../images/bg_button.gif") repeat-x top;
color: #000000;
width: auto !important;
padding: 1px 3px 0;
@ -1805,8 +1759,7 @@ a.button1:hover,
input.button1:hover,
a.button2:hover,
input.button2:hover {
background: #efefef;
background: linear-gradient(to bottom, #ffffff 0%, #d2d2d2 4%, #dfdfdf 26%, #efefef 65%, #efefef 100%);
background: #efefef url("../images/bg_button.gif") repeat bottom;
border: 1px solid #bc2a4d;
color: #bc2a4d;
}
@ -1866,18 +1819,24 @@ input.button2:focus {
display: none;
width: 620px;
margin: 0 auto;
padding: 25px;
padding: 0 25px 20px;
}
.phpbb_alert .alert_close {
font-size: 14px;
text-decoration: none !important;
background: transparent url("../images/alert_close.png") 0 0 no-repeat;
display: block;
float: right;
margin-top: 2px;
margin-right: -22px;
overflow: hidden;
width: 16px;
height: 16px;
margin-top: -7px;
margin-right: -31px;
}
.phpbb_alert .alert_close:hover {
color: #bc2a4d;
background-position: 0 -16px;
}
.phpbb_alert p {
@ -2388,11 +2347,11 @@ fieldset.permissions .permissions-switch {
font-size: 0.85em;
line-height: normal;
min-width: 570px;
margin: 0 0 0 7px;
margin: 0 0 -1px 7px;
}
.rtl .permissions-category {
margin: 0 7px 0 0;
margin: 0 7px -1px 0;
}
.permissions-category ul {
@ -2413,9 +2372,7 @@ fieldset.permissions .permissions-switch {
.permissions-category a {
text-decoration: none;
background: #bcccd8;
border: 1px solid transparent;
border-radius: 4px 4px 0 0;
background: url("../images/bg_tabs_alt1.gif") no-repeat 0% -35px;
position: relative;
float: left;
margin: 0 1px 0 0;
@ -2428,6 +2385,7 @@ fieldset.permissions .permissions-switch {
.permissions-category a span.tabbg {
white-space: nowrap;
background: url("../images/bg_tabs_alt2.gif") no-repeat 100% -35px;
color: #536482;
display: block;
float: left;
@ -2438,32 +2396,39 @@ fieldset.permissions .permissions-switch {
float: right;
}
/* Commented Backslash Hack hides rule from IE5-Mac \ */
.permissions-category a span.tabbg,
.rtl .permissions-category a span.tabbg {
float: none;
}
.permissions-category a:hover,
/* End hack */
.permissions-category a:hover span.tabbg {
background: #dfedfa;
background-position: 100% -70px;
color: #dd6900;
}
.permissions-category .activetab a,
.permissions-category .activetab a:hover,
.permissions-category .activetab a {
background-position: 0 0;
}
.permissions-category .activetab a span.tabbg {
background: #ccdcea;
background: linear-gradient(to bottom, #eaf2f9 0%, #ccdcea 100%);
background-position: 100% 0;
color: #333333;
padding-bottom: 7px;
}
.permissions-category a:hover {
background-position: 0 -70px;
}
.permissions-category .activetab a:hover span.tabbg {
background-position: 100% 0;
color: #333333;
}
.permissions-category .activetab a {
border-color: #cadceb;
box-shadow: 0 1px 1px #f2f9ff inset;
}
.permissions-category .activetab a span.tabbg {
padding-bottom: 7px;
.permissions-category .activetab a:hover {
background-position: 0 0;
}
.permissions-category a span.colour {
@ -2839,16 +2804,8 @@ fieldset.permissions .permissions-switch {
user-select: none;
}
.roles-options > .button:hover {
background: transparent;
}
.roles-options > .button:active {
padding: 4px;
}
.roles-options > span {
background: transparent;
background: url("../images/arrow_down.gif") no-repeat 245px 0.7em;
border: 1px solid #dedede;
border-radius: 3px;
display: none;
@ -2856,16 +2813,8 @@ fieldset.permissions .permissions-switch {
padding: 4px;
}
.roles-options > span:after {
font-family: "Font Awesome 6 Free";
float: right;
content: "\f107";
}
.rtl .roles-options > span:after {
font-family: "Font Awesome 6 Free";
float: left;
content: "\f107";
.rtl .roles-options > span {
background: url("../images/arrow_down.gif") no-repeat 7px 0.7em;
}
.roles-options li {
@ -3007,6 +2956,11 @@ fieldset.permissions .permissions-switch {
padding-right: 0.3em;
}
.icon {
font-family: FontAwesome;
font-style: normal;
}
.send-stats-data-row {
background: #f9f9f9;
border: #dedede 1px solid;
@ -3055,14 +3009,12 @@ fieldset.permissions .permissions-switch {
}
.send-stats-settings input[type="checkbox"] + label:before {
font-family: "Font Awesome 6 Free", "Font Awesome 6 Brands";
font-family: FontAwesome;
font-size: 1.5em;
font-weight: 400;
content: "\f0c8";
content: "\f096";
}
.send-stats-settings input[type="checkbox"]:checked + label:before {
font-weight: 900;
color: #3c763d;
content: "\f14a";
}
@ -3100,28 +3052,6 @@ fieldset.permissions .permissions-switch {
overflow-x: scroll;
}
.o-icon {
vertical-align: middle !important;
}
.o-icon-font {
font-family: "Font Awesome 6 Free", "Font Awesome 6 Brands";
font-style: normal;
font-variant: normal;
-webkit-font-smoothing: antialiased;
vertical-align: baseline;
display: inline-block;
/* stylelint-disable order/properties-order */
-moz-osx-font-smoothing: grayscale;
/* stylelint-enable order/properties-order */
text-rendering: auto; /* optimizelegibility throws things off #1094 */
}
.o-icon + span,
span + .o-icon {
padding-left: 4px;
}
.acp-icon {
font-size: 1.5em;
}

View file

@ -157,55 +157,6 @@ phpbb.addAjaxCallback('row_delete', function(res) {
}
});
/**
* This callback generates the VAPID keys for the web push notification service.
*/
phpbb.addAjaxCallback('generate_vapid_keys', () => {
/**
* Generate VAPID keypair with public and private key string
*
* @returns {Promise<{privateKey: string, publicKey: string}|null>}
*/
async function generateVAPIDKeys() {
try {
// Generate a new key pair using the Subtle Crypto API
const keyPair = await crypto.subtle.generateKey(
{
name: 'ECDH',
namedCurve: 'P-256',
},
true,
['deriveKey', 'deriveBits']
);
const privateKeyJwk = await crypto.subtle.exportKey('jwk', keyPair.privateKey);
const privateKeyString = privateKeyJwk.d;
const publicKeyBuffer = await crypto.subtle.exportKey('raw', keyPair.publicKey);
const publicKeyString = phpbb.base64UrlEncode(phpbb.rawKeyToBase64(publicKeyBuffer));
return {
privateKey: privateKeyString,
publicKey: publicKeyString
};
} catch (error) {
console.error('Error generating keys with SubtleCrypto:', error);
return null;
}
}
generateVAPIDKeys().then(keyPair => {
if (!keyPair) {
return;
}
const publicKeyInput = document.querySelector('#webpush_vapid_public');
const privateKeyInput = document.querySelector('#webpush_vapid_private');
publicKeyInput.value = keyPair.publicKey;
privateKeyInput.value = keyPair.privateKey;
})
})
/**
* Handler for submitting permissions form in chunks
* This call will submit permissions forms in chunks of 5 fieldsets.

View file

@ -0,0 +1,74 @@
<!-- INCLUDE overall_header.html -->
<a id="maincontent"></a>
<a href="{U_ACTION}" style="float: {S_CONTENT_FLOW_END};">&laquo; {L_BACK}</a>
<h1>{L_ACP_VC_SETTINGS}</h1>
<p>{L_ACP_VC_SETTINGS_EXPLAIN}</p>
<form id="acp_captcha" method="post" action="{U_ACTION}">
<fieldset>
<legend>{L_GENERAL_OPTIONS}</legend>
<dl>
<dt><label for="captcha_gd_foreground_noise">{L_CAPTCHA_GD_FOREGROUND_NOISE}{L_COLON}</label><br /><span>{L_CAPTCHA_GD_FOREGROUND_NOISE_EXPLAIN}</span></dt>
<dd><label><input id="captcha_gd_foreground_noise" name="captcha_gd_foreground_noise" value="1" class="radio" type="radio"<!-- IF CAPTCHA_GD_FOREGROUND_NOISE --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
<label><input name="captcha_gd_foreground_noise" value="0" class="radio" type="radio"<!-- IF not CAPTCHA_GD_FOREGROUND_NOISE --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
</dl>
<dl>
<dt><label for="captcha_gd_x_grid">{L_CAPTCHA_GD_X_GRID}{L_COLON}</label><br /><span>{L_CAPTCHA_GD_X_GRID_EXPLAIN}</span></dt>
<dd><input id="captcha_gd_x_grid" name="captcha_gd_x_grid" value="{CAPTCHA_GD_X_GRID}" type="number" /></dd>
</dl>
<dl>
<dt><label for="captcha_gd_y_grid">{L_CAPTCHA_GD_Y_GRID}{L_COLON}</label><br /><span>{L_CAPTCHA_GD_Y_GRID_EXPLAIN}</span></dt>
<dd><input id="captcha_gd_y_grid" name="captcha_gd_y_grid" value="{CAPTCHA_GD_Y_GRID}" type="number" /></dd>
</dl>
<dl>
<dt><label for="captcha_gd_wave">{L_CAPTCHA_GD_WAVE}{L_COLON}</label><br /><span>{L_CAPTCHA_GD_WAVE_EXPLAIN}</span></dt>
<dd><label><input id="captcha_gd_wave" name="captcha_gd_wave" value="1" class="radio" type="radio"<!-- IF CAPTCHA_GD_WAVE --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
<label><input name="captcha_gd_wave" value="0" class="radio" type="radio"<!-- IF not CAPTCHA_GD_WAVE --> checked="checked"<!-- ENDIF --> /> {L_NO}</label>
</dd>
</dl>
<dl>
<dt><label for="captcha_gd_3d_noise">{L_CAPTCHA_GD_3D_NOISE}{L_COLON}</label><br /><span>{L_CAPTCHA_GD_3D_NOISE_EXPLAIN}</span></dt>
<dd><label><input id="captcha_gd_3d_noise" name="captcha_gd_3d_noise" value="1" class="radio" type="radio"<!-- IF CAPTCHA_GD_3D_NOISE --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
<label><input name="captcha_gd_3d_noise" value="0" class="radio" type="radio"<!-- IF not CAPTCHA_GD_3D_NOISE --> checked="checked"<!-- ENDIF --> /> {L_NO}</label>
</dd>
</dl>
<dl>
<dt><label for="captcha_gd_fonts">{L_CAPTCHA_GD_FONTS}{L_COLON}</label><br /><span>{L_CAPTCHA_GD_FONTS_EXPLAIN}</span></dt>
<dd><label><input id="captcha_gd_fonts" name="captcha_gd_fonts" value="1" class="radio" type="radio"<!-- IF CAPTCHA_GD_FONTS == 1 --> checked="checked"<!-- ENDIF --> /> {L_CAPTCHA_FONT_DEFAULT}</label>
<label><input name="captcha_gd_fonts" value="2" class="radio" type="radio"<!-- IF CAPTCHA_GD_FONTS == 2 --> checked="checked"<!-- ENDIF --> /> {L_CAPTCHA_FONT_NEW}</label>
<label><input name="captcha_gd_fonts" value="3" class="radio" type="radio"<!-- IF CAPTCHA_GD_FONTS == 3 --> checked="checked"<!-- ENDIF --> /> {L_CAPTCHA_FONT_LOWER}</label>
</dd>
</dl>
</fieldset>
<fieldset>
<legend>{L_PREVIEW}</legend>
<!-- IF CAPTCHA_PREVIEW -->
<!-- INCLUDE {CAPTCHA_PREVIEW} -->
<!-- ENDIF -->
</fieldset>
<fieldset>
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
<p class="submit-buttons">
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />&nbsp;
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />&nbsp;
<input class="button2" type="submit" id="preview" name="preview" value="{L_PREVIEW}" />&nbsp;
</p>
<input type="hidden" name="select_captcha" value="{CAPTCHA_NAME}" />
<input type="hidden" name="configure" value="1" />
{S_FORM_TOKEN}
</fieldset>
</form>
<!-- INCLUDE overall_footer.html -->

View file

@ -1,3 +1,4 @@
<!-- IF S_RECAPTCHA_AVAILABLE -->
<dl>
<dd>
<noscript>
@ -6,6 +7,9 @@
{L_RECAPTCHA_INVISIBLE}
<script src="{RECAPTCHA_SERVER}.js?hl={LA_RECAPTCHA_LANG}" async defer></script>
<div class="g-recaptcha" data-sitekey="{% if RECAPTCHA_PUBKEY %}{{ RECAPTCHA_PUBKEY }}{% else %}6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI{% endif %}" data-size="invisible"></div>
<div class="g-recaptcha" data-sitekey="{RECAPTCHA_PUBKEY}" data-size="invisible"></div>
</dd>
</dl>
<!-- ELSE -->
{L_RECAPTCHA_NOT_AVAILABLE}
<!-- ENDIF -->

View file

@ -23,10 +23,9 @@ installLang = {
</script>
<script src="{T_JQUERY_LINK}"></script>
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.7.1.min.js">\x3C/script>');</script><!-- ENDIF -->
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.6.0.min.js">\x3C/script>');</script><!-- ENDIF -->
<script src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
<!-- INCLUDEJS admin.js -->
{$SCRIPTS}
</body>

View file

@ -7,7 +7,6 @@
<!-- IF META -->{META}<!-- ENDIF -->
<title>{PAGE_TITLE}</title>
<link href="{T_FONT_AWESOME_LINK}" rel="stylesheet">
<link href="{T_TEMPLATE_PATH}/admin.css" rel="stylesheet" type="text/css" media="screen" />
</head>

View file

@ -4,7 +4,7 @@
<p>{L_FILES_DELETED_EXPLAIN}</p>
<fieldset id="deleted">
<legend>{{ Icon('font', 'circle-xmark', lang('STATUS_DELETED'), true, '', {'style' : 'color:red;'}) }}</legend>
<legend><img src="{T_IMAGE_PATH}/icon_delete.gif" alt="{L_STATUS_DELETED}" /></legend>
<!-- BEGIN deleted -->
<dl>
<dt style="width: 100%;"><!-- IF deleted.DIR_PART -->{deleted.DIR_PART}<!-- ENDIF --><strong>{deleted.FILE_PART}</strong></dt>
@ -20,7 +20,7 @@
<p>{L_FILES_CONFLICT_EXPLAIN}</p>
<fieldset id="conflict">
<legend>{{ Icon('font', 'circle-exclamation', lang('STATUS_CONFLICT'), true, '', {'style' : 'color:red;'}) }}</legend>
<legend><img src="{T_IMAGE_PATH}/file_conflict.gif" alt="{L_STATUS_CONFLICT}" /></legend>
<!-- BEGIN conflict -->
<dl>
<dt style="width: 100%;"><!-- IF conflict.DIR_PART -->{conflict.DIR_PART}<!-- ENDIF --><strong>{conflict.FILE_PART}</strong></dt>
@ -36,7 +36,7 @@
<p>{L_FILES_MODIFIED_EXPLAIN}</p>
<fieldset id="modified">
<legend>{{ Icon('font', 'circle-arrow-left', lang('STATUS_MODIFIED'), true, '', {'style' : 'color:#ffd43b;'}) }}</legend>
<legend><img src="{T_IMAGE_PATH}/file_modified.gif" alt="{L_STATUS_MODIFIED}" /></legend>
<!-- BEGIN modified -->
<dl>
<dt style="width: 100%;"><!-- IF modified.DIR_PART -->{modified.DIR_PART}<!-- ENDIF --><strong>{modified.FILE_PART}</strong></dt>
@ -52,7 +52,7 @@
<p>{L_FILES_NEW_EXPLAIN}</p>
<fieldset id="new_files" style="display: none;">
<legend>{{ Icon('font', 'circle-plus', lang('STATUS_NEW'), true, '', {'style' : 'color:#ffd43b;'}) }}</legend>
<legend><img src="{T_IMAGE_PATH}/file_new.gif" alt="{L_STATUS_NEW}" /></legend>
<!-- BEGIN new -->
<dl>
<dt style="width: 100%;"><!-- IF new.DIR_PART -->{new.DIR_PART}<!-- ENDIF --><strong>{new.FILE_PART}</strong>
@ -69,7 +69,7 @@
<p>{L_FILES_NOT_MODIFIED_EXPLAIN}</p>
<fieldset id="not_modified" style="display: none;">
<legend>{{ Icon('font', 'lock', lang('STATUS_NOT_MODIFIED'), true, '', {'style' : 'color:#1180b7;'}) }}</legend>
<legend><img src="{T_IMAGE_PATH}/file_not_modified.gif" alt="{L_STATUS_NOT_MODIFIED}" /></legend>
<!-- BEGIN not_modified -->
<dl>
<dt style="width: 100%;"><!-- IF not_modified.DIR_PART -->{not_modified.DIR_PART}<!-- ENDIF --><strong>{not_modified.FILE_PART}</strong></dt>

View file

@ -30,34 +30,21 @@
</div>
<div id="phpbb_alert" class="phpbb_alert" data-l-err="{L_ERROR}" data-l-timeout-processing-req="{L_TIMEOUT_PROCESSING_REQ}">
<a href="#" class="alert_close">{{ Icon('font', 'circle-xmark', '', true) }}</a>
<a href="#" class="alert_close"></a>
<h3 class="alert_title">&nbsp;</h3><p class="alert_text"></p>
</div>
<div id="phpbb_confirm" class="phpbb_alert">
<a href="#" class="alert_close">{{ Icon('font', 'circle-xmark', '', true) }}</a>
<a href="#" class="alert_close"></a>
<div class="alert_text"></div>
</div>
</div>
</div>
<script src="{T_JQUERY_LINK}"></script>
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.7.1.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.6.0.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
<script src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
<!-- INCLUDEJS ajax.js -->
<!-- INCLUDEJS admin.js -->
{% if S_ALLOW_CDN %}
<script>
(function($){
const $fa_cdn = $('head').find('link[rel="stylesheet"]').first(),
$span = $('<span class="fa" style="display:none"></span>').appendTo('body');
if ($span.css('fontFamily') !== '"Font Awesome 6 Free"') {
$fa_cdn.after('<link href="{{ T_ASSETS_PATH ~ '/css/font-awesome.min.css' }}" rel="stylesheet">');
$fa_cdn.remove();
}
$span.remove();
})(jQuery);
</script>
{% endif %}
<!-- EVENT acp_overall_footer_after -->
{$SCRIPTS}

View file

@ -27,7 +27,7 @@
<fieldset class="permissions" id="perm{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}">
<legend id="legend{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}">
<!-- IF not p_mask.S_VIEW -->
<input type="checkbox" style="display: none;" class="permissions-checkbox" name="inherit[{p_mask.f_mask.UG_ID}][{p_mask.f_mask.FORUM_ID}]" id="checkbox{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}" value="1" onclick="toggle_opacity('{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}')" />
<input type="checkbox" style="display: none;" class="permissions-checkbox" name="inherit[{p_mask.f_mask.UG_ID}][{p_mask.f_mask.FORUM_ID}]" id="checkbox{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}" value="1" onclick="toggle_opacity('{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}')" />
<!-- ELSE -->
<!-- ENDIF -->
<!-- IF p_mask.f_mask.PADDING --><span class="padding">{p_mask.f_mask.PADDING}{p_mask.f_mask.PADDING}</span><!-- ENDIF -->{p_mask.f_mask.NAME}
@ -73,7 +73,7 @@
<div class="permissions-category">
<ul>
<!-- ENDIF -->
<!-- IF p_mask.f_mask.category.S_YES -->
<li class="permissions-preset-yes<!-- IF p_mask.S_FIRST_ROW and p_mask.f_mask.S_FIRST_ROW and p_mask.f_mask.category.S_FIRST_ROW --> activetab<!-- ENDIF -->" id="tab{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}{p_mask.f_mask.category.S_ROW_COUNT}">
<!-- ELSEIF p_mask.f_mask.category.S_NEVER -->
@ -116,7 +116,7 @@
<tbody>
<!-- BEGIN mask -->
<!-- IF p_mask.f_mask.category.mask.S_ROW_COUNT is even --><tr class="row4"><!-- ELSE --><tr class="row3"><!-- ENDIF -->
<th class="permissions-name<!-- IF p_mask.f_mask.category.mask.S_ROW_COUNT is even --> row4<!-- ELSE --> row3<!-- ENDIF -->"><!-- IF p_mask.f_mask.category.mask.U_TRACE --><a href="{p_mask.f_mask.category.mask.U_TRACE}" class="trace" onclick="popup(this.href, 750, 515, '_trace'); return false;" title="{L_TRACE_SETTING}">{{ Icon('font', 'eye', lang('TRACE_SETTING'), true, '', {'style' : 'color:#1180b7;'}) }}</a> <!-- ENDIF -->{p_mask.f_mask.category.mask.PERMISSION}</th>
<th class="permissions-name<!-- IF p_mask.f_mask.category.mask.S_ROW_COUNT is even --> row4<!-- ELSE --> row3<!-- ENDIF -->"><!-- IF p_mask.f_mask.category.mask.U_TRACE --><a href="{p_mask.f_mask.category.mask.U_TRACE}" class="trace" onclick="popup(this.href, 750, 515, '_trace'); return false;" title="{L_TRACE_SETTING}"><img src="images/icon_trace.gif" alt="{L_TRACE_SETTING}" /></a> <!-- ENDIF -->{p_mask.f_mask.category.mask.PERMISSION}</th>
<!-- IF p_mask.S_VIEW -->
<td<!-- IF p_mask.f_mask.category.mask.S_YES --> class="yes"<!-- ENDIF -->>&nbsp;</td>
<td<!-- IF p_mask.f_mask.category.mask.S_NEVER --> class="never"<!-- ENDIF -->></td>
@ -130,7 +130,7 @@
</tbody>
</table>
</div>
<!-- IF not p_mask.S_VIEW -->
<fieldset class="quick" style="margin-{S_CONTENT_FLOW_END}{L_COLON} 11px;">
<p class="small">{L_APPLY_PERMISSIONS_EXPLAIN}</p>
@ -139,7 +139,7 @@
<p class="small"><a href="#" onclick="reset_opacity(0, '{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}'); return false;">{L_MARK_ALL}</a> &bull; <a href="#" onclick="reset_opacity(1, '{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}'); return false;">{L_UNMARK_ALL}</a></p>
<!-- ENDIF -->
</fieldset>
<!-- ENDIF -->
</div>

View file

@ -17,21 +17,8 @@
</div>
<script src="{T_JQUERY_LINK}"></script>
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.7.1.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
<!-- IF S_ALLOW_CDN --><script>window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery-3.6.0.min.js?assets_version={T_ASSETS_VERSION}">\x3C/script>');</script><!-- ENDIF -->
<script src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
{% if S_ALLOW_CDN %}
<script>
(function($){
const $fa_cdn = $('head').find('link[rel="stylesheet"]').first(),
$span = $('<span class="fa" style="display:none"></span>').appendTo('body');
if ($span.css('fontFamily') !== '"Font Awesome 6 Free"') {
$fa_cdn.after('<link href="{{ T_ASSETS_PATH ~ '/css/font-awesome.min.css' }}" rel="stylesheet">');
$fa_cdn.remove();
}
$span.remove();
})(jQuery);
</script>
{% endif %}
<!-- EVENT acp_simple_footer_after -->
{$SCRIPTS}

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1677,33 +1677,6 @@ phpbb.getFunctionByName = function (functionName) {
return context[func];
};
/**
* Convert raw key ArrayBuffer to base64 string.
*
* @param {ArrayBuffer} rawKey Raw key array buffer as exported by SubtleCrypto exportKey()
* @returns {string} Base64 encoded raw key string
*/
phpbb.rawKeyToBase64 = (rawKey) => {
const keyBuffer = new Uint8Array(rawKey);
let keyText = '';
const keyLength = keyBuffer.byteLength;
for (let i = 0; i < keyLength; i++) {
keyText += String.fromCharCode(keyBuffer[i]);
}
return window.btoa(keyText);
};
/**
* Base64URL encode base64 encoded string
*
* @param {string} base64String Base64 encoded string
* @returns {string} Base64URL encoded string
*/
phpbb.base64UrlEncode = (base64String) => {
return base64String.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
};
/**
* Register page dropdowns.
*/

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,300 +0,0 @@
/* global phpbb */
'use strict';
function PhpbbWebpush() {
/** @type {string} URL to service worker */
let serviceWorkerUrl = '';
/** @type {string} URL to subscribe to push */
let subscribeUrl = '';
/** @type {string} URL to unsubscribe from push */
let unsubscribeUrl = '';
/** @type { {creationTime: number, formToken: string} } Form tokens */
this.formTokens = {
creationTime: 0,
formToken: '',
};
/** @type {{endpoint: string, expiration: string}[]} Subscriptions */
let subscriptions;
/** @type {string} Title of error message */
let ajaxErrorTitle = '';
/** @type {string} VAPID public key */
let vapidPublicKey = '';
/** @type {HTMLElement} Subscribe button */
let subscribeButton;
/** @type {HTMLElement} Unsubscribe button */
let unsubscribeButton;
/**
* Init function for phpBB Web Push
* @type {array} options
*/
this.init = function(options) {
serviceWorkerUrl = options.serviceWorkerUrl;
subscribeUrl = options.subscribeUrl;
unsubscribeUrl = options.unsubscribeUrl;
this.formTokens = options.formTokens;
subscriptions = options.subscriptions;
ajaxErrorTitle = options.ajaxErrorTitle;
vapidPublicKey = options.vapidPublicKey;
subscribeButton = document.querySelector('#subscribe_webpush');
unsubscribeButton = document.querySelector('#unsubscribe_webpush');
// Service workers are only supported in secure context
if (window.isSecureContext !== true) {
subscribeButton.disabled = true;
return;
}
if ('serviceWorker' in navigator && 'PushManager' in window) {
navigator.serviceWorker.register(serviceWorkerUrl)
.then(() => {
subscribeButton.addEventListener('click', subscribeButtonHandler);
unsubscribeButton.addEventListener('click', unsubscribeButtonHandler);
updateButtonState();
})
.catch(error => {
console.info(error);
// Service worker could not be registered
subscribeButton.disabled = true;
});
} else {
subscribeButton.disabled = true;
}
};
/**
* Update button state depending on notifications state
*
* @return void
*/
function updateButtonState() {
if (Notification.permission === 'granted') {
navigator.serviceWorker.getRegistration(serviceWorkerUrl)
.then(registration => {
if (typeof registration === 'undefined') {
return;
}
registration.pushManager.getSubscription()
.then(subscribed => {
if (isValidSubscription(subscribed)) {
setSubscriptionState(true);
}
});
});
}
}
/**
* Check whether subscription is valid
*
* @param {PushSubscription} subscription
* @returns {boolean}
*/
const isValidSubscription = subscription => {
if (!subscription) {
return false;
}
if (subscription.expirationTime && subscription.expirationTime <= Date.now()) {
return false;
}
for (const curSubscription of subscriptions) {
if (subscription.endpoint === curSubscription.endpoint) {
return true;
}
}
// Subscription is not in valid subscription list for user
return false;
};
/**
* Set subscription state for buttons
*
* @param {boolean} subscribed True if subscribed, false if not
*/
function setSubscriptionState(subscribed) {
if (subscribed) {
subscribeButton.classList.add('hidden');
unsubscribeButton.classList.remove('hidden');
} else {
subscribeButton.classList.remove('hidden');
unsubscribeButton.classList.add('hidden');
}
}
/**
* Handler for pushing subscribe button
*
* @param {Object} event Subscribe button push event
* @returns {Promise<void>}
*/
async function subscribeButtonHandler(event) {
event.preventDefault();
subscribeButton.addEventListener('click', subscribeButtonHandler);
// Prevent the user from clicking the subscribe button multiple times.
const result = await Notification.requestPermission();
if (result === 'denied') {
return;
}
const registration = await navigator.serviceWorker.getRegistration(serviceWorkerUrl);
// We might already have a subscription that is unknown to this instance of phpBB.
// Unsubscribe before trying to subscribe again.
if (typeof registration !== 'undefined') {
const subscribed = await registration.pushManager.getSubscription();
if (subscribed) {
await subscribed.unsubscribe();
}
}
const newSubscription = await registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlB64ToUint8Array(vapidPublicKey),
});
const loadingIndicator = phpbb.loadingIndicator();
fetch(subscribeUrl, {
method: 'POST',
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
body: getFormData(newSubscription),
})
.then(response => {
loadingIndicator.fadeOut(phpbb.alertTime);
return response.json();
})
.then(handleSubscribe)
.catch(error => {
loadingIndicator.fadeOut(phpbb.alertTime);
phpbb.alert(ajaxErrorTitle, error);
});
}
/**
* Handler for pushing unsubscribe button
*
* @param {Object} event Unsubscribe button push event
* @returns {Promise<void>}
*/
async function unsubscribeButtonHandler(event) {
event.preventDefault();
const registration = await navigator.serviceWorker.getRegistration(serviceWorkerUrl);
if (typeof registration === 'undefined') {
return;
}
const subscription = await registration.pushManager.getSubscription();
const loadingIndicator = phpbb.loadingIndicator();
fetch(unsubscribeUrl, {
method: 'POST',
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
body: getFormData({ endpoint: subscription.endpoint }),
})
.then(() => {
loadingIndicator.fadeOut(phpbb.alertTime);
return subscription.unsubscribe();
})
.then(unsubscribed => {
if (unsubscribed) {
setSubscriptionState(false);
}
})
.catch(error => {
loadingIndicator.fadeOut(phpbb.alertTime);
phpbb.alert(ajaxErrorTitle, error);
});
}
/**
* Handle subscribe response
*
* @param {Object} response Response from subscription endpoint
*/
function handleSubscribe(response) {
if (response.success) {
setSubscriptionState(true);
if ('form_tokens' in response) {
updateFormTokens(response.form_tokens);
}
}
}
/**
* Get form data object including form tokens
*
* @param {Object} data Data to create form data from
* @returns {FormData} Form data
*/
function getFormData(data) {
const formData = new FormData();
formData.append('form_token', phpbb.webpush.formTokens.formToken);
formData.append('creation_time', phpbb.webpush.formTokens.creationTime.toString());
formData.append('data', JSON.stringify(data));
return formData;
}
/**
* Update form tokens with supplied ones
*
* @param {Object} formTokens
*/
function updateFormTokens(formTokens) {
phpbb.webpush.formTokens.creationTime = formTokens.creation_time;
phpbb.webpush.formTokens.formToken = formTokens.form_token;
}
/**
* Convert a base64 string to Uint8Array
*
* @param base64String
* @returns {Uint8Array}
*/
function urlB64ToUint8Array(base64String) {
const padding = '='.repeat((4 - (base64String.length % 4)) % 4);
const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');
const rawData = window.atob(base64);
const outputArray = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
}
}
function domReady(callBack) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callBack);
} else {
callBack();
}
}
phpbb.webpush = new PhpbbWebpush();
domReady(() => {
/* global phpbbWebpushOptions */
phpbb.webpush.init(phpbbWebpushOptions);
});

View file

@ -12,7 +12,7 @@
*/
/**
* Minimum Requirement: PHP 7.2.0
* Minimum Requirement: PHP 7.1.3
*/
if (!defined('IN_PHPBB'))
@ -51,10 +51,20 @@ if (!defined('PHPBB_INSTALLED'))
$server_port = 443;
}
$script_path = phpbb_get_install_redirect($phpbb_root_path, $phpEx);
$script_name = (!empty($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : getenv('REQUEST_URI');
if (!$script_name)
{
$script_name = (!empty($_SERVER['PHP_SELF'])) ? $_SERVER['PHP_SELF'] : getenv('PHP_SELF');
}
// $phpbb_root_path accounts for redirects from e.g. /adm
$script_path = trim(dirname($script_name)) . '/' . $phpbb_root_path . 'install/app.' . $phpEx;
// Replace any number of consecutive backslashes and/or slashes with a single slash
// (could happen on some proxy setups and/or Windows servers)
$script_path = preg_replace('#[\\\\/]{2,}#', '/', $script_path);
// Eliminate . and .. from the path
require($phpbb_root_path . 'phpbb/filesystem/helper.' . $phpEx);
require($phpbb_root_path . 'phpbb/filesystem.' . $phpEx);
$script_path = \phpbb\filesystem\helper::clean_path($script_path);
$url = (($secure) ? 'https://' : 'http://') . $server_name;

View file

@ -31,7 +31,6 @@
"ext-pdo": "*",
"ext-zlib": "*",
"bantu/ini-get-wrapper": "~1.0",
"carlos-mg89/oauth": "^0.8.15",
"chita/topological_sort": "^3.0",
"composer/composer": "^2.0",
"composer/installers": "^1.9",
@ -39,8 +38,8 @@
"doctrine/dbal": "~3.3.6",
"google/recaptcha": "~1.1",
"guzzlehttp/guzzle": "~6.3",
"lusitanian/oauth": "^0.8.1",
"marc1706/fast-image-size": "^1.1",
"minishlink/web-push": "^8.0",
"s9e/text-formatter": "^2.0",
"symfony/config": "^6.3",
"symfony/console": "^6.3",
@ -70,8 +69,8 @@
"symfony/css-selector": "^6.3",
"symfony/dom-crawler": "^6.3",
"symfony/http-client": "^6.3",
"vimeo/psalm": "^5.18.0",
"psalm/plugin-symfony": "^v5.1.0"
"vimeo/psalm": "^4.14",
"psalm/plugin-symfony": "^3.1"
},
"suggest": {
"ext-mbstring": "Better performance in search"

3032
phpBB/composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,7 @@
imports:
- { resource: services_assets.yml }
- { resource: services_attachment.yml }
- { resource: services_auth.yml }
- { resource: services_avatar.yml }
- { resource: services_ban.yml }
- { resource: services_captcha.yml }
- { resource: services_console.yml }
- { resource: services_content.yml }
@ -126,13 +124,6 @@ services:
arguments:
- '%core.root_path%'
form_helper:
class: phpbb\form\form_helper
arguments:
- '@config'
- '@request'
- '@user'
group_helper:
class: phpbb\group\helper
arguments:

View file

@ -1,4 +0,0 @@
services:
assets.bag:
class: phpbb\template\assets_bag
shared: false

View file

@ -1,54 +0,0 @@
services:
# ----- Ban management -----
ban.manager:
class: \phpbb\ban\manager
arguments:
- '@ban.type_collection'
- '@cache.driver'
- '@dbal.conn'
- '@language'
- '@log'
- '@user'
- '%tables.bans%'
- '%tables.users%'
# ----- Ban types -----
ban.type_collection:
class: \phpbb\di\service_collection
arguments:
- '@service_container'
tags:
- { name: service_collection, tag: ban.type }
ban.type.email:
class: \phpbb\ban\type\email
arguments:
- '@dbal.conn'
- '%tables.bans%'
- '%tables.users%'
- '%tables.sessions%'
- '%tables.sessions_keys%'
tags:
- { name: ban.type }
ban.type.ip:
class: \phpbb\ban\type\ip
arguments:
- '@dbal.conn'
- '%tables.bans%'
- '%tables.users%'
- '%tables.sessions%'
- '%tables.sessions_keys%'
tags:
- { name: ban.type }
ban.type.user:
class: \phpbb\ban\type\user
arguments:
- '@dbal.conn'
- '%tables.bans%'
- '%tables.users%'
- '%tables.sessions%'
- '%tables.sessions_keys%'
tags:
- { name: ban.type }

View file

@ -14,16 +14,27 @@ services:
tags:
- { name: service_collection, tag: captcha.plugins }
core.captcha.plugins.incomplete:
class: phpbb\captcha\plugins\incomplete
core.captcha.plugins.gd:
class: phpbb\captcha\plugins\gd
shared: false
arguments:
- '@config'
- '@template'
- '%core.root_path%'
- '%core.php_ext%'
calls:
- [ set_name, [ core.captcha.plugins.incomplete ] ]
- [set_name, [core.captcha.plugins.gd]]
tags:
- { name: captcha.plugins }
core.captcha.plugins.gd_wave:
class: phpbb\captcha\plugins\gd_wave
shared: false
calls:
- [set_name, [core.captcha.plugins.gd_wave]]
tags:
- { name: captcha.plugins }
core.captcha.plugins.nogd:
class: phpbb\captcha\plugins\nogd
shared: false
calls:
- [set_name, [core.captcha.plugins.nogd]]
tags:
- { name: captcha.plugins }

View file

@ -19,7 +19,6 @@ services:
- '@user'
- '@cache.driver'
- '@dbal.conn'
- '@dbal.tools'
- '@auth'
- '@log'
- '@config'

View file

@ -65,13 +65,6 @@ services:
- '@controller.helper'
- '@event_dispatcher'
posting.lock:
class: phpbb\lock\posting
shared: false
arguments:
- '@cache.driver'
- '@config'
viewonline_helper:
class: phpbb\viewonline_helper
arguments:

View file

@ -9,7 +9,6 @@ services:
arguments:
- '@template'
- '@language'
- '@user'
- '%debug.exceptions%'
tags:
- { name: kernel.event_subscriber }

View file

@ -243,19 +243,3 @@ services:
- '%core.php_ext%'
tags:
- { name: notification.method }
notification.method.webpush:
class: phpbb\notification\method\webpush
shared: false
arguments:
- '@config'
- '@dbal.conn'
- '@log'
- '@user_loader'
- '@user'
- '%core.root_path%'
- '%core.php_ext%'
- '%tables.notification_push%'
- '%tables.push_subscriptions%'
tags:
- { name: notification.method }

View file

@ -26,7 +26,6 @@ services:
arguments:
- '@config'
- '@dbal.conn'
- '@dbal.tools'
- '@event_dispatcher'
- '@language'
- '@user'

View file

@ -5,7 +5,6 @@ services:
template.twig.environment:
class: phpbb\template\twig\environment
arguments:
- '@assets.bag'
- '@config'
- '@filesystem'
- '@path_helper'

View file

@ -15,17 +15,3 @@ services:
- '%tables.users%'
- '%core.root_path%'
- '%core.php_ext%'
phpbb.ucp.controller.webpush:
class: phpbb\ucp\controller\webpush
arguments:
- '@config'
- '@controller.helper'
- '@dbal.conn'
- '@form_helper'
- '@path_helper'
- '@request'
- '@user'
- '@template.twig.environment'
- '%tables.notification_push%'
- '%tables.push_subscriptions%'

Some files were not shown because too many files have changed in this diff Show more