Compare commits

..

8 commits

Author SHA1 Message Date
Marc Alexander
ed943854ec
[ticket/17153] Use mocked user class in extension test
PHPBB3-17153
2023-09-22 13:08:52 +02:00
Marc Alexander
839d2ecbff
[ticket/17153] Add basic avatar config file for installer
It doesn't actually add proper avatar functionality to the installer but
provides the necessary base classes for templating.

PHPBB3-17153
2023-09-22 13:08:52 +02:00
Marc Alexander
7a4352fd72
[ticket/17153] Use routing helper instead of controller helper in upload avatar
The controller helper class is not needed, routing helper brings all the
needed functionality already.

PHPBB3-17153
2023-09-22 13:08:50 +02:00
Marc Alexander
58ae38f5a2
[ticket/17153] Remove phpbb_get_avatar()
PHPBB3-17153
2023-09-22 13:07:49 +02:00
Marc Alexander
c193140e1d
[ticket/17153] Remove get_user_avatar
PHPBB3-17153
2023-09-22 13:06:37 +02:00
Marc Alexander
7fcb455ec4
[ticket/17153] Remove phpbb_get_user_avatar
PHPBB3-17153
2023-09-22 13:06:37 +02:00
Marc Alexander
90d35b760f
[ticket/17153] Remove phpbb_get_group_avatar()
PHPBB3-17153
2023-09-22 13:06:37 +02:00
Marc Alexander
2f623770df
[ticket/17153] Use twig and avatar helper to render avatars
PHPBB3-17153
2023-09-22 13:06:36 +02:00
447 changed files with 18070 additions and 14080 deletions

View file

@ -30,7 +30,7 @@ installer:
server:
cookie_secure: false
server_protocol: http://
force_server_vars: true
force_server_vars: false
server_name: localhost
server_port: 80
script_path: /

View file

@ -34,14 +34,6 @@ sudo ln -s /workspaces/phpbb/phpBB /var/www/html
echo "[Codespaces] Copy phpBB configuration"
cp /workspaces/phpbb/.devcontainer/resources/phpbb-config.yml /workspaces/phpbb/phpBB/install/install-config.yml
# Force the server URL to reflect the Codespace
# https://docs.github.com/en/codespaces/developing-in-a-codespace/default-environment-variables-for-your-codespace
if [ "$CODESPACES" = true ] ; then
echo "[Codespaces] Set the phpBB server name using default environment variables"
codespaces_url="${CODESPACE_NAME}-80.${GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN}"
sed -i "s/localhost/$codespaces_url/g" /workspaces/phpbb/phpBB/install/install-config.yml
fi
# Install phpBB
echo "[Codespaces] Run phpBB CLI installation"
cd /workspaces/phpbb/phpBB && composer install --no-interaction

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

@ -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

@ -225,7 +225,6 @@
<fieldset>
<legend>{L_ADD_USERS}</legend>
{% EVENT acp_groups_add_user_options_before %}
<dl>
<dt><label for="leader">{L_USER_GROUP_LEADER}{L_COLON}</label></dt>
<dd><label><input name="leader" type="radio" class="radio" value="1" /> {L_YES}</label>
@ -236,13 +235,11 @@
<dd><label><input name="default" type="radio" class="radio" value="1" /> {L_YES}</label>
<label><input name="default" type="radio" class="radio" id="default" value="0" checked="checked" /> {L_NO}</label></dd>
</dl>
{% EVENT acp_groups_add_user_usernames_before %}
<dl>
<dt><label for="usernames">{L_USERNAME}{L_COLON}</label><br /><span>{L_USERNAMES_EXPLAIN}</span></dt>
<dd><textarea id="usernames" name="usernames" cols="40" rows="5"></textarea></dd>
<dd><!-- EVENT acp_groups_find_username_prepend -->[ <a href="{U_FIND_USERNAME}" onclick="find_username(this.href); return false;">{L_FIND_USERNAME}</a> ]<!-- EVENT acp_groups_find_username_append --></dd>
</dl>
{% EVENT acp_groups_add_user_options_after %}
<p class="quick">
<input class="button2" type="submit" name="addusers" value="{L_SUBMIT}" />

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

@ -14,40 +14,27 @@
<p>{L_ADMIN_INTRO}</p>
{% if S_UPDATE_INCOMPLETE %}
<!-- IF S_UPDATE_INCOMPLETE -->
<div class="errorbox">
<p>{{ lang('UPDATE_INCOMPLETE') }} <a href="{{ U_VERSIONCHECK }}">{{ lang('MORE_INFORMATION') }}</a></p>
<p>{L_UPDATE_INCOMPLETE} <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
</div>
{% elseif S_VERSIONCHECK_FAIL %}
<!-- ELSEIF S_VERSIONCHECK_FAIL -->
<div class="errorbox notice">
<p>{{ lang('VERSIONCHECK_FAIL') }}</p>
<p>{{ VERSIONCHECK_FAIL_REASON }}</p>
<p><a href="{{ U_VERSIONCHECK_FORCE }}">{{ lang('VERSIONCHECK_FORCE_UPDATE') }}</a> &middot; <a href="{{ U_VERSIONCHECK }}">{{ lang('MORE_INFORMATION') }}</a></p>
<p>{L_VERSIONCHECK_FAIL}</p>
<p>{VERSIONCHECK_FAIL_REASON}</p>
<p><a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> &middot; <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
</div>
{% elseif not S_VERSION_UP_TO_DATE %}
<!-- ELSEIF not S_VERSION_UP_TO_DATE -->
<div class="errorbox">
<p>{{ lang('VERSION_NOT_UP_TO_DATE_TITLE') }}</p>
<p><a href="{{ U_VERSIONCHECK_FORCE }}">{{ lang('VERSIONCHECK_FORCE_UPDATE') }}</a> &middot; <a href="{{ U_VERSIONCHECK }}">{{ lang('MORE_INFORMATION') }}</a></p>
<p>{L_VERSION_NOT_UP_TO_DATE_TITLE}</p>
<p><a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a> &middot; <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
</div>
{% elseif S_VERSION_UP_TO_DATE && S_VERSIONCHECK_FORCE %}
<div class="successbox">
<p>{{ lang('VERSION_UP_TO_DATE_ACP') }}</p>
</div>
{% endif %}
{% if S_VERSION_UPGRADEABLE %}
<!-- ENDIF -->
<!-- IF S_VERSION_UPGRADEABLE -->
<div class="errorbox notice">
<p>{{ UPGRADE_INSTRUCTIONS }}</p>
<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 %}
<!-- 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

@ -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>

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

@ -28,10 +28,9 @@
"require": {
"php": "^8.1",
"ext-json": "*",
"ext-mbstring": "*",
"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",
@ -51,7 +50,6 @@
"symfony/finder": "^6.3",
"symfony/http-foundation": "^6.3",
"symfony/http-kernel": "^6.3",
"symfony/polyfill-mbstring": "^1.23",
"symfony/mime": "^6.3",
"symfony/process": "^6.3",
"symfony/proxy-manager-bridge": "^6.3",
@ -70,11 +68,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"
},
"suggest": {
"ext-mbstring": "Better performance in search"
"vimeo/psalm": "^4.14",
"psalm/plugin-symfony": "^3.1"
},
"extra": {
"branch-alias": {

3038
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 }

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