Merge e7b5053d92
into 3647cf2cfe
|
@ -9,14 +9,11 @@
|
|||
# the docs/CREDITS.txt file.
|
||||
#
|
||||
set -e
|
||||
set +x
|
||||
|
||||
sudo npm install -g > /dev/null
|
||||
npm ci > /dev/null
|
||||
set -x
|
||||
|
||||
EXTNAME=$1
|
||||
BRANCH=$2
|
||||
|
||||
# Move the extension in place
|
||||
mkdir --parents phpBB/ext/$EXTNAME
|
||||
cp -R ../tmp/* phpBB/ext/$EXTNAME
|
||||
|
||||
# Move the extensions travis/phpunit-*-travis.xml files in place
|
||||
cp -R travis/* phpBB/ext/$EXTNAME/travis
|
||||
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"
|
|
@ -9,15 +9,10 @@
|
|||
# the docs/CREDITS.txt file.
|
||||
#
|
||||
set -e
|
||||
set +x
|
||||
|
||||
sudo npm install -g > /dev/null
|
||||
npm ci > /dev/null
|
||||
set -x
|
||||
|
||||
DB=$1
|
||||
TRAVIS_PHP_VERSION=$2
|
||||
NOTESTS=$3
|
||||
|
||||
if [ "$NOTESTS" == '1' ]
|
||||
then
|
||||
cd build
|
||||
../phpBB/vendor/bin/phing sniff
|
||||
cd ..
|
||||
fi
|
||||
node_modules/stylelint/bin/stylelint.js "phpBB/styles/prosilver/theme/*.css"
|
||||
node_modules/stylelint/bin/stylelint.js "phpBB/adm/style/*.css"
|
2
.github/setup-database.sh
vendored
|
@ -22,5 +22,5 @@ fi
|
|||
|
||||
if [ "$MYISAM" == '1' ]
|
||||
then
|
||||
mysql -h 127.0.0.1 -u root -e 'SET GLOBAL storage_engine=MyISAM;'
|
||||
mysql -h 127.0.0.1 -u root -e 'SET GLOBAL default_storage_engine=MyISAM;'
|
||||
fi
|
||||
|
|
5
.github/setup-phpbb.sh
vendored
|
@ -28,9 +28,4 @@ fi
|
|||
|
||||
cd phpBB
|
||||
php ../composer.phar install --dev --no-interaction
|
||||
if [[ "$PHP_VERSION" =~ ^nightly$ || "$PHP_VERSION" =~ ^8 ]]
|
||||
then
|
||||
php ../composer.phar remove phpunit/dbunit --dev --update-with-dependencies \
|
||||
&& php ../composer.phar require symfony/yaml:~4.4 misantron/dbunit:~5.0 phpunit/phpunit:^9.3 doctrine/instantiator:^1.4 --dev --update-with-all-dependencies --ignore-platform-reqs
|
||||
fi
|
||||
cd ..
|
||||
|
|
144
.github/setup-sphinx.sh
vendored
Executable file
|
@ -0,0 +1,144 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# This file is part of the phpBB Forum Software package.
|
||||
#
|
||||
# @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
# @license GNU General Public License, version 2 (GPL-2.0)
|
||||
#
|
||||
# For full copyright and license information, please see
|
||||
# the docs/CREDITS.txt file.
|
||||
#
|
||||
set -e
|
||||
set -x
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get install -q -y sphinxsearch
|
||||
|
||||
DIR=$(dirname "$0")
|
||||
|
||||
SPHINX_DAEMON_HOST="localhost"
|
||||
SPHINX_DAEMON_PORT="9312"
|
||||
SPHINX_CONF="$DIR/sphinx.conf"
|
||||
SPHINX_DATA_DIR="/var/run/sphinxsearch"
|
||||
SPHINX_LOG="$SPHINX_DATA_DIR/log/searchd.log"
|
||||
SPHINX_QUERY_LOG="$SPHINX_DATA_DIR/log/sphinx-query.log"
|
||||
ID="saw9zf2fdhp1goue" # Randomly generated via phpBB unique_id()
|
||||
|
||||
PHPBB_TEST_DBHOST="0.0.0.0"
|
||||
PHPBB_TEST_DBNAME="phpbb_tests"
|
||||
PHPBB_TEST_DBUSER="root"
|
||||
PHPBB_TEST_DBPASSWD=""
|
||||
|
||||
sudo service sphinxsearch stop
|
||||
sudo mkdir -p "$SPHINX_DATA_DIR/log"
|
||||
sudo chown "sphinxsearch" "$SPHINX_DATA_DIR/log"
|
||||
|
||||
# Generate configuration file for Sphinx
|
||||
echo "
|
||||
source source_phpbb_${ID}_main
|
||||
{
|
||||
type = mysql # mysql or pgsql
|
||||
sql_host = $PHPBB_TEST_DBHOST
|
||||
sql_user = $PHPBB_TEST_DBUSER
|
||||
sql_pass = $PHPBB_TEST_DBPASSWD
|
||||
sql_db = $PHPBB_TEST_DBNAME
|
||||
sql_port =
|
||||
sql_query_pre = SET NAMES 'utf8'
|
||||
sql_query_pre = UPDATE phpbb_sphinx SET max_doc_id = (SELECT MAX(post_id) FROM phpbb_posts) WHERE counter_id = 1
|
||||
sql_query_range = SELECT MIN(post_id), MAX(post_id) FROM phpbb_posts
|
||||
sql_range_step = 5000
|
||||
sql_query = SELECT \
|
||||
p.post_id AS id, \
|
||||
p.forum_id, \
|
||||
p.topic_id, \
|
||||
p.poster_id, \
|
||||
p.post_visibility, \
|
||||
CASE WHEN p.post_id = t.topic_first_post_id THEN 1 ELSE 0 END as topic_first_post, \
|
||||
p.post_time, \
|
||||
p.post_subject, \
|
||||
p.post_subject as title, \
|
||||
p.post_text as data, \
|
||||
t.topic_last_post_time, \
|
||||
0 as deleted \
|
||||
FROM phpbb_posts p, phpbb_topics t \
|
||||
WHERE \
|
||||
p.topic_id = t.topic_id \
|
||||
AND p.post_id >= \$start AND p.post_id <= \$end
|
||||
sql_query_post =
|
||||
sql_query_post_index = UPDATE phpbb_sphinx SET max_doc_id = \$maxid WHERE counter_id = 1
|
||||
sql_attr_uint = forum_id
|
||||
sql_attr_uint = topic_id
|
||||
sql_attr_uint = poster_id
|
||||
sql_attr_uint = post_visibility
|
||||
sql_attr_bool = topic_first_post
|
||||
sql_attr_bool = deleted
|
||||
sql_attr_timestamp = post_time
|
||||
sql_attr_timestamp = topic_last_post_time
|
||||
sql_attr_string = post_subject
|
||||
}
|
||||
source source_phpbb_${ID}_delta : source_phpbb_${ID}_main
|
||||
{
|
||||
sql_query_pre = SET NAMES 'utf8'
|
||||
sql_query_range =
|
||||
sql_range_step =
|
||||
sql_query = SELECT \
|
||||
p.post_id AS id, \
|
||||
p.forum_id, \
|
||||
p.topic_id, \
|
||||
p.poster_id, \
|
||||
p.post_visibility, \
|
||||
CASE WHEN p.post_id = t.topic_first_post_id THEN 1 ELSE 0 END as topic_first_post, \
|
||||
p.post_time, \
|
||||
p.post_subject, \
|
||||
p.post_subject as title, \
|
||||
p.post_text as data, \
|
||||
t.topic_last_post_time, \
|
||||
0 as deleted \
|
||||
FROM phpbb_posts p, phpbb_topics t \
|
||||
WHERE \
|
||||
p.topic_id = t.topic_id \
|
||||
AND p.post_id >= ( SELECT max_doc_id FROM phpbb_sphinx WHERE counter_id=1 )
|
||||
sql_query_post_index =
|
||||
}
|
||||
index index_phpbb_${ID}_main
|
||||
{
|
||||
path = $SPHINX_DATA_DIR/index_phpbb_${ID}_main
|
||||
source = source_phpbb_${ID}_main
|
||||
docinfo = extern
|
||||
morphology = none
|
||||
stopwords =
|
||||
wordforms =
|
||||
exceptions =
|
||||
min_word_len = 2
|
||||
charset_table = U+FF10..U+FF19->0..9, 0..9, U+FF41..U+FF5A->a..z, U+FF21..U+FF3A->a..z, A..Z->a..z, a..z, U+0149, U+017F, U+0138, U+00DF, U+00FF, U+00C0..U+00D6->U+00E0..U+00F6, U+00E0..U+00F6, U+00D8..U+00DE->U+00F8..U+00FE, U+00F8..U+00FE, U+0100->U+0101, U+0101, U+0102->U+0103, U+0103, U+0104->U+0105, U+0105, U+0106->U+0107, U+0107, U+0108->U+0109, U+0109, U+010A->U+010B, U+010B, U+010C->U+010D, U+010D, U+010E->U+010F, U+010F, U+0110->U+0111, U+0111, U+0112->U+0113, U+0113, U+0114->U+0115, U+0115, U+0116->U+0117, U+0117, U+0118->U+0119, U+0119, U+011A->U+011B, U+011B, U+011C->U+011D, U+011D, U+011E->U+011F, U+011F, U+0130->U+0131, U+0131, U+0132->U+0133, U+0133, U+0134->U+0135, U+0135, U+0136->U+0137, U+0137, U+0139->U+013A, U+013A, U+013B->U+013C, U+013C, U+013D->U+013E, U+013E, U+013F->U+0140, U+0140, U+0141->U+0142, U+0142, U+0143->U+0144, U+0144, U+0145->U+0146, U+0146, U+0147->U+0148, U+0148, U+014A->U+014B, U+014B, U+014C->U+014D, U+014D, U+014E->U+014F, U+014F, U+0150->U+0151, U+0151, U+0152->U+0153, U+0153, U+0154->U+0155, U+0155, U+0156->U+0157, U+0157, U+0158->U+0159, U+0159, U+015A->U+015B, U+015B, U+015C->U+015D, U+015D, U+015E->U+015F, U+015F, U+0160->U+0161, U+0161, U+0162->U+0163, U+0163, U+0164->U+0165, U+0165, U+0166->U+0167, U+0167, U+0168->U+0169, U+0169, U+016A->U+016B, U+016B, U+016C->U+016D, U+016D, U+016E->U+016F, U+016F, U+0170->U+0171, U+0171, U+0172->U+0173, U+0173, U+0174->U+0175, U+0175, U+0176->U+0177, U+0177, U+0178->U+00FF, U+00FF, U+0179->U+017A, U+017A, U+017B->U+017C, U+017C, U+017D->U+017E, U+017E, U+0410..U+042F->U+0430..U+044F, U+0430..U+044F, U+4E00..U+9FFF
|
||||
ignore_chars = U+0027, U+002C
|
||||
min_prefix_len = 3
|
||||
min_infix_len = 0
|
||||
html_strip = 1
|
||||
index_exact_words = 0
|
||||
blend_chars = U+23, U+24, U+25, U+26, U+40
|
||||
}
|
||||
index index_phpbb_${ID}_delta : index_phpbb_${ID}_main
|
||||
{
|
||||
path = $SPHINX_DATA_DIR/index_phpbb_${ID}_delta
|
||||
source = source_phpbb_${ID}_delta
|
||||
}
|
||||
indexer
|
||||
{
|
||||
mem_limit = 512M
|
||||
}
|
||||
searchd
|
||||
{
|
||||
listen = $SPHINX_DAEMON_PORT
|
||||
log = $SPHINX_LOG
|
||||
query_log = $SPHINX_QUERY_LOG
|
||||
read_timeout = 5
|
||||
max_children = 30
|
||||
pid_file = $SPHINX_DATA_DIR/searchd.pid
|
||||
binlog_path = $SPHINX_DATA_DIR/
|
||||
}
|
||||
" > $SPHINX_CONF
|
||||
|
||||
sudo mv "$SPHINX_CONF" "/etc/sphinxsearch/sphinx.conf"
|
||||
sudo sed -i "s/START=no/START=yes/g" "/etc/default/sphinxsearch"
|
||||
sudo chmod 777 "/var/run/sphinxsearch"
|
238
.github/workflows/tests.yml
vendored
|
@ -17,12 +17,12 @@ on:
|
|||
jobs:
|
||||
# Basic checks, e.g. parse errors, commit messages, etc.
|
||||
basic-checks:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- db: 'none'
|
||||
php: '7.2'
|
||||
php: '8.1'
|
||||
NOTESTS: 1
|
||||
|
||||
name: PHP ${{ matrix.php }} - ${{ matrix.db }}
|
||||
|
@ -37,24 +37,21 @@ jobs:
|
|||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, mysqli, sqlite, pdo_sqlite, intl, gd, exif, iconv, sqlsrv, pdo_sqlsrv, ldap
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, intl, gd, exif, iconv
|
||||
coverage: none
|
||||
|
||||
- name: Get Composer Cache Directory
|
||||
id: composer-cache
|
||||
env:
|
||||
PHP_VERSION: ${{ matrix.php }}
|
||||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
echo "version=${PHP_VERSION%.*}" >> $GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
|
@ -72,6 +69,10 @@ jobs:
|
|||
run: |
|
||||
.github/check-doctum-parse-errors.sh
|
||||
|
||||
- name: Check code with psalm
|
||||
run: |
|
||||
phpBB/vendor/bin/psalm --output-format=github
|
||||
|
||||
- name: Check image ICC profiles
|
||||
run: |
|
||||
.github/check-image-icc-profiles.sh
|
||||
|
@ -80,6 +81,14 @@ jobs:
|
|||
run: |
|
||||
.github/check-executable-files.sh ./
|
||||
|
||||
- name: Check stylesheets
|
||||
run: |
|
||||
.github/check-stylesheet.sh
|
||||
|
||||
- name: Lint JavaScript files
|
||||
run: |
|
||||
.github/check-js.sh
|
||||
|
||||
- name: Check commit message
|
||||
if: github.event_name == 'pull_request'
|
||||
run: |
|
||||
|
@ -88,48 +97,50 @@ jobs:
|
|||
|
||||
# Tests for MySQL and MariaDB
|
||||
mysql-tests:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- php: '7.2'
|
||||
db: "mariadb:10.1"
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "mariadb:10.2"
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "mariadb:10.3"
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "mariadb:10.4"
|
||||
- php: '7.2'
|
||||
db: "mariadb:10.5"
|
||||
- php: '7.2'
|
||||
db: "mysql:5.6"
|
||||
db_alias: "MySQL Slow Tests"
|
||||
SLOWTESTS: 1
|
||||
- php: '7.2'
|
||||
db: "mysql:5.6"
|
||||
db_alias: "MyISAM Tests"
|
||||
MYISAM: 1
|
||||
- php: '7.2'
|
||||
db: "mysql:5.6"
|
||||
- php: '7.2'
|
||||
db: "mysql:5.7"
|
||||
- php: '7.3'
|
||||
db: "mysql:5.7"
|
||||
- php: '7.4'
|
||||
db: "mysql:5.7"
|
||||
- php: '7.4'
|
||||
db: "mysql:8.0"
|
||||
- php: '8.0'
|
||||
db: "mysql:5.7"
|
||||
- php: '8.1'
|
||||
db: "mariadb:10.6"
|
||||
- php: '8.1'
|
||||
db: "mariadb:10.9"
|
||||
- php: '8.1'
|
||||
db: "mariadb:10.10"
|
||||
- php: '8.1'
|
||||
db: "mariadb:10.11"
|
||||
- php: '8.1'
|
||||
db: "mysql:5.7"
|
||||
- php: '8.2'
|
||||
db_alias: "MySQL Slow Tests"
|
||||
SLOWTESTS: 1
|
||||
- php: '8.1'
|
||||
db: "mysql:5.7"
|
||||
db_alias: "MyISAM Tests"
|
||||
MYISAM: 1
|
||||
- php: '8.1'
|
||||
db: "mysql:5.7"
|
||||
- php: '8.1'
|
||||
db: "mysql:8.0"
|
||||
- php: '8.1'
|
||||
db: "mysql:8.1"
|
||||
- php: '8.2'
|
||||
db: "mysql:8.0"
|
||||
- php: '8.2'
|
||||
db: "mariadb:10.2"
|
||||
- php: '8.3'
|
||||
db: "mysql:5.7"
|
||||
- php: '8.3'
|
||||
db: "mariadb:10.2"
|
||||
- php: '8.4'
|
||||
db: "mysql:5.7"
|
||||
db: "mysql:8.0"
|
||||
- php: '8.4'
|
||||
db: "mariadb:10.3"
|
||||
|
||||
name: PHP ${{ matrix.php }} - ${{ matrix.db_alias != '' && matrix.db_alias || matrix.db }}
|
||||
|
||||
|
@ -172,7 +183,7 @@ jobs:
|
|||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, mysqli, sqlite, pdo_sqlite, intl, gd, exif, iconv, sqlsrv, pdo_sqlsrv, ldap
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, intl, gd, exif, iconv, mysqli, pdo, pdo_mysql, ldap
|
||||
coverage: none
|
||||
|
||||
- name: Get Composer Cache Directory
|
||||
|
@ -182,14 +193,13 @@ jobs:
|
|||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
echo "version=${PHP_VERSION%.*}" >> $GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
|
@ -211,6 +221,17 @@ 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
|
||||
|
||||
- name: Lint tests
|
||||
if: ${{ matrix.SLOWTESTS != 1 && steps.database-type.outputs.db == 'mysql' }}
|
||||
run: phpBB/vendor/bin/phpunit tests/lint_test.php
|
||||
|
@ -231,46 +252,38 @@ jobs:
|
|||
|
||||
# Tests for PostgreSQL
|
||||
postgres-tests:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- php: '7.2'
|
||||
db: "postgres:9.3"
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "postgres:9.5"
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "postgres:9.6"
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "postgres:10"
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "postgres:11"
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "postgres:12"
|
||||
- php: '7.2'
|
||||
db: "postgres:13"
|
||||
- php: '7.3'
|
||||
db: "postgres:13"
|
||||
- php: '7.4'
|
||||
db: "postgres:13"
|
||||
- php: '8.0'
|
||||
db: "postgres:12"
|
||||
- php: '8.0'
|
||||
- php: '8.1'
|
||||
db: "postgres:13"
|
||||
- php: '8.1'
|
||||
db: "postgres:14"
|
||||
- php: '8.1'
|
||||
db: "postgres:15"
|
||||
- php: '8.2'
|
||||
db: "postgres:14"
|
||||
db: "postgres:9.5"
|
||||
- php: '8.3'
|
||||
db: "postgres:14"
|
||||
db: "postgres:9.5"
|
||||
- php: '8.4'
|
||||
db: "postgres:14"
|
||||
db: "postgres:9.5"
|
||||
|
||||
name: PHP ${{ matrix.php }} - ${{ matrix.db }}
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: ${{ matrix.db != 'postgres:9.3' && matrix.db != 'postgres:9.5' && matrix.db != 'postgres:9.6' && matrix.db != 'postgres:10' && matrix.db != 'postgres:11' && matrix.db != 'postgres:12' && matrix.db != 'postgres:13' && 'postgres:10' || matrix.db }}
|
||||
image: ${{ matrix.db != 'postgres:9.5' && matrix.db != 'postgres:9.6' && matrix.db != 'postgres:10' && matrix.db != 'postgres:11' && matrix.db != 'postgres:12' && matrix.db != 'postgres:13' && matrix.db != 'postgres:14' && matrix.db != 'postgres:15' && 'postgres:10' || matrix.db }}
|
||||
env:
|
||||
POSTGRES_HOST: localhost
|
||||
POSTGRES_USER: postgres
|
||||
|
@ -309,7 +322,7 @@ jobs:
|
|||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, mysqli, sqlite, pdo_sqlite, intl, gd, exif, iconv, sqlsrv, pdo_sqlsrv, ldap
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, intl, gd, exif, iconv, pgsql, pdo, pdo_pgsql
|
||||
coverage: none
|
||||
|
||||
- name: Get Composer Cache Directory
|
||||
|
@ -319,14 +332,13 @@ jobs:
|
|||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
echo "version=${PHP_VERSION%.*}" >> $GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
|
@ -343,6 +355,13 @@ 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}}
|
||||
|
@ -351,24 +370,27 @@ jobs:
|
|||
|
||||
# Other database types, namely sqlite3 and mssql
|
||||
other-tests:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "sqlite3"
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "mcr.microsoft.com/mssql/server:2017-latest"
|
||||
db_alias: 'MSSQL 2017'
|
||||
- php: '7.2'
|
||||
- php: '8.1'
|
||||
db: "mcr.microsoft.com/mssql/server:2019-latest"
|
||||
db_alias: 'MSSQL 2019'
|
||||
- php: '8.1'
|
||||
db: "mcr.microsoft.com/mssql/server:2022-latest"
|
||||
db_alias: 'MSSQL 2022'
|
||||
|
||||
name: PHP ${{ matrix.php }} - ${{ matrix.db_alias != '' && matrix.db_alias || matrix.db }}
|
||||
|
||||
services:
|
||||
mssql:
|
||||
image: ${{ matrix.db != 'mcr.microsoft.com/mssql/server:2017-latest' && matrix.db != 'mcr.microsoft.com/mssql/server:2019-latest' && 'mcr.microsoft.com/mssql/server:2017-latest' || matrix.db }}
|
||||
image: ${{ matrix.db != 'mcr.microsoft.com/mssql/server:2017-latest' && matrix.db != 'mcr.microsoft.com/mssql/server:2019-latest' && matrix.db != 'mcr.microsoft.com/mssql/server:2022-latest' && 'mcr.microsoft.com/mssql/server:2017-latest' || matrix.db }}
|
||||
env:
|
||||
SA_PASSWORD: "Pssw0rd_12"
|
||||
ACCEPT_EULA: "y"
|
||||
|
@ -400,7 +422,7 @@ jobs:
|
|||
env:
|
||||
MATRIX_DB: ${{ matrix.db }}
|
||||
run: |
|
||||
if [ $MATRIX_DB == 'mcr.microsoft.com/mssql/server:2017-latest' ] || [ $MATRIX_DB == 'mcr.microsoft.com/mssql/server:2019-latest' ]
|
||||
if [ $MATRIX_DB == 'mcr.microsoft.com/mssql/server:2017-latest' ] || [ $MATRIX_DB == 'mcr.microsoft.com/mssql/server:2019-latest' ] || [ $MATRIX_DB == 'mcr.microsoft.com/mssql/server:2022-latest' ]
|
||||
then
|
||||
db='mssql'
|
||||
else
|
||||
|
@ -412,7 +434,7 @@ jobs:
|
|||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, mysqli, sqlite, pdo_sqlite, intl, gd, exif, iconv, sqlsrv, pdo_sqlsrv, ldap
|
||||
extensions: dom, curl, libxml, mbstring, zip, pcntl, intl, gd, exif, iconv, sqlsrv, pdo, pdo_sqlsrv
|
||||
coverage: none
|
||||
|
||||
- name: Get Composer Cache Directory
|
||||
|
@ -422,14 +444,13 @@ jobs:
|
|||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
echo "version=${PHP_VERSION%.*}" >> $GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
|
@ -446,6 +467,13 @@ 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}}
|
||||
|
@ -457,45 +485,11 @@ jobs:
|
|||
runs-on: windows-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- php: '7.4'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.0'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.1'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.2'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.3'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '8.4'
|
||||
db: "postgres"
|
||||
type: 'unit'
|
||||
- php: '7.4'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.0'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.1'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.2'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.3'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
- php: '8.4'
|
||||
db: "postgres"
|
||||
type: 'functional'
|
||||
type: ['unit', 'functional']
|
||||
php: ['8.1', '8.2', '8.3']
|
||||
db: ['postgres']
|
||||
|
||||
name: Windows - PHP ${{ matrix.php }} - ${{ matrix.db }} - ${{ matrix.type }}
|
||||
name: Windows - ${{ matrix.type }} - PHP ${{ matrix.php }} - ${{ matrix.db }}
|
||||
|
||||
steps:
|
||||
- name: Prepare git for Windows
|
||||
|
@ -518,15 +512,13 @@ jobs:
|
|||
run: |
|
||||
cd phpBB
|
||||
echo "dir=$(composer config cache-files-dir)" >> $env:GITHUB_OUTPUT
|
||||
$major_version="${{ matrix.php }}".substring(0,1)
|
||||
echo "version=$major_version" >> $env:GITHUB_OUTPUT
|
||||
cd ..
|
||||
|
||||
- name: Cache Composer dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: composer-${{ steps.composer-cache.outputs.version }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
key: composer-${{ matrix.php }}-${{ hashFiles('phpBB/composer.lock') }}
|
||||
|
||||
- name: Setup environment for phpBB
|
||||
env:
|
||||
|
@ -558,6 +550,10 @@ jobs:
|
|||
icacls "${env:GITHUB_WORKSPACE}\phpBB\cache" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\files" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\store" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\ext" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\vendor-ext" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\composer-ext.json" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\composer-ext.lock" /grant Users:F /T
|
||||
icacls "${env:GITHUB_WORKSPACE}\phpBB\images\avatars\upload" /grant Users:F /T
|
||||
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS_IUSRS", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
|
||||
$acl = Get-ACL "${env:TEMP_DIR}"
|
||||
|
@ -565,8 +561,6 @@ jobs:
|
|||
Set-ACL -Path "${env:TEMP_DIR}" -ACLObject $acl
|
||||
cd ${env:GITHUB_WORKSPACE}\phpBB
|
||||
php ..\composer.phar install
|
||||
php ..\composer.phar remove phpunit/dbunit --dev --update-with-dependencies
|
||||
php ..\composer.phar require symfony/yaml:~4.4 misantron/dbunit:~5.0 phpunit/phpunit:^9.3 doctrine/instantiator:^1.4 --dev --update-with-all-dependencies --ignore-platform-reqs
|
||||
cd ..
|
||||
- name: Setup database
|
||||
run: |
|
||||
|
@ -588,11 +582,19 @@ 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: |
|
||||
phpBB/vendor/bin/phpunit --configuration .github/phpunit-psql-windows-github.xml --verbose --stop-on-error --exclude-group functional
|
||||
- name: Run unit tests
|
||||
phpBB/vendor/bin/phpunit --configuration .github/phpunit-psql-windows-github.xml --verbose --stop-on-error --exclude-group functional,slow
|
||||
- name: Run functional tests
|
||||
if: ${{ matrix.type == 'functional' }}
|
||||
run: |
|
||||
phpBB/vendor/bin/phpunit --configuration .github/phpunit-psql-windows-github.xml --verbose --stop-on-error --group functional
|
||||
|
|
7
.gitignore
vendored
|
@ -19,7 +19,6 @@
|
|||
# Excludes all custom styles
|
||||
/phpBB/styles/*
|
||||
!/phpBB/styles/prosilver
|
||||
/phpBB/styles/prosilver/theme/*/
|
||||
!/phpBB/styles/prosilver/theme/en
|
||||
!/phpBB/styles/prosilver/theme/images
|
||||
!/phpBB/styles/all
|
||||
|
@ -35,9 +34,14 @@
|
|||
|
||||
# Excludes vendors
|
||||
/phpBB/vendor
|
||||
/phpBB/vendor-ext/*
|
||||
!/phpBB/vendor-ext/.git-keep
|
||||
/phpBB/composer-ext.json
|
||||
/phpBB/composer-ext.lock
|
||||
|
||||
# Excludes test / dev files
|
||||
/phpunit.xml
|
||||
/.phpunit.result.cache
|
||||
/phpBB/composer.phar
|
||||
/tests/phpbb_unit_tests.sqlite*
|
||||
/tests/test_config*.php
|
||||
|
@ -46,6 +50,7 @@
|
|||
/vagrant/phpbb-install-config.yml
|
||||
.vagrant
|
||||
node_modules
|
||||
/build/package_signature
|
||||
|
||||
# Excludes IDE / editors files
|
||||
*~
|
||||
|
|
78
.jscsrc
|
@ -1,78 +0,0 @@
|
|||
|
||||
{
|
||||
"excludeFiles": ["node_modules/**", "**/build/**"],
|
||||
"requireCurlyBraces": [
|
||||
"if", "else", "for", "while", "do", "try", "catch"
|
||||
],
|
||||
"requireSpaceBeforeKeywords": [
|
||||
"else", "while", "catch"
|
||||
],
|
||||
"requireSpaceAfterKeywords": [
|
||||
"do", "for", "if", "else", "switch", "case", "try", "catch", "while", "return", "typeof"
|
||||
],
|
||||
"requireSpaceBeforeBlockStatements": true,
|
||||
"requireParenthesesAroundIIFE": true,
|
||||
"requireSpacesInConditionalExpression": {
|
||||
"afterTest": true,
|
||||
"beforeConsequent": true,
|
||||
"afterConsequent": true,
|
||||
"beforeAlternate": true
|
||||
},
|
||||
"requireSpacesInAnonymousFunctionExpression": {
|
||||
"beforeOpeningCurlyBrace": true
|
||||
},
|
||||
"disallowSpacesInNamedFunctionExpression": {
|
||||
"beforeOpeningRoundBrace": true
|
||||
},
|
||||
"requireSpacesInFunction": {
|
||||
"beforeOpeningCurlyBrace": true
|
||||
},
|
||||
"disallowSpacesInCallExpression": true,
|
||||
"requireBlocksOnNewline": true,
|
||||
"requirePaddingNewlinesBeforeKeywords": ["case"],
|
||||
"disallowEmptyBlocks": true,
|
||||
"disallowSpacesInsideArrayBrackets": "nested",
|
||||
"disallowSpacesInsideParentheses": true,
|
||||
"requireSpacesInsideObjectBrackets": "all",
|
||||
"disallowQuotedKeysInObjects": "allButReserved",
|
||||
"disallowSpaceAfterObjectKeys": true,
|
||||
"requireSpaceBeforeObjectValues": true,
|
||||
"requireCommaBeforeLineBreak": true,
|
||||
"requireOperatorBeforeLineBreak": [
|
||||
"?", "=", "+", "-", "/", "*", "===", "!==", ">", ">=", "<", "<="
|
||||
],
|
||||
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
|
||||
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
|
||||
"requireSpaceBeforeBinaryOperators": [
|
||||
"=", "+", "+=", "-", "-=", "/", "/=", "*", "*=", "===", "!==", "<", "<=", ">", ">="
|
||||
],
|
||||
"requireSpaceAfterBinaryOperators": [
|
||||
"=", "+", "+=", "-", "-=", "/", "/=", "*", "*=", "===", "!==", "<", "<=", ">", ">="
|
||||
],
|
||||
"disallowKeywords": ["with"],
|
||||
"disallowMultipleLineStrings": true,
|
||||
"disallowMixedSpacesAndTabs": "smart",
|
||||
"disallowTrailingWhitespace": true,
|
||||
"disallowTrailingComma": true,
|
||||
"disallowKeywordsOnNewLine": ["else"],
|
||||
"requireLineFeedAtFileEnd": true,
|
||||
"maximumLineLength": {
|
||||
"value": 120,
|
||||
"tabSize": 4,
|
||||
"allowUrlComments": true,
|
||||
"allowRegex": true
|
||||
},
|
||||
"requireCapitalizedConstructors": true,
|
||||
"requireDotNotation": true,
|
||||
"disallowYodaConditions": true,
|
||||
"requireSpaceAfterLineComment": {
|
||||
"allExcept": ["#", "="]
|
||||
},
|
||||
"disallowNewlineBeforeBlockStatements": true,
|
||||
"validateQuoteMarks": {
|
||||
"mark": "'",
|
||||
"escape": true
|
||||
},
|
||||
"validateParameterSeparator": ", ",
|
||||
"safeContextKeyword": ["that"]
|
||||
}
|
25
.jshintrc
|
@ -1,25 +0,0 @@
|
|||
|
||||
{
|
||||
"bitwise": true,
|
||||
"curly": true,
|
||||
"eqeqeq": true,
|
||||
"es3": true,
|
||||
"forin": false,
|
||||
"freeze": true,
|
||||
"newcap": true,
|
||||
"noarg": true,
|
||||
"noempty": true,
|
||||
"nonbsp": true,
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"strict": true,
|
||||
|
||||
"browser": true,
|
||||
"devel": true,
|
||||
"jquery": true,
|
||||
|
||||
"globals": {
|
||||
"JSON": true,
|
||||
"phpbb": true
|
||||
}
|
||||
}
|
206
.postcss-sorting.json
Normal file
|
@ -0,0 +1,206 @@
|
|||
{
|
||||
"order": [
|
||||
"custom-properties",
|
||||
"dollar-variables",
|
||||
{
|
||||
"type": "at-rule",
|
||||
"name": "include"
|
||||
},
|
||||
"declarations",
|
||||
"rules",
|
||||
{
|
||||
"type": "at-rule",
|
||||
"name": "media"
|
||||
}
|
||||
],
|
||||
"properties-order": [
|
||||
"font",
|
||||
"font-family",
|
||||
"font-size",
|
||||
"font-weight",
|
||||
"font-style",
|
||||
"font-variant",
|
||||
"font-size-adjust",
|
||||
"font-stretch",
|
||||
"font-effect",
|
||||
"font-emphasize",
|
||||
"font-emphasize-position",
|
||||
"font-emphasize-style",
|
||||
"font-smooth",
|
||||
"font-smoothing",
|
||||
"line-height",
|
||||
"text-align",
|
||||
"text-align-last",
|
||||
"vertical-align",
|
||||
"white-space",
|
||||
"text-decoration",
|
||||
"text-emphasis",
|
||||
"text-emphasis-color",
|
||||
"text-emphasis-style",
|
||||
"text-emphasis-position",
|
||||
"text-indent",
|
||||
"text-justify",
|
||||
"letter-spacing",
|
||||
"word-spacing",
|
||||
"writing-mode",
|
||||
"text-outline",
|
||||
"text-transform",
|
||||
"text-size-adjust",
|
||||
"text-wrap",
|
||||
"text-overflow",
|
||||
"text-overflow-ellipsis",
|
||||
"text-overflow-mode",
|
||||
"word-wrap",
|
||||
"word-break",
|
||||
"tab-size",
|
||||
"hyphens",
|
||||
|
||||
"background",
|
||||
"background-color",
|
||||
"background-image",
|
||||
"background-repeat",
|
||||
"background-attachment",
|
||||
"background-position",
|
||||
"background-position-x",
|
||||
"background-position-y",
|
||||
"background-clip",
|
||||
"background-origin",
|
||||
"background-size",
|
||||
"interpolation-mode",
|
||||
"filter",
|
||||
"border",
|
||||
"border-width",
|
||||
"border-style",
|
||||
"border-color",
|
||||
"border-top",
|
||||
"border-top-width",
|
||||
"border-top-style",
|
||||
"border-top-color",
|
||||
"border-right",
|
||||
"border-right-width",
|
||||
"border-right-style",
|
||||
"border-right-color",
|
||||
"border-bottom",
|
||||
"border-bottom-width",
|
||||
"border-bottom-style",
|
||||
"border-bottom-color",
|
||||
"border-left",
|
||||
"border-left-width",
|
||||
"border-left-style",
|
||||
"border-left-color",
|
||||
"border-radius",
|
||||
"border-top-left-radius",
|
||||
"border-top-right-radius",
|
||||
"border-bottom-right-radius",
|
||||
"border-bottom-left-radius",
|
||||
"border-image",
|
||||
"border-image-source",
|
||||
"border-image-slice",
|
||||
"border-image-width",
|
||||
"border-image-outset",
|
||||
"border-image-repeat",
|
||||
"outline",
|
||||
"outline-width",
|
||||
"outline-style",
|
||||
"outline-color",
|
||||
"outline-offset",
|
||||
"tap-highlight-color",
|
||||
|
||||
"box-decoration-break",
|
||||
"box-shadow",
|
||||
"text-shadow",
|
||||
|
||||
"color",
|
||||
"opacity",
|
||||
|
||||
"position",
|
||||
"z-index",
|
||||
"top",
|
||||
"right",
|
||||
"bottom",
|
||||
"left",
|
||||
|
||||
"display",
|
||||
"visibility",
|
||||
"float",
|
||||
"clear",
|
||||
"overflow",
|
||||
"overflow-x",
|
||||
"overflow-y",
|
||||
"overflow-scrolling",
|
||||
"clip",
|
||||
"zoom",
|
||||
"flex",
|
||||
"flex-direction",
|
||||
"flex-order",
|
||||
"flex-pack",
|
||||
"flex-align",
|
||||
"flex-grow",
|
||||
"flex-shrink",
|
||||
"flex-basis",
|
||||
"flex-wrap",
|
||||
"justify-content",
|
||||
"align-items",
|
||||
"align-self",
|
||||
|
||||
"box-sizing",
|
||||
"width",
|
||||
"min-width",
|
||||
"max-width",
|
||||
"height",
|
||||
"min-height",
|
||||
"max-height",
|
||||
"margin",
|
||||
"margin-top",
|
||||
"margin-right",
|
||||
"margin-bottom",
|
||||
"margin-left",
|
||||
"padding",
|
||||
"padding-top",
|
||||
"padding-right",
|
||||
"padding-bottom",
|
||||
"padding-left",
|
||||
|
||||
"table-layout",
|
||||
"empty-cells",
|
||||
"caption-side",
|
||||
"border-spacing",
|
||||
"border-collapse",
|
||||
"list-style",
|
||||
"list-style-position",
|
||||
"list-style-type",
|
||||
"list-style-image",
|
||||
|
||||
"content",
|
||||
"quotes",
|
||||
"counter-reset",
|
||||
"counter-increment",
|
||||
"resize",
|
||||
"cursor",
|
||||
"touch-callout",
|
||||
"touch-action",
|
||||
"user-select",
|
||||
"nav-index",
|
||||
"nav-up",
|
||||
"nav-right",
|
||||
"nav-down",
|
||||
"nav-left",
|
||||
"transition",
|
||||
"transition-delay",
|
||||
"transition-timing-function",
|
||||
"transition-duration",
|
||||
"transition-property",
|
||||
"transform",
|
||||
"transform-origin",
|
||||
"animation",
|
||||
"animation-name",
|
||||
"animation-duration",
|
||||
"animation-play-state",
|
||||
"animation-timing-function",
|
||||
"animation-delay",
|
||||
"animation-iteration-count",
|
||||
"animation-direction",
|
||||
"pointer-events"
|
||||
],
|
||||
"unspecified-properties-position": "bottomAlphabetical"
|
||||
}
|
397
.stylelintrc
Normal file
|
@ -0,0 +1,397 @@
|
|||
{
|
||||
"plugins": [
|
||||
"stylelint-order"
|
||||
],
|
||||
"ignoreFiles": [
|
||||
"./phpBB/styles/prosilver/theme/normalize.css"
|
||||
],
|
||||
"rules": {
|
||||
"at-rule-name-case": "lower",
|
||||
"at-rule-name-newline-after": "always-multi-line",
|
||||
"at-rule-name-space-after": "always-single-line",
|
||||
"at-rule-no-vendor-prefix": true,
|
||||
"at-rule-semicolon-newline-after": "always",
|
||||
|
||||
"block-closing-brace-newline-after": [
|
||||
"always", {
|
||||
"ignoreAtRules": ["if", "else"]
|
||||
}
|
||||
],
|
||||
"block-closing-brace-newline-before": "always-multi-line",
|
||||
"block-closing-brace-space-before": "always-single-line",
|
||||
|
||||
"block-no-empty": true,
|
||||
|
||||
"block-opening-brace-newline-after": "always-multi-line",
|
||||
"block-opening-brace-space-after": "always-single-line",
|
||||
"block-opening-brace-space-before": "always",
|
||||
|
||||
"color-hex-case": "lower",
|
||||
"color-hex-length": "long",
|
||||
"color-named": "never",
|
||||
"color-no-invalid-hex": true,
|
||||
|
||||
"comment-empty-line-before": [
|
||||
"always", {
|
||||
"except": ["first-nested"],
|
||||
"ignore": ["stylelint-commands"]
|
||||
}
|
||||
],
|
||||
"comment-whitespace-inside": "always",
|
||||
|
||||
"declaration-bang-space-after": "never",
|
||||
"declaration-bang-space-before": "always",
|
||||
|
||||
"declaration-block-no-shorthand-property-overrides": true,
|
||||
"declaration-block-semicolon-newline-after": "always-multi-line",
|
||||
"declaration-block-semicolon-newline-before": "never-multi-line",
|
||||
"declaration-block-semicolon-space-after": "always-single-line",
|
||||
"declaration-block-semicolon-space-before": "never",
|
||||
"declaration-block-trailing-semicolon": "always",
|
||||
"declaration-block-single-line-max-declarations": 1,
|
||||
"declaration-block-no-duplicate-properties": [
|
||||
true, {
|
||||
"ignore": ["consecutive-duplicates-with-different-values"]
|
||||
}
|
||||
],
|
||||
|
||||
"declaration-colon-newline-after": "always-multi-line",
|
||||
"declaration-colon-space-after": "always-single-line",
|
||||
"declaration-colon-space-before": "never",
|
||||
|
||||
"declaration-empty-line-before": "never",
|
||||
|
||||
"declaration-property-unit-disallowed-list": {
|
||||
"line-height": ["rem", "em", "%"]
|
||||
},
|
||||
"declaration-property-unit-allowed-list": {
|
||||
"height": ["px", "%", "vh"],
|
||||
"width": ["px", "%", "vw"],
|
||||
"font-size": ["px", "rem", "%"],
|
||||
"margin-left": ["px", "rem", "%"],
|
||||
"margin-right": ["px", "rem", "%"],
|
||||
"margin-top": ["px", "rem", "%"],
|
||||
"margin-bottom": ["px", "rem", "%"],
|
||||
"padding-left": ["px", "rem"],
|
||||
"padding-right": ["px", "rem"],
|
||||
"padding-top": ["px", "rem"],
|
||||
"padding-bottom": ["px", "rem"],
|
||||
"letter-spacing": ["em"],
|
||||
"word-spacing": ["em"]
|
||||
},
|
||||
|
||||
"font-family-name-quotes": "always-where-recommended",
|
||||
"function-calc-no-unspaced-operator": true,
|
||||
|
||||
"function-comma-newline-after": "never-multi-line",
|
||||
"function-comma-newline-before": "never-multi-line",
|
||||
"function-comma-space-after": "always-single-line",
|
||||
"function-comma-space-before": "never-single-line",
|
||||
|
||||
"function-linear-gradient-no-nonstandard-direction": true,
|
||||
"function-max-empty-lines": 5,
|
||||
|
||||
"function-name-case": "lower",
|
||||
"function-parentheses-newline-inside": "always-multi-line",
|
||||
"function-parentheses-space-inside": "never-single-line",
|
||||
"function-url-quotes": "always",
|
||||
"function-whitespace-after": "always",
|
||||
|
||||
"indentation": "tab",
|
||||
|
||||
"length-zero-no-unit": true,
|
||||
|
||||
"max-empty-lines": 10,
|
||||
"max-line-length": 180,
|
||||
"max-nesting-depth": 4,
|
||||
|
||||
"media-feature-colon-space-after": "always",
|
||||
"media-feature-colon-space-before": "never",
|
||||
"media-feature-name-case": "lower",
|
||||
"media-feature-parentheses-space-inside": "never",
|
||||
"media-feature-range-operator-space-after": "always",
|
||||
"media-feature-range-operator-space-before": "always",
|
||||
"media-query-list-comma-newline-after": "always-multi-line",
|
||||
"media-query-list-comma-newline-before": "never-multi-line",
|
||||
"media-query-list-comma-space-after": "always-single-line",
|
||||
"media-query-list-comma-space-before": "never",
|
||||
|
||||
"no-duplicate-selectors": true,
|
||||
"no-empty-source": true,
|
||||
"no-eol-whitespace": true,
|
||||
"no-extra-semicolons": true,
|
||||
"no-missing-end-of-source-newline": true,
|
||||
"no-unknown-animations": true,
|
||||
|
||||
"number-leading-zero": "always",
|
||||
"number-max-precision": 10,
|
||||
"number-no-trailing-zeros": true,
|
||||
|
||||
"property-case": "lower",
|
||||
"property-no-unknown": true,
|
||||
|
||||
"rule-empty-line-before": ["always-multi-line", {
|
||||
"ignore": ["after-comment"],
|
||||
"except": ["first-nested"]
|
||||
}],
|
||||
|
||||
"selector-attribute-brackets-space-inside": "never",
|
||||
"selector-attribute-operator-space-after": "never",
|
||||
"selector-attribute-operator-space-before": "never",
|
||||
"selector-attribute-quotes": "always",
|
||||
|
||||
"selector-combinator-space-after": "always",
|
||||
"selector-combinator-space-before": "always",
|
||||
|
||||
"selector-list-comma-newline-after": "always",
|
||||
"selector-list-comma-space-before": "never",
|
||||
|
||||
"selector-max-empty-lines": 5,
|
||||
"selector-max-compound-selectors": 5,
|
||||
|
||||
"selector-pseudo-class-case": "lower",
|
||||
"selector-pseudo-class-no-unknown": true,
|
||||
"selector-pseudo-class-parentheses-space-inside": "never",
|
||||
|
||||
"selector-pseudo-element-case": "lower",
|
||||
"selector-pseudo-element-colon-notation": "single",
|
||||
"selector-pseudo-element-no-unknown": true,
|
||||
|
||||
"selector-type-case": "lower",
|
||||
"selector-type-no-unknown": true,
|
||||
|
||||
"selector-descendant-combinator-no-non-space": true,
|
||||
"selector-max-id": 0,
|
||||
"selector-no-qualifying-type": [
|
||||
true, {
|
||||
"ignore": ["attribute"]
|
||||
}
|
||||
],
|
||||
|
||||
"shorthand-property-no-redundant-values": true,
|
||||
|
||||
"string-no-newline": true,
|
||||
"string-quotes": "double",
|
||||
|
||||
"unit-case": "lower",
|
||||
"unit-no-unknown": true,
|
||||
|
||||
"value-list-comma-newline-after": "always-multi-line",
|
||||
"value-list-comma-newline-before": "never-multi-line",
|
||||
"value-list-comma-space-after": "always-single-line",
|
||||
"value-list-comma-space-before": "never",
|
||||
"order/order": [
|
||||
"custom-properties",
|
||||
"dollar-variables",
|
||||
{
|
||||
"type": "at-rule",
|
||||
"name": "include",
|
||||
"parameter": "type"
|
||||
},
|
||||
"declarations",
|
||||
"rules",
|
||||
{
|
||||
"type": "at-rule",
|
||||
"name": "include",
|
||||
"parameter": "fluid"
|
||||
},
|
||||
{
|
||||
"type": "at-rule",
|
||||
"name": "media"
|
||||
}
|
||||
],
|
||||
"order/properties-order": [
|
||||
[
|
||||
"font",
|
||||
"font-family",
|
||||
"font-size",
|
||||
"font-weight",
|
||||
"font-style",
|
||||
"font-variant",
|
||||
"font-size-adjust",
|
||||
"font-stretch",
|
||||
"font-effect",
|
||||
"font-emphasize",
|
||||
"font-emphasize-position",
|
||||
"font-emphasize-style",
|
||||
"font-smooth",
|
||||
"font-smoothing",
|
||||
"line-height",
|
||||
"text-align",
|
||||
"text-align-last",
|
||||
"vertical-align",
|
||||
"white-space",
|
||||
"text-decoration",
|
||||
"text-emphasis",
|
||||
"text-emphasis-color",
|
||||
"text-emphasis-style",
|
||||
"text-emphasis-position",
|
||||
"text-indent",
|
||||
"text-justify",
|
||||
"letter-spacing",
|
||||
"word-spacing",
|
||||
"writing-mode",
|
||||
"text-outline",
|
||||
"text-transform",
|
||||
"text-size-adjust",
|
||||
"text-wrap",
|
||||
"text-overflow",
|
||||
"text-overflow-ellipsis",
|
||||
"text-overflow-mode",
|
||||
"word-wrap",
|
||||
"word-break",
|
||||
"tab-size",
|
||||
"hyphens",
|
||||
|
||||
"background",
|
||||
"background-color",
|
||||
"background-image",
|
||||
"background-repeat",
|
||||
"background-attachment",
|
||||
"background-position",
|
||||
"background-position-x",
|
||||
"background-position-y",
|
||||
"background-clip",
|
||||
"background-origin",
|
||||
"background-size",
|
||||
"interpolation-mode",
|
||||
"filter",
|
||||
|
||||
"border",
|
||||
"border-width",
|
||||
"border-style",
|
||||
"border-color",
|
||||
"border-top",
|
||||
"border-top-width",
|
||||
"border-top-style",
|
||||
"border-top-color",
|
||||
"border-right",
|
||||
"border-right-width",
|
||||
"border-right-style",
|
||||
"border-right-color",
|
||||
"border-bottom",
|
||||
"border-bottom-width",
|
||||
"border-bottom-style",
|
||||
"border-bottom-color",
|
||||
"border-left",
|
||||
"border-left-width",
|
||||
"border-left-style",
|
||||
"border-left-color",
|
||||
"border-radius",
|
||||
"border-top-left-radius",
|
||||
"border-top-right-radius",
|
||||
"border-bottom-right-radius",
|
||||
"border-bottom-left-radius",
|
||||
"border-image",
|
||||
"border-image-source",
|
||||
"border-image-slice",
|
||||
"border-image-width",
|
||||
"border-image-outset",
|
||||
"border-image-repeat",
|
||||
"outline",
|
||||
"outline-width",
|
||||
"outline-style",
|
||||
"outline-color",
|
||||
"outline-offset",
|
||||
"tap-highlight-color",
|
||||
|
||||
"box-decoration-break",
|
||||
"box-shadow",
|
||||
"text-shadow",
|
||||
|
||||
"color",
|
||||
"opacity",
|
||||
|
||||
"position",
|
||||
"z-index",
|
||||
"top",
|
||||
"right",
|
||||
"bottom",
|
||||
"left",
|
||||
|
||||
"display",
|
||||
"visibility",
|
||||
"float",
|
||||
"clear",
|
||||
"overflow",
|
||||
"overflow-x",
|
||||
"overflow-y",
|
||||
"overflow-scrolling",
|
||||
"clip",
|
||||
"zoom",
|
||||
"flex",
|
||||
"flex-direction",
|
||||
"flex-order",
|
||||
"flex-pack",
|
||||
"flex-align",
|
||||
"flex-basis",
|
||||
"flex-grow",
|
||||
"flex-shrink",
|
||||
"flex-wrap",
|
||||
"justify-content",
|
||||
"align-items",
|
||||
"align-self",
|
||||
|
||||
"box-sizing",
|
||||
"width",
|
||||
"min-width",
|
||||
"max-width",
|
||||
"height",
|
||||
"min-height",
|
||||
"max-height",
|
||||
"margin",
|
||||
"margin-top",
|
||||
"margin-right",
|
||||
"margin-bottom",
|
||||
"margin-left",
|
||||
"padding",
|
||||
"padding-top",
|
||||
"padding-right",
|
||||
"padding-bottom",
|
||||
"padding-left",
|
||||
|
||||
"table-layout",
|
||||
"empty-cells",
|
||||
"caption-side",
|
||||
"border-spacing",
|
||||
"border-collapse",
|
||||
"list-style",
|
||||
"list-style-position",
|
||||
"list-style-type",
|
||||
"list-style-image",
|
||||
|
||||
"content",
|
||||
"quotes",
|
||||
"counter-reset",
|
||||
"counter-increment",
|
||||
"resize",
|
||||
"cursor",
|
||||
"touch-callout",
|
||||
"touch-action",
|
||||
"user-select",
|
||||
"nav-index",
|
||||
"nav-up",
|
||||
"nav-right",
|
||||
"nav-down",
|
||||
"nav-left",
|
||||
"transition",
|
||||
"transition-delay",
|
||||
"transition-timing-function",
|
||||
"transition-duration",
|
||||
"transition-property",
|
||||
"transform",
|
||||
"transform-origin",
|
||||
"animation",
|
||||
"animation-name",
|
||||
"animation-duration",
|
||||
"animation-play-state",
|
||||
"animation-timing-function",
|
||||
"animation-delay",
|
||||
"animation-iteration-count",
|
||||
"animation-direction",
|
||||
"pointer-events"
|
||||
],
|
||||
{ "unspecified": "bottomAlphabetical" }
|
||||
]
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<project name="phpBB" description="The phpBB forum software" default="all" basedir="../">
|
||||
<!-- a few settings for the build -->
|
||||
<property name="newversion" value="3.3.13-dev" />
|
||||
<property name="newversion" value="4.0.0-a1-dev" />
|
||||
<property name="prevversion" value="3.3.12" />
|
||||
<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" />
|
||||
<!-- no configuration should be needed beyond this point -->
|
||||
|
@ -203,6 +203,12 @@
|
|||
<phingcall target="checksum-dir">
|
||||
<property name="dir" value="build/new_version/release_files" />
|
||||
</phingcall>
|
||||
|
||||
<phingcall target="sign-packages">
|
||||
<property name="dir" value="build/new_version/release_files" />
|
||||
</phingcall>
|
||||
|
||||
<exec dir="build" command="php generate_package_json.php > new_version/packages.json"/>
|
||||
</target>
|
||||
|
||||
<target name="checksum-dir">
|
||||
|
@ -219,6 +225,31 @@
|
|||
<exec dir="${dir}" command="sha256sum ${filename} > ${filename}.sha256" />
|
||||
</target>
|
||||
|
||||
<target name="sign-packages">
|
||||
<property name="packageSignatureExists" value="false" />
|
||||
<exec command="if [ -f 'build/package_signature' ]; then echo 'true'; else echo 'false'; fi;" outputProperty="packageSignatureExists" />
|
||||
<if>
|
||||
<equals arg1="${packageSignatureExists}" arg2="true" />
|
||||
<then>
|
||||
<foreach param="filename" absparam="absfilename" target="sign-file">
|
||||
<fileset dir="${dir}">
|
||||
<type type="file" />
|
||||
<include name="*.tar.bz2"/>
|
||||
<include name="*.zip"/>
|
||||
</fileset>
|
||||
</foreach>
|
||||
</then>
|
||||
<else>
|
||||
<echo msg="Skipping signing of packages due to missing build/package_signature"/>
|
||||
</else>
|
||||
</if>
|
||||
</target>
|
||||
|
||||
<target name="sign-file">
|
||||
<echo msg="Creating signature file for ${absfilename}" />
|
||||
<exec command="php build/generate_signature.php `cat build/package_signature` ${absfilename}" />
|
||||
</target>
|
||||
|
||||
<target name="announcement" depends="prepare">
|
||||
<echo msg="Writing download links and checksums for email announcement to save/announcement_email_${newversion}.txt" />
|
||||
<exec dir="build" escape="false"
|
||||
|
|
|
@ -51,7 +51,7 @@ class phpbb_Sniffs_ControlStructures_StaticKeywordSniff implements Sniff
|
|||
if (in_array($tokens[$stackPtr + 2]['code'], $disallowed_after_tokens))
|
||||
{
|
||||
$error = 'Access specifier (e.g. public) should not follow static scope attribute. Encountered "' . $tokens[$stackPtr + 2]['content'] . '" after static';
|
||||
$phpcsFile->addWarning($error, $stackPtr, 'InvalidStaticFunctionDeclaration', [], 1);
|
||||
$phpcsFile->addError($error, $stackPtr, 'InvalidStaticFunctionDeclaration');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -182,7 +182,7 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
|||
|
||||
// Checks in type hinting
|
||||
$old_function_declaration = $stackPtr;
|
||||
while (($function_declaration = $phpcsFile->findNext(T_FUNCTION, ($old_function_declaration + 1))) !== false)
|
||||
while (($function_declaration = $phpcsFile->findNext([T_FUNCTION, T_CLOSURE], ($old_function_declaration + 1))) !== false)
|
||||
{
|
||||
$old_function_declaration = $function_declaration;
|
||||
|
||||
|
@ -192,6 +192,9 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements Sniff
|
|||
{
|
||||
$ok = $this->check($phpcsFile, $param['type_hint'], $class_name_full, $class_name_short, $function_declaration) || $ok;
|
||||
}
|
||||
|
||||
$method_properties = $phpcsFile->getMethodProperties($function_declaration);
|
||||
$ok = $this->check($phpcsFile, $method_properties['return_type'], $class_name_full, $class_name_short, $function_declaration) || $ok;
|
||||
}
|
||||
|
||||
// Checks in catch blocks
|
||||
|
|
|
@ -120,6 +120,12 @@ function phpbb_add_package_file(array &$package_list, $name, $file_name, $type,
|
|||
$filedata->filesize = filesize($file_path);
|
||||
$filedata->checksum = trim(preg_replace('/(^\w+)(.+)/', '$1', file_get_contents($file_path . '.sha256')));
|
||||
$filedata->filetype = $extension;
|
||||
|
||||
if (file_exists($file_path . '.sig'))
|
||||
{
|
||||
$filedata->signature = trim(file_get_contents($file_path . '.sig'));
|
||||
}
|
||||
|
||||
$package_file->files[] = $filedata;
|
||||
}
|
||||
|
||||
|
|
52
build/generate_signature.php
Normal file
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
if ($_SERVER['argc'] != 3)
|
||||
{
|
||||
echo "Please specify the secret key and filename for which the signature should be created, e.g. generate_signature.php mySecretSecret path/to/file\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$secret_key = base64_decode($_SERVER['argv'][1]);
|
||||
$file_path = $_SERVER['argv'][2];
|
||||
|
||||
if (!extension_loaded('sodium'))
|
||||
{
|
||||
die('Required sodium extension not loaded');
|
||||
}
|
||||
|
||||
if (!file_exists($file_path))
|
||||
{
|
||||
die('File does not exist');
|
||||
}
|
||||
|
||||
$hash = hash_file('sha384', $file_path, true);
|
||||
try
|
||||
{
|
||||
$signature = sodium_crypto_sign_detached($hash, $secret_key);
|
||||
}
|
||||
catch (SodiumException $e)
|
||||
{
|
||||
$keypair = sodium_crypto_sign_keypair();
|
||||
|
||||
$secret_key = base64_encode(sodium_crypto_sign_secretkey($keypair));
|
||||
$public_key = base64_encode(sodium_crypto_sign_publickey($keypair));
|
||||
echo 'Unable to create the signature: ' . $e->getMessage() . "\n";
|
||||
echo "Maybe use these keys:\nPublic key: {$public_key}\nSecret key: {$secret_key}\n";
|
||||
die();
|
||||
}
|
||||
|
||||
$signature = base64_encode($signature);
|
||||
|
||||
file_put_contents($file_path . '.sig', $signature);
|
35
build/psalm/stubs/apcu.php
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
class APCUIterator implements Iterator
|
||||
{
|
||||
public function current()
|
||||
{
|
||||
}
|
||||
|
||||
public function next()
|
||||
{
|
||||
}
|
||||
|
||||
public function key()
|
||||
{
|
||||
}
|
||||
|
||||
public function valid()
|
||||
{
|
||||
}
|
||||
|
||||
public function rewind()
|
||||
{
|
||||
}
|
||||
}
|
15
build/psalm/stubs/gd.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @link https://www.php.net/manual/en/image.constants.php */
|
||||
define('IMG_COLOR_STYLED', -2);
|
16
build/psalm/stubs/ldap.php
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @link https://www.php.net/manual/en/ldap.constants.php */
|
||||
define('LDAP_OPT_PROTOCOL_VERSION', 17);
|
||||
define('LDAP_OPT_REFERRALS', 8);
|
20
build/psalm/stubs/memcached.php
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @link https://www.php.net/manual/en/memcached.constants.php */
|
||||
class Memcached
|
||||
{
|
||||
public const OPT_COMPRESSION = -1001;
|
||||
|
||||
public const OPT_BINARY_PROTOCOL = 18;
|
||||
}
|
19
build/psalm/stubs/oci8.php
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @link https://php.net/manual/en/oci8.constants.php */
|
||||
define('OCI_DEFAULT', 0);
|
||||
|
||||
define('OCI_ASSOC', 1);
|
||||
|
||||
define('OCI_RETURN_NULLS', 4);
|
15
build/psalm/stubs/pgsql.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @link https://www.php.net/manual/en/pgsql.constants.php */
|
||||
define('PGSQL_CONNECT_FORCE_NEW', 2);
|
19
build/psalm/stubs/redis.php
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @link https://phpredis.github.io/phpredis/Redis.html */
|
||||
class Redis
|
||||
{
|
||||
public const OPT_PREFIX = 2;
|
||||
public const SERIALIZER_PHP = 1;
|
||||
}
|
33
build/psalm/stubs/sqlite3.php
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
class SQLite3
|
||||
{
|
||||
public function query(string $query) {}
|
||||
}
|
||||
|
||||
class SQLite3Result
|
||||
{
|
||||
public function fetchArray(int $mode = SQLITE3_BOTH) {}
|
||||
}
|
||||
|
||||
/**
|
||||
* @link https://www.php.net/manual/en/sqlite3.constants.php
|
||||
*/
|
||||
define('SQLITE3_ASSOC', 1);
|
||||
define('SQLITE3_NUM', 2);
|
||||
define('SQLITE3_BOTH', 3);
|
||||
|
||||
define('SQLITE3_OPEN_READONLY', 1);
|
||||
define('SQLITE3_OPEN_READWRITE', 2);
|
||||
define('SQLITE3_OPEN_CREATE', 4);
|
17
build/psalm/stubs/sqlsrv.php
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @link https://www.php.net/manual/en/sqlsrv.constants.php */
|
||||
define('SQLSRV_ERR_ERRORS', 0);
|
||||
define('SQLSRV_FETCH_ASSOC', 2);
|
||||
define('SQLSRV_CURSOR_STATIC', 'static');
|
56
build/psalm_bootstrap.php
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
define('IN_PHPBB', true);
|
||||
define('PHPBB_ENVIRONMENT', 'test');
|
||||
|
||||
$phpbb_root_path = 'phpBB/';
|
||||
$phpEx = 'php';
|
||||
|
||||
global $table_prefix;
|
||||
require_once $phpbb_root_path . 'includes/startup.php';
|
||||
|
||||
$table_prefix = 'phpbb_';
|
||||
require_once $phpbb_root_path . 'includes/constants.php';
|
||||
require_once $phpbb_root_path . 'phpbb/class_loader.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/acp/acp_database.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_acp.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_admin.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_compatibility.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_compress.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_content.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_display.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_mcp.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_messenger.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_module.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_posting.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_transfer.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/functions_user.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/sphinxapi.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/diff/diff.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/diff/engine.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/compatibility_globals.' . $phpEx;
|
||||
|
||||
$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', $phpbb_root_path . 'phpbb/', "php");
|
||||
$phpbb_class_loader->register();
|
||||
|
||||
// Include files that require class loader to be initialized
|
||||
require_once $phpbb_root_path . 'includes/acp/auth.' . $phpEx;
|
||||
require_once $phpbb_root_path . 'includes/acp/acp_captcha.' . $phpEx;
|
||||
|
||||
class phpbb_cache_container extends \Symfony\Component\DependencyInjection\Container
|
||||
{
|
||||
}
|
56
build/verify_signature.php
Normal file
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
if ($_SERVER['argc'] != 4)
|
||||
{
|
||||
echo "Please specify the public key, filename for which the signature should be check, and the signature file, e.g. verify_signature.php superPublicKey path/to/file path/to/signature\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$public_key = base64_decode($_SERVER['argv'][1]);
|
||||
$file_path = $_SERVER['argv'][2];
|
||||
$signature_path = $_SERVER['argv'][3];
|
||||
|
||||
if (!extension_loaded('sodium'))
|
||||
{
|
||||
die('Required sodium extension not loaded');
|
||||
}
|
||||
|
||||
if (!file_exists($file_path))
|
||||
{
|
||||
die('File does not exist');
|
||||
}
|
||||
|
||||
if (!file_exists($signature_path))
|
||||
{
|
||||
die('Signature file does not exist');
|
||||
}
|
||||
|
||||
$hash = hash_file('sha384', $file_path, true);
|
||||
$signature = base64_decode(file_get_contents($signature_path));
|
||||
|
||||
try
|
||||
{
|
||||
if (sodium_crypto_sign_verify_detached($signature, $hash, $public_key))
|
||||
{
|
||||
echo 'Signature is valid!';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'Signature is not valid!';
|
||||
}
|
||||
} catch (SodiumException $e)
|
||||
{
|
||||
die('Unable to verify the signature: ' . $e->getMessage() . "\n");
|
||||
}
|
69
gulpfile.js
Normal file
|
@ -0,0 +1,69 @@
|
|||
'use strict';
|
||||
|
||||
const gulp = require('gulp');
|
||||
const rename = require('gulp-rename');
|
||||
const concat = require('gulp-concat');
|
||||
const postcss = require('gulp-postcss');
|
||||
const autoprefixer = require('autoprefixer');
|
||||
const cssnano = require('cssnano');
|
||||
const sorting = require('postcss-sorting');
|
||||
const sortOrder = require('./.postcss-sorting.json');
|
||||
|
||||
// Config
|
||||
const paths = {
|
||||
styles: {
|
||||
src: './phpBB/styles/prosilver/theme/*.css',
|
||||
css: './phpBB/styles/prosilver/theme/',
|
||||
},
|
||||
};
|
||||
|
||||
function styles() {
|
||||
return gulp.src(paths.styles.src, { sourcemaps: true })
|
||||
.pipe(
|
||||
postcss([
|
||||
autoprefixer(),
|
||||
sorting(sortOrder),
|
||||
]),
|
||||
)
|
||||
.pipe(gulp.dest(paths.styles.css, { sourcemaps: './' }));
|
||||
}
|
||||
|
||||
function minify() {
|
||||
return gulp.src([
|
||||
paths.styles.css + 'normalize.css',
|
||||
paths.styles.css + 'base.css',
|
||||
paths.styles.css + 'utilities.css',
|
||||
paths.styles.css + 'icons.css',
|
||||
paths.styles.css + 'common.css',
|
||||
paths.styles.css + 'buttons.css',
|
||||
paths.styles.css + 'links.css',
|
||||
paths.styles.css + 'mentions.css',
|
||||
paths.styles.css + 'content.css',
|
||||
paths.styles.css + 'cp.css',
|
||||
paths.styles.css + 'forms.css',
|
||||
paths.styles.css + 'colours.css',
|
||||
paths.styles.css + 'responsive.css',
|
||||
paths.styles.css + 'bidi.css',
|
||||
], { sourcemaps: true })
|
||||
.pipe(concat('stylesheet.css'))
|
||||
.pipe(
|
||||
postcss([
|
||||
cssnano(),
|
||||
]),
|
||||
)
|
||||
.pipe(rename({
|
||||
suffix: '.min',
|
||||
extname: '.css',
|
||||
}))
|
||||
.pipe(gulp.dest(paths.styles.css, { sourcemaps: './' }));
|
||||
}
|
||||
|
||||
function watch() {
|
||||
gulp.watch(paths.styles.src, styles);
|
||||
}
|
||||
|
||||
exports.style = styles;
|
||||
exports.minify = minify;
|
||||
exports.watch = watch;
|
||||
|
||||
exports.default = gulp.series(styles, minify, watch);
|
10391
package-lock.json
generated
Normal file
116
package.json
Normal file
|
@ -0,0 +1,116 @@
|
|||
{
|
||||
"name": "phpbb",
|
||||
"version": "4.0.0-dev",
|
||||
"description": "phpBB Forum Software application",
|
||||
"main": " ",
|
||||
"directories": {
|
||||
"doc": "docs"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": "xo",
|
||||
"ignorePatterns": [
|
||||
"phpBB/adm/style/admin.js",
|
||||
"phpBB/adm/style/ajax.js",
|
||||
"phpBB/adm/style/permissions.js",
|
||||
"phpBB/adm/style/tooltip.js",
|
||||
"phpBB/assets/javascript/core.js",
|
||||
"phpBB/assets/javascript/cropper.js",
|
||||
"phpBB/assets/javascript/editor.js",
|
||||
"phpBB/assets/javascript/hermite.js",
|
||||
"phpBB/assets/javascript/installer.js",
|
||||
"phpBB/assets/javascript/jquery-cropper.js",
|
||||
"phpBB/assets/javascript/plupload.js",
|
||||
"phpBB/ext/**/*.js",
|
||||
"phpBB/styles/prosilver/template/ajax.js",
|
||||
"phpBB/styles/prosilver/template/forum_fn.js",
|
||||
"phpBB/**/*.min.js",
|
||||
"phpBB/vendor/**/*.js",
|
||||
"phpBB/vendor-ext/**/*.js",
|
||||
"phpBB/phpbb/**/*.js",
|
||||
"phpBB/tests/**/*.js"
|
||||
],
|
||||
"rules": {
|
||||
"quotes": [
|
||||
"error",
|
||||
"single"
|
||||
],
|
||||
"comma-dangle": [
|
||||
"error",
|
||||
"always-multiline"
|
||||
],
|
||||
"block-spacing": "error",
|
||||
"array-bracket-spacing": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"multiline-comment-style": "off",
|
||||
"computed-property-spacing": "off",
|
||||
"space-before-function-paren": [
|
||||
"error",
|
||||
"never"
|
||||
],
|
||||
"space-in-parens": "off",
|
||||
"capitalized-comments": "off",
|
||||
"object-curly-spacing": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"no-lonely-if": "off",
|
||||
"unicorn/prefer-module": "off"
|
||||
},
|
||||
"env": {
|
||||
"es6": true,
|
||||
"browser": true,
|
||||
"node": true,
|
||||
"jquery": true
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"not ie 11",
|
||||
"not samsung 10.1",
|
||||
"not and_uc 12.12",
|
||||
"not op_mini all",
|
||||
"edge >= 18",
|
||||
"ff >= 72",
|
||||
"chrome >= 79",
|
||||
"safari >= 13",
|
||||
"ios >= 12.4"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/phpbb/phpbb.git"
|
||||
},
|
||||
"keywords": [
|
||||
"phpBB",
|
||||
"phpbb",
|
||||
"forum",
|
||||
"php",
|
||||
"software",
|
||||
"community"
|
||||
],
|
||||
"author": "",
|
||||
"license": "GPL-2.0",
|
||||
"bugs": {
|
||||
"url": "https://tracker.phpbb.com"
|
||||
},
|
||||
"homepage": "https://www.phpbb.com",
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.4",
|
||||
"cssnano": "^5.1.7",
|
||||
"eslint": "^8.13.0",
|
||||
"eslint-config-xo": "^0.40.0",
|
||||
"gulp": "^5.0.0",
|
||||
"gulp-concat": "^2.6.1",
|
||||
"gulp-postcss": "^9.0.1",
|
||||
"gulp-rename": "^2.0.0",
|
||||
"postcss": "^8.4.31",
|
||||
"postcss-sorting": "^7.0.1",
|
||||
"stylelint": "^14.7.0",
|
||||
"stylelint-order": "^5.0.0",
|
||||
"web-push-testing": "^1.1.1"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 51 B |
Before Width: | Height: | Size: 49 B |
Before Width: | Height: | Size: 49 B |
Before Width: | Height: | Size: 51 B |
Before Width: | Height: | Size: 182 B |
Before Width: | Height: | Size: 48 B |
Before Width: | Height: | Size: 48 B |
Before Width: | Height: | Size: 48 B |
Before Width: | Height: | Size: 48 B |
Before Width: | Height: | Size: 416 B |
Before Width: | Height: | Size: 385 B |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 420 B |
Before Width: | Height: | Size: 826 B |
Before Width: | Height: | Size: 344 B |
Before Width: | Height: | Size: 358 B |
Before Width: | Height: | Size: 229 B |
Before Width: | Height: | Size: 357 B |
Before Width: | Height: | Size: 570 B |
Before Width: | Height: | Size: 357 B |
Before Width: | Height: | Size: 192 B |
Before Width: | Height: | Size: 255 B |
Before Width: | Height: | Size: 249 B |
Before Width: | Height: | Size: 239 B |
Before Width: | Height: | Size: 166 B |
Before Width: | Height: | Size: 242 B |
Before Width: | Height: | Size: 239 B |
Before Width: | Height: | Size: 662 B |
Before Width: | Height: | Size: 708 B |
Before Width: | Height: | Size: 681 B |
Before Width: | Height: | Size: 725 B |
Before Width: | Height: | Size: 251 B |
Before Width: | Height: | Size: 246 B |
Before Width: | Height: | Size: 307 B |
Before Width: | Height: | Size: 240 B |
Before Width: | Height: | Size: 168 B |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 6.5 KiB |
|
@ -15,7 +15,6 @@
|
|||
*/
|
||||
define('IN_PHPBB', true);
|
||||
define('ADMIN_START', true);
|
||||
define('NEED_SID', true);
|
||||
|
||||
// Include files
|
||||
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../';
|
||||
|
@ -54,12 +53,20 @@ $module_id = $request->variable('i', '');
|
|||
$mode = $request->variable('mode', '');
|
||||
|
||||
// Set custom style for admin area
|
||||
$template->set_custom_style(array(
|
||||
array(
|
||||
'name' => 'adm',
|
||||
'ext_path' => 'adm/style/',
|
||||
),
|
||||
), $phpbb_admin_path . 'style');
|
||||
/** @var \phpbb\template\base $template */
|
||||
$template->set_custom_style(
|
||||
[
|
||||
[
|
||||
'name' => 'adm',
|
||||
'ext_path' => 'adm/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'));
|
||||
|
|
|
@ -49,7 +49,13 @@
|
|||
|
||||
<dl>
|
||||
<dt><label for="{options.KEY}">{options.TITLE}{L_COLON}</label><!-- IF options.S_EXPLAIN --><br /><span>{options.TITLE_EXPLAIN}</span><!-- ENDIF --></dt>
|
||||
<dd>{options.CONTENT}</dd>
|
||||
<dd>
|
||||
{% if options.CONTENT is iterable %}
|
||||
{{ FormsBuildTemplate(options.CONTENT)}}
|
||||
{% else %}
|
||||
{options.CONTENT}
|
||||
{% endif %}
|
||||
</dd>
|
||||
{% if (options.KEY == 'allow_attachments' and S_EMPTY_POST_GROUPS) or (options.KEY == 'allow_pm_attach' and S_EMPTY_PM_GROUPS) %}
|
||||
<dd><span class="error">{{ lang(options.KEY == 'allow_attachments' ? 'NO_EXT_GROUP_ALLOWED_POST' : 'NO_EXT_GROUP_ALLOWED_PM', U_EXTENSION_GROUPS) }}</span></dd>
|
||||
{% endif %}
|
||||
|
@ -175,8 +181,14 @@
|
|||
<dd><input type="text" id="group_name" size="20" maxlength="100" name="group_name" value="{GROUP_NAME}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="category">{L_SPECIAL_CATEGORY}{L_COLON}</label><br /><span>{L_SPECIAL_CATEGORY_EXPLAIN}</span></dt>
|
||||
<dd>{S_CATEGORY_SELECT}</dd>
|
||||
<dt><label for="{{ S_CATEGORY_SELECT.id }}">{L_SPECIAL_CATEGORY}{L_COLON}</label><br /><span>{L_SPECIAL_CATEGORY_EXPLAIN}</span></dt>
|
||||
<dd>
|
||||
<select name="{{ S_CATEGORY_SELECT.name }}" id="{{ S_CATEGORY_SELECT.id }}">
|
||||
{% for option in S_CATEGORY_SELECT.options %}
|
||||
<option value="{{ option.value }}"{% if option.selected %} selected="selected"{% endif %}>{{ option.label }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="allowed">{L_ALLOWED}{L_COLON}</label></dt>
|
||||
|
@ -195,7 +207,10 @@
|
|||
</dl>
|
||||
<dl>
|
||||
<dt><label for="extgroup_filesize">{L_MAX_EXTGROUP_FILESIZE}{L_COLON}</label></dt>
|
||||
<dd><input type="number" id="extgroup_filesize" min="0" max="999999999999999" step="any" name="max_filesize" value="{EXTGROUP_FILESIZE}" /> <select name="size_select">{S_EXT_GROUP_SIZE_OPTIONS}</select></dd>
|
||||
<dd>
|
||||
<input type="number" id="extgroup_filesize" min="0" max="999999999999999" step="any" name="max_filesize" value="{EXTGROUP_FILESIZE}" />
|
||||
{{ FormsSelect(EXT_GROUP_SIZE_OPTIONS) }}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="assigned_extensions">{L_ASSIGNED_EXTENSIONS}{L_COLON}</label></dt>
|
||||
|
@ -275,8 +290,14 @@
|
|||
<dd><input type="text" id="add_extension" size="20" maxlength="100" name="add_extension" value="{ADD_EXTENSION}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="extension_group">{L_EXTENSION_GROUP}</label></dt>
|
||||
<dd>{GROUP_SELECT_OPTIONS}</dd>
|
||||
<dt><label for="{{ GROUP_SELECT_OPTIONS.id }}">{L_EXTENSION_GROUP}</label></dt>
|
||||
<dd>
|
||||
<select name="{{ GROUP_SELECT_OPTIONS.name }}" id="{{ GROUP_SELECT_OPTIONS.id }}">
|
||||
{% for option in GROUP_SELECT_OPTIONS.options %}
|
||||
<option value="{{ option.value }}"{% if option.selected %} selected="selected"{% endif %}>{{ option.label }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="quick">
|
||||
|
@ -309,7 +330,13 @@
|
|||
<!-- ENDIF -->
|
||||
<tr>
|
||||
<td><strong>{extensions.EXTENSION}</strong></td>
|
||||
<td>{extensions.GROUP_OPTIONS}</td>
|
||||
<td>
|
||||
<select name="{{ extensions.GROUP_OPTIONS.name }}" id="{{ extensions.GROUP_OPTIONS.id }}">
|
||||
{% for option in extensions.GROUP_OPTIONS.options %}
|
||||
<option value="{{ option.value }}"{% if option.selected %} selected="selected"{% endif %}>{{ option.label }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
<td><input type="checkbox" class="radio" name="extension_id_list[]" value="{extensions.EXTENSION_ID}" /><input type="hidden" name="extension_change_list[]" value="{extensions.EXTENSION_ID}" /></td>
|
||||
</tr>
|
||||
<!-- END extensions -->
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
<dl>
|
||||
<dt><label for="avatar_remote_url">{L_LINK_REMOTE_AVATAR}{L_COLON}</label><br /><span>{L_LINK_REMOTE_AVATAR_EXPLAIN}</span></dt>
|
||||
<dd><input type="url" name="avatar_remote_url" id="avatar_remote_url" value="{AVATAR_REMOTE_URL}" class="inputbox" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="avatar_remote_width">{L_LINK_REMOTE_SIZE}{L_COLON}</label><br /><span>{L_LINK_REMOTE_SIZE_EXPLAIN}</span></dt>
|
||||
<dd>
|
||||
<input type="number" name="avatar_remote_width" id="avatar_remote_width" min="{AVATAR_MIN_WIDTH}" max="{AVATAR_MAX_WIDTH}" value="{AVATAR_REMOTE_WIDTH}" class="inputbox autowidth" /> {L_PIXEL} ×
|
||||
<input type="number" name="avatar_remote_height" id="avatar_remote_height" min="{AVATAR_MIN_HEIGHT}" max="{AVATAR_MAX_HEIGHT}" value="{AVATAR_REMOTE_HEIGHT}" class="inputbox autowidth" /> {L_PIXEL}
|
||||
</dd>
|
||||
</dl>
|
|
@ -3,9 +3,67 @@
|
|||
<dd><input type="hidden" name="MAX_FILE_SIZE" value="{AVATAR_UPLOAD_SIZE}" /><input type="file" name="avatar_upload_file" id="avatar_upload_file" class="inputbox autowidth" accept="{{ AVATAR_ALLOWED_EXTENSIONS }}" /></dd>
|
||||
</dl>
|
||||
|
||||
<!-- IF S_UPLOAD_AVATAR_URL -->
|
||||
<dl>
|
||||
<dt><label for="avatar_upload_url">{L_UPLOAD_AVATAR_URL}{L_COLON}</label><br /><span>{L_UPLOAD_AVATAR_URL_EXPLAIN}</span></dt>
|
||||
<dd><input type="url" name="avatar_upload_url" id="avatar_upload_url" value="" class="inputbox" /></dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
{% INCLUDECSS T_ASSETS_PATH ~ '/css/cropper.min.css' %}
|
||||
{% INCLUDEJS T_ASSETS_PATH ~ '/javascript/cropper.min.js' %}
|
||||
{% INCLUDEJS T_ASSETS_PATH ~ '/javascript/jquery-cropper.js' %}
|
||||
{% INCLUDEJS T_ASSETS_PATH ~ '/javascript/phpbb-avatars.js' %}
|
||||
|
||||
<input type="hidden" id="avatar-cropper-data" name="avatar_cropper_data" value=""
|
||||
data-min-width="{{ AVATAR_MIN_WIDTH }}" data-max-width="{{ AVATAR_MAX_WIDTH }}"
|
||||
data-min-height="{{ AVATAR_MIN_HEIGHT }}" data-max-height="{{ AVATAR_MAX_HEIGHT }}"
|
||||
/>
|
||||
|
||||
{% apply spaceless %}
|
||||
<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) }}
|
||||
</button>
|
||||
<button class="button" type="button" title="{{ lang('ZOOM_OUT') }}" data-cropper-action="zoom,-0.1">
|
||||
{{ Icon('font', 'search-minus', '', true) }}
|
||||
</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) }}
|
||||
</button>
|
||||
<button class="button" type="button" title="{{ lang('MOVE_RIGHT') }}" data-cropper-action="move,10,0">
|
||||
{{ Icon('font', 'arrow-right', '', true) }}
|
||||
</button>
|
||||
<button class="button" type="button" title="{{ lang('MOVE_UP') }}" data-cropper-action="move,0,-10">
|
||||
{{ Icon('font', 'arrow-up', '', true) }}
|
||||
</button>
|
||||
<button class="button" type="button" title="{{ lang('MOVE_DOWN') }}" data-cropper-action="move,0,10">
|
||||
{{ Icon('font', 'arrow-down', '', true) }}
|
||||
</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) }}
|
||||
</button>
|
||||
<button class="button" type="button" title="{{ lang('ROTATE_RIGHT') }}" data-cropper-action="rotate,90">
|
||||
{{ Icon('font', 'rotate-right', '', true) }}
|
||||
</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) }}
|
||||
</button>
|
||||
<button class="button" type="button" title="{{ lang('FLIP_VERTICALLY') }}" data-cropper-action="scaleY">
|
||||
{{ Icon('font', 'arrows-up-down', '', true) }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="button-group">
|
||||
<button class="button" type="button" title="{{ lang('RESET') }}" data-cropper-action="reset">
|
||||
{{ Icon('font', 'arrows-rotate', '', true) }}
|
||||
</button>
|
||||
<button class="button" type="button" title="{{ lang('CLEAR') }}" data-cropper-action="clear">
|
||||
{{ Icon('font', 'xmark', '', true) }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{% endapply %}
|
||||
|
|
|
@ -11,11 +11,11 @@
|
|||
<script>
|
||||
// <![CDATA[
|
||||
|
||||
var ban_length = new Array();
|
||||
ban_length[-1] = '';
|
||||
var ban_reason = new Array();
|
||||
const ban_length = [];
|
||||
ban_length[-1] = '';
|
||||
const ban_reason = [];
|
||||
ban_reason[-1] = '';
|
||||
var ban_give_reason = new Array();
|
||||
const ban_give_reason = [];
|
||||
ban_give_reason[-1] = '';
|
||||
|
||||
<!-- BEGIN bans -->
|
||||
|
@ -43,6 +43,19 @@
|
|||
}
|
||||
}
|
||||
|
||||
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>
|
||||
|
||||
|
@ -60,11 +73,6 @@
|
|||
<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>
|
||||
|
@ -90,44 +98,41 @@
|
|||
|
||||
<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>{L_UNBAN_TITLE}</legend>
|
||||
<legend>{{ lang('UNBAN_TITLE') }}</legend>
|
||||
|
||||
<!-- IF S_BANNED_OPTIONS -->
|
||||
{% if BANNED_SELECT %}
|
||||
<dl>
|
||||
<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>
|
||||
<dt><label for="unban">{{ lang('BAN_CELL') ~ lang('COLON') }}</label></dt>
|
||||
<dd>
|
||||
{{ FormsSelect(BANNED_SELECT) }}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="unbanlength">{L_BAN_LENGTH}{L_COLON}</label></dt>
|
||||
<dt><label for="unbanlength">{{ lang('BAN_LENGTH') ~ lang('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">{L_BAN_REASON}{L_COLON}</label></dt>
|
||||
<dt><label for="unbanreason">{{ lang('BAN_REASON') ~ lang('COLON') }}</label></dt>
|
||||
<dd><textarea style="border: 0;" class="text full" readonly="readonly" name="unbanreason" id="unbanreason" rows="5" cols="80"> </textarea></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="unbangivereason">{L_BAN_GIVE_REASON}{L_COLON}</label></dt>
|
||||
<dt><label for="unbangivereason">{{ lang('BAN_GIVE_REASON') ~ lang('COLON') }}</label></dt>
|
||||
<dd><textarea style="border: 0;" class="text full" readonly="readonly" name="unbangivereason" id="unbangivereason" rows="5" cols="80"> </textarea></dd>
|
||||
</dl>
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="unbansubmit" name="unbansubmit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="unbanreset" name="unbanreset" value="{L_RESET}" />
|
||||
<input class="button1" type="submit" id="unbansubmit" name="unbansubmit" value="{{ lang('SUBMIT') }}" />
|
||||
<input class="button2" type="reset" id="unbanreset" name="unbanreset" value="{{ lang('RESET') }}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
|
||||
<!-- ELSE -->
|
||||
|
||||
<p>{L_NO_BAN_CELL}</p>
|
||||
{S_FORM_TOKEN}
|
||||
{% else %}
|
||||
<p>{{ lang('NO_BAN_CELL') }}</p>
|
||||
{% endif %}
|
||||
{{ S_FORM_TOKEN }}
|
||||
</fieldset>
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
</form>
|
||||
|
||||
<!-- INCLUDE overall_footer.html -->
|
||||
|
|
|
@ -27,7 +27,13 @@
|
|||
|
||||
<dl>
|
||||
<dt><label for="{options.KEY}">{options.TITLE}{L_COLON}</label><!-- IF options.S_EXPLAIN --><br /><span>{options.TITLE_EXPLAIN}</span><!-- ENDIF --></dt>
|
||||
<dd>{options.CONTENT}</dd>
|
||||
<dd>
|
||||
{% if options.CONTENT is iterable %}
|
||||
{{ FormsBuildTemplate(options.CONTENT)}}
|
||||
{% else %}
|
||||
{{ options.CONTENT }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
|
|
@ -27,15 +27,21 @@
|
|||
</dl>
|
||||
<dl>
|
||||
<dt><label for="bot_style">{L_BOT_STYLE}{L_COLON}</label><br /><span>{L_BOT_STYLE_EXPLAIN}</span></dt>
|
||||
<dd><select id="bot_style" name="bot_style">{S_STYLE_OPTIONS}</select></dd>
|
||||
<dd>
|
||||
{{ FormsSelect(S_STYLE_OPTIONS) }}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="bot_lang">{L_BOT_LANG}{L_COLON}</label><br /><span>{L_BOT_LANG_EXPLAIN}</span></dt>
|
||||
<dd><select id="bot_lang" name="bot_lang">{S_LANG_OPTIONS}</select></dd>
|
||||
<dt><label for="{{ LANG_OPTIONS.id }}">{L_BOT_LANG}{L_COLON}</label><br /><span>{L_BOT_LANG_EXPLAIN}</span></dt>
|
||||
<dd>
|
||||
{{ FormsSelect(LANG_OPTIONS) }}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="bot_active">{L_BOT_ACTIVE}{L_COLON}</label></dt>
|
||||
<dd><select id="bot_active" name="bot_active">{S_ACTIVE_OPTIONS}</select></dd>
|
||||
<dd>
|
||||
{{ FormsSelect(S_ACTIVE_OPTIONS) }}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="bot_agent">{L_BOT_AGENT}{L_COLON}</label><br /><span>{L_BOT_AGENT_EXPLAIN}</span></dt>
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
<label><input type="checkbox" class="radio" name="disable_magic_url"<!-- IF S_MAGIC_URL_DISABLE_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_DISABLE_MAGIC_URL}</label>
|
||||
<!-- ENDIF -->
|
||||
</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 10px;"><strong>{L_OPTIONS}{L_COLON} </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 10px;"><strong>{L_OPTIONS}{L_COLON} </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
|
|
130
phpBB/adm/style/acp_ext_catalog.html
Normal file
|
@ -0,0 +1,130 @@
|
|||
{% include('overall_header.html') %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{{ lang( 'EXTENSIONS_CATALOG') }}</h1>
|
||||
|
||||
<p>{{ lang( 'EXTENSIONS_CATALOG_EXPLAIN') }}</p>
|
||||
|
||||
<fieldset class="quick quick-left">
|
||||
<span class="small"><a href="https://www.phpbb.com/go/customise/extensions/{{ PHPBB_MAJOR }}" target="_blank">{{ lang('BROWSE_EXTENSIONS_DATABASE') }}</a> • <a href="javascript:phpbb.toggleDisplay('catalog_settings');">{{ lang('SETTINGS') }}</a></span>
|
||||
</fieldset>
|
||||
|
||||
{% if pagination is defined %}
|
||||
<div class="pagination top-pagination">
|
||||
{% include('pagination.html') %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="catalog_settings" method="post" action="{{ U_ACTION }}" style="display:none">
|
||||
<fieldset style="clear: both;">
|
||||
<legend>{{ lang('EXTENSIONS_CATALOG_SETTINGS') }}</legend>
|
||||
<dl>
|
||||
<dt><label for="enable_on_install">{{ lang('ENABLE_ON_INSTALL') }}{{ lang('COLON') }}</label></dt>
|
||||
<dd>
|
||||
<label><input type="radio" id="enable_on_install" name="enable_on_install" class="radio" value="1"{% if settings.enable_on_install %} checked="checked" {% endif %} /> {{ lang('YES') }}</label>
|
||||
<label><input type="radio" name="enable_on_install" class="radio" value="0"{% if not settings.enable_on_install %} checked="checked" {% endif %} /> {{ lang('NO') }}</label>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="purge_on_remove">{{ lang('PURGE_ON_REMOVE') }}{{ lang('COLON') }}</label></dt>
|
||||
<dd>
|
||||
<label><input type="radio" id="purge_on_remove" name="purge_on_remove" class="radio" value="1"{% if settings.purge_on_remove %} checked="checked" {% endif %} /> {{ lang('YES') }}</label>
|
||||
<label><input type="radio" name="purge_on_remove" class="radio" value="0"{% if not settings.purge_on_remove %} checked="checked" {% endif %} /> {{ lang('NO') }}</label>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>
|
||||
<label for="repositories">{{ lang('COMPOSER_REPOSITORIES') }}{{ lang('COLON') }}</label><br />
|
||||
<span class="explain">
|
||||
{{ lang('COMPOSER_REPOSITORIES_EXPLAIN') }}
|
||||
</span>
|
||||
</dt>
|
||||
<dd>
|
||||
<textarea id="repositories" name="repositories" rows="5" cols="30">{{ settings.repositories|join('\n') }}</textarea>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>
|
||||
<label for="enable_packagist">{{ lang('ENABLE_PACKAGIST') }}{{ lang('COLON') }}</label><br />
|
||||
<span class="explain">
|
||||
<strong class="error">{{ lang('WARNING') }}{{ lang('COLON') }}</strong> {{ lang('ENABLE_PACKAGIST_EXPLAIN') }}
|
||||
</span>
|
||||
</dt>
|
||||
<dd>
|
||||
<label><input type="radio" id="enable_packagist" name="enable_packagist" class="radio" value="1"{% if settings.enable_packagist %} checked="checked" {% endif %} /> {{ lang('YES') }}</label>
|
||||
<label><input type="radio" name="enable_packagist" class="radio" value="0"{% if not settings.enable_packagist %} checked="checked" {% endif %} /> {{ lang('NO') }}</label>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>
|
||||
<label for="minimum_stability">{{ lang('COMPOSER_MINIMUM_STABILITY') }}{{ lang('COLON') }}</label><br />
|
||||
<span class="explain">
|
||||
<strong class="error">{{ lang('WARNING') }}{{ lang('COLON') }}</strong> {{ lang('COMPOSER_MINIMUM_STABILITY_EXPLAIN') }}
|
||||
</span>
|
||||
</dt>
|
||||
<dd>
|
||||
<select id="minimum_stability" name="minimum_stability">
|
||||
{% for stability in settings.stabilities %}
|
||||
<option value="{{ stability }}"{% if stability === settings.minimum_stability %} selected='selected'{% endif %}>{{ lang('STABILITY_' ~ stability|upper) }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" name="update" value="{{ lang('SUBMIT') }}" />
|
||||
<input class="button2" type="reset" name="reset" value="{{ lang('RESET') }}" />
|
||||
<input type="hidden" name="action" value="set_catalog_settings" />
|
||||
{{ S_FORM_TOKEN }}
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{% if extensions is empty %}
|
||||
<tr>
|
||||
<td colspan="4"><div class="errorbox notice">{{ lang('NO_EXTENSION_AVAILABLE') }}</div></td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<table class="table1">
|
||||
<col class="row1" ><col class="row1" ><col class="row1" ><col class="row2" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 25%;">{{ lang("EXTENSION_NAME") }}</th>
|
||||
<th style="text-align: center; width: 10%;">{{ lang("VERSION") }}</th>
|
||||
<th>{{ lang("DESCRIPTION") }}</th>
|
||||
<th style="text-align: center; width: 15%;">{{ lang("EXTENSION_ACTIONS") }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for extension in extensions %}
|
||||
<tr>
|
||||
<td>
|
||||
<strong>{{ extension.display_name }}</strong><br />
|
||||
{{ extension.name }}
|
||||
</td>
|
||||
<td style="text-align: center">{{ extension.version }}</td>
|
||||
<td>{{ extension.description }} • <a href="{{ extension.url }}">{{ lang('HOMEPAGE') }}</a></td>
|
||||
<td style="text-align: center">
|
||||
{% if extension.name in managed_extensions %}
|
||||
<span style="color: #228822;">{{ lang('INSTALLED') }}</span>
|
||||
{% elseif extension.name in installed_extensions -%}
|
||||
<span style="color: #BC2A4D;">{{ lang('INSTALLED_MANUALLY') }}</span>
|
||||
(<a href="{{ U_ACTION }}&action=manage&extension={{ extension.composer_name|url_encode }}">{{ lang('MANAGE') }}</a>)
|
||||
{% elseif not enabled -%}
|
||||
<a href="{{ U_ACTION }}&action=install&extension={{ extension.composer_name|url_encode }}">{{ lang('INSTALL') }}</a>
|
||||
{%- endif -%}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
{% if pagination is defined %}
|
||||
<div class="pagination bottom-pagination">
|
||||
{% include('pagination.html') %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% include('overall_footer.html') %}
|
|
@ -7,7 +7,7 @@
|
|||
<p>{L_EXTENSIONS_EXPLAIN}</p>
|
||||
|
||||
<fieldset class="quick">
|
||||
<span class="small"><a href="https://www.phpbb.com/go/customise/extensions/3.3" target="_blank">{L_BROWSE_EXTENSIONS_DATABASE}</a> • <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE_ALL}</a> • <a href="javascript:phpbb.toggleDisplay('version_check_settings');">{L_SETTINGS}</a></span>
|
||||
<span class="small"><a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE_ALL}</a> • <a href="javascript:phpbb.toggleDisplay('version_check_settings');">{L_SETTINGS}</a></span>
|
||||
</fieldset>
|
||||
|
||||
<form id="version_check_settings" method="post" action="{U_ACTION}" style="display:none">
|
||||
|
@ -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 --><i class="fa fa-exclamation-circle outdated-ext" aria-hidden="true"></i><!-- ENDIF -->
|
||||
<!-- IF not enabled.S_UP_TO_DATE -->{{ Icon('font', 'circle-exclamation', '', true, 'fas outdated-ext') }}<!-- ENDIF -->
|
||||
<!-- ELSE -->
|
||||
{enabled.META_VERSION}
|
||||
<!-- ENDIF -->
|
||||
|
@ -60,7 +60,7 @@
|
|||
<td style="text-align: center;"><a href="{enabled.U_DETAILS}">{L_DETAILS}</a></td>
|
||||
<td style="text-align: center;">
|
||||
<!-- BEGIN actions -->
|
||||
<a href="{enabled.actions.U_ACTION}"<!-- IF enabled.actions.L_ACTION_EXPLAIN --> title="{enabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{enabled.actions.L_ACTION}</a>
|
||||
<a href="{enabled.actions.U_ACTION}"<!-- IF enabled.actions.ACTION == 'REMOVE' --> style="color: #bc2a4d;"<!-- ENDIF --><!-- IF enabled.actions.L_ACTION_EXPLAIN --> title="{enabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{enabled.actions.L_ACTION}</a>
|
||||
<!-- IF not enabled.actions.S_LAST_ROW --> | <!-- ENDIF -->
|
||||
<!-- END actions -->
|
||||
</td>
|
||||
|
@ -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 --><i class="fa fa-exclamation-circle outdated-ext" aria-hidden="true"></i><!-- ENDIF -->
|
||||
<!-- IF not disabled.S_UP_TO_DATE -->{{ Icon('font', 'circle-exclamation', '', true, 'fas outdated-ext') }}<!-- ENDIF -->
|
||||
<!-- ELSE -->
|
||||
{disabled.META_VERSION}
|
||||
<!-- ENDIF -->
|
||||
|
@ -88,7 +88,7 @@
|
|||
</td>
|
||||
<td style="text-align: center;">
|
||||
<!-- BEGIN actions -->
|
||||
<a href="{disabled.actions.U_ACTION}"<!-- IF disabled.actions.L_ACTION_EXPLAIN --> title="{disabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{disabled.actions.L_ACTION}</a>
|
||||
<a href="{disabled.actions.U_ACTION}"<!-- IF disabled.actions.ACTION == 'REMOVE' --> style="color: #bc2a4d;"<!-- ENDIF --><!-- IF disabled.actions.L_ACTION_EXPLAIN --> title="{disabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{disabled.actions.L_ACTION}</a>
|
||||
<!-- IF not disabled.actions.S_LAST_ROW --> | <!-- ENDIF -->
|
||||
<!-- END actions -->
|
||||
</td>
|
||||
|
@ -99,25 +99,44 @@
|
|||
</table>
|
||||
|
||||
<table class="table1">
|
||||
<tr>
|
||||
<th>{L_EXTENSION_INSTALL_HEADLINE}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="row3">{L_EXTENSION_INSTALL_EXPLAIN}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{L_EXTENSION_UPDATE_HEADLINE}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="row3">{L_EXTENSION_UPDATE_EXPLAIN}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{L_EXTENSION_REMOVE_HEADLINE}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="row3">{L_EXTENSION_REMOVE_EXPLAIN}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>{L_EXTENSION_INSTALLING_HEADLINE}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="row3">
|
||||
<ol>
|
||||
{% for step in lang_raw('EXTENSION_INSTALLING_EXPLAIN') %}
|
||||
<li>{{ step }}</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{L_EXTENSION_UPDATING_HEADLINE}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="row3">
|
||||
<ol>
|
||||
{% for step in lang_raw('EXTENSION_UPDATING_EXPLAIN') %}
|
||||
<li>{{ step }}</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{L_EXTENSION_REMOVING_HEADLINE}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="row3">
|
||||
<ol>
|
||||
{% for step in lang_raw('EXTENSION_REMOVING_EXPLAIN') %}
|
||||
<li>{{ step }}</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- INCLUDE overall_footer.html -->
|
||||
|
|
|
@ -348,7 +348,7 @@
|
|||
<!-- EVENT acp_forums_rules_settings_append -->
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- EVENT acp_forums_custom_settings -->
|
||||
|
||||
<fieldset class="submit-buttons">
|
||||
|
@ -472,7 +472,17 @@
|
|||
<tbody>
|
||||
<!-- BEGIN forums -->
|
||||
<tr>
|
||||
<td class="folder">{forums.FOLDER_IMAGE}</td>
|
||||
<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="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>
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
<legend>{L_GROUP_AVATAR}</legend>
|
||||
<dl>
|
||||
<dt><label>{L_CURRENT_IMAGE}{L_COLON}</label><br /><span>{L_AVATAR_EXPLAIN}</span></dt>
|
||||
<dd>{AVATAR}</dd>
|
||||
<dd class="c-avatar-box">{% if AVATAR_HTML %}{{ AVATAR_HTML }}{% else %}<img src="{{ ADMIN_ROOT_PATH ~ 'images/no_avatar.gif' }}" alt="">{% endif %}</dd>
|
||||
<dd><label for="avatar_delete"><input type="checkbox" name="avatar_delete" id="avatar_delete" /> {L_DELETE_AVATAR}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
<div class="send-stats-row">
|
||||
<!-- EVENT acp_help_phpbb_stats_before -->
|
||||
<div class="send-stats-tile">
|
||||
<h2><i class="icon fa-bar-chart"></i>{L_SEND_STATISTICS}</h2>
|
||||
<h2>{{ Icon('font', 'chart-column', lang('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><i class="icon fa-angle-down"></i></a>
|
||||
<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>
|
||||
</div>
|
||||
<div class="send-stats-data-row">
|
||||
<div class="configlist" id="configlist">
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
<!-- ENDIF -->
|
||||
|
||||
<fieldset class="quick">
|
||||
<select name="action">{S_INACTIVE_OPTIONS}</select>
|
||||
{{ FormsSelect(INACTIVE_OPTIONS) }}
|
||||
<input class="button2" type="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<p class="small"><a href="#" onclick="marklist('inactive', 'mark', true); return false;">{L_MARK_ALL}</a> • <a href="#" onclick="marklist('inactive', 'mark', false); return false;">{L_UNMARK_ALL}</a></p>
|
||||
{S_FORM_TOKEN}
|
||||
|
|
|
@ -24,6 +24,14 @@
|
|||
<dt><label>{L_LANG_ISO_CODE}{L_COLON}</label></dt>
|
||||
<dd><strong>{LANG_ISO}</strong></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label>{{ lang('PHPBB_VERSION') ~ lang('COLON') }}</label></dt>
|
||||
<dd><strong>{{ LANG_PHPBB_VERSION }}</strong></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label>{{ lang('LANG_VERSION') ~ lang('COLON') }}</label></dt>
|
||||
<dd><strong>{{ LANG_VERSION }}</strong></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="lang_author">{L_LANG_AUTHOR}{L_COLON}</label></dt>
|
||||
<dd><input type="text" id="lang_author" name="lang_author" value="{LANG_AUTHOR}" maxlength="255" /></dd>
|
||||
|
|
|
@ -39,6 +39,15 @@
|
|||
<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">
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
var j = 0;
|
||||
<!-- BEGIN m_names -->
|
||||
|
||||
|
||||
if (value == '{m_names.A_NAME}')
|
||||
{
|
||||
<!-- BEGIN modes -->
|
||||
|
@ -60,13 +60,6 @@
|
|||
|
||||
<p>{L_EDIT_MODULE_EXPLAIN}</p>
|
||||
|
||||
<!-- IF S_ERROR -->
|
||||
<div class="errorbox">
|
||||
<h3>{L_WARNING}</h3>
|
||||
<p>{ERROR_MSG}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<form id="moduleedit" method="post" action="{U_EDIT_ACTION}">
|
||||
|
||||
<fieldset>
|
||||
|
@ -111,7 +104,7 @@
|
|||
<p class="submit-buttons">
|
||||
<input type="hidden" name="action" value="{ACTION}" />
|
||||
<input type="hidden" name="m" value="{MODULE_ID}" />
|
||||
|
||||
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
|
@ -125,13 +118,6 @@
|
|||
|
||||
<p>{L_ACP_MODULE_MANAGEMENT_EXPLAIN}</p>
|
||||
|
||||
<!-- IF S_ERROR -->
|
||||
<div class="errorbox">
|
||||
<h3>{L_WARNING}</h3>
|
||||
<p>{ERROR_MSG}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<table class="table1">
|
||||
<tbody>
|
||||
<tr>
|
||||
|
@ -146,7 +132,16 @@
|
|||
<tbody>
|
||||
<!-- BEGIN modules -->
|
||||
<tr>
|
||||
<td style="width: 5%; text-align: center;">{modules.MODULE_IMAGE}</td>
|
||||
<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><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;"> <!-- IF modules.MODULE_ENABLED --><a href="{modules.U_DISABLE}">{L_DISABLE}</a><!-- ELSE --><a href="{modules.U_ENABLE}">{L_ENABLE}</a><!-- ENDIF --> </td>
|
||||
<td class="actions">
|
||||
|
@ -154,7 +149,7 @@
|
|||
<span class="up"><a href="{modules.U_MOVE_UP}" data-ajax="row_up">{ICON_MOVE_UP}</a></span>
|
||||
<span class="down-disabled" style="display:none;">{ICON_MOVE_DOWN_DISABLED}</span>
|
||||
<span class="down"><a href="{modules.U_MOVE_DOWN}" data-ajax="row_down">{ICON_MOVE_DOWN}</a></span>
|
||||
<a href="{modules.U_EDIT}">{ICON_EDIT}</a>
|
||||
<a href="{modules.U_EDIT}">{ICON_EDIT}</a>
|
||||
<a href="{modules.U_DELETE}" data-ajax="row_delete">{ICON_DELETE}</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -173,7 +168,7 @@
|
|||
<select name="quick_install">{S_INSTALL_OPTIONS}</select>
|
||||
<input class="button2" name="quickadd" type="submit" value="{L_ADD_MODULE}" />
|
||||
</fieldset>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
<form id="module" method="post" action="{U_ACTION}">
|
||||
|
@ -182,17 +177,17 @@
|
|||
<input type="hidden" name="action" value="add" />
|
||||
<input type="hidden" name="module_parent_id" value="{PARENT_ID}" />
|
||||
|
||||
<input type="text" name="module_langname" maxlength="255" />
|
||||
<input type="text" name="module_langname" maxlength="255" />
|
||||
<input class="button2" name="addmodule" type="submit" value="{L_CREATE_MODULE}" />
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
|
||||
<div class="clearfix"> </div><br style="clear: both;" />
|
||||
|
||||
|
||||
<form id="mselect" method="post" action="{U_SEL_ACTION}">
|
||||
<fieldset class="quick">
|
||||
{L_SELECT_MODULE}{L_COLON} <select name="parent_id" onchange="if(this.options[this.selectedIndex].value != -1){ this.form.submit(); }">{MODULE_BOX}</select>
|
||||
{L_SELECT_MODULE}{L_COLON} <select name="parent_id" onchange="if(this.options[this.selectedIndex].value != -1){ this.form.submit(); }">{MODULE_BOX}</select>
|
||||
|
||||
<input class="button2" type="submit" value="{L_GO}" />
|
||||
</fieldset>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
// Define the bbCode tags
|
||||
var bbcode = new Array();
|
||||
var bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]','[flash=]', '[/flash]','[size=]','[/size]'<!-- BEGIN custom_tags -->, {custom_tags.BBCODE_NAME}<!-- END custom_tags -->);
|
||||
var bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]','[size=]','[/size]'<!-- BEGIN custom_tags -->, {custom_tags.BBCODE_NAME}<!-- END custom_tags -->);
|
||||
|
||||
// ]]>
|
||||
</script>
|
||||
|
@ -28,9 +28,6 @@
|
|||
<!-- IF S_LINKS_ALLOWED -->
|
||||
<input type="button" class="button2" accesskey="w" name="addbbcode16" value="URL" style="text-decoration: underline; width: 40px" onclick="bbstyle(16)" title="{L_BBCODE_W_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_BBCODE_FLASH -->
|
||||
<input type="button" class="button2" accesskey="d" name="addbbcode18" value="Flash" onclick="bbstyle(18)" title="{L_BBCODE_D_HELP}" />
|
||||
<!-- ENDIF -->
|
||||
<select name="addbbcode20" onchange="bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + ']', '[/size]');this.form.addbbcode20.selectedIndex = 2;" title="{L_BBCODE_F_HELP}">
|
||||
<option value="50">{L_FONT_TINY}</option>
|
||||
<option value="85">{L_FONT_SMALL}</option>
|
||||
|
|
|
@ -1,191 +0,0 @@
|
|||
<!-- INCLUDE overall_header.html -->
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<!-- IF S_SETTINGS -->
|
||||
<h1>{L_ACP_SEARCH_SETTINGS}</h1>
|
||||
|
||||
<p>{L_ACP_SEARCH_SETTINGS_EXPLAIN}</p>
|
||||
|
||||
<form id="acp_search" method="post" action="{U_ACTION}">
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_GENERAL_SEARCH_SETTINGS}</legend>
|
||||
<dl>
|
||||
<dt><label for="load_search">{L_YES_SEARCH}{L_COLON}</label><br /><span>{L_YES_SEARCH_EXPLAIN}</span></dt>
|
||||
<dd><label><input type="radio" class="radio" id="load_search" name="config[load_search]" value="1"<!-- IF S_YES_SEARCH --> checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="config[load_search]" value="0"<!-- IF not S_YES_SEARCH --> checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="search_interval">{L_SEARCH_INTERVAL}{L_COLON}</label><br /><span>{L_SEARCH_INTERVAL_EXPLAIN}</span></dt>
|
||||
<dd><input id="search_interval" type="number" min="0" max="9999" name="config[search_interval]" value="{SEARCH_INTERVAL}" /> {L_SECONDS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="search_anonymous_interval">{L_SEARCH_GUEST_INTERVAL}{L_COLON}</label><br /><span>{L_SEARCH_GUEST_INTERVAL_EXPLAIN}</span></dt>
|
||||
<dd><input id="search_anonymous_interval" type="number" min="0" max="9999" name="config[search_anonymous_interval]" value="{SEARCH_GUEST_INTERVAL}" /> {L_SECONDS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="limit_search_load">{L_LIMIT_SEARCH_LOAD}{L_COLON}</label><br /><span>{L_LIMIT_SEARCH_LOAD_EXPLAIN}</span></dt>
|
||||
<dd><input id="limit_search_load" type="text" size="4" maxlength="4" name="config[limit_search_load]" value="{LIMIT_SEARCH_LOAD}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="min_search_author_chars">{L_MIN_SEARCH_AUTHOR_CHARS}{L_COLON}</label><br /><span>{L_MIN_SEARCH_AUTHOR_CHARS_EXPLAIN}</span></dt>
|
||||
<dd><input id="min_search_author_chars" type="number" min="0" max="9999" name="config[min_search_author_chars]" value="{MIN_SEARCH_AUTHOR_CHARS}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="max_num_search_keywords">{L_MAX_NUM_SEARCH_KEYWORDS}{L_COLON}</label><br /><span>{L_MAX_NUM_SEARCH_KEYWORDS_EXPLAIN}</span></dt>
|
||||
<dd><input id="max_num_search_keywords" type="number" min="0" max="9999" name="config[max_num_search_keywords]" value="{MAX_NUM_SEARCH_KEYWORDS}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>
|
||||
<label for="default_search_return_chars">{{ lang('DEFAULT_SEARCH_RETURN_CHARS') ~ lang('COLON') }}</label>
|
||||
<br><span>{{ lang('DEFAULT_SEARCH_RETURN_CHARS_EXPLAIN') }}</span>
|
||||
</dt>
|
||||
<dd><input id="default_search_return_chars" name="config[default_search_return_chars]" type="number" value="{{ DEFAULT_SEARCH_RETURN_CHARS }}" min="0" max="9999"></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="search_store_results">{L_SEARCH_STORE_RESULTS}{L_COLON}</label><br /><span>{L_SEARCH_STORE_RESULTS_EXPLAIN}</span></dt>
|
||||
<dd><input id="search_store_results" type="number" min="0" max="999999" name="config[search_store_results]" value="{SEARCH_STORE_RESULTS}" /> {L_SECONDS}</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_SEARCH_TYPE}</legend>
|
||||
<dl>
|
||||
<dt><label for="search_type">{L_SEARCH_TYPE}{L_COLON}</label><br /><span>{L_SEARCH_TYPE_EXPLAIN}</span></dt>
|
||||
<dd><select id="search_type" name="config[search_type]" data-togglable-settings="true">{S_SEARCH_TYPES}</select></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
<!-- BEGIN backend -->
|
||||
|
||||
<fieldset id="search_{backend.IDENTIFIER}_settings">
|
||||
<legend>{backend.NAME}</legend>
|
||||
{backend.SETTINGS}
|
||||
</fieldset>
|
||||
|
||||
<!-- END backend -->
|
||||
|
||||
<fieldset>
|
||||
<legend>{L_ACP_SUBMIT_CHANGES}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<!-- ELSEIF S_INDEX -->
|
||||
|
||||
<h1>{L_ACP_SEARCH_INDEX}</h1>
|
||||
|
||||
<!-- IF S_CONTINUE_INDEXING -->
|
||||
<p>
|
||||
{% if S_CONTINUE_INDEXING == 'create' %}
|
||||
{{ lang('CONTINUE_INDEXING_EXPLAIN') }}
|
||||
{% else %}
|
||||
{{ lang('CONTINUE_DELETING_INDEX_EXPLAIN') }}
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
<form id="acp_search_continue" method="post" action="{U_CONTINUE_INDEXING}">
|
||||
<fieldset>
|
||||
<legend>{{ lang('CONTINUE_INDEXING') }}</legend>
|
||||
{% if CONTINUE_PROGRESS %}
|
||||
<div class="centered-text">
|
||||
<br>
|
||||
<progress
|
||||
value="{{ CONTINUE_PROGRESS.VALUE }}"
|
||||
max="{{ CONTINUE_PROGRESS.TOTAL }}"
|
||||
style="height: 2em; width: 20em;"></progress><br>
|
||||
{{ CONTINUE_PROGRESS.PERCENTAGE|number_format(2) ~ ' %' }}<br>
|
||||
{{ lang('SEARCH_INDEX_PROGRESS', CONTINUE_PROGRESS.VALUE, CONTINUE_PROGRESS.REMAINING, CONTINUE_PROGRESS.TOTAL) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />
|
||||
<input class="button2" type="submit" id="cancel" name="cancel" value="{L_CANCEL}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
</form>
|
||||
<!-- ELSE -->
|
||||
|
||||
<p>{L_ACP_SEARCH_INDEX_EXPLAIN}</p>
|
||||
|
||||
<!-- BEGIN backend -->
|
||||
|
||||
<!-- IF backend.S_STATS -->
|
||||
|
||||
<form id="acp_search_index_{backend.NAME}" method="post" action="{U_ACTION}">
|
||||
|
||||
<fieldset class="tabulated">
|
||||
|
||||
{backend.S_HIDDEN_FIELDS}
|
||||
|
||||
<legend>{L_INDEX_STATS}{L_COLON} {backend.L_NAME} <!-- IF backend.S_ACTIVE -->({L_ACTIVE}) <!-- ENDIF --></legend>
|
||||
|
||||
<table class="table1">
|
||||
<caption>{backend.L_NAME} <!-- IF backend.S_ACTIVE -->({L_ACTIVE}) <!-- ENDIF --></caption>
|
||||
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{L_STATISTIC}</th>
|
||||
<th>{L_VALUE}</th>
|
||||
<th>{L_STATISTIC}</th>
|
||||
<th>{L_VALUE}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- BEGIN data -->
|
||||
<tr>
|
||||
<td>{backend.data.STATISTIC_1}{L_COLON}</td>
|
||||
<td>{backend.data.VALUE_1}</td>
|
||||
<td>{backend.data.STATISTIC_2}<!-- IF backend.data.STATISTIC_2 -->{L_COLON}<!-- ENDIF --></td>
|
||||
<td>{backend.data.VALUE_2}</td>
|
||||
</tr>
|
||||
<!-- END data -->
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<p class="quick">
|
||||
<!-- IF backend.S_INDEXED -->
|
||||
<input type="hidden" name="action" value="delete" />
|
||||
<input class="button2" type="submit" name="submit" value="{{ lang('DELETE_INDEX') }}" />
|
||||
<!-- ELSE -->
|
||||
<input type="hidden" name="action" value="create" />
|
||||
<input class="button2" type="submit" name="submit" value="{{ lang('CREATE_INDEX') }}" />
|
||||
<!-- ENDIF -->
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
<!-- END backend -->
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- ELSEIF S_INDEX_PROGRESS -->
|
||||
<div class="successbox">
|
||||
<h3>{{ INDEXING_TITLE }}</h3>
|
||||
<p>
|
||||
{{ INDEXING_EXPLAIN }}
|
||||
{% if INDEXING_PROGRESS %}<br>{{ INDEXING_PROGRESS }}{% endif %}
|
||||
{% if INDEXING_RATE %}<br>{{ INDEXING_RATE }}{% endif %}
|
||||
{% if INDEXING_PROGRESS_BAR %}
|
||||
<br>
|
||||
<progress
|
||||
value="{{ INDEXING_PROGRESS_BAR.VALUE }}"
|
||||
max="{{ INDEXING_PROGRESS_BAR.TOTAL }}"
|
||||
style="height: 2em; width: 20em;"></progress><br>
|
||||
{{ INDEXING_PROGRESS_BAR.PERCENTAGE|number_format(2) ~ ' %' }}<br>
|
||||
{{ lang('SEARCH_INDEX_PROGRESS', INDEXING_PROGRESS_BAR.VALUE, INDEXING_PROGRESS_BAR.REMAINING, INDEXING_PROGRESS_BAR.TOTAL) }}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- INCLUDE overall_footer.html -->
|
66
phpBB/adm/style/acp_search_index.html
Normal file
|
@ -0,0 +1,66 @@
|
|||
{% include 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{{ lang('ACP_SEARCH_INDEX') }}</h1>
|
||||
|
||||
<p>{{ lang('ACP_SEARCH_INDEX_EXPLAIN') }}</p>
|
||||
|
||||
{% for backend in backends %}
|
||||
|
||||
{% if backend.S_STATS is not empty %}
|
||||
|
||||
<form id="acp_search_index_{{ backend.TYPE|replace({'\\': '-'}) }}" method="post" action="{{ U_ACTION }}">
|
||||
|
||||
<fieldset class="tabulated">
|
||||
|
||||
{{ backend.S_HIDDEN_FIELDS }}
|
||||
|
||||
<legend>{{ lang('INDEX_STATS') ~ lang('COLON') }} {{ backend.NAME }} {% if backend.S_ACTIVE %}({{ lang('ACTIVE') }}) {% endif %}</legend>
|
||||
|
||||
<table class="table1">
|
||||
<caption>{{ backend.NAME }} {% if backend.S_ACTIVE %}({{ lang('ACTIVE') }}) {% endif %}</caption>
|
||||
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ lang('STATISTIC') }}</th>
|
||||
<th>{{ lang('VALUE') }}</th>
|
||||
<th>{{ lang('STATISTIC') }}</th>
|
||||
<th>{{ lang('VALUE') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for stat in backend.S_STATS | batch(2, '') %}
|
||||
<tr>
|
||||
{% for key, value in stat %}
|
||||
{% if value is not empty %}
|
||||
<td>{{ key ~ lang('COLON') }}</td>
|
||||
<td>{{ value }}</td>
|
||||
{% else %}
|
||||
<td></td>
|
||||
<td></td>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{% endif %}
|
||||
|
||||
<p class="quick">
|
||||
{% if backend.S_INDEXED %}
|
||||
<input type="hidden" name="action" value="delete" />
|
||||
<input class="button2" type="submit" name="submit" value="{{ lang('DELETE_INDEX') }}" />
|
||||
{% else %}
|
||||
<input type="hidden" name="action" value="create" />
|
||||
<input class="button2" type="submit" name="submit" value="{{ lang('CREATE_INDEX') }}" />
|
||||
{% endif %}
|
||||
</p>
|
||||
{{ S_FORM_TOKEN }}
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
{% endfor %}
|
||||
|
||||
{% include 'overall_footer.html' %}
|
43
phpBB/adm/style/acp_search_index_inprogress.html
Normal file
|
@ -0,0 +1,43 @@
|
|||
{% include 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>
|
||||
{% if S_ACTION == 'create' %}
|
||||
{{ lang('CONTINUE_INDEXING') }}
|
||||
{% else %}
|
||||
{{ lang('CONTINUE_DELETING_INDEX') }}
|
||||
{% endif %}
|
||||
</h1>
|
||||
|
||||
<p>
|
||||
{% if S_ACTION == 'create' %}
|
||||
{{ lang('CONTINUE_INDEXING_EXPLAIN') }}
|
||||
{% else %}
|
||||
{{ lang('CONTINUE_DELETING_INDEX_EXPLAIN') }}
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
<form id="acp_search_continue" method="post" action="{{ U_ACTION }}">
|
||||
<fieldset>
|
||||
<legend>{{ lang('CONTINUE_INDEXING') }}</legend>
|
||||
{% if CONTINUE_PROGRESS %}
|
||||
<div class="centered-text">
|
||||
<br>
|
||||
<progress
|
||||
value="{{ CONTINUE_PROGRESS.VALUE }}"
|
||||
max="{{ CONTINUE_PROGRESS.TOTAL }}"
|
||||
style="height: 2em; width: 20em;"></progress><br>
|
||||
{{ CONTINUE_PROGRESS.PERCENTAGE|number_format(2) ~ ' %' }}<br>
|
||||
{{ lang('SEARCH_INDEX_PROGRESS', CONTINUE_PROGRESS.VALUE, CONTINUE_PROGRESS.REMAINING, CONTINUE_PROGRESS.TOTAL) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{{ lang('SUBMIT') }}" />
|
||||
<input class="button2" type="submit" id="cancel" name="cancel" value="{{ lang('CANCEL') }}" />
|
||||
</p>
|
||||
{{ S_FORM_TOKEN }}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{% include 'overall_footer.html' %}
|
23
phpBB/adm/style/acp_search_index_progress.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
{% include 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<div class="successbox">
|
||||
<h3>{{ INDEXING_TITLE }}</h3>
|
||||
<p>
|
||||
{{ INDEXING_EXPLAIN }}
|
||||
{% if INDEXING_PROGRESS %}<br>{{ INDEXING_PROGRESS }}{% endif %}
|
||||
{% if INDEXING_RATE %}<br>{{ INDEXING_RATE }}{% endif %}
|
||||
{% if INDEXING_PROGRESS_BAR %}
|
||||
<br>
|
||||
<progress
|
||||
value="{{ INDEXING_PROGRESS_BAR.VALUE }}"
|
||||
max="{{ INDEXING_PROGRESS_BAR.TOTAL }}"
|
||||
style="height: 2em; width: 20em;"></progress><br>
|
||||
{{ INDEXING_PROGRESS_BAR.PERCENTAGE|number_format(2) ~ ' %' }}<br>
|
||||
{{ lang('SEARCH_INDEX_PROGRESS', INDEXING_PROGRESS_BAR.VALUE, INDEXING_PROGRESS_BAR.REMAINING, INDEXING_PROGRESS_BAR.TOTAL) }}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{% include 'overall_footer.html' %}
|
78
phpBB/adm/style/acp_search_settings.html
Normal file
|
@ -0,0 +1,78 @@
|
|||
{% include 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{{ lang('ACP_SEARCH_SETTINGS') }}</h1>
|
||||
|
||||
<p>{{ lang('ACP_SEARCH_SETTINGS_EXPLAIN') }}</p>
|
||||
|
||||
<form id="acp_search" method="post" action="{{ U_ACTION }}">
|
||||
|
||||
<fieldset>
|
||||
<legend>{{ lang('GENERAL_SEARCH_SETTINGS') }}</legend>
|
||||
<dl>
|
||||
<dt><label for="load_search">{{ lang('YES_SEARCH') ~ lang('COLON') }}</label><br /><span>{{ lang('YES_SEARCH_EXPLAIN') }}</span></dt>
|
||||
<dd><label><input type="radio" class="radio" id="load_search" name="config[load_search]" value="1"{% if S_YES_SEARCH %} checked="checked"{% endif %} /> {{ lang('YES') }}</label>
|
||||
<label><input type="radio" class="radio" name="config[load_search]" value="0"{% if not S_YES_SEARCH %} checked="checked"{% endif %} /> {{ lang('NO') }}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="search_interval">{{ lang('SEARCH_INTERVAL') ~ lang('COLON') }}</label><br /><span>{{ lang('SEARCH_INTERVAL_EXPLAIN') }}</span></dt>
|
||||
<dd><input id="search_interval" type="number" min="0" max="9999" name="config[search_interval]" value="{{ SEARCH_INTERVAL }}" /> {{ lang('SECONDS') }}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="search_anonymous_interval">{{ lang('SEARCH_GUEST_INTERVAL') ~ lang('COLON') }}</label><br /><span>{{ lang('SEARCH_GUEST_INTERVAL_EXPLAIN') }}</span></dt>
|
||||
<dd><input id="search_anonymous_interval" type="number" min="0" max="9999" name="config[search_anonymous_interval]" value="{{ SEARCH_GUEST_INTERVAL }}" /> {{ lang('SECONDS') }}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="limit_search_load">{{ lang('LIMIT_SEARCH_LOAD') ~ lang('COLON') }}</label><br /><span>{{ lang('LIMIT_SEARCH_LOAD_EXPLAIN') }}</span></dt>
|
||||
<dd><input id="limit_search_load" type="text" size="4" maxlength="4" name="config[limit_search_load]" value="{{ LIMIT_SEARCH_LOAD }}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="min_search_author_chars">{{ lang('MIN_SEARCH_AUTHOR_CHARS') ~ lang('COLON') }}</label><br /><span>{{ lang('MIN_SEARCH_AUTHOR_CHARS_EXPLAIN') }}</span></dt>
|
||||
<dd><input id="min_search_author_chars" type="number" min="0" max="9999" name="config[min_search_author_chars]" value="{{ MIN_SEARCH_AUTHOR_CHARS }}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="max_num_search_keywords">{{ lang('MAX_NUM_SEARCH_KEYWORDS') ~ lang('COLON') }}</label><br /><span>{{ lang('MAX_NUM_SEARCH_KEYWORDS_EXPLAIN') }}</span></dt>
|
||||
<dd><input id="max_num_search_keywords" type="number" min="0" max="9999" name="config[max_num_search_keywords]" value="{{ MAX_NUM_SEARCH_KEYWORDS }}" /></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>
|
||||
<label for="default_search_return_chars">{{ lang('DEFAULT_SEARCH_RETURN_CHARS') ~ lang('COLON') }}</label>
|
||||
<br><span>{{ lang('DEFAULT_SEARCH_RETURN_CHARS_EXPLAIN') }}</span>
|
||||
</dt>
|
||||
<dd><input id="default_search_return_chars" name="config[default_search_return_chars]" type="number" value="{{ DEFAULT_SEARCH_RETURN_CHARS }}" min="0" max="9999"></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="search_store_results">{{ lang('SEARCH_STORE_RESULTS') ~ lang('COLON') }}</label><br /><span>{{ lang('SEARCH_STORE_RESULTS_EXPLAIN') }}</span></dt>
|
||||
<dd><input id="search_store_results" type="number" min="0" max="999999" name="config[search_store_results]" value="{{ SEARCH_STORE_RESULTS }}" /> {{ lang('SECONDS') }}</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{ lang('SEARCH_TYPE') }}</legend>
|
||||
<dl>
|
||||
<dt><label for="search_type">{{ lang('SEARCH_TYPE') ~ lang('COLON') }}</label><br /><span>{{ lang('SEARCH_TYPE_EXPLAIN') }}</span></dt>
|
||||
<dd><select id="search_type" name="config[search_type]" data-togglable-settings="true">{{ S_SEARCH_TYPES }}</select></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
{% for backend in loops.backend %}
|
||||
|
||||
<fieldset id="search_{{ backend.IDENTIFIER }}_settings">
|
||||
<legend>{{ backend.NAME }}</legend>
|
||||
{{ backend.SETTINGS }}
|
||||
</fieldset>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
<fieldset>
|
||||
<legend>{{ lang('ACP_SUBMIT_CHANGES') }}</legend>
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{{ lang('SUBMIT') }}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{{ lang('RESET') }}" />
|
||||
</p>
|
||||
{{ S_FORM_TOKEN }}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{% include 'overall_footer.html' %}
|
127
phpBB/adm/style/acp_storage.html
Normal file
|
@ -0,0 +1,127 @@
|
|||
{% include 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{{ lang('STORAGE_TITLE') }}</h1>
|
||||
|
||||
<p>{{ lang('STORAGE_TITLE_EXPLAIN') }}</p>
|
||||
|
||||
<table class="table1 zebra-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ lang('STORAGE_NAME') }}</th>
|
||||
<th>{{ lang('STORAGE_NUM_FILES') }}</th>
|
||||
<th>{{ lang('STORAGE_SIZE') }}</th>
|
||||
<th>{{ lang('STORAGE_FREE') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for storage in STORAGE_STATS %}
|
||||
<tr>
|
||||
<td>{{ storage.name }}</td>
|
||||
<td>{{ storage.files }}</td>
|
||||
<td>{{ storage.size }}</td>
|
||||
<td>{{ storage.free_space }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{% if ERROR_MESSAGES is not empty %}
|
||||
<div class="errorbox">
|
||||
<h3>{{ lang('WARNING') }}</h3>
|
||||
{% for ERROR_MESSAGE in ERROR_MESSAGES %}
|
||||
<p>{{ ERROR_MESSAGE }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="acp_storage" method="post" action="{{ U_ACTION }}">
|
||||
{% for storage in STORAGES %}
|
||||
<fieldset>
|
||||
<legend>{{ lang('STORAGE_' ~ storage.get_name | upper ~ '_TITLE') }}</legend>
|
||||
<dl>
|
||||
<dt><label for="{{ storage.get_name }}">{{ lang('STORAGE_SELECT') ~ lang('COLON') }}</label><br /><span>{{ lang('STORAGE_SELECT_DESC') }}</span></dt>
|
||||
<dd>
|
||||
<select id="{{ storage.get_name }}" name="{{ storage.get_name }}[provider]" data-togglable-settings="true">
|
||||
{% for provider in PROVIDERS %}
|
||||
{% if provider.is_available %}
|
||||
<option value="{{ get_class(provider) }}"{{ attribute(config, 'storage\\' ~ storage.get_name ~ '\\provider') == get_class(provider) ? ' selected' : '' }} data-toggle-setting="#{{ storage.get_name }}_{{ provider.get_name }}_settings">
|
||||
{{ lang('STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_NAME') }}
|
||||
</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
{% for provider in PROVIDERS %}
|
||||
{% if provider.is_available %}
|
||||
<fieldset id="{{ storage.get_name }}_{{ provider.get_name }}_settings">
|
||||
<legend>{{ lang('STORAGE_' ~ storage.get_name | upper ~ '_TITLE') }} - {{ lang('STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_NAME') }}</legend>
|
||||
{% for name, options in provider.get_options %}
|
||||
<dl>
|
||||
<dt>
|
||||
{% set title = 'STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_OPTION_' ~ name | upper %}
|
||||
{% set description = 'STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_OPTION_' ~ name | upper ~ '_EXPLAIN' %}
|
||||
<label>{{ lang(title) ~ lang('COLON') }}</label>
|
||||
{% if lang_defined(description) %}
|
||||
<br /><span>{{ lang(description) }}</span>
|
||||
{% endif %}
|
||||
</dt>
|
||||
<dd>
|
||||
{% set input_name = storage.get_name ~ '[' ~ name ~ ']' %}
|
||||
{% set input_value = attribute(config, 'storage\\' ~ storage.get_name ~ '\\config\\' ~ name) %}
|
||||
|
||||
{% if options.tag == 'input' %}
|
||||
{{ FormsInput(options | merge({"name": input_name, "value": input_value})) }}
|
||||
{% elseif options.tag == 'textarea' %}
|
||||
{{ FormsTextarea(options | merge({"name": input_name, "content": input_value})) }}
|
||||
{% elseif options.tag == 'radio' %}
|
||||
{% set buttons = [] %}
|
||||
|
||||
{% for button in options.buttons %}
|
||||
{% set new_button = button | merge({"name": input_name, "checked": button.value == input_value}) %}
|
||||
{% set buttons = buttons | merge([new_button]) %}
|
||||
{% endfor %}
|
||||
|
||||
{{ FormsRadioButtons(options | merge({"buttons": buttons})) }}
|
||||
{% elseif options.tag == 'select' %}
|
||||
{% set select_options = [] %}
|
||||
|
||||
{% for option in options.options %}
|
||||
{% set new_option = option | merge({"selected": option.value == input_value}) %}
|
||||
{% set select_options = select_options | merge([new_option]) %}
|
||||
{% endfor %}
|
||||
|
||||
{{ FormsSelect(options | merge({"name": input_name, "options": select_options})) }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
</dl>
|
||||
{% endfor %}
|
||||
</fieldset>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
<fieldset>
|
||||
<dl>
|
||||
<dt><label for="update_type">{{ lang('STORAGE_UPDATE_TYPE') ~ lang('COLON') }}</label></dt>
|
||||
<dd>
|
||||
<label><input id="update_type" class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_CONFIG }}" checked="checked" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_CONFIG') }}</label>
|
||||
<label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_COPY }}" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_COPY') }}</label>
|
||||
<label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_MOVE }}" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_MOVE') }}</label>
|
||||
</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="submit-buttons">
|
||||
<legend>{{ lang('SUBMIT') }}</legend>
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{{ lang('SUBMIT') }}" />
|
||||
<input class="button2" type="reset" id="reset" name="reset" value="{{ lang('RESET') }}" />
|
||||
{{ S_FORM_TOKEN }}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{% include 'overall_footer.html' %}
|
32
phpBB/adm/style/acp_storage_update_inprogress.html
Normal file
|
@ -0,0 +1,32 @@
|
|||
{% include 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<h1>{{ lang('STORAGE_TITLE') }}</h1>
|
||||
|
||||
<p>{{ lang('STORAGE_TITLE_EXPLAIN') }}</p>
|
||||
|
||||
<form id="acp_storage_continue" method="post" action="{{ U_ACTION }}">
|
||||
<fieldset>
|
||||
<legend>{{ lang('SUBMIT') }}</legend>
|
||||
|
||||
{% if CONTINUE_PROGRESS %}
|
||||
<div class="centered-text">
|
||||
<br>
|
||||
<progress
|
||||
value="{{ CONTINUE_PROGRESS.VALUE }}"
|
||||
max="{{ CONTINUE_PROGRESS.TOTAL }}"
|
||||
style="height: 2em; width: 20em;"></progress><br>
|
||||
{{ CONTINUE_PROGRESS.PERCENTAGE|number_format(2) ~ ' %' }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="continue" name="continue" value="{{ lang('SUBMIT') }}" />
|
||||
<input class="button2" type="submit" id="cancel" name="cancel" value="{{ lang('CANCEL') }}" />
|
||||
</p>
|
||||
{{ S_FORM_TOKEN }}
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{% include 'overall_footer.html' %}
|
20
phpBB/adm/style/acp_storage_update_progress.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
{% include 'overall_header.html' %}
|
||||
|
||||
<a id="maincontent"></a>
|
||||
|
||||
<div class="successbox">
|
||||
<h3>{{ INDEXING_TITLE }}</h3>
|
||||
<p>
|
||||
{{ INDEXING_EXPLAIN }}
|
||||
{% if INDEXING_PROGRESS_BAR %}
|
||||
<br>
|
||||
<progress
|
||||
value="{{ INDEXING_PROGRESS_BAR.VALUE }}"
|
||||
max="{{ INDEXING_PROGRESS_BAR.TOTAL }}"
|
||||
style="height: 2em; width: 20em;"></progress><br>
|
||||
{{ INDEXING_PROGRESS_BAR.PERCENTAGE|number_format(2) ~ ' %' }}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{% include 'overall_footer.html' %}
|
|
@ -127,7 +127,7 @@
|
|||
<!-- IF styles_list.COMMENT != '' -->
|
||||
<span class="error"><br />{styles_list.COMMENT}</span>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF not styles_list.STYLE_ID and styles_list.COMMENT == '' -->
|
||||
<!-- IF not styles_list.STYLE_ID and styles_list.COMMENT == '' and not styles_list.STYLE_INVALID -->
|
||||
<span class="style-path"><br />{L_STYLE_PATH}{L_COLON} {styles_list.STYLE_PATH_FULL}</span>
|
||||
<!-- ENDIF -->
|
||||
</td>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<!-- IF ERROR --><p class="error">{ERROR}</p><!-- ENDIF -->
|
||||
<dl>
|
||||
<dt><label>{L_CURRENT_IMAGE}{L_COLON}</label><br /><span>{L_AVATAR_EXPLAIN}</span></dt>
|
||||
<dd>{AVATAR}</dd>
|
||||
<dd class="c-avatar-box">{% if AVATAR_HTML %}{{ AVATAR_HTML }}{% else %}<img src="{{ ADMIN_ROOT_PATH ~ 'images/no_avatar.gif' }}" alt="">{% endif %}</dd>
|
||||
<dd><label for="avatar_delete"><input type="checkbox" name="avatar_delete" id="avatar_delete" /> {L_DELETE_AVATAR}</label></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
|
|
@ -9,47 +9,51 @@
|
|||
<fieldset>
|
||||
<legend>{L_UCP_PREFS_PERSONAL}</legend>
|
||||
<!-- EVENT acp_users_prefs_personal_prepend -->
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="viewemail">{L_SHOW_EMAIL}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="viewemail" value="1"<!-- IF VIEW_EMAIL --> id="viewemail" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="viewemail" value="0"<!-- IF not VIEW_EMAIL --> id="viewemail" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="massemail">{L_ADMIN_EMAIL}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="massemail" value="1"<!-- IF MASS_EMAIL --> id="massemail" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="massemail" value="0"<!-- IF not MASS_EMAIL --> id="massemail" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="allowpm">{L_ALLOW_PM}{L_COLON}</label><br /><span>{L_ALLOW_PM_EXPLAIN}</span></dt>
|
||||
<dd><label><input type="radio" class="radio" name="allowpm" value="1"<!-- IF ALLOW_PM --> id="allowpm" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="allowpm" value="0"<!-- IF not ALLOW_PM --> id="allowpm" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="hideonline">{L_HIDE_ONLINE}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="hideonline" value="1"<!-- IF HIDE_ONLINE --> id="hideonline" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="hideonline" value="0"<!-- IF not HIDE_ONLINE --> id="hideonline" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="notifymethod">{L_NOTIFY_METHOD}{L_COLON}</label><br /><span>{L_NOTIFY_METHOD_EXPLAIN}</span></dt>
|
||||
<dd><label><input type="radio" class="radio" name="notifymethod" value="0"<!-- IF NOTIFY_EMAIL --> id="notifymethod" checked="checked"<!-- ENDIF --> /> {L_NOTIFY_METHOD_EMAIL}</label>
|
||||
<label><input type="radio" class="radio" name="notifymethod" value="1"<!-- IF NOTIFY_IM --> id="notifymethod" checked="checked"<!-- ENDIF --><!-- IF S_JABBER_DISABLED --> disabled="disabled"<!-- ENDIF --> /> {L_NOTIFY_METHOD_IM}</label>
|
||||
<label><input type="radio" class="radio" name="notifymethod" value="2"<!-- IF NOTIFY_BOTH --> id="notifymethod" checked="checked"<!-- ENDIF --><!-- IF S_JABBER_DISABLED --> disabled="disabled"<!-- ENDIF --> /> {L_NOTIFY_METHOD_BOTH}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="notifypm">{L_NOTIFY_ON_PM}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="notifypm" value="1"<!-- IF NOTIFY_PM --> id="notifypm" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="notifypm" value="0"<!-- IF not NOTIFY_PM --> id="notifypm" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="lang">{L_BOARD_LANGUAGE}{L_COLON}</label></dt>
|
||||
<dd><select id="lang" name="lang">{S_LANG_OPTIONS}</select></dd>
|
||||
<dl>
|
||||
<dt><label for="{{ LANG_OPTIONS.id }}">{L_BOARD_LANGUAGE}{L_COLON}</label></dt>
|
||||
<dd>
|
||||
{{ FormsSelect(LANG_OPTIONS) }}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="style">{L_BOARD_STYLE}{L_COLON}</label></dt>
|
||||
<dd><select id="style" name="style">{S_STYLE_OPTIONS}</select></dd>
|
||||
<dd>
|
||||
{{ FormsSelect(S_STYLE_OPTIONS) }}
|
||||
</dd>
|
||||
</dl>
|
||||
<!-- INCLUDE timezone_option.html -->
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="dateoptions">{L_BOARD_DATE_FORMAT}{L_COLON}</label><br /><span>{L_BOARD_DATE_FORMAT_EXPLAIN}</span></dt>
|
||||
<dd><select name="dateoptions" id="dateoptions" onchange="if(this.value=='custom'){phpbb.toggleDisplay('custom_date',1);}else{phpbb.toggleDisplay('custom_date',-1);} if (this.value == 'custom') { document.getElementById('dateformat').value = default_dateformat; } else { document.getElementById('dateformat').value = this.value; }">{S_DATEFORMAT_OPTIONS}</select></dd>
|
||||
<dd><div id="custom_date"<!-- IF not S_CUSTOM_DATEFORMAT --> style="display:none;"<!-- ENDIF -->><input type="text" name="dateformat" id="dateformat" value="{DATE_FORMAT}" maxlength="64" /></div></dd>
|
||||
|
@ -60,22 +64,22 @@
|
|||
<fieldset>
|
||||
<legend>{L_UCP_PREFS_POST}</legend>
|
||||
<!-- EVENT acp_users_prefs_post_prepend -->
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="bbcode">{L_DEFAULT_BBCODE}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="bbcode" value="1"<!-- IF BBCODE --> id="bbcode" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="bbcode" value="0"<!-- IF not BBCODE --> id="bbcode" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="smilies">{L_DEFAULT_SMILIES}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="smilies" value="1"<!-- IF SMILIES --> id="smilies" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="smilies" value="0"<!-- IF not SMILIES --> id="smilies" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="sig">{L_DEFAULT_ADD_SIG}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="sig" value="1"<!-- IF ATTACH_SIG --> id="sig" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="sig" value="0"<!-- IF not ATTACH_SIG --> id="sig" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="notify">{L_DEFAULT_NOTIFY}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="notify" value="1"<!-- IF NOTIFY --> id="notify" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="notify" value="0"<!-- IF not NOTIFY --> id="notify" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
|
@ -86,57 +90,52 @@
|
|||
<fieldset>
|
||||
<legend>{L_UCP_PREFS_VIEW}</legend>
|
||||
<!-- EVENT acp_users_prefs_view_prepend -->
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="view_images">{L_VIEW_IMAGES}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="view_images" value="1"<!-- IF VIEW_IMAGES --> id="view_images" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="view_images" value="0"<!-- IF not VIEW_IMAGES --> id="view_images" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label for="view_flash">{L_VIEW_FLASH}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="view_flash" value="1"<!-- IF VIEW_FLASH --> id="view_flash" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="view_flash" value="0"<!-- IF not VIEW_FLASH --> id="view_flash" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="view_smilies">{L_VIEW_SMILIES}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="view_smilies" value="1"<!-- IF VIEW_SMILIES --> id="view_smilies" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="view_smilies" value="0"<!-- IF not VIEW_SMILIES --> id="view_smilies" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="view_sigs">{L_VIEW_SIGS}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="view_sigs" value="1"<!-- IF VIEW_SIGS --> id="view_sigs" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="view_sigs" value="0"<!-- IF not VIEW_SIGS --> id="view_sigss" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="view_avatars">{L_VIEW_AVATARS}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="view_avatars" value="1"<!-- IF VIEW_AVATARS --> id="view_avatars" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="view_avatars" value="0"<!-- IF not VIEW_AVATARS --> id="view_avatars" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label for="view_wordcensor">{L_DISABLE_CENSORS}{L_COLON}</label></dt>
|
||||
<dd><label><input type="radio" class="radio" name="view_wordcensor" value="1"<!-- IF VIEW_WORDCENSOR --> id="view_wordcensor" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
|
||||
<label><input type="radio" class="radio" name="view_wordcensor" value="0"<!-- IF not VIEW_WORDCENSOR --> id="view_wordcensor" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label>{L_VIEW_TOPICS_DAYS}{L_COLON}</label></dt>
|
||||
<dd>{S_TOPIC_SORT_DAYS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label>{L_VIEW_TOPICS_KEY}{L_COLON}</label></dt>
|
||||
<dd>{S_TOPIC_SORT_KEY}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label>{L_VIEW_TOPICS_DIR}{L_COLON}</label></dt>
|
||||
<dd>{S_TOPIC_SORT_DIR}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label>{L_VIEW_POSTS_DAYS}{L_COLON}</label></dt>
|
||||
<dd>{S_POST_SORT_DAYS}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label>{L_VIEW_POSTS_KEY}{L_COLON}</label></dt>
|
||||
<dd>{S_POST_SORT_KEY}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dl>
|
||||
<dt><label>{L_VIEW_POSTS_DIR}{L_COLON}</label></dt>
|
||||
<dd>{S_POST_SORT_DIR}</dd>
|
||||
</dl>
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
<label><input type="checkbox" class="radio" name="disable_magic_url"{S_MAGIC_URL_CHECKED} /> {L_DISABLE_MAGIC_URL}</label>
|
||||
<!-- ENDIF -->
|
||||
</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 10px;"><strong>{L_OPTIONS}{L_COLON} </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {FLASH_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
|
||||
<dd style="margin-{S_CONTENT_FLOW_BEGIN}: 90px; margin-top: 10px;"><strong>{L_OPTIONS}{L_COLON} </strong>{BBCODE_STATUS} :: {IMG_STATUS} :: {URL_STATUS} :: {SMILIES_STATUS}</dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
|
|