mirror of
https://github.com/phpbb/phpbb.git
synced 2025-09-17 03:22:07 +02:00
Compare commits
425 Commits
release-3.
...
release-3.
Author | SHA1 | Date | |
---|---|---|---|
|
0f1643374e | ||
|
62a68def57 | ||
|
815cb84ea5 | ||
|
f3d89e0e08 | ||
|
e59af343b8 | ||
|
9a992a4866 | ||
|
2d8c5efbd2 | ||
|
93a472f08e | ||
|
6de0c7bc66 | ||
|
3975983481 | ||
|
ecb39bc435 | ||
|
a8f2b461d4 | ||
|
6a79083c43 | ||
|
14d83139ce | ||
|
64304c8364 | ||
|
78f0ec8ea7 | ||
|
a4436fb54d | ||
|
b563b7d26f | ||
|
463807fcf0 | ||
|
66016db386 | ||
|
aec25f24ae | ||
|
6cc16af75f | ||
|
af84fb71e0 | ||
|
3fbdb2f345 | ||
|
ec306b0301 | ||
|
fa5df79515 | ||
|
89e95941b1 | ||
|
37de0f96d1 | ||
|
964c212f03 | ||
|
1de4a65e58 | ||
|
ebd958c728 | ||
|
0a5d167441 | ||
|
b8f76a9330 | ||
|
38e5913338 | ||
|
48522fd938 | ||
|
fe052fccd4 | ||
|
0854c7226d | ||
|
5fe3719f13 | ||
|
a84dfe716b | ||
|
d18e547332 | ||
|
997098d02a | ||
|
6e75b8bb3c | ||
|
f21c5f9fef | ||
|
b6e5a5fca8 | ||
|
82a04debca | ||
|
2975eef976 | ||
|
159c1d16d8 | ||
|
c86e771dfe | ||
|
170dc2a63b | ||
|
ed7b44d59e | ||
|
e8dcf27ee3 | ||
|
8339269919 | ||
|
5307da11b6 | ||
|
6ada02b060 | ||
|
a02524e7fc | ||
|
207b678896 | ||
|
51205febe3 | ||
|
6440f97a4f | ||
|
0ffd0d1924 | ||
|
cd6a0026d5 | ||
|
221a91a26f | ||
|
cd75b712d4 | ||
|
b30822ea80 | ||
|
81fd854983 | ||
|
4084939620 | ||
|
792882ef63 | ||
|
636fc7fad7 | ||
|
b53f95e577 | ||
|
f567b2bb69 | ||
|
8ac4f955ca | ||
|
01d0457f67 | ||
|
5cd0aad3c6 | ||
|
cf96967677 | ||
|
ae62bc4642 | ||
|
c281604d0b | ||
|
acb5794d50 | ||
|
65ff149fc9 | ||
|
79bcb20ac5 | ||
|
179f5c75ed | ||
|
1a00b4a565 | ||
|
d06e9745c2 | ||
|
1b4f82cd1d | ||
|
978d1976b0 | ||
|
7a54701612 | ||
|
2bb08f853e | ||
|
b59e101d8d | ||
|
a12d93b8b8 | ||
|
a4ad94ef5c | ||
|
d3c3dc24fe | ||
|
7c559b2912 | ||
|
d738397e6f | ||
|
6559bb9511 | ||
|
90dcd1a0f4 | ||
|
0e2c927551 | ||
|
091e195717 | ||
|
17c6cd3676 | ||
|
17ef8a0369 | ||
|
2f8b9fb549 | ||
|
b9f78d64d7 | ||
|
30f8e5d638 | ||
|
1dbb570284 | ||
|
e33e572741 | ||
|
6787f6706e | ||
|
0184865c5c | ||
|
e0395fa2f2 | ||
|
191008daff | ||
|
ef3b2a3f24 | ||
|
6876fcb46a | ||
|
621747c7bc | ||
|
9e9bdb69b5 | ||
|
caa767e5a8 | ||
|
caf5ee42fd | ||
|
d0b50b9ca1 | ||
|
3002c1b22a | ||
|
1be392a16a | ||
|
ab6fd30d0d | ||
|
70f09a60c7 | ||
|
a393a23a08 | ||
|
7f50c26941 | ||
|
2a0b38cac0 | ||
|
ca705af91d | ||
|
c0917c2862 | ||
|
cfd4aab7b7 | ||
|
951b097761 | ||
|
46ea774950 | ||
|
de308ea321 | ||
|
608cf00aea | ||
|
aad8ffff51 | ||
|
79d033082e | ||
|
7ca740bec8 | ||
|
a91b37d8f2 | ||
|
4babe93a5d | ||
|
4f44145301 | ||
|
d673527331 | ||
|
34a6493fb5 | ||
|
ed2123fa61 | ||
|
ddc9a4dff6 | ||
|
5e4f4b2dc6 | ||
|
25176d4588 | ||
|
fe796267c1 | ||
|
a563b616e0 | ||
|
0d4cd552fe | ||
|
3632a0f4f2 | ||
|
0a89c53658 | ||
|
fa1952fd08 | ||
|
9e985af1e8 | ||
|
0c3ff0419c | ||
|
97e92f52d7 | ||
|
95ab325251 | ||
|
d0ef8695e4 | ||
|
9c47e0eee8 | ||
|
11475e5366 | ||
|
a614e646d1 | ||
|
a535b6449a | ||
|
2c281e50e0 | ||
|
2b1102e372 | ||
|
c01e604998 | ||
|
f6beabc593 | ||
|
964cc30548 | ||
|
bba9de8c9c | ||
|
e3b76bce37 | ||
|
84ef70b42f | ||
|
3208c41da8 | ||
|
72be8e0870 | ||
|
8142257e31 | ||
|
fdc04cb9ec | ||
|
d6a6e86975 | ||
|
275d6ee050 | ||
|
7c6e660694 | ||
|
fd0d9e9967 | ||
|
5c42851730 | ||
|
411f4ac817 | ||
|
abc9d746c7 | ||
|
61bdccbfd8 | ||
|
07767ab3e6 | ||
|
9434e4fa88 | ||
|
294e87015f | ||
|
22e3c67864 | ||
|
0d3b393ca6 | ||
|
af7412f3cb | ||
|
417e18b39d | ||
|
4b6bdbe558 | ||
|
3c822556c1 | ||
|
dc10853356 | ||
|
0bf0f4d32b | ||
|
ccf5575dd8 | ||
|
21b5256740 | ||
|
b2f3f72eca | ||
|
eb1896e6f7 | ||
|
af6dcdd6e6 | ||
|
70b7777743 | ||
|
540a6b7d2e | ||
|
055d7658db | ||
|
2575b499a3 | ||
|
d54c43ae8f | ||
|
06a95487fe | ||
|
bec047586a | ||
|
37e5457dcf | ||
|
1843e4f6b4 | ||
|
f75dd1628c | ||
|
f3c4587d47 | ||
|
db43961de6 | ||
|
308dd49bb9 | ||
|
3075d2fecc | ||
|
36840fb2e4 | ||
|
2353ad11f2 | ||
|
b836898016 | ||
|
da9910850a | ||
|
8a73eb5f0f | ||
|
fd195fba21 | ||
|
58f33921b5 | ||
|
71d66832c0 | ||
|
8e5a0c81ef | ||
|
bd2ddc1d2e | ||
|
446c0459c9 | ||
|
2b0645b7b9 | ||
|
3b2119e535 | ||
|
c3f7d1bd19 | ||
|
f9c165d2c1 | ||
|
ff72df5218 | ||
|
4b382e93f0 | ||
|
37e3e9711c | ||
|
0a3fb27d47 | ||
|
6098503080 | ||
|
00a260dc00 | ||
|
b76e5a9c18 | ||
|
a0dfc35cb9 | ||
|
d999e9bf8b | ||
|
f7a208d103 | ||
|
f2489a4c00 | ||
|
22ca7474ea | ||
|
034f1c2355 | ||
|
5262e3bb55 | ||
|
f905b40ce8 | ||
|
10ed7c569e | ||
|
c8ff4b4109 | ||
|
dc5a167c42 | ||
|
0e38bebaa5 | ||
|
a16ebf04d3 | ||
|
2131adac5c | ||
|
f1c2e26f0a | ||
|
84ea5d7148 | ||
|
507efee633 | ||
|
f0ffb25a24 | ||
|
7a93730aab | ||
|
728b5d2b44 | ||
|
832c19314a | ||
|
c3ecaa35cd | ||
|
fe22deb5d5 | ||
|
d3564a4a07 | ||
|
cc7c1c8447 | ||
|
f51ef14e44 | ||
|
29abad3dd4 | ||
|
1bae0513a8 | ||
|
2728921d6c | ||
|
3f60759a49 | ||
|
21791971aa | ||
|
6f573f710d | ||
|
be86694305 | ||
|
b693798a96 | ||
|
72f748f11f | ||
|
202fa648eb | ||
|
562601fd9b | ||
|
fc62538733 | ||
|
68434e6dbc | ||
|
af994e7a39 | ||
|
7160c67b2c | ||
|
83774be7a7 | ||
|
433803287a | ||
|
b798ab6f42 | ||
|
d40caeebca | ||
|
b707bdc4f1 | ||
|
13ddfa5e52 | ||
|
f07ce4f7b5 | ||
|
b890448882 | ||
|
dc610b5508 | ||
|
5bd2c067c5 | ||
|
dc80ffdb40 | ||
|
f9c251c7af | ||
|
765739c2a9 | ||
|
3f498c9e69 | ||
|
0a3698d08d | ||
|
f0ccf7d93e | ||
|
e2356f86e8 | ||
|
d431e1306c | ||
|
a14a666e86 | ||
|
ca7d63d4d7 | ||
|
6921565efe | ||
|
220d388cac | ||
|
0d166e87b8 | ||
|
469bf9227e | ||
|
0d04f53f37 | ||
|
761b87659d | ||
|
1849ce233b | ||
|
56060caa4c | ||
|
2bbf72e158 | ||
|
df93420bcd | ||
|
9e7ad86398 | ||
|
66f9c09ba5 | ||
|
1c5a4c1213 | ||
|
45e1aff14a | ||
|
2975566650 | ||
|
479201a3a1 | ||
|
43b597e88a | ||
|
90b4ebab90 | ||
|
8c29ef3188 | ||
|
8e8fa203b9 | ||
|
44fb54b9b7 | ||
|
f2e39f7edd | ||
|
e315ea90b8 | ||
|
2cd574321f | ||
|
59a84a71be | ||
|
96491a70e8 | ||
|
33afd3f350 | ||
|
deebd282a7 | ||
|
27b0719174 | ||
|
ab16595323 | ||
|
43d8432809 | ||
|
1fba679c68 | ||
|
271db031ad | ||
|
b4672f2665 | ||
|
75007697ae | ||
|
ca4a98a2de | ||
|
7fc8b55f8c | ||
|
6c1664f6d3 | ||
|
357e5a567d | ||
|
713c996a08 | ||
|
2af8713a48 | ||
|
36083872e0 | ||
|
c43ad073e4 | ||
|
a0f1ec852a | ||
|
a925605b88 | ||
|
3f4b7059cb | ||
|
cffdc8efff | ||
|
e8bbbbd6fa | ||
|
8d8dbb2129 | ||
|
5e302c7e15 | ||
|
ec3bab231d | ||
|
214cf2c011 | ||
|
673433dadb | ||
|
0af07d1425 | ||
|
89f586e99e | ||
|
eead94c8a6 | ||
|
a0efae7734 | ||
|
be0696a954 | ||
|
8fa7e18e2b | ||
|
537ff0c567 | ||
|
08968bdb60 | ||
|
5949f912ba | ||
|
3f19d32f76 | ||
|
409bfafbf0 | ||
|
daf58a13c2 | ||
|
813789c644 | ||
|
f6c93a81d3 | ||
|
f023dd590f | ||
|
186259cbbc | ||
|
186115c65f | ||
|
a23a7602b7 | ||
|
bdf9af0abb | ||
|
444e5e6498 | ||
|
50cec4d54c | ||
|
a578ce0119 | ||
|
e2e3d402a2 | ||
|
d79eb72fc1 | ||
|
86c773fbf9 | ||
|
e9310c928e | ||
|
3a7d17414d | ||
|
a4e37a8482 | ||
|
c51859c0bd | ||
|
572545a430 | ||
|
220490e4db | ||
|
4bf485395e | ||
|
ce90a215ba | ||
|
31c0466815 | ||
|
4fe2ec156c | ||
|
d0541a6440 | ||
|
95424f1b98 | ||
|
64b66a51b6 | ||
|
58856c06b0 | ||
|
440fdfdffc | ||
|
8f90b79457 | ||
|
871875d9aa | ||
|
ca98cd413a | ||
|
14f9917db6 | ||
|
552bda6266 | ||
|
c6f613bae5 | ||
|
70a56c208f | ||
|
349ab42fdc | ||
|
cc49d8f325 | ||
|
83f4074116 | ||
|
3bce8bce10 | ||
|
fe382708f5 | ||
|
4554376ac8 | ||
|
337d5db292 | ||
|
fe72d87460 | ||
|
75b993c6a3 | ||
|
91847ed1fd | ||
|
e6ac4daf64 | ||
|
47acbdd138 | ||
|
73fd2f3573 | ||
|
0a14d7aff3 | ||
|
8b4c77784e | ||
|
e7a16f1eda | ||
|
31b8fdf964 | ||
|
afcc713d39 | ||
|
73b709d0ca | ||
|
ec140a558b | ||
|
c5082250ea | ||
|
89b6fb1168 | ||
|
3ed8cffad2 | ||
|
d356fa9f97 | ||
|
a1baf106d6 | ||
|
b6f6930eb5 | ||
|
565f692541 | ||
|
bf07331a0e | ||
|
12073855dd | ||
|
04d825ec2d | ||
|
8ed7ddfbb2 | ||
|
1345642c49 | ||
|
ad0c85293b | ||
|
7a92f6a3b6 | ||
|
c594f2ecbf | ||
|
101829b4dc | ||
|
eb1cb07341 | ||
|
bc5808ad87 |
@@ -39,7 +39,8 @@ init:
|
||||
before_test:
|
||||
- ps: |
|
||||
Set-Service wuauserv -StartupType Manual
|
||||
cinst -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $env:php | sort { [version]($_ -split '\|' | select -last 1) } -Descending | Select-Object -first 1) -replace '[php|]','')
|
||||
choco install chocolatey -y --version 0.10.13 --allow-downgrade
|
||||
choco install php -y --version ((choco search php --exact --all-versions -r | select-string -pattern $env:php | sort { [version]($_ -split '\|' | select -last 1) } -Descending | Select-Object -first 1) -replace '[php|]','')
|
||||
Get-ChildItem -Path "c:\tools\php$($env:php -replace '([0-9])[.]([0-9])[.]?([0-9]+)?','$1$2')" -Recurse |
|
||||
Move-Item -destination "c:\tools\php"
|
||||
cd c:\tools\php
|
||||
@@ -98,7 +99,7 @@ before_test:
|
||||
$data = "<?php`n`n`$dbms = 'phpbb\\db\\driver\\postgres';`n`$dbhost = 'localhost';`n`$dbport = '';`n`$dbname = 'phpbb_test';`n`$dbuser = 'postgres';`n`$dbpasswd = 'Password12!';`n`$phpbb_functional_url = 'http://phpbb.test/';"; $data | Out-File -Encoding "Default" "c:\\projects\\phpbb\\tests\\test_config.php"
|
||||
}
|
||||
elseif ($env:db -eq "mariadb") {
|
||||
appveyor-retry cinst -y --force mariadb
|
||||
appveyor-retry choco install mariadb -y --force
|
||||
$env:MYSQL_PWD=""
|
||||
$cmd = '"C:\Program Files\MariaDB 10.2\bin\mysql" -e "create database phpbb_test;" --user=root'
|
||||
iex "& $cmd"
|
||||
@@ -106,13 +107,13 @@ before_test:
|
||||
}
|
||||
elseif ($env:db -eq "sqlite") {
|
||||
# install sqlite
|
||||
appveyor-retry cinst -y sqlite
|
||||
appveyor-retry choco install sqlite -y
|
||||
sqlite3 c:\projects\test.db "create table aTable(field1 int); drop table aTable;"
|
||||
$data = "<?php`n`n`$dbms = 'phpbb\\db\\driver\\sqlite3';`n`$dbhost = 'c:\\projects\\test.db';`n`$dbport = '';`n`$dbname = '';`n`$dbuser = '';`n`$dbpasswd = '';`n`$phpbb_functional_url = 'http://phpbb.test/';"; $data | Out-File -Encoding "Default" "c:\\projects\\phpbb\\tests\\test_config.php"
|
||||
}
|
||||
|
||||
# Install PhantomJS
|
||||
cinst -y phantomjs
|
||||
choco install phantomjs -y
|
||||
Start-Process "phantomjs" "--webdriver=8910" | Out-Null
|
||||
- ps: |
|
||||
cd c:\projects\phpbb\phpBB
|
||||
@@ -120,7 +121,7 @@ before_test:
|
||||
(Get-Content c:\projects\phpbb\phpBB\web.config).replace("`t</system.webServer>", "`t`t<httpErrors errorMode=`"Detailed`" />`n`t</system.webServer>") | Set-Content c:\projects\phpbb\phpBB\web.config
|
||||
- cd c:\projects\phpbb\phpBB
|
||||
- php ..\composer.phar install
|
||||
- choco install -y urlrewrite
|
||||
- choco install urlrewrite -y
|
||||
- ps: New-WebSite -Name 'phpBBTest' -PhysicalPath 'c:\projects\phpbb\phpBB' -Force
|
||||
- ps: Import-Module WebAdministration; Set-ItemProperty 'IIS:\Sites\phpBBTest' -name Bindings -value @{protocol='http';bindingInformation='*:80:phpbb.test'}
|
||||
- echo Change default anonymous user AUTH to ApplicationPool
|
||||
@@ -141,3 +142,4 @@ before_test:
|
||||
test_script:
|
||||
- cd c:\projects\phpbb
|
||||
- php -e phpBB\vendor\phpunit\phpunit\phpunit --verbose
|
||||
|
||||
|
@@ -1,6 +1,5 @@
|
||||
language: php
|
||||
sudo: required
|
||||
dist: precise
|
||||
dist: trusty
|
||||
|
||||
matrix:
|
||||
include:
|
||||
|
@@ -2,9 +2,9 @@
|
||||
|
||||
<project name="phpBB" description="The phpBB forum software" default="all" basedir="../">
|
||||
<!-- a few settings for the build -->
|
||||
<property name="newversion" value="3.2.5" />
|
||||
<property name="prevversion" value="3.2.4" />
|
||||
<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-a1, 3.2.0-a2, 3.2.0-b1, 3.2.0-b2, 3.2.0-RC1, 3.2.0-RC2, 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.5-RC1" />
|
||||
<property name="newversion" value="3.2.8-RC1" />
|
||||
<property name="prevversion" value="3.2.7" />
|
||||
<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-a1, 3.2.0-a2, 3.2.0-b1, 3.2.0-b2, 3.2.0-RC1, 3.2.0-RC2, 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6" />
|
||||
<!-- no configuration should be needed beyond this point -->
|
||||
|
||||
<property name="oldversions" value="${olderversions}, ${prevversion}" />
|
||||
|
BIN
composer.phar
BIN
composer.phar
Binary file not shown.
@@ -421,17 +421,25 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- BEGIN attachments -->
|
||||
{% for attachments in attachments %}
|
||||
<tr>
|
||||
<td>
|
||||
<!-- IF attachments.S_IN_MESSAGE -->{L_EXTENSION_GROUP}{L_COLON} <strong><!-- IF attachments.EXT_GROUP_NAME -->{attachments.EXT_GROUP_NAME}<!-- ELSE -->{L_NO_EXT_GROUP}<!-- ENDIF --></strong><br />{attachments.L_DOWNLOAD_COUNT}<br />{L_IN} {L_PRIVATE_MESSAGE}
|
||||
<!-- ELSE --><a href="{attachments.U_FILE}" style="font-weight: bold;">{attachments.REAL_FILENAME}</a><br /><!-- IF attachments.COMMENT -->{attachments.COMMENT}<br /><!-- ENDIF -->{attachments.L_DOWNLOAD_COUNT}<br />{L_TOPIC}{L_COLON} <a href="{attachments.U_VIEW_TOPIC}">{attachments.TOPIC_TITLE}</a><!-- ENDIF -->
|
||||
{{ lang('EXTENSION_GROUP') ~ lang('COLON') }} <strong>{{ attachments.EXT_GROUP_NAME }}</strong>
|
||||
{% if attachments.S_IN_MESSAGE %}
|
||||
<br>{{ attachments.L_DOWNLOAD_COUNT }}
|
||||
<br>{{ lang('IN') }} {{ lang('PRIVATE_MESSAGE') }}
|
||||
{% else %}
|
||||
<br><a href="{{ attachments.U_FILE }}"><strong>{{ attachments.REAL_FILENAME }}</strong></a>
|
||||
{% if attachments.COMMENT %}<br>{{ attachments.COMMENT }}{% endif %}
|
||||
<br>{{ attachments.L_DOWNLOAD_COUNT }}
|
||||
<br>{{ lang('TOPIC') ~ lang('COLON') }} <a href="{{ attachments.U_VIEW_TOPIC }}">{{ attachments.TOPIC_TITLE }}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{attachments.FILETIME}<br />{L_POST_BY_AUTHOR} {attachments.ATTACHMENT_POSTER}</td>
|
||||
<td class="centered-text">{attachments.FILESIZE}</td>
|
||||
<td class="centered-text"><input type="checkbox" class="radio" name="delete[{attachments.ATTACH_ID}]" /></td>
|
||||
<td>{{ attachments.FILETIME }}<br>{{ lang('POST_BY_AUTHOR') }} {{ attachments.ATTACHMENT_POSTER }}</td>
|
||||
<td class="centered-text">{{ attachments.FILESIZE }}</td>
|
||||
<td class="centered-text"><input type="checkbox" class="radio" name="delete[{{ attachments.ATTACH_ID }}]" /></td>
|
||||
</tr>
|
||||
<!-- END attachments -->
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<!-- ELSE -->
|
||||
|
@@ -20,7 +20,6 @@
|
||||
<p class="submit-buttons">
|
||||
<input class="button1" type="submit" id="submit" name="submit" value="{L_START_RESTORE}" />
|
||||
<input class="button2" type="submit" id="delete" name="delete" value="{L_DELETE_BACKUP}" />
|
||||
<input class="button2" type="submit" id="download" name="download" value="{L_DOWNLOAD_BACKUP}" />
|
||||
</p>
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
@@ -72,7 +71,6 @@
|
||||
<dt><label for="where">{L_ACTION}{L_COLON}</label></dt>
|
||||
<dd>
|
||||
<label><input id="where" type="radio" class="radio" name="where" value="store" checked="checked" /> {L_STORE_LOCAL}</label>
|
||||
<label><input type="radio" class="radio" name="where" value="download" /> {L_DOWNLOAD}</label>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
|
@@ -146,7 +146,9 @@
|
||||
{styles_list.EXTRA}
|
||||
<td class="{$ROW_CLASS} mark" width="20">
|
||||
<!-- IF styles_list.STYLE_ID -->
|
||||
<input class="checkbox" type="checkbox" name="ids[]" value="{styles_list.STYLE_ID}" />
|
||||
{% if styles_list.STYLE_NAME !== 'prosilver' %}
|
||||
<input class="checkbox" type="checkbox" name="ids[]" value="{styles_list.STYLE_ID}" />
|
||||
{% endif %}
|
||||
<!-- ELSE -->
|
||||
<!-- IF styles_list.COMMENT != '' -->
|
||||
|
||||
|
@@ -33,7 +33,7 @@
|
||||
<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 --> /> {L_NOTIFY_METHOD_BOTH}</label></dd>
|
||||
<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>
|
||||
<dt><label for="notifypm">{L_NOTIFY_ON_PM}{L_COLON}</label></dt>
|
||||
|
@@ -6,7 +6,9 @@
|
||||
|
||||
<div id="page-footer">
|
||||
<div class="copyright">
|
||||
Powered by <a href="https://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Limited
|
||||
{% if S_COPYRIGHT_HTML %}
|
||||
{{ CREDIT_LINE }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -21,7 +21,9 @@ phpbb.plupload.initialize = function() {
|
||||
// Only execute if Plupload initialized successfully.
|
||||
phpbb.plupload.uploader.bind('Init', function() {
|
||||
phpbb.plupload.form = $(phpbb.plupload.config.form_hook)[0];
|
||||
phpbb.plupload.rowTpl = $('#attach-row-tpl')[0].outerHTML;
|
||||
let $attachRowTemplate = $('#attach-row-tpl');
|
||||
$attachRowTemplate.removeClass('attach-row-tpl');
|
||||
phpbb.plupload.rowTpl = $attachRowTemplate[0].outerHTML;
|
||||
|
||||
// Hide the basic upload panel and remove the attach row template.
|
||||
$('#attach-row-tpl, #attach-panel-basic').remove();
|
||||
|
@@ -31,9 +31,9 @@
|
||||
"guzzlehttp/guzzle": "~5.3",
|
||||
"lusitanian/oauth": "^0.8.1",
|
||||
"marc1706/fast-image-size": "^1.1",
|
||||
"paragonie/random_compat": "^1.4",
|
||||
"paragonie/random_compat": "^2.0",
|
||||
"patchwork/utf8": "^1.1",
|
||||
"s9e/text-formatter": "~0.13.0",
|
||||
"s9e/text-formatter": "^1.3",
|
||||
"symfony/config": "^2.8",
|
||||
"symfony/console": "^2.8",
|
||||
"symfony/debug": "^2.8",
|
||||
|
317
phpBB/composer.lock
generated
317
phpBB/composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "c843abc1344cd9df37f63c08a125cad0",
|
||||
"content-hash": "cd42964227d699a6923798e33eab3dd5",
|
||||
"packages": [
|
||||
{
|
||||
"name": "bantu/ini-get-wrapper",
|
||||
@@ -461,16 +461,16 @@
|
||||
},
|
||||
{
|
||||
"name": "paragonie/random_compat",
|
||||
"version": "v1.4.3",
|
||||
"version": "v2.0.18",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/random_compat.git",
|
||||
"reference": "9b3899e3c3ddde89016f576edb8c489708ad64cd"
|
||||
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/9b3899e3c3ddde89016f576edb8c489708ad64cd",
|
||||
"reference": "9b3899e3c3ddde89016f576edb8c489708ad64cd",
|
||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
|
||||
"reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -502,10 +502,11 @@
|
||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
||||
"keywords": [
|
||||
"csprng",
|
||||
"polyfill",
|
||||
"pseudorandom",
|
||||
"random"
|
||||
],
|
||||
"time": "2017-03-13T16:22:52+00:00"
|
||||
"time": "2019-01-03T20:59:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "patchwork/utf8",
|
||||
@@ -568,16 +569,16 @@
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
"version": "1.0.2",
|
||||
"version": "1.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/log.git",
|
||||
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
|
||||
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
|
||||
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
|
||||
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -611,20 +612,20 @@
|
||||
"psr",
|
||||
"psr-3"
|
||||
],
|
||||
"time": "2016-10-10T12:19:37+00:00"
|
||||
"time": "2018-11-20T15:27:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "react/promise",
|
||||
"version": "v2.7.0",
|
||||
"version": "v2.7.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/reactphp/promise.git",
|
||||
"reference": "f4edc2581617431aea50430749db55cc3fc031b3"
|
||||
"reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/reactphp/promise/zipball/f4edc2581617431aea50430749db55cc3fc031b3",
|
||||
"reference": "f4edc2581617431aea50430749db55cc3fc031b3",
|
||||
"url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d",
|
||||
"reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -657,20 +658,20 @@
|
||||
"promise",
|
||||
"promises"
|
||||
],
|
||||
"time": "2018-06-13T15:59:06+00:00"
|
||||
"time": "2019-01-07T21:25:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "s9e/text-formatter",
|
||||
"version": "0.13.1",
|
||||
"version": "1.4.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/s9e/TextFormatter.git",
|
||||
"reference": "804ed8fdfa9fd0c8d99f5a33000d4f7e5ed90c6f"
|
||||
"reference": "6857c53658929b66dc0d92daece17f211c64ea61"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/s9e/TextFormatter/zipball/804ed8fdfa9fd0c8d99f5a33000d4f7e5ed90c6f",
|
||||
"reference": "804ed8fdfa9fd0c8d99f5a33000d4f7e5ed90c6f",
|
||||
"url": "https://api.github.com/repos/s9e/TextFormatter/zipball/6857c53658929b66dc0d92daece17f211c64ea61",
|
||||
"reference": "6857c53658929b66dc0d92daece17f211c64ea61",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -681,8 +682,9 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"matthiasmullie/minify": "*",
|
||||
"php": ">=5.4.7",
|
||||
"s9e/regexp-builder": ">=1.3.0"
|
||||
"php-coveralls/php-coveralls": "*",
|
||||
"phpunit/phpunit": "<6",
|
||||
"s9e/regexp-builder": "1.*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-curl": "Improves the performance of the MediaEmbed plugin and some JavaScript minifiers",
|
||||
@@ -722,20 +724,20 @@
|
||||
"parser",
|
||||
"shortcodes"
|
||||
],
|
||||
"time": "2017-12-10T00:55:53+00:00"
|
||||
"time": "2019-06-04T15:47:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/config",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/config.git",
|
||||
"reference": "fb3469266daaa67a1e6d42fc78fa6cdc254689f6"
|
||||
"reference": "7dd5f5040dc04c118d057fb5886563963eb70011"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/fb3469266daaa67a1e6d42fc78fa6cdc254689f6",
|
||||
"reference": "fb3469266daaa67a1e6d42fc78fa6cdc254689f6",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/7dd5f5040dc04c118d057fb5886563963eb70011",
|
||||
"reference": "7dd5f5040dc04c118d057fb5886563963eb70011",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -779,20 +781,20 @@
|
||||
],
|
||||
"description": "Symfony Config Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-08T12:44:02+00:00"
|
||||
"time": "2018-11-26T09:38:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "aca0dcc0c75496e17e2aa0303bb9c8e6d79ed789"
|
||||
"reference": "cbcf4b5e233af15cd2bbd50dee1ccc9b7927dc12"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/aca0dcc0c75496e17e2aa0303bb9c8e6d79ed789",
|
||||
"reference": "aca0dcc0c75496e17e2aa0303bb9c8e6d79ed789",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/cbcf4b5e233af15cd2bbd50dee1ccc9b7927dc12",
|
||||
"reference": "cbcf4b5e233af15cd2bbd50dee1ccc9b7927dc12",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -840,20 +842,20 @@
|
||||
],
|
||||
"description": "Symfony Console Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-30T03:33:07+00:00"
|
||||
"time": "2018-11-20T15:55:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/debug",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/debug.git",
|
||||
"reference": "4fd77efcd4a499bf76d4ff46d092c67f3fe9e347"
|
||||
"reference": "74251c8d50dd3be7c4ce0c7b862497cdc641a5d0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/4fd77efcd4a499bf76d4ff46d092c67f3fe9e347",
|
||||
"reference": "4fd77efcd4a499bf76d4ff46d092c67f3fe9e347",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/74251c8d50dd3be7c4ce0c7b862497cdc641a5d0",
|
||||
"reference": "74251c8d50dd3be7c4ce0c7b862497cdc641a5d0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -897,20 +899,20 @@
|
||||
],
|
||||
"description": "Symfony Debug Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-21T12:46:38+00:00"
|
||||
"time": "2018-11-11T11:18:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dependency-injection",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dependency-injection.git",
|
||||
"reference": "84219396d1a79d149a5a9d5f71afaf48dcfde7d0"
|
||||
"reference": "c306198fee8f872a8f5f031e6e4f6f83086992d8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/84219396d1a79d149a5a9d5f71afaf48dcfde7d0",
|
||||
"reference": "84219396d1a79d149a5a9d5f71afaf48dcfde7d0",
|
||||
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/c306198fee8f872a8f5f031e6e4f6f83086992d8",
|
||||
"reference": "c306198fee8f872a8f5f031e6e4f6f83086992d8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -960,20 +962,20 @@
|
||||
],
|
||||
"description": "Symfony DependencyInjection Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-08T12:44:02+00:00"
|
||||
"time": "2019-04-16T11:33:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||
"reference": "84ae343f39947aa084426ed1138bb96bf94d1f12"
|
||||
"reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/84ae343f39947aa084426ed1138bb96bf94d1f12",
|
||||
"reference": "84ae343f39947aa084426ed1138bb96bf94d1f12",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
|
||||
"reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1020,20 +1022,20 @@
|
||||
],
|
||||
"description": "Symfony EventDispatcher Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-07-26T09:03:18+00:00"
|
||||
"time": "2018-11-21T14:20:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/filesystem",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/filesystem.git",
|
||||
"reference": "91f194c5ec8d2ad5ce417a218ce3c46909e92f4d"
|
||||
"reference": "7ae46872dad09dffb7fe1e93a0937097339d0080"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/91f194c5ec8d2ad5ce417a218ce3c46909e92f4d",
|
||||
"reference": "91f194c5ec8d2ad5ce417a218ce3c46909e92f4d",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/7ae46872dad09dffb7fe1e93a0937097339d0080",
|
||||
"reference": "7ae46872dad09dffb7fe1e93a0937097339d0080",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1070,20 +1072,20 @@
|
||||
],
|
||||
"description": "Symfony Filesystem Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-24T08:04:37+00:00"
|
||||
"time": "2018-11-11T11:18:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "5ebb438d1aabe9dba93099dd06e0500f97817a6e"
|
||||
"reference": "1444eac52273e345d9b95129bf914639305a9ba4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/5ebb438d1aabe9dba93099dd06e0500f97817a6e",
|
||||
"reference": "5ebb438d1aabe9dba93099dd06e0500f97817a6e",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/1444eac52273e345d9b95129bf914639305a9ba4",
|
||||
"reference": "1444eac52273e345d9b95129bf914639305a9ba4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1119,20 +1121,20 @@
|
||||
],
|
||||
"description": "Symfony Finder Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-21T12:46:38+00:00"
|
||||
"time": "2018-11-11T11:18:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-foundation",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-foundation.git",
|
||||
"reference": "9fcce5f0b6896a135d192cc9fd5394fd46f74eff"
|
||||
"reference": "746f8d3638bf46ee8b202e62f2b214c3d61fb06a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/9fcce5f0b6896a135d192cc9fd5394fd46f74eff",
|
||||
"reference": "9fcce5f0b6896a135d192cc9fd5394fd46f74eff",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/746f8d3638bf46ee8b202e62f2b214c3d61fb06a",
|
||||
"reference": "746f8d3638bf46ee8b202e62f2b214c3d61fb06a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1174,20 +1176,20 @@
|
||||
],
|
||||
"description": "Symfony HttpFoundation Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-23T15:27:53+00:00"
|
||||
"time": "2019-04-16T10:00:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-kernel",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.51",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-kernel.git",
|
||||
"reference": "90411d2ad577b883f2fc9de06c86dd564d9ac676"
|
||||
"reference": "a01e2b4b267fda24dba9b06cd1c575ca87a51ad2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/90411d2ad577b883f2fc9de06c86dd564d9ac676",
|
||||
"reference": "90411d2ad577b883f2fc9de06c86dd564d9ac676",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/a01e2b4b267fda24dba9b06cd1c575ca87a51ad2",
|
||||
"reference": "a01e2b4b267fda24dba9b06cd1c575ca87a51ad2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1258,20 +1260,20 @@
|
||||
],
|
||||
"description": "Symfony HttpKernel Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-30T03:51:44+00:00"
|
||||
"time": "2019-04-17T16:42:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.9.0",
|
||||
"version": "v1.11.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
"reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
|
||||
"reference": "82ebae02209c21113908c229e9883c419720738a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
|
||||
"reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a",
|
||||
"reference": "82ebae02209c21113908c229e9883c419720738a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1283,7 +1285,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.9-dev"
|
||||
"dev-master": "1.11-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1305,7 +1307,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Gert de Pagter",
|
||||
"email": "BackEndTea@gmail.com"
|
||||
"email": "backendtea@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for ctype functions",
|
||||
@@ -1316,20 +1318,20 @@
|
||||
"polyfill",
|
||||
"portable"
|
||||
],
|
||||
"time": "2018-08-06T14:22:27+00:00"
|
||||
"time": "2019-02-06T07:57:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.9.0",
|
||||
"version": "v1.11.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8"
|
||||
"reference": "fe5e94c604826c35a32fa832f35bd036b6799609"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8",
|
||||
"reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609",
|
||||
"reference": "fe5e94c604826c35a32fa832f35bd036b6799609",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1341,7 +1343,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.9-dev"
|
||||
"dev-master": "1.11-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1375,20 +1377,20 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2018-08-06T14:22:27+00:00"
|
||||
"time": "2019-02-06T07:57:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php54",
|
||||
"version": "v1.9.0",
|
||||
"version": "v1.11.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php54.git",
|
||||
"reference": "412977e090c6a8472dc39d50d1beb7d59495a965"
|
||||
"reference": "2964b17ddc32dba7bcba009d5501c84d3fba1452"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/412977e090c6a8472dc39d50d1beb7d59495a965",
|
||||
"reference": "412977e090c6a8472dc39d50d1beb7d59495a965",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/2964b17ddc32dba7bcba009d5501c84d3fba1452",
|
||||
"reference": "2964b17ddc32dba7bcba009d5501c84d3fba1452",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1397,7 +1399,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.9-dev"
|
||||
"dev-master": "1.11-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1433,20 +1435,20 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2018-08-06T14:22:27+00:00"
|
||||
"time": "2019-02-06T07:57:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php55",
|
||||
"version": "v1.9.0",
|
||||
"version": "v1.11.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php55.git",
|
||||
"reference": "578b8528da843de0fc65ec395900fa3181f2ead7"
|
||||
"reference": "96fa25cef405ea452919559a0025d5dc16e30e4c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/578b8528da843de0fc65ec395900fa3181f2ead7",
|
||||
"reference": "578b8528da843de0fc65ec395900fa3181f2ead7",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/96fa25cef405ea452919559a0025d5dc16e30e4c",
|
||||
"reference": "96fa25cef405ea452919559a0025d5dc16e30e4c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1456,7 +1458,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.9-dev"
|
||||
"dev-master": "1.11-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1489,20 +1491,20 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2018-08-06T14:22:27+00:00"
|
||||
"time": "2019-02-06T07:57:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/proxy-manager-bridge",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/proxy-manager-bridge.git",
|
||||
"reference": "0fd7ab039e26a33c5e3d1e00642bc83412c0896a"
|
||||
"reference": "40802595fea26ada845ed58124d8000a13dd4c6f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/0fd7ab039e26a33c5e3d1e00642bc83412c0896a",
|
||||
"reference": "0fd7ab039e26a33c5e3d1e00642bc83412c0896a",
|
||||
"url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/40802595fea26ada845ed58124d8000a13dd4c6f",
|
||||
"reference": "40802595fea26ada845ed58124d8000a13dd4c6f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1543,20 +1545,20 @@
|
||||
],
|
||||
"description": "Symfony ProxyManager Bridge",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-07-26T09:03:18+00:00"
|
||||
"time": "2019-04-16T11:33:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/routing",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/routing.git",
|
||||
"reference": "fed18962c40095adc36c2ad05bf0d957cc346f61"
|
||||
"reference": "8b0df6869d1997baafff6a1541826eac5a03d067"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/routing/zipball/fed18962c40095adc36c2ad05bf0d957cc346f61",
|
||||
"reference": "fed18962c40095adc36c2ad05bf0d957cc346f61",
|
||||
"url": "https://api.github.com/repos/symfony/routing/zipball/8b0df6869d1997baafff6a1541826eac5a03d067",
|
||||
"reference": "8b0df6869d1997baafff6a1541826eac5a03d067",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1617,20 +1619,20 @@
|
||||
"uri",
|
||||
"url"
|
||||
],
|
||||
"time": "2018-09-08T12:44:02+00:00"
|
||||
"time": "2018-11-20T15:55:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/twig-bridge",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/twig-bridge.git",
|
||||
"reference": "69d2a5542ea37309292d10029ce52b32656523a0"
|
||||
"reference": "ecc1e30d05fa99f25b504e2d6a8684555ae39f7c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/69d2a5542ea37309292d10029ce52b32656523a0",
|
||||
"reference": "69d2a5542ea37309292d10029ce52b32656523a0",
|
||||
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/ecc1e30d05fa99f25b504e2d6a8684555ae39f7c",
|
||||
"reference": "ecc1e30d05fa99f25b504e2d6a8684555ae39f7c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1702,20 +1704,20 @@
|
||||
],
|
||||
"description": "Symfony Twig Bridge",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-08-29T13:11:53+00:00"
|
||||
"time": "2018-11-11T11:18:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/yaml.git",
|
||||
"reference": "5baf0f821b14eee8ca415e6a0361a9fa140c002c"
|
||||
"reference": "02c1859112aa779d9ab394ae4f3381911d84052b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/5baf0f821b14eee8ca415e6a0361a9fa140c002c",
|
||||
"reference": "5baf0f821b14eee8ca415e6a0361a9fa140c002c",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/02c1859112aa779d9ab394ae4f3381911d84052b",
|
||||
"reference": "02c1859112aa779d9ab394ae4f3381911d84052b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1752,35 +1754,35 @@
|
||||
],
|
||||
"description": "Symfony Yaml Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-08-29T13:11:53+00:00"
|
||||
"time": "2018-11-11T11:18:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v1.35.4",
|
||||
"version": "v1.42.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a"
|
||||
"reference": "21707d6ebd05476854805e4f91b836531941bcd4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/7e081e98378a1e78c29cc9eba4aefa5d78a05d2a",
|
||||
"reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/21707d6ebd05476854805e4f91b836531941bcd4",
|
||||
"reference": "21707d6ebd05476854805e4f91b836531941bcd4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3",
|
||||
"php": ">=5.4.0",
|
||||
"symfony/polyfill-ctype": "^1.8"
|
||||
},
|
||||
"require-dev": {
|
||||
"psr/container": "^1.0",
|
||||
"symfony/debug": "^2.7",
|
||||
"symfony/phpunit-bridge": "^3.3"
|
||||
"symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.35-dev"
|
||||
"dev-master": "1.42-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1818,7 +1820,7 @@
|
||||
"keywords": [
|
||||
"templating"
|
||||
],
|
||||
"time": "2018-07-13T07:12:17+00:00"
|
||||
"time": "2019-06-18T15:35:16+00:00"
|
||||
},
|
||||
{
|
||||
"name": "zendframework/zend-code",
|
||||
@@ -2293,7 +2295,8 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "Michiel Rook",
|
||||
"email": "mrook@php.net"
|
||||
"email": "mrook@php.net",
|
||||
"role": "Lead"
|
||||
},
|
||||
{
|
||||
"name": "Phing Community",
|
||||
@@ -2360,16 +2363,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpspec/prophecy",
|
||||
"version": "1.8.0",
|
||||
"version": "1.8.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpspec/prophecy.git",
|
||||
"reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
|
||||
"reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
|
||||
"reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
|
||||
"reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2390,8 +2393,8 @@
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Prophecy\\": "src/"
|
||||
"psr-4": {
|
||||
"Prophecy\\": "src/Prophecy"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
@@ -2419,7 +2422,7 @@
|
||||
"spy",
|
||||
"stub"
|
||||
],
|
||||
"time": "2018-08-05T17:53:17+00:00"
|
||||
"time": "2019-06-13T12:50:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/dbunit",
|
||||
@@ -2478,6 +2481,7 @@
|
||||
"testing",
|
||||
"xunit"
|
||||
],
|
||||
"abandoned": true,
|
||||
"time": "2015-03-29T14:23:04+00:00"
|
||||
},
|
||||
{
|
||||
@@ -2854,6 +2858,7 @@
|
||||
"mock",
|
||||
"xunit"
|
||||
],
|
||||
"abandoned": true,
|
||||
"time": "2015-10-02T06:51:40+00:00"
|
||||
},
|
||||
{
|
||||
@@ -2891,9 +2896,7 @@
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com",
|
||||
"homepage": "http://fabien.potencier.org",
|
||||
"role": "Lead Developer"
|
||||
"email": "fabien@symfony.com"
|
||||
}
|
||||
],
|
||||
"description": "Pimple is a simple Dependency Injection Container for PHP 5.3",
|
||||
@@ -3336,16 +3339,16 @@
|
||||
},
|
||||
{
|
||||
"name": "squizlabs/php_codesniffer",
|
||||
"version": "2.9.1",
|
||||
"version": "2.9.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
|
||||
"reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
|
||||
"reference": "2acf168de78487db620ab4bc524135a13cfe6745"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
|
||||
"reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
|
||||
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
|
||||
"reference": "2acf168de78487db620ab4bc524135a13cfe6745",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3410,20 +3413,20 @@
|
||||
"phpcs",
|
||||
"standards"
|
||||
],
|
||||
"time": "2017-05-22T02:43:20+00:00"
|
||||
"time": "2018-11-07T22:31:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/browser-kit",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/browser-kit.git",
|
||||
"reference": "fe44362c97307e7935996cb09d320fcc22619656"
|
||||
"reference": "b507697225f32a76a9d333d0766fb46353e9d00d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/fe44362c97307e7935996cb09d320fcc22619656",
|
||||
"reference": "fe44362c97307e7935996cb09d320fcc22619656",
|
||||
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/b507697225f32a76a9d333d0766fb46353e9d00d",
|
||||
"reference": "b507697225f32a76a9d333d0766fb46353e9d00d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3467,20 +3470,20 @@
|
||||
],
|
||||
"description": "Symfony BrowserKit Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-07-26T09:03:18+00:00"
|
||||
"time": "2018-11-26T06:55:10+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/css-selector",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/css-selector.git",
|
||||
"reference": "4cca41ebe83cd5b4bd0c1a9f6bdfaec7103f97fb"
|
||||
"reference": "7b1692e418d7ccac24c373528453bc90e42797de"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/css-selector/zipball/4cca41ebe83cd5b4bd0c1a9f6bdfaec7103f97fb",
|
||||
"reference": "4cca41ebe83cd5b4bd0c1a9f6bdfaec7103f97fb",
|
||||
"url": "https://api.github.com/repos/symfony/css-selector/zipball/7b1692e418d7ccac24c373528453bc90e42797de",
|
||||
"reference": "7b1692e418d7ccac24c373528453bc90e42797de",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3520,20 +3523,20 @@
|
||||
],
|
||||
"description": "Symfony CssSelector Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-08T12:44:02+00:00"
|
||||
"time": "2018-11-11T11:18:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dom-crawler",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dom-crawler.git",
|
||||
"reference": "ba0b706b5ac1c1afcf7d34507a5a272f51cc7721"
|
||||
"reference": "2cdc7d3909eea6f982a6298d2e9ab7db01b6403c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/ba0b706b5ac1c1afcf7d34507a5a272f51cc7721",
|
||||
"reference": "ba0b706b5ac1c1afcf7d34507a5a272f51cc7721",
|
||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2cdc7d3909eea6f982a6298d2e9ab7db01b6403c",
|
||||
"reference": "2cdc7d3909eea6f982a6298d2e9ab7db01b6403c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3577,20 +3580,20 @@
|
||||
],
|
||||
"description": "Symfony DomCrawler Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-21T12:46:38+00:00"
|
||||
"time": "2018-11-24T22:30:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v2.8.46",
|
||||
"version": "v2.8.50",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "f09e21b7c5aba06c47bbfad9cbcf13ac7f0db0a6"
|
||||
"reference": "c3591a09c78639822b0b290d44edb69bf9f05dc8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/f09e21b7c5aba06c47bbfad9cbcf13ac7f0db0a6",
|
||||
"reference": "f09e21b7c5aba06c47bbfad9cbcf13ac7f0db0a6",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/c3591a09c78639822b0b290d44edb69bf9f05dc8",
|
||||
"reference": "c3591a09c78639822b0b290d44edb69bf9f05dc8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3626,7 +3629,7 @@
|
||||
],
|
||||
"description": "Symfony Process Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-09-06T17:11:15+00:00"
|
||||
"time": "2018-11-11T11:18:13+00:00"
|
||||
}
|
||||
],
|
||||
"aliases": [],
|
||||
|
@@ -122,7 +122,13 @@ services:
|
||||
group_helper:
|
||||
class: phpbb\group\helper
|
||||
arguments:
|
||||
- '@auth'
|
||||
- '@cache'
|
||||
- '@config'
|
||||
- '@language'
|
||||
- '@dispatcher'
|
||||
- '@path_helper'
|
||||
- '@user'
|
||||
|
||||
log:
|
||||
class: phpbb\log\log
|
||||
|
@@ -208,6 +208,7 @@ services:
|
||||
console.command.thumbnail.delete:
|
||||
class: phpbb\console\command\thumbnail\delete
|
||||
arguments:
|
||||
- '@config'
|
||||
- '@user'
|
||||
- '@dbal.conn'
|
||||
- '%core.root_path%'
|
||||
@@ -217,6 +218,7 @@ services:
|
||||
console.command.thumbnail.generate:
|
||||
class: phpbb\console\command\thumbnail\generate
|
||||
arguments:
|
||||
- '@config'
|
||||
- '@user'
|
||||
- '@dbal.conn'
|
||||
- '@cache'
|
||||
|
@@ -35,6 +35,7 @@ services:
|
||||
- '@config_text'
|
||||
- '@dbal.conn'
|
||||
- '@user'
|
||||
- '@dispatcher'
|
||||
- '%core.root_path%'
|
||||
- '%core.php_ext%'
|
||||
|
||||
|
@@ -50,6 +50,10 @@
|
||||
<ol>
|
||||
<li><a href="#changelog">Changelog</a>
|
||||
<ul>
|
||||
<li><a href="#v327">Changes since 3.2.7</a></li>
|
||||
<li><a href="#v326">Changes since 3.2.6</a></li>
|
||||
<li><a href="#v326rc1">Changes since 3.2.6-RC1</a></li>
|
||||
<li><a href="#v325">Changes since 3.2.5</a></li>
|
||||
<li><a href="#v325rc1">Changes since 3.2.5-RC1</a></li>
|
||||
<li><a href="#v324">Changes since 3.2.4</a></li>
|
||||
<li><a href="#v324rc1">Changes since 3.2.4-RC1</a></li>
|
||||
@@ -135,6 +139,174 @@
|
||||
<div class="inner">
|
||||
|
||||
<div class="content">
|
||||
<a name="v327"></a><h3>Changes since 3.2.7</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13175">PHPBB3-13175</a>] - External accounts can be linked to more than one local account</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14459">PHPBB3-14459</a>] - Check language input for group</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15211">PHPBB3-15211</a>] - Emoji characters in forum name causing SQL errors</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15885">PHPBB3-15885</a>] - Group rank not displaying on memberlist_body</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15897">PHPBB3-15897</a>] - Unicode Characters in Attachment Comment Causes mySQL Error </li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15932">PHPBB3-15932</a>] - Users can delete their attachments in the UCP, even if the post is locked</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15961">PHPBB3-15961</a>] - SMTP support for TLS is forcing use of deprecated TLS 1.0</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15974">PHPBB3-15974</a>] - The link "Back to previous page" can redirect to another page, not the previous one</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15976">PHPBB3-15976</a>] - Changing account settings without changing password resets user_passchg</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15982">PHPBB3-15982</a>] - Q&A captcha plug-in still throws PHP 7.2.x countable warning</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16003">PHPBB3-16003</a>] - Post count not updated when deleting only post in topic</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16021">PHPBB3-16021</a>] - Recognize number of Template Event instances in events.md file</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16040">PHPBB3-16040</a>] - Topic Icon with space in filename isn't displayed by viewforum_body.html</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16048">PHPBB3-16048</a>] - Unable to restore any backup from ACP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16050">PHPBB3-16050</a>] - PHP warning in MCP banning tab on PHP 7.2+</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16053">PHPBB3-16053</a>] - BBCodes using {TEXT} in HTML tags no longer work</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16054">PHPBB3-16054</a>] - Style templates no longer able to login "from any page."</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16055">PHPBB3-16055</a>] - Unable to login using Oauth via Forums, topics or posts</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16061">PHPBB3-16061</a>] - Migrator never drops unique indexes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16063">PHPBB3-16063</a>] - board_dst config value is not removed from config table after conversion</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16066">PHPBB3-16066</a>] - Banned or suspended user receives "The submitted form was invalid. Try submitting again."</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16071">PHPBB3-16071</a>] - Undefined index for custom attachments groups</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16073">PHPBB3-16073</a>] - Fix warning in ACP version check</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16074">PHPBB3-16074</a>] - Twemoji -fe0f sequence not rendering</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16075">PHPBB3-16075</a>] - PM filter “sent to my default usergroup” triggers array to string conversion warning</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16080">PHPBB3-16080</a>] - Warnings When a Style exists on database but not on FTP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16093">PHPBB3-16093</a>] - Attach row template always gets displayed with JS disabled</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16096">PHPBB3-16096</a>] - MySQL full text search always uses MyISAM limits</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16124">PHPBB3-16124</a>] - Incorrect users search by last visit time in memberlist.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16126">PHPBB3-16126</a>] - AppVeyor builds fail due to chocolatey being unable to install PHP</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15745">PHPBB3-15745</a>] - Hardcoded lang in credit line</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15886">PHPBB3-15886</a>] - Group helper functions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15946">PHPBB3-15946</a>] - Add event - core.posting_modify_row_data</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15967">PHPBB3-15967</a>] - Unambiguous wording in user activation request email to Admin/Moderator</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15984">PHPBB3-15984</a>] - Use of 'Cache-Control: public' for serving files</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16000">PHPBB3-16000</a>] - Provide link to PHP Date Function in both ACP and UCP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16013">PHPBB3-16013</a>] - Do not prevent username changes in ACP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16019">PHPBB3-16019</a>] - Deny prosilver's uninstallation</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16024">PHPBB3-16024</a>] - Add core.topic_review_modify_sql_ary</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16025">PHPBB3-16025</a>] - Add 2 template events *_author_username_{append/prepend}</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16047">PHPBB3-16047</a>] - ACP Private Messages: Wording could be better</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16058">PHPBB3-16058</a>] - Remove sudo required from travis config</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16065">PHPBB3-16065</a>] - Undefined index: user_ip in oauth.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16068">PHPBB3-16068</a>] - Incorrect docblock parameter types</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16070">PHPBB3-16070</a>] - Remove support for WebSTAR and Xitami</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16078">PHPBB3-16078</a>] - Use chrome webdriver for UI tests</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16089">PHPBB3-16089</a>] - Add core.confirm_box_ajax_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16097">PHPBB3-16097</a>] - Add core.viewtopic_gen_sort_selects_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16101">PHPBB3-16101</a>] - Add Referrer-Policy header</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16102">PHPBB3-16102</a>] - Add core.posting_modify_post_subject</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16103">PHPBB3-16103</a>] - Add core.pm_modify_message_subject</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16106">PHPBB3-16106</a>] - Add core.mcp_main_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16107">PHPBB3-16107</a>] - Add mcp_move_destination_forum_before|after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16108">PHPBB3-16108</a>] - Add topiclist_row_topic_by_author_before|after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16109">PHPBB3-16109</a>] - Custom Profile Field visibility is incorrectly explained</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16111">PHPBB3-16111</a>] - Add core.message_history_modify_sql_ary</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16113">PHPBB3-16113</a>] - Add core.mcp_topic_modify_sql_ary</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16114">PHPBB3-16114</a>] - Add 2 mcp_topic_post_author_full_{append/prepend}</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16127">PHPBB3-16127</a>] - Add UI for Mass email $max_chunk_size</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16129">PHPBB3-16129</a>] - The attachment's ALT tag is supposed to describe the image, not the file.</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16067">PHPBB3-16067</a>] - Define trusty build environment for travis builds</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16112">PHPBB3-16112</a>] - Update composer dependencies to latest</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16119">PHPBB3-16119</a>] - The text input for poll question has a too high maxlength attribute</li>
|
||||
</ul>
|
||||
|
||||
<a name="v326"></a><h3>Changes since 3.2.6</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16034">PHPBB3-16034</a>] - Links created with [url=] - are sometimes incorrectly shortened</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16036">PHPBB3-16036</a>] - Cannot login with 3.2.6</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16037">PHPBB3-16037</a>] - Private message ViewFolder Broken</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16039">PHPBB3-16039</a>] - Unable to change announcement to standard topic due to missing global</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16042">PHPBB3-16042</a>] - Use S_LOGIN_REDIRECT to output login form token</li>
|
||||
</ul>
|
||||
|
||||
<a name="v326rc1"></a><h3>Changes since 3.2.6-RC1</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16027">PHPBB3-16027</a>] - Appveyor builds fail on PHP 7.0</li>
|
||||
</ul>
|
||||
<h4>Security Issue</h4>
|
||||
<ul>
|
||||
<li>[SECURITY-231] - Remote avatar functionality allows checking for files and ports on local network</li>
|
||||
<li>[SECURITY-235] - Fulltext native search can be used to cause long execution times</li>
|
||||
</ul>
|
||||
<h4>Hardening</h4>
|
||||
<ul>
|
||||
<li>[SECURITY-228] - Require form token in login_box</li>
|
||||
<li>[SECURITY-233] - SMTP auth data shouldn't be cached</li>
|
||||
<li>[SECURITY-234] - Main website URL in Admin Control Panel should not support JS URLs</li>
|
||||
</ul>
|
||||
|
||||
<a name="v325"></a><h3>Changes since 3.2.5</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15509">PHPBB3-15509</a>] - Update database: info message is to scary</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15869">PHPBB3-15869</a>] - Cookies Problem with domains with special chars</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15876">PHPBB3-15876</a>] - Mysql 5.7 support Q&A plugin</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15883">PHPBB3-15883</a>] - No error for invalid usernames on bulk add to usergroup</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15904">PHPBB3-15904</a>] - PHP warning when accessing modules in ACP System tab</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15917">PHPBB3-15917</a>] - Unapproved posts count towards forum post count</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15918">PHPBB3-15918</a>] - Ban reason messages show backslash (\) before apostrophe -- ex. (don\'t).</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15919">PHPBB3-15919</a>] - Lint test throws PHP warnings due to node modules folder</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15931">PHPBB3-15931</a>] - Issues in PM report emails</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15954">PHPBB3-15954</a>] - Some calls to include() don't have a safeguard</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15957">PHPBB3-15957</a>] - User preferences show notification method "both" with disabled Jabber in ACP</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15959">PHPBB3-15959</a>] - Travis Network Test is Failing for news.cnet.com</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15965">PHPBB3-15965</a>] - Console command to handle thumbnails have files directory hardcoded</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15975">PHPBB3-15975</a>] - Delete or prune an user doesn't remove its entries in the user_notifications table</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15986">PHPBB3-15986</a>] - Add missing language key for posting.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15996">PHPBB3-15996</a>] - Invalid data provider function name in migrator_tool_permission_test</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16006">PHPBB3-16006</a>] - Duplicate form IDs in UCP oauth form</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15884">PHPBB3-15884</a>] - Add memberlist_body_* events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15889">PHPBB3-15889</a>] - Add core.memberlist_modify_memberrow_sql</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15890">PHPBB3-15890</a>] - Add core.memberlist_modify_viewprofile_sql</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15891">PHPBB3-15891</a>] - Add core.memberlist_modify_view_profile_template_vars</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15898">PHPBB3-15898</a>] - Add core.ucp_pm_compose_template</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15899">PHPBB3-15899</a>] - Add core.modify_attachment_sql_ary_on_* events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15901">PHPBB3-15901</a>] - Add mcp_post_* template events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15910">PHPBB3-15910</a>] - Pass object arguments by reference implicitly</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15914">PHPBB3-15914</a>] - Add core.modify_memberlist_viewprofile_group_sql and core.modify_memberlist_viewprofile_group_data</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15915">PHPBB3-15915</a>] - Add template events to posting_attach_body.html</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15924">PHPBB3-15924</a>] - Move from precise to trusty builds</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15926">PHPBB3-15926</a>] - Deny installs on PHP >= 7.3@dev - Increase min. req. to 5.4.7</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15928">PHPBB3-15928</a>] - Remove support for backup download</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15939">PHPBB3-15939</a>] - Pagination docblocks</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15941">PHPBB3-15941</a>] - Replace MAX SQL in functions_posting.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15942">PHPBB3-15942</a>] - Array to string conversion when permanently deleting a post</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15948">PHPBB3-15948</a>] - Add core.mcp_change_topic_type_after/before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15949">PHPBB3-15949</a>] - [Template] - ucp_profile_signature_posting_editor_options_prepend</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15950">PHPBB3-15950</a>] - Add SQL transactions to mcp_main.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15960">PHPBB3-15960</a>] - Add SQL transactions to functions_admin.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15970">PHPBB3-15970</a>] - Add core.message_admin_form_submit_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15972">PHPBB3-15972</a>] - Add core.markread_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15992">PHPBB3-15992</a>] - Fix breadcrumb schema</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15995">PHPBB3-15995</a>] - Add core.memberlist_modify_sort_pagination_params</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15997">PHPBB3-15997</a>] - Increase webdriver timeout for UI tests</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16001">PHPBB3-16001</a>] - Append data to the OAuth's redirect URL</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16009">PHPBB3-16009</a>] - Display OAuth login's buttons in a row.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16010">PHPBB3-16010</a>] - Automatically check order of events in events.md file</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16018">PHPBB3-16018</a>] - Update composer and dependencies for 3.2.6</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-16020">PHPBB3-16020</a>] - Fix placement of event viewforum_body_topic_author_username_append</li>
|
||||
</ul>
|
||||
<h4>New Feature</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15944">PHPBB3-15944</a>] - Add core.posting_modify_quote_attributes</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15921">PHPBB3-15921</a>] - Update TextFormatter to 1.3.2</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-15953">PHPBB3-15953</a>] - pm reported missing border color</li>
|
||||
</ul>
|
||||
|
||||
<a name="v325rc1"></a><h3>Changes since 3.2.5-RC1</h3>
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
|
@@ -104,3 +104,6 @@ Text_Diff-0.2.1 http://pear.php.net/package/Text_Diff
|
||||
MIT licenced:
|
||||
Symfony2 (c) 2004-2011 Fabien Potencier, https://symfony.com/
|
||||
Cookie Consent (c) 2015 Silktide Ltd, https://cookieconsent.insites.com
|
||||
|
||||
Emoji by:
|
||||
Twemoji (c) 2018 Twitter, Inc, https://twemoji.twitter.com/
|
||||
|
@@ -147,7 +147,7 @@
|
||||
<li>Oracle</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>PHP 5.4.7+</strong> with support for the database you intend to use.</li>
|
||||
<li><strong>PHP 5.4.7+</strong> but less than <strong>PHP 7.3</strong> with support for the database you intend to use.</li>
|
||||
<li>The following PHP modules are required:
|
||||
<ul>
|
||||
<li>json</li>
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -27,6 +27,9 @@ class acp_attachments
|
||||
/** @var \phpbb\config\config */
|
||||
protected $config;
|
||||
|
||||
/** @var \phpbb\language\language */
|
||||
protected $language;
|
||||
|
||||
/** @var ContainerBuilder */
|
||||
protected $phpbb_container;
|
||||
|
||||
@@ -54,6 +57,7 @@ class acp_attachments
|
||||
$this->id = $id;
|
||||
$this->db = $db;
|
||||
$this->config = $config;
|
||||
$this->language = $phpbb_container->get('language');
|
||||
$this->template = $template;
|
||||
$this->user = $user;
|
||||
$this->phpbb_container = $phpbb_container;
|
||||
@@ -128,7 +132,7 @@ class acp_attachments
|
||||
$s_assigned_groups = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$row['group_name'] = (isset($user->lang['EXT_GROUP_' . $row['group_name']])) ? $user->lang['EXT_GROUP_' . $row['group_name']] : $row['group_name'];
|
||||
$row['group_name'] = $this->language->is_set('EXT_GROUP_' . utf8_strtoupper($row['group_name'])) ? $this->language->lang('EXT_GROUP_' . utf8_strtoupper($row['group_name'])) : $row['group_name'];
|
||||
$s_assigned_groups[$row['cat_id']][] = $row['group_name'];
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
@@ -573,7 +577,7 @@ class acp_attachments
|
||||
$group_id = $db->sql_nextid();
|
||||
}
|
||||
|
||||
$group_name = (isset($user->lang['EXT_GROUP_' . $group_name])) ? $user->lang['EXT_GROUP_' . $group_name] : $group_name;
|
||||
$group_name = $this->language->is_set('EXT_GROUP_' . utf8_strtoupper($group_name)) ? $this->language->lang('EXT_GROUP_' . utf8_strtoupper($group_name)) : $group_name;
|
||||
$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_ATTACH_EXTGROUP_' . strtoupper($action), false, array($group_name));
|
||||
}
|
||||
|
||||
@@ -875,7 +879,7 @@ class acp_attachments
|
||||
'U_EDIT' => $this->u_action . "&action=edit&g={$row['group_id']}",
|
||||
'U_DELETE' => $this->u_action . "&action=delete&g={$row['group_id']}",
|
||||
|
||||
'GROUP_NAME' => (isset($user->lang['EXT_GROUP_' . $row['group_name']])) ? $user->lang['EXT_GROUP_' . $row['group_name']] : $row['group_name'],
|
||||
'GROUP_NAME' => $this->language->is_set('EXT_GROUP_' . utf8_strtoupper($row['group_name'])) ? $this->language->lang('EXT_GROUP_' . utf8_strtoupper($row['group_name'])) : $row['group_name'],
|
||||
'CATEGORY' => $cat_lang[$row['cat_id']],
|
||||
)
|
||||
);
|
||||
@@ -1244,15 +1248,11 @@ class acp_attachments
|
||||
'ATTACHMENT_POSTER' => get_username_string('full', (int) $row['poster_id'], (string) $row['username'], (string) $row['user_colour'], (string) $row['username']),
|
||||
'FILESIZE' => get_formatted_filesize((int) $row['filesize']),
|
||||
'FILETIME' => $user->format_date((int) $row['filetime']),
|
||||
'REAL_FILENAME' => (!$row['in_message']) ? utf8_basename((string) $row['real_filename']) : '',
|
||||
'PHYSICAL_FILENAME' => utf8_basename((string) $row['physical_filename']),
|
||||
'EXT_GROUP_NAME' => (!empty($extensions[$row['extension']]['group_name'])) ? $user->lang['EXT_GROUP_' . $extensions[$row['extension']]['group_name']] : '',
|
||||
'REAL_FILENAME' => utf8_basename((string) $row['real_filename']),
|
||||
'EXT_GROUP_NAME' => $this->language->is_set('EXT_GROUP_' . utf8_strtoupper($extensions[$row['extension']]['group_name'])) ? $this->language->lang('EXT_GROUP_' . utf8_strtoupper($extensions[$row['extension']]['group_name'])) : $extensions[$row['extension']]['group_name'],
|
||||
'COMMENT' => $comment,
|
||||
'TOPIC_TITLE' => (!$row['in_message']) ? (string) $row['topic_title'] : '',
|
||||
'ATTACH_ID' => (int) $row['attach_id'],
|
||||
'POST_ID' => (int) $row['post_msg_id'],
|
||||
'TOPIC_ID' => (int) $row['topic_id'],
|
||||
'POST_IDS' => (!empty($post_ids[$row['attach_id']])) ? (int) $post_ids[$row['attach_id']] : '',
|
||||
|
||||
'L_DOWNLOAD_COUNT' => $user->lang($l_downloaded_viewed, (int) $row['download_count']),
|
||||
|
||||
@@ -1434,7 +1434,7 @@ class acp_attachments
|
||||
$group_name = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$row['group_name'] = (isset($user->lang['EXT_GROUP_' . $row['group_name']])) ? $user->lang['EXT_GROUP_' . $row['group_name']] : $row['group_name'];
|
||||
$row['group_name'] = $this->language->is_set('EXT_GROUP_' . utf8_strtoupper($row['group_name'])) ? $this->language->lang('EXT_GROUP_' . utf8_strtoupper($row['group_name'])) : $row['group_name'];
|
||||
$group_name[] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
@@ -30,10 +30,13 @@ class acp_board
|
||||
|
||||
function main($id, $mode)
|
||||
{
|
||||
global $user, $template, $request;
|
||||
global $user, $template, $request, $language;
|
||||
global $config, $phpbb_root_path, $phpEx;
|
||||
global $cache, $phpbb_container, $phpbb_dispatcher, $phpbb_log;
|
||||
|
||||
/** @var \phpbb\language\language $language Language object */
|
||||
$language = $phpbb_container->get('language');
|
||||
|
||||
$user->add_lang('acp/board');
|
||||
|
||||
$submit = (isset($_POST['submit']) || isset($_POST['allow_quick_reply_enable'])) ? true : false;
|
||||
@@ -56,7 +59,7 @@ class acp_board
|
||||
'legend1' => 'ACP_BOARD_SETTINGS',
|
||||
'sitename' => array('lang' => 'SITE_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false),
|
||||
'site_desc' => array('lang' => 'SITE_DESC', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false),
|
||||
'site_home_url' => array('lang' => 'SITE_HOME_URL', 'validate' => 'string', 'type' => 'url:40:255', 'explain' => true),
|
||||
'site_home_url' => array('lang' => 'SITE_HOME_URL', 'validate' => 'url', 'type' => 'url:40:255', 'explain' => true),
|
||||
'site_home_text' => array('lang' => 'SITE_HOME_TEXT', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true),
|
||||
'board_index_text' => array('lang' => 'BOARD_INDEX_TEXT', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true),
|
||||
'board_disable' => array('lang' => 'DISABLE_BOARD', 'validate' => 'bool', 'type' => 'custom', 'method' => 'board_disable', 'explain' => true),
|
||||
@@ -122,6 +125,7 @@ class acp_board
|
||||
$avatar_vars = array();
|
||||
foreach ($avatar_drivers as $current_driver)
|
||||
{
|
||||
/** @var \phpbb\avatar\driver\driver_interface $driver */
|
||||
$driver = $phpbb_avatar_manager->get_driver($current_driver, false);
|
||||
|
||||
/*
|
||||
@@ -446,6 +450,7 @@ class acp_board
|
||||
'email_enable' => array('lang' => 'ENABLE_EMAIL', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true),
|
||||
'board_email_form' => array('lang' => 'BOARD_EMAIL_FORM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true),
|
||||
'email_package_size' => array('lang' => 'EMAIL_PACKAGE_SIZE', 'validate' => 'int:0', 'type' => 'number:0:99999', 'explain' => true),
|
||||
'email_max_chunk_size' => array('lang' => 'EMAIL_MAX_CHUNK_SIZE', 'validate' => 'int:1:99999', 'type' => 'number:1:99999', 'explain' => true),
|
||||
'board_contact' => array('lang' => 'CONTACT_EMAIL', 'validate' => 'email', 'type' => 'email:25:100', 'explain' => true),
|
||||
'board_contact_name' => array('lang' => 'CONTACT_EMAIL_NAME', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => true),
|
||||
'board_email' => array('lang' => 'ADMIN_EMAIL', 'validate' => 'email', 'type' => 'email:25:100', 'explain' => true),
|
||||
@@ -730,7 +735,7 @@ class acp_board
|
||||
$template->assign_block_vars('options', array(
|
||||
'KEY' => $config_key,
|
||||
'TITLE' => (isset($user->lang[$vars['lang']])) ? $user->lang[$vars['lang']] : $vars['lang'],
|
||||
'S_EXPLAIN' => $vars['explain'],
|
||||
'S_EXPLAIN' => $vars['explain'] && !empty($l_explain),
|
||||
'TITLE_EXPLAIN' => $l_explain,
|
||||
'CONTENT' => $content,
|
||||
)
|
||||
|
@@ -23,6 +23,7 @@ class acp_database
|
||||
{
|
||||
var $db_tools;
|
||||
var $u_action;
|
||||
public $page_title;
|
||||
|
||||
function main($id, $mode)
|
||||
{
|
||||
@@ -69,18 +70,13 @@ class acp_database
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$store = $download = $structure = $schema_data = false;
|
||||
$store = $structure = $schema_data = false;
|
||||
|
||||
if ($where == 'store_and_download' || $where == 'store')
|
||||
if ($where == 'store')
|
||||
{
|
||||
$store = true;
|
||||
}
|
||||
|
||||
if ($where == 'store_and_download' || $where == 'download')
|
||||
{
|
||||
$download = true;
|
||||
}
|
||||
|
||||
if ($type == 'full' || $type == 'structure')
|
||||
{
|
||||
$structure = true;
|
||||
@@ -98,8 +94,9 @@ class acp_database
|
||||
|
||||
$filename = 'backup_' . $time . '_' . unique_id();
|
||||
|
||||
/** @var phpbb\db\extractor\extractor_interface $extractor Database extractor */
|
||||
$extractor = $phpbb_container->get('dbal.extractor');
|
||||
$extractor->init_extractor($format, $filename, $time, $download, $store);
|
||||
$extractor->init_extractor($format, $filename, $time, false, $store);
|
||||
|
||||
$extractor->write_start($table_prefix);
|
||||
|
||||
@@ -145,11 +142,6 @@ class acp_database
|
||||
|
||||
$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_DB_BACKUP');
|
||||
|
||||
if ($download == true)
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
trigger_error($user->lang['BACKUP_SUCCESS'] . adm_back_link($this->u_action));
|
||||
break;
|
||||
|
||||
@@ -201,16 +193,10 @@ class acp_database
|
||||
case 'submit':
|
||||
$delete = $request->variable('delete', '');
|
||||
$file = $request->variable('file', '');
|
||||
$download = $request->variable('download', '');
|
||||
|
||||
if (!preg_match('#^backup_\d{10,}_(?:[a-z\d]{16}|[a-z\d]{32})\.(sql(?:\.(?:gz|bz2))?)$#i', $file, $matches))
|
||||
{
|
||||
trigger_error($user->lang['BACKUP_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
$backup_info = $this->get_backup_file($phpbb_root_path . 'store/', $file);
|
||||
|
||||
$file_name = $phpbb_root_path . 'store/' . $matches[0];
|
||||
|
||||
if (!file_exists($file_name) || !is_readable($file_name))
|
||||
if (empty($backup_info) || !is_readable($backup_info['file_name']))
|
||||
{
|
||||
trigger_error($user->lang['BACKUP_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
@@ -219,7 +205,7 @@ class acp_database
|
||||
{
|
||||
if (confirm_box(true))
|
||||
{
|
||||
unlink($file_name);
|
||||
unlink($backup_info['file_name']);
|
||||
$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_DB_DELETE');
|
||||
trigger_error($user->lang['BACKUP_DELETE'] . adm_back_link($this->u_action));
|
||||
}
|
||||
@@ -228,50 +214,12 @@ class acp_database
|
||||
confirm_box(false, $user->lang['DELETE_SELECTED_BACKUP'], build_hidden_fields(array('delete' => $delete, 'file' => $file)));
|
||||
}
|
||||
}
|
||||
else if ($download || confirm_box(true))
|
||||
else if (confirm_box(true))
|
||||
{
|
||||
if ($download)
|
||||
{
|
||||
$name = $matches[0];
|
||||
|
||||
switch ($matches[1])
|
||||
{
|
||||
case 'sql':
|
||||
$mimetype = 'text/x-sql';
|
||||
break;
|
||||
case 'sql.bz2':
|
||||
$mimetype = 'application/x-bzip2';
|
||||
break;
|
||||
case 'sql.gz':
|
||||
$mimetype = 'application/x-gzip';
|
||||
break;
|
||||
}
|
||||
|
||||
header('Cache-Control: private, no-cache');
|
||||
header("Content-Type: $mimetype; name=\"$name\"");
|
||||
header("Content-disposition: attachment; filename=$name");
|
||||
|
||||
@set_time_limit(0);
|
||||
|
||||
$fp = @fopen($file_name, 'rb');
|
||||
|
||||
if ($fp !== false)
|
||||
{
|
||||
while (!feof($fp))
|
||||
{
|
||||
echo fread($fp, 8192);
|
||||
}
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
flush();
|
||||
exit;
|
||||
}
|
||||
|
||||
switch ($matches[1])
|
||||
switch ($backup_info['extension'])
|
||||
{
|
||||
case 'sql':
|
||||
$fp = fopen($file_name, 'rb');
|
||||
$fp = fopen($backup_info['file_name'], 'rb');
|
||||
$read = 'fread';
|
||||
$seek = 'fseek';
|
||||
$eof = 'feof';
|
||||
@@ -280,7 +228,7 @@ class acp_database
|
||||
break;
|
||||
|
||||
case 'sql.bz2':
|
||||
$fp = bzopen($file_name, 'r');
|
||||
$fp = bzopen($backup_info['file_name'], 'r');
|
||||
$read = 'bzread';
|
||||
$seek = '';
|
||||
$eof = 'feof';
|
||||
@@ -289,13 +237,17 @@ class acp_database
|
||||
break;
|
||||
|
||||
case 'sql.gz':
|
||||
$fp = gzopen($file_name, 'rb');
|
||||
$fp = gzopen($backup_info['file_name'], 'rb');
|
||||
$read = 'gzread';
|
||||
$seek = 'gzseek';
|
||||
$eof = 'gzeof';
|
||||
$close = 'gzclose';
|
||||
$fgetd = 'fgetd';
|
||||
break;
|
||||
|
||||
default:
|
||||
trigger_error($user->lang['BACKUP_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
return;
|
||||
}
|
||||
|
||||
switch ($db->get_sql_layer())
|
||||
@@ -375,43 +327,13 @@ class acp_database
|
||||
trigger_error($user->lang['RESTORE_SUCCESS'] . adm_back_link($this->u_action));
|
||||
break;
|
||||
}
|
||||
else if (!$download)
|
||||
else
|
||||
{
|
||||
confirm_box(false, $user->lang['RESTORE_SELECTED_BACKUP'], build_hidden_fields(array('file' => $file)));
|
||||
}
|
||||
|
||||
default:
|
||||
$methods = array('sql');
|
||||
$available_methods = array('sql.gz' => 'zlib', 'sql.bz2' => 'bz2');
|
||||
|
||||
foreach ($available_methods as $type => $module)
|
||||
{
|
||||
if (!@extension_loaded($module))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$methods[] = $type;
|
||||
}
|
||||
|
||||
$dir = $phpbb_root_path . 'store/';
|
||||
$dh = @opendir($dir);
|
||||
|
||||
$backup_files = array();
|
||||
|
||||
if ($dh)
|
||||
{
|
||||
while (($file = readdir($dh)) !== false)
|
||||
{
|
||||
if (preg_match('#^backup_(\d{10,})_(?:[a-z\d]{16}|[a-z\d]{32})\.(sql(?:\.(?:gz|bz2))?)$#i', $file, $matches))
|
||||
{
|
||||
if (in_array($matches[2], $methods))
|
||||
{
|
||||
$backup_files[(int) $matches[1]] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
$backup_files = $this->get_file_list($phpbb_root_path . 'store/');
|
||||
|
||||
if (!empty($backup_files))
|
||||
{
|
||||
@@ -420,8 +342,8 @@ class acp_database
|
||||
foreach ($backup_files as $name => $file)
|
||||
{
|
||||
$template->assign_block_vars('files', array(
|
||||
'FILE' => $file,
|
||||
'NAME' => $user->format_date($name, 'd-m-Y H:i:s', true),
|
||||
'FILE' => sha1($file),
|
||||
'NAME' => $user->format_date($name, 'd-m-Y H:i', true),
|
||||
'SUPPORTED' => true,
|
||||
));
|
||||
}
|
||||
@@ -435,6 +357,92 @@ class acp_database
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get backup file from file hash
|
||||
*
|
||||
* @param string $directory Relative path to directory
|
||||
* @param string $file_hash Hash of selected file
|
||||
*
|
||||
* @return array Backup file data or empty array if unable to find file
|
||||
*/
|
||||
protected function get_backup_file($directory, $file_hash)
|
||||
{
|
||||
$backup_data = [];
|
||||
|
||||
$file_list = $this->get_file_list($directory);
|
||||
$supported_extensions = $this->get_supported_extensions();
|
||||
|
||||
foreach ($file_list as $file)
|
||||
{
|
||||
preg_match('#^backup_(\d{10,})_(?:[a-z\d]{16}|[a-z\d]{32})\.(sql(?:\.(?:gz|bz2))?)$#i', $file, $matches);
|
||||
if (sha1($file) === $file_hash && in_array($matches[2], $supported_extensions))
|
||||
{
|
||||
$backup_data = [
|
||||
'file_name' => $directory . $file,
|
||||
'extension' => $matches[2],
|
||||
];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $backup_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get backup file list for directory
|
||||
*
|
||||
* @param string $directory Relative path to backup directory
|
||||
*
|
||||
* @return array List of backup files in specified directory
|
||||
*/
|
||||
protected function get_file_list($directory)
|
||||
{
|
||||
$supported_extensions = $this->get_supported_extensions();
|
||||
|
||||
$dh = @opendir($directory);
|
||||
|
||||
$backup_files = [];
|
||||
|
||||
if ($dh)
|
||||
{
|
||||
while (($file = readdir($dh)) !== false)
|
||||
{
|
||||
if (preg_match('#^backup_(\d{10,})_(?:[a-z\d]{16}|[a-z\d]{32})\.(sql(?:\.(?:gz|bz2))?)$#i', $file, $matches))
|
||||
{
|
||||
if (in_array($matches[2], $supported_extensions))
|
||||
{
|
||||
$backup_files[(int) $matches[1]] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
|
||||
return $backup_files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get supported extensions for backup
|
||||
*
|
||||
* @return array List of supported extensions
|
||||
*/
|
||||
protected function get_supported_extensions()
|
||||
{
|
||||
$extensions = ['sql'];
|
||||
$available_methods = ['sql.gz' => 'zlib', 'sql.bz2' => 'bz2'];
|
||||
|
||||
foreach ($available_methods as $type => $module)
|
||||
{
|
||||
if (!@extension_loaded($module))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$extensions[] = $type;
|
||||
}
|
||||
|
||||
return $extensions;
|
||||
}
|
||||
}
|
||||
|
||||
// get how much space we allow for a chunk of data, very similar to phpMyAdmin's way of doing things ;-) (hey, we only do this for MySQL anyway :P)
|
||||
|
@@ -986,6 +986,13 @@ class acp_forums
|
||||
$errors[] = $user->lang['FORUM_NAME_EMPTY'];
|
||||
}
|
||||
|
||||
// No Emojis
|
||||
if (preg_match_all('/[\x{10000}-\x{10FFFF}]/u', $forum_data_ary['forum_name'], $matches))
|
||||
{
|
||||
$character_list = implode('<br>', $matches[0]);
|
||||
$errors[] = $user->lang('FORUM_NAME_EMOJI', $character_list);
|
||||
}
|
||||
|
||||
if (utf8_strlen($forum_data_ary['forum_desc']) > 4000)
|
||||
{
|
||||
$errors[] = $user->lang['FORUM_DESC_TOO_LONG'];
|
||||
|
@@ -29,6 +29,9 @@ class acp_groups
|
||||
global $phpbb_root_path, $phpbb_admin_path, $phpEx;
|
||||
global $request, $phpbb_container, $phpbb_dispatcher;
|
||||
|
||||
/** @var \phpbb\language\language $language Language object */
|
||||
$language = $phpbb_container->get('language');
|
||||
|
||||
$user->add_lang('acp/groups');
|
||||
$this->tpl_name = 'acp_groups';
|
||||
$this->page_title = 'ACP_GROUPS_MANAGE';
|
||||
@@ -293,7 +296,19 @@ class acp_groups
|
||||
// Add user/s to group
|
||||
if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, $leader, 0, $group_row))
|
||||
{
|
||||
trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&action=list&g=' . $group_id), E_USER_WARNING);
|
||||
$display_message = $language->lang($error);
|
||||
|
||||
if ($error == 'GROUP_USERS_INVALID')
|
||||
{
|
||||
// Find which users don't exist
|
||||
$actual_name_ary = $name_ary;
|
||||
$actual_user_id_ary = [];
|
||||
user_get_id_name($actual_user_id_ary, $actual_name_ary, false, true);
|
||||
|
||||
$display_message = $language->lang('GROUP_USERS_INVALID', implode($language->lang('COMMA_SEPARATOR'), array_udiff($name_ary, $actual_name_ary, 'strcasecmp')));
|
||||
}
|
||||
|
||||
trigger_error($display_message . adm_back_link($this->u_action . '&action=list&g=' . $group_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
|
||||
|
@@ -24,9 +24,9 @@ class acp_inactive
|
||||
var $u_action;
|
||||
var $p_master;
|
||||
|
||||
function __construct(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -676,7 +676,7 @@ class acp_permissions
|
||||
/**
|
||||
* Apply permissions
|
||||
*/
|
||||
function set_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id)
|
||||
function set_permissions($mode, $permission_type, $auth_admin, &$user_id, &$group_id)
|
||||
{
|
||||
global $db, $cache, $user, $auth;
|
||||
global $request;
|
||||
@@ -765,7 +765,7 @@ class acp_permissions
|
||||
/**
|
||||
* Apply all permissions
|
||||
*/
|
||||
function set_all_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id)
|
||||
function set_all_permissions($mode, $permission_type, $auth_admin, &$user_id, &$group_id)
|
||||
{
|
||||
global $db, $cache, $user, $auth;
|
||||
global $request;
|
||||
@@ -881,7 +881,7 @@ class acp_permissions
|
||||
/**
|
||||
* Remove permissions
|
||||
*/
|
||||
function remove_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id, &$forum_id)
|
||||
function remove_permissions($mode, $permission_type, $auth_admin, &$user_id, &$group_id, &$forum_id)
|
||||
{
|
||||
global $user, $db, $cache, $auth;
|
||||
|
||||
|
@@ -845,7 +845,7 @@ class acp_profile
|
||||
/**
|
||||
* Build all Language specific options
|
||||
*/
|
||||
function build_language_options(&$cp, $field_type, $action = 'create')
|
||||
function build_language_options($cp, $field_type, $action = 'create')
|
||||
{
|
||||
global $user, $config, $db, $request;
|
||||
|
||||
@@ -942,7 +942,7 @@ class acp_profile
|
||||
/**
|
||||
* Save Profile Field
|
||||
*/
|
||||
function save_profile_field(&$cp, $field_type, $action = 'create')
|
||||
function save_profile_field($cp, $field_type, $action = 'create')
|
||||
{
|
||||
global $db, $config, $user, $phpbb_container, $phpbb_log, $request, $phpbb_dispatcher;
|
||||
|
||||
|
@@ -259,6 +259,19 @@ class acp_styles
|
||||
// Get list of styles to uninstall
|
||||
$ids = $this->request_vars('id', 0, true);
|
||||
|
||||
// Don't remove prosilver, you can still deactivate it.
|
||||
$sql = 'SELECT style_id
|
||||
FROM ' . STYLES_TABLE . "
|
||||
WHERE style_name = '" . $this->db->sql_escape('prosilver') . "'";
|
||||
$result = $this->db->sql_query($sql);
|
||||
$prosilver_id = (int) $this->db->sql_fetchfield('style_id');
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
if ($prosilver_id && in_array($prosilver_id, $ids))
|
||||
{
|
||||
trigger_error($this->user->lang('UNINSTALL_PROSILVER') . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
// Check if confirmation box was submitted
|
||||
if (confirm_box(true))
|
||||
{
|
||||
@@ -998,11 +1011,14 @@ class acp_styles
|
||||
'L_ACTION' => $this->user->lang['EXPORT']
|
||||
); */
|
||||
|
||||
// Uninstall
|
||||
$actions[] = array(
|
||||
'U_ACTION' => $this->u_action . '&action=uninstall&hash=' . generate_link_hash('uninstall') . '&id=' . $style['style_id'],
|
||||
'L_ACTION' => $this->user->lang['STYLE_UNINSTALL']
|
||||
);
|
||||
if ($style['style_name'] !== 'prosilver')
|
||||
{
|
||||
// Uninstall
|
||||
$actions[] = array(
|
||||
'U_ACTION' => $this->u_action . '&action=uninstall&hash=' . generate_link_hash('uninstall') . '&id=' . $style['style_id'],
|
||||
'L_ACTION' => $this->user->lang['STYLE_UNINSTALL']
|
||||
);
|
||||
}
|
||||
|
||||
// Preview
|
||||
$actions[] = array(
|
||||
@@ -1123,7 +1139,14 @@ class acp_styles
|
||||
*/
|
||||
protected function read_style_cfg($dir)
|
||||
{
|
||||
// This should never happen, we give them a red warning because of its relevance.
|
||||
if (!file_exists($this->styles_path . $dir . '/style.cfg'))
|
||||
{
|
||||
trigger_error($this->user->lang('NO_STYLE_CFG', $dir), E_USER_WARNING);
|
||||
}
|
||||
|
||||
static $required = array('name', 'phpbb_version', 'copyright');
|
||||
|
||||
$cfg = parse_cfg_file($this->styles_path . $dir . '/style.cfg');
|
||||
|
||||
// Check if it is a valid file
|
||||
|
@@ -59,17 +59,19 @@ class acp_update
|
||||
|
||||
$update_link = $phpbb_root_path . 'install/app.' . $phpEx;
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_UP_TO_DATE' => empty($updates_available),
|
||||
'U_ACTION' => $this->u_action,
|
||||
'U_VERSIONCHECK_FORCE' => append_sid($this->u_action . '&versioncheck_force=1'),
|
||||
$template_ary = [
|
||||
'S_UP_TO_DATE' => empty($updates_available),
|
||||
'U_ACTION' => $this->u_action,
|
||||
'U_VERSIONCHECK_FORCE' => append_sid($this->u_action . '&versioncheck_force=1'),
|
||||
|
||||
'CURRENT_VERSION' => $config['version'],
|
||||
'CURRENT_VERSION' => $config['version'],
|
||||
|
||||
'UPDATE_INSTRUCTIONS' => sprintf($user->lang['UPDATE_INSTRUCTIONS'], $update_link),
|
||||
'UPDATE_INSTRUCTIONS' => $user->lang('UPDATE_INSTRUCTIONS', $update_link),
|
||||
'S_VERSION_UPGRADEABLE' => !empty($upgrades_available),
|
||||
'UPGRADE_INSTRUCTIONS' => !empty($upgrades_available) ? $user->lang('UPGRADE_INSTRUCTIONS', $upgrades_available['current'], $upgrades_available['announcement']) : false,
|
||||
));
|
||||
];
|
||||
|
||||
$template->assign_vars($template_ary);
|
||||
|
||||
// Incomplete update?
|
||||
if (phpbb_version_compare($config['version'], PHPBB_VERSION, '<'))
|
||||
|
@@ -24,9 +24,9 @@ class acp_users
|
||||
var $u_action;
|
||||
var $p_master;
|
||||
|
||||
function __construct(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
@@ -855,7 +855,7 @@ class acp_users
|
||||
$check_ary += array(
|
||||
'username' => array(
|
||||
array('string', false, $config['min_name_chars'], $config['max_name_chars']),
|
||||
array('username', $user_row['username'])
|
||||
array('username', $user_row['username'], true)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@@ -29,7 +29,7 @@ function register_compatibility_globals()
|
||||
{
|
||||
global $phpbb_container;
|
||||
|
||||
global $cache, $phpbb_dispatcher, $request, $user, $auth, $db, $config, $phpbb_log;
|
||||
global $cache, $phpbb_dispatcher, $request, $user, $auth, $db, $config, $language, $phpbb_log;
|
||||
global $symfony_request, $phpbb_filesystem, $phpbb_path_helper, $phpbb_extension_manager, $template;
|
||||
|
||||
// set up caching
|
||||
@@ -48,6 +48,9 @@ function register_compatibility_globals()
|
||||
/* @var $user \phpbb\user */
|
||||
$user = $phpbb_container->get('user');
|
||||
|
||||
/* @var \phpbb\language\language $language */
|
||||
$language = $phpbb_container->get('language');
|
||||
|
||||
/* @var $auth \phpbb\auth\auth */
|
||||
$auth = $phpbb_container->get('auth');
|
||||
|
||||
|
@@ -28,7 +28,7 @@ if (!defined('IN_PHPBB'))
|
||||
*/
|
||||
|
||||
// phpBB Version
|
||||
@define('PHPBB_VERSION', '3.2.5');
|
||||
@define('PHPBB_VERSION', '3.2.8-RC1');
|
||||
|
||||
// QA-related
|
||||
// define('PHPBB_QA', 1);
|
||||
|
@@ -680,8 +680,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if ($mode == 'topics')
|
||||
{
|
||||
@@ -808,8 +806,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
|
||||
|
||||
unset($tracking);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if ($mode == 'topic')
|
||||
{
|
||||
@@ -923,8 +919,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
|
||||
$user->set_cookie('track', tracking_serialize($tracking), $post_time + 31536000);
|
||||
$request->overwrite($config['cookie_name'] . '_track', tracking_serialize($tracking), \phpbb\request\request_interface::COOKIE);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if ($mode == 'post')
|
||||
{
|
||||
@@ -949,9 +943,28 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $
|
||||
|
||||
$db->sql_return_on_error(false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* This event is used for performing actions directly after forums,
|
||||
* topics or posts have been marked as read.
|
||||
*
|
||||
* @event core.markread_after
|
||||
* @var string mode Variable containing marking mode value
|
||||
* @var mixed forum_id Variable containing forum id, or false
|
||||
* @var mixed topic_id Variable containing topic id, or false
|
||||
* @var int post_time Variable containing post time
|
||||
* @var int user_id Variable containing the user id
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'mode',
|
||||
'forum_id',
|
||||
'topic_id',
|
||||
'post_time',
|
||||
'user_id',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.markread_after', compact($vars)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1830,27 +1843,6 @@ function redirect($url, $return = false, $disable_cd_check = false)
|
||||
garbage_collection();
|
||||
}
|
||||
|
||||
// Redirect via an HTML form for PITA webservers
|
||||
if (@preg_match('#WebSTAR|Xitami#', getenv('SERVER_SOFTWARE')))
|
||||
{
|
||||
header('Refresh: 0; URL=' . $url);
|
||||
|
||||
echo '<!DOCTYPE html>';
|
||||
echo '<html dir="' . $user->lang['DIRECTION'] . '" lang="' . $user->lang['USER_LANG'] . '">';
|
||||
echo '<head>';
|
||||
echo '<meta charset="utf-8">';
|
||||
echo '<meta http-equiv="X-UA-Compatible" content="IE=edge">';
|
||||
echo '<meta http-equiv="refresh" content="0; url=' . str_replace('&', '&', $url) . '" />';
|
||||
echo '<title>' . $user->lang['REDIRECT'] . '</title>';
|
||||
echo '</head>';
|
||||
echo '<body>';
|
||||
echo '<div style="text-align: center;">' . sprintf($user->lang['URL_REDIRECT'], '<a href="' . str_replace('&', '&', $url) . '">', '</a>') . '</div>';
|
||||
echo '</body>';
|
||||
echo '</html>';
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// Behave as per HTTP/1.1 spec for others
|
||||
header('Location: ' . $url);
|
||||
exit;
|
||||
@@ -2130,25 +2122,29 @@ function check_form_key($form_name, $timespan = false)
|
||||
/**
|
||||
* Build Confirm box
|
||||
* @param boolean $check True for checking if confirmed (without any additional parameters) and false for displaying the confirm box
|
||||
* @param string $title Title/Message used for confirm box.
|
||||
* @param string|array $title Title/Message used for confirm box.
|
||||
* message text is _CONFIRM appended to title.
|
||||
* If title cannot be found in user->lang a default one is displayed
|
||||
* If title_CONFIRM cannot be found in user->lang the text given is used.
|
||||
* If title is an array, the first array value is used as explained per above,
|
||||
* all other array values are sent as parameters to the language function.
|
||||
* @param string $hidden Hidden variables
|
||||
* @param string $html_body Template used for confirm box
|
||||
* @param string $u_action Custom form action
|
||||
*
|
||||
* @return bool True if confirmation was successful, false if not
|
||||
*/
|
||||
function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_body.html', $u_action = '')
|
||||
{
|
||||
global $user, $template, $db, $request;
|
||||
global $config, $phpbb_path_helper;
|
||||
global $config, $language, $phpbb_path_helper, $phpbb_dispatcher;
|
||||
|
||||
if (isset($_POST['cancel']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$confirm = ($user->lang['YES'] === $request->variable('confirm', '', true, \phpbb\request\request_interface::POST));
|
||||
$confirm = ($language->lang('YES') === $request->variable('confirm', '', true, \phpbb\request\request_interface::POST));
|
||||
|
||||
if ($check && $confirm)
|
||||
{
|
||||
@@ -2182,13 +2178,27 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
|
||||
// generate activation key
|
||||
$confirm_key = gen_rand_string(10);
|
||||
|
||||
if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin'])
|
||||
// generate language strings
|
||||
if (is_array($title))
|
||||
{
|
||||
adm_page_header((!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title]);
|
||||
$key = array_shift($title);
|
||||
$count = array_shift($title);
|
||||
$confirm_title = $language->is_set($key) ? $language->lang($key, $count, $title) : $language->lang('CONFIRM');
|
||||
$confirm_text = $language->is_set($key . '_CONFIRM') ? $language->lang($key . '_CONFIRM', $count, $title) : $key;
|
||||
}
|
||||
else
|
||||
{
|
||||
page_header((!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title]);
|
||||
$confirm_title = $language->is_set($title) ? $language->lang($title) : $language->lang('CONFIRM');
|
||||
$confirm_text = $language->is_set($title . '_CONFIRM') ? $language->lang($title . '_CONFIRM') : $title;
|
||||
}
|
||||
|
||||
if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin'])
|
||||
{
|
||||
adm_page_header($confirm_title);
|
||||
}
|
||||
else
|
||||
{
|
||||
page_header($confirm_title);
|
||||
}
|
||||
|
||||
$template->set_filenames(array(
|
||||
@@ -2208,10 +2218,10 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
|
||||
$u_action .= ((strpos($u_action, '?') === false) ? '?' : '&') . 'confirm_key=' . $confirm_key;
|
||||
|
||||
$template->assign_vars(array(
|
||||
'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang($title, 1),
|
||||
'MESSAGE_TEXT' => (!isset($user->lang[$title . '_CONFIRM'])) ? $title : $user->lang[$title . '_CONFIRM'],
|
||||
'MESSAGE_TITLE' => $confirm_title,
|
||||
'MESSAGE_TEXT' => $confirm_text,
|
||||
|
||||
'YES_VALUE' => $user->lang['YES'],
|
||||
'YES_VALUE' => $language->lang('YES'),
|
||||
'S_CONFIRM_ACTION' => $u_action,
|
||||
'S_HIDDEN_FIELDS' => $hidden . $s_hidden_fields,
|
||||
'S_AJAX_REQUEST' => $request->is_ajax(),
|
||||
@@ -2224,16 +2234,36 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
|
||||
if ($request->is_ajax())
|
||||
{
|
||||
$u_action .= '&confirm_uid=' . $user->data['user_id'] . '&sess=' . $user->session_id . '&sid=' . $user->session_id;
|
||||
$json_response = new \phpbb\json_response;
|
||||
$json_response->send(array(
|
||||
$data = array(
|
||||
'MESSAGE_BODY' => $template->assign_display('body'),
|
||||
'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title],
|
||||
'MESSAGE_TEXT' => (!isset($user->lang[$title . '_CONFIRM'])) ? $title : $user->lang[$title . '_CONFIRM'],
|
||||
'MESSAGE_TITLE' => $confirm_title,
|
||||
'MESSAGE_TEXT' => $confirm_text,
|
||||
|
||||
'YES_VALUE' => $user->lang['YES'],
|
||||
'YES_VALUE' => $language->lang('YES'),
|
||||
'S_CONFIRM_ACTION' => str_replace('&', '&', $u_action), //inefficient, rewrite whole function
|
||||
'S_HIDDEN_FIELDS' => $hidden . $s_hidden_fields
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* This event allows an extension to modify the ajax output of confirm box.
|
||||
*
|
||||
* @event core.confirm_box_ajax_before
|
||||
* @var string u_action Action of the form
|
||||
* @var array data Data to be sent
|
||||
* @var string hidden Hidden fields generated by caller
|
||||
* @var string s_hidden_fields Hidden fields generated by this function
|
||||
* @since 3.2.8-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'u_action',
|
||||
'data',
|
||||
'hidden',
|
||||
's_hidden_fields',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.confirm_box_ajax_before', compact($vars)));
|
||||
|
||||
$json_response = new \phpbb\json_response;
|
||||
$json_response->send($data);
|
||||
}
|
||||
|
||||
if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin'])
|
||||
@@ -2244,6 +2274,8 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
|
||||
{
|
||||
page_footer();
|
||||
}
|
||||
|
||||
exit; // unreachable, page_footer() above will call exit()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2255,6 +2287,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
global $request, $phpbb_container, $phpbb_dispatcher, $phpbb_log;
|
||||
|
||||
$err = '';
|
||||
$form_name = 'login';
|
||||
|
||||
// Make sure user->setup() has been called
|
||||
if (!$user->is_setup())
|
||||
@@ -2330,8 +2363,19 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
||||
trigger_error('NO_AUTH_ADMIN_USER_DIFFER');
|
||||
}
|
||||
|
||||
// If authentication is successful we redirect user to previous page
|
||||
$result = $auth->login($username, $password, $autologin, $viewonline, $admin);
|
||||
// Check form key
|
||||
if ($password && !defined('IN_CHECK_BAN') && !check_form_key($form_name))
|
||||
{
|
||||
$result = array(
|
||||
'status' => false,
|
||||
'error_msg' => 'FORM_INVALID',
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If authentication is successful we redirect user to previous page
|
||||
$result = $auth->login($username, $password, $autologin, $viewonline, $admin);
|
||||
}
|
||||
|
||||
// If admin authentication and login, we will log if it was a success or not...
|
||||
// We also break the operation on the first non-success login - it could be argued that the user already knows
|
||||
@@ -4081,9 +4125,9 @@ function phpbb_get_user_avatar($user_row, $alt = 'USER_AVATAR', $ignore_config =
|
||||
*
|
||||
* @return string Avatar html
|
||||
*/
|
||||
function phpbb_get_group_avatar($user_row, $alt = 'GROUP_AVATAR', $ignore_config = false, $lazy = false)
|
||||
function phpbb_get_group_avatar($group_row, $alt = 'GROUP_AVATAR', $ignore_config = false, $lazy = false)
|
||||
{
|
||||
$row = \phpbb\avatar\manager::clean_row($user_row, 'group');
|
||||
$row = \phpbb\avatar\manager::clean_row($group_row, 'group');
|
||||
return phpbb_get_avatar($row, $alt, $ignore_config, $lazy);
|
||||
}
|
||||
|
||||
@@ -4388,6 +4432,23 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
$controller_helper = $phpbb_container->get('controller.helper');
|
||||
$notification_mark_hash = generate_link_hash('mark_all_notifications_read');
|
||||
|
||||
$s_login_redirect = build_hidden_fields(array('redirect' => $phpbb_path_helper->remove_web_root_path(build_url())));
|
||||
|
||||
// Add form token for login box, in case page is presenting a login form.
|
||||
add_form_key('login', '_LOGIN');
|
||||
|
||||
/**
|
||||
* Workaround for missing template variable in pre phpBB 3.2.6 styles.
|
||||
* @deprecated 3.2.7 (To be removed: 3.3.0-a1)
|
||||
*/
|
||||
$form_token_login = $template->retrieve_var('S_FORM_TOKEN_LOGIN');
|
||||
if (!empty($form_token_login))
|
||||
{
|
||||
$s_login_redirect .= $form_token_login;
|
||||
// Remove S_FORM_TOKEN_LOGIN as it's already appended to S_LOGIN_REDIRECT
|
||||
$template->assign_var('S_FORM_TOKEN_LOGIN', '');
|
||||
}
|
||||
|
||||
// The following assigns all _common_ variables that may be used at any point in a template.
|
||||
$template->assign_vars(array(
|
||||
'SITENAME' => $config['sitename'],
|
||||
@@ -4477,7 +4538,7 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
'S_TOPIC_ID' => $topic_id,
|
||||
|
||||
'S_LOGIN_ACTION' => ((!defined('ADMIN_START')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login') : append_sid("{$phpbb_admin_path}index.$phpEx", false, true, $user->session_id)),
|
||||
'S_LOGIN_REDIRECT' => build_hidden_fields(array('redirect' => $phpbb_path_helper->remove_web_root_path(build_url()))),
|
||||
'S_LOGIN_REDIRECT' => $s_login_redirect,
|
||||
|
||||
'S_ENABLE_FEEDS' => ($config['feed_enable']) ? true : false,
|
||||
'S_ENABLE_FEEDS_OVERALL' => ($config['feed_overall']) ? true : false,
|
||||
@@ -4528,12 +4589,13 @@ function page_header($page_title = '', $display_online_list = false, $item_id =
|
||||
|
||||
if ($send_headers)
|
||||
{
|
||||
// An array of http headers that phpbb will set. The following event may override these.
|
||||
// An array of http headers that phpBB will set. The following event may override these.
|
||||
$http_headers += array(
|
||||
// application/xhtml+xml not used because of IE
|
||||
'Content-type' => 'text/html; charset=UTF-8',
|
||||
'Cache-Control' => 'private, no-cache="set-cookie"',
|
||||
'Expires' => gmdate('D, d M Y H:i:s', time()) . ' GMT',
|
||||
'Referrer-Policy' => 'strict-origin-when-cross-origin',
|
||||
);
|
||||
if (!empty($user->data['is_bot']))
|
||||
{
|
||||
|
@@ -112,12 +112,13 @@ function adm_page_header($page_title)
|
||||
'CONTAINER_EXCEPTION' => $phpbb_container->hasParameter('container_exception') ? $phpbb_container->getParameter('container_exception') : false,
|
||||
));
|
||||
|
||||
// An array of http headers that phpbb will set. The following event may override these.
|
||||
// An array of http headers that phpBB will set. The following event may override these.
|
||||
$http_headers = array(
|
||||
// application/xhtml+xml not used because of IE
|
||||
'Content-type' => 'text/html; charset=UTF-8',
|
||||
'Cache-Control' => 'private, no-cache="set-cookie"',
|
||||
'Expires' => gmdate('D, d M Y H:i:s', time()) . ' GMT',
|
||||
'Referrer-Policy' => 'strict-origin-when-cross-origin',
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -419,7 +420,7 @@ function build_cfg_template($tpl_type, $key, &$new_ary, $config_key, $vars)
|
||||
*/
|
||||
function validate_config_vars($config_vars, &$cfg_array, &$error)
|
||||
{
|
||||
global $phpbb_root_path, $user, $phpbb_dispatcher, $phpbb_filesystem;
|
||||
global $phpbb_root_path, $user, $phpbb_dispatcher, $phpbb_filesystem, $language;
|
||||
|
||||
$type = 0;
|
||||
$min = 1;
|
||||
@@ -442,6 +443,16 @@ function validate_config_vars($config_vars, &$cfg_array, &$error)
|
||||
// Validate a bit. ;) (0 = type, 1 = min, 2= max)
|
||||
switch ($validator[$type])
|
||||
{
|
||||
case 'url':
|
||||
$cfg_array[$config_name] = trim($cfg_array[$config_name]);
|
||||
|
||||
if (!empty($cfg_array[$config_name]) && !preg_match('#^' . get_preg_expression('url') . '$#iu', $cfg_array[$config_name]))
|
||||
{
|
||||
$error[] = $language->lang('URL_INVALID', $language->lang($config_definition['lang']));
|
||||
}
|
||||
|
||||
// no break here
|
||||
|
||||
case 'string':
|
||||
$length = utf8_strlen($cfg_array[$config_name]);
|
||||
|
||||
|
@@ -3042,6 +3042,8 @@ function tidy_database()
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$db->sql_transaction('begin');
|
||||
|
||||
// Delete those rows from the acl tables not having listed the forums above
|
||||
$sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('forum_id', $forum_ids, true);
|
||||
@@ -3051,6 +3053,8 @@ function tidy_database()
|
||||
WHERE ' . $db->sql_in_set('forum_id', $forum_ids, true);
|
||||
$db->sql_query($sql);
|
||||
|
||||
$db->sql_transaction('commit');
|
||||
|
||||
$config->set('database_last_gc', time(), false);
|
||||
}
|
||||
|
||||
|
@@ -391,7 +391,7 @@ function request_var($var_name, $default, $multibyte = false, $cookie = false, $
|
||||
*
|
||||
* @deprecated 3.1.0 (To be removed: 3.3.0)
|
||||
*/
|
||||
function get_tables(&$db)
|
||||
function get_tables($db)
|
||||
{
|
||||
$db_tools_factory = new \phpbb\db\tools\factory();
|
||||
$db_tools = $db_tools_factory->get($db);
|
||||
|
@@ -1482,6 +1482,8 @@ function truncate_string($string, $max_length = 60, $max_store_length = 255, $al
|
||||
* Get username details for placing into templates.
|
||||
* This function caches all modes on first call, except for no_profile and anonymous user - determined by $user_id.
|
||||
*
|
||||
* @html Username spans and links
|
||||
*
|
||||
* @param string $mode Can be profile (for getting an url to the profile), username (for obtaining the username), colour (for obtaining the user colour), full (for obtaining a html string representing a coloured link to the users profile) or no_profile (the same as full but forcing no profile link)
|
||||
* @param int $user_id The users id
|
||||
* @param string $username The users name
|
||||
@@ -1501,6 +1503,7 @@ function get_username_string($mode, $user_id, $username, $username_colour = '',
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
/** @html Username spans and links for usage in the template */
|
||||
$_profile_cache['base_url'] = append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u={USER_ID}');
|
||||
$_profile_cache['tpl_noprofile'] = '<span class="username">{USERNAME}</span>';
|
||||
$_profile_cache['tpl_noprofile_colour'] = '<span style="color: {USERNAME_COLOUR};" class="username-coloured">{USERNAME}</span>';
|
||||
|
@@ -196,7 +196,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
|
||||
}
|
||||
|
||||
// Now the tricky part... let's dance
|
||||
header('Cache-Control: public');
|
||||
header('Cache-Control: private');
|
||||
|
||||
// Send out the Headers. Do not set Content-Disposition to inline please, it is a security measure for users using the Internet Explorer.
|
||||
header('Content-Type: ' . $attachment['mimetype']);
|
||||
@@ -451,7 +451,7 @@ function set_modified_headers($stamp, $browser)
|
||||
{
|
||||
send_status_line(304, 'Not Modified');
|
||||
// seems that we need those too ... browsers
|
||||
header('Cache-Control: public');
|
||||
header('Cache-Control: private');
|
||||
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 31536000) . ' GMT');
|
||||
return true;
|
||||
}
|
||||
|
@@ -22,12 +22,12 @@ if (!defined('IN_PHPBB'))
|
||||
/**
|
||||
* Functions used to generate additional URL paramters
|
||||
*/
|
||||
function phpbb_module__url($mode, &$module_row)
|
||||
function phpbb_module__url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_notes_url($mode, &$module_row)
|
||||
function phpbb_module_notes_url($mode, $module_row)
|
||||
{
|
||||
if ($mode == 'front')
|
||||
{
|
||||
@@ -38,7 +38,7 @@ function phpbb_module_notes_url($mode, &$module_row)
|
||||
return ($user_id) ? "&u=$user_id" : '';
|
||||
}
|
||||
|
||||
function phpbb_module_warn_url($mode, &$module_row)
|
||||
function phpbb_module_warn_url($mode, $module_row)
|
||||
{
|
||||
if ($mode == 'front' || $mode == 'list')
|
||||
{
|
||||
@@ -64,27 +64,27 @@ function phpbb_module_warn_url($mode, &$module_row)
|
||||
}
|
||||
}
|
||||
|
||||
function phpbb_module_main_url($mode, &$module_row)
|
||||
function phpbb_module_main_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_logs_url($mode, &$module_row)
|
||||
function phpbb_module_logs_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_ban_url($mode, &$module_row)
|
||||
function phpbb_module_ban_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_queue_url($mode, &$module_row)
|
||||
function phpbb_module_queue_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
||||
function phpbb_module_reports_url($mode, &$module_row)
|
||||
function phpbb_module_reports_url($mode, $module_row)
|
||||
{
|
||||
return phpbb_extra_url();
|
||||
}
|
||||
|
@@ -181,10 +181,9 @@ class messenger
|
||||
/**
|
||||
* Adds X-AntiAbuse headers
|
||||
*
|
||||
* @param array $config Configuration array
|
||||
* @param user $user A user object
|
||||
*
|
||||
* @return null
|
||||
* @param \phpbb\config\config $config Config object
|
||||
* @param \phpbb\user $user User object
|
||||
* @return void
|
||||
*/
|
||||
function anti_abuse_headers($config, $user)
|
||||
{
|
||||
@@ -1582,6 +1581,14 @@ class smtp_class
|
||||
*/
|
||||
protected function starttls()
|
||||
{
|
||||
global $config;
|
||||
|
||||
// allow SMTPS (what was used by phpBB 3.0) if hostname is prefixed with tls:// or ssl://
|
||||
if (strpos($config['smtp_host'], 'tls://') === 0 || strpos($config['smtp_host'], 'ssl://') === 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!function_exists('stream_socket_enable_crypto'))
|
||||
{
|
||||
return false;
|
||||
@@ -1604,7 +1611,9 @@ class smtp_class
|
||||
|
||||
if (socket_set_blocking($this->socket, 1))
|
||||
{
|
||||
$result = stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
|
||||
// https://secure.php.net/manual/en/function.stream-socket-enable-crypto.php#119122
|
||||
$crypto = (phpbb_version_compare(PHP_VERSION, '5.6.7', '<')) ? STREAM_CRYPTO_METHOD_TLS_CLIENT : STREAM_CRYPTO_METHOD_SSLv23_CLIENT;
|
||||
$result = stream_socket_enable_crypto($this->socket, true, $crypto);
|
||||
socket_set_blocking($this->socket, (int) $stream_meta['blocked']);
|
||||
}
|
||||
|
||||
|
@@ -202,11 +202,13 @@ function update_post_information($type, $ids, $return_update_sql = false)
|
||||
|
||||
if (count($ids) == 1)
|
||||
{
|
||||
$sql = 'SELECT MAX(p.post_id) as last_post_id
|
||||
$sql = 'SELECT p.post_id as last_post_id
|
||||
FROM ' . POSTS_TABLE . " p $topic_join
|
||||
WHERE " . $db->sql_in_set('p.' . $type . '_id', $ids) . "
|
||||
$topic_condition
|
||||
AND p.post_visibility = " . ITEM_APPROVED;
|
||||
AND p.post_visibility = " . ITEM_APPROVED . "
|
||||
ORDER BY p.post_id DESC";
|
||||
$result = $db->sql_query_limit($sql, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -216,8 +218,8 @@ function update_post_information($type, $ids, $return_update_sql = false)
|
||||
$topic_condition
|
||||
AND p.post_visibility = " . ITEM_APPROVED . "
|
||||
GROUP BY p.{$type}_id";
|
||||
$result = $db->sql_query($sql);
|
||||
}
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$last_post_ids = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
@@ -976,6 +978,30 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id
|
||||
AND u.user_id = p.poster_id',
|
||||
);
|
||||
|
||||
/**
|
||||
* Event to modify the SQL query for topic reviews
|
||||
*
|
||||
* @event core.topic_review_modify_sql_ary
|
||||
* @var int topic_id The topic ID that is being reviewed
|
||||
* @var int forum_id The topic's forum ID
|
||||
* @var string mode The topic review mode
|
||||
* @var int cur_post_id Post offset ID
|
||||
* @var bool show_quote_button Flag indicating if the quote button should be displayed
|
||||
* @var array post_list Array with the post IDs
|
||||
* @var array sql_ary Array with the SQL query
|
||||
* @since 3.2.8-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'topic_id',
|
||||
'forum_id',
|
||||
'mode',
|
||||
'cur_post_id',
|
||||
'show_quote_button',
|
||||
'post_list',
|
||||
'sql_ary',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.topic_review_modify_sql_ary', compact($vars)));
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_ary);
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
@@ -1282,6 +1308,7 @@ function delete_post($forum_id, $topic_id, $post_id, &$data, $is_soft = false, $
|
||||
delete_topics('topic_id', array($topic_id), false);
|
||||
|
||||
$phpbb_content_visibility->remove_topic_from_statistic($data, $sql_data);
|
||||
$config->increment('num_posts', -1, false);
|
||||
|
||||
$update_sql = update_post_information('forum', $forum_id, true);
|
||||
if (count($update_sql))
|
||||
@@ -2052,6 +2079,11 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll_ary, &$data
|
||||
continue;
|
||||
}
|
||||
|
||||
if (preg_match('/[\x{10000}-\x{10FFFF}]/u', $attach_row['attach_comment']))
|
||||
{
|
||||
trigger_error('ATTACH_COMMENT_NO_EMOJIS');
|
||||
}
|
||||
|
||||
if (!$attach_row['is_orphan'])
|
||||
{
|
||||
// update entry in db if attachment already stored in db and filespace
|
||||
|
@@ -490,7 +490,7 @@ function place_pm_into_folder(&$global_privmsgs_rules, $release = false)
|
||||
'bcc' => explode(':', $row['bcc_address']),
|
||||
'friend' => (isset($zebra[$row['author_id']])) ? $zebra[$row['author_id']]['friend'] : 0,
|
||||
'foe' => (isset($zebra[$row['author_id']])) ? $zebra[$row['author_id']]['foe'] : 0,
|
||||
'user_in_group' => array($user->data['group_id']),
|
||||
'user_in_group' => $user->data['group_id'],
|
||||
'author_in_group' => array())
|
||||
);
|
||||
|
||||
@@ -1966,7 +1966,7 @@ function submit_pm($mode, $subject, &$data_ary, $put_in_outbox = true)
|
||||
*/
|
||||
function message_history($msg_id, $user_id, $message_row, $folder, $in_post_mode = false)
|
||||
{
|
||||
global $db, $user, $template, $phpbb_root_path, $phpEx, $auth;
|
||||
global $db, $user, $template, $phpbb_root_path, $phpEx, $auth, $phpbb_dispatcher;
|
||||
|
||||
// Select all receipts and the author from the pm we currently view, to only display their pm-history
|
||||
$sql = 'SELECT author_id, user_id
|
||||
@@ -1985,9 +1985,7 @@ function message_history($msg_id, $user_id, $message_row, $folder, $in_post_mode
|
||||
$recipients = array_unique($recipients);
|
||||
|
||||
// Get History Messages (could be newer)
|
||||
$sql = 'SELECT t.*, p.*, u.*
|
||||
FROM ' . PRIVMSGS_TABLE . ' p, ' . PRIVMSGS_TO_TABLE . ' t, ' . USERS_TABLE . ' u
|
||||
WHERE t.msg_id = p.msg_id
|
||||
$sql_where = 't.msg_id = p.msg_id
|
||||
AND p.author_id = u.user_id
|
||||
AND t.folder_id NOT IN (' . PRIVMSGS_NO_BOX . ', ' . PRIVMSGS_HOLD_BOX . ')
|
||||
AND ' . $db->sql_in_set('t.author_id', $recipients, false, true) . "
|
||||
@@ -1998,13 +1996,37 @@ function message_history($msg_id, $user_id, $message_row, $folder, $in_post_mode
|
||||
|
||||
if (!$message_row['root_level'])
|
||||
{
|
||||
$sql .= " AND (p.root_level = $msg_id OR (p.root_level = 0 AND p.msg_id = $msg_id))";
|
||||
$sql_where .= " AND (p.root_level = $msg_id OR (p.root_level = 0 AND p.msg_id = $msg_id))";
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql .= " AND (p.root_level = " . $message_row['root_level'] . ' OR p.msg_id = ' . $message_row['root_level'] . ')';
|
||||
$sql_where .= " AND (p.root_level = " . $message_row['root_level'] . ' OR p.msg_id = ' . $message_row['root_level'] . ')';
|
||||
}
|
||||
$sql .= ' ORDER BY p.message_time DESC';
|
||||
|
||||
$sql_ary = array(
|
||||
'SELECT' => 't.*, p.*, u.*',
|
||||
'FROM' => array(
|
||||
PRIVMSGS_TABLE => 'p',
|
||||
PRIVMSGS_TO_TABLE => 't',
|
||||
USERS_TABLE => 'u'
|
||||
),
|
||||
'LEFT_JOIN' => array(),
|
||||
'WHERE' => $sql_where,
|
||||
'ORDER_BY' => 'p.message_time DESC',
|
||||
);
|
||||
|
||||
/**
|
||||
* Event to modify the SQL query before the message history in private message is queried
|
||||
*
|
||||
* @event core.message_history_modify_sql_ary
|
||||
* @var array sql_ary The SQL array to get the data of the message history in private message
|
||||
* @since 3.2.8-RC1
|
||||
*/
|
||||
$vars = array('sql_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.message_history_modify_sql_ary', compact($vars)));
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_ary);
|
||||
unset($sql_ary);
|
||||
|
||||
$result = $db->sql_query($sql);
|
||||
$row = $db->sql_fetchrow($result);
|
||||
@@ -2087,7 +2109,7 @@ function message_history($msg_id, $user_id, $message_row, $folder, $in_post_mode
|
||||
$previous_history_pm = $prev_id;
|
||||
}
|
||||
|
||||
$template->assign_block_vars('history_row', array(
|
||||
$template_vars = array(
|
||||
'MESSAGE_AUTHOR_QUOTE' => (($decoded_message) ? addslashes(get_username_string('username', $author_id, $row['username'], $row['user_colour'], $row['username'])) : ''),
|
||||
'MESSAGE_AUTHOR_FULL' => get_username_string('full', $author_id, $row['username'], $row['user_colour'], $row['username']),
|
||||
'MESSAGE_AUTHOR_COLOUR' => get_username_string('colour', $author_id, $row['username'], $row['user_colour'], $row['username']),
|
||||
@@ -2109,8 +2131,25 @@ function message_history($msg_id, $user_id, $message_row, $folder, $in_post_mode
|
||||
'USER_ID' => $row['user_id'],
|
||||
'U_VIEW_MESSAGE' => "$url&f=$folder_id&p=" . $row['msg_id'],
|
||||
'U_QUOTE' => (!$in_post_mode && $auth->acl_get('u_sendpm') && $author_id != ANONYMOUS) ? "$url&mode=compose&action=quote&f=" . $folder_id . "&p=" . $row['msg_id'] : '',
|
||||
'U_POST_REPLY_PM' => ($author_id != $user->data['user_id'] && $author_id != ANONYMOUS && $auth->acl_get('u_sendpm')) ? "$url&mode=compose&action=reply&f=$folder_id&p=" . $row['msg_id'] : '')
|
||||
'U_POST_REPLY_PM' => ($author_id != $user->data['user_id'] && $author_id != ANONYMOUS && $auth->acl_get('u_sendpm')) ? "$url&mode=compose&action=reply&f=$folder_id&p=" . $row['msg_id'] : ''
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify the template vars for displaying the message history in private message
|
||||
*
|
||||
* @event core.message_history_modify_template_vars
|
||||
* @var array template_vars Array containing the query
|
||||
* @var array row Array containing the action user row
|
||||
* @since 3.2.8-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'template_vars',
|
||||
'row',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.message_history_modify_template_vars', compact($vars)));
|
||||
|
||||
$template->assign_block_vars('history_row', $template_vars);
|
||||
|
||||
unset($rowset[$i]);
|
||||
$prev_id = $id;
|
||||
}
|
||||
|
@@ -26,8 +26,10 @@ if (!defined('IN_PHPBB'))
|
||||
* @param array &$user_id_ary The user ids to check or empty if usernames used
|
||||
* @param array &$username_ary The usernames to check or empty if user ids used
|
||||
* @param mixed $user_type Array of user types to check, false if not restricting by user type
|
||||
* @param boolean $update_references If false, the supplied array is unset and appears unchanged from where it was called
|
||||
* @return boolean|string Returns false on success, error string on failure
|
||||
*/
|
||||
function user_get_id_name(&$user_id_ary, &$username_ary, $user_type = false)
|
||||
function user_get_id_name(&$user_id_ary, &$username_ary, $user_type = false, $update_references = false)
|
||||
{
|
||||
global $db;
|
||||
|
||||
@@ -50,7 +52,13 @@ function user_get_id_name(&$user_id_ary, &$username_ary, $user_type = false)
|
||||
}
|
||||
|
||||
$sql_in = ($which_ary == 'user_id_ary') ? array_map('intval', ${$which_ary}) : array_map('utf8_clean_string', ${$which_ary});
|
||||
unset(${$which_ary});
|
||||
|
||||
// By unsetting the array here, the values passed in at the point user_get_id_name() was called will be retained.
|
||||
// Otherwise, if we don't unset (as the array was passed by reference) the original array will be updated below.
|
||||
if ($update_references === false)
|
||||
{
|
||||
unset(${$which_ary});
|
||||
}
|
||||
|
||||
$user_id_ary = $username_ary = array();
|
||||
|
||||
@@ -684,7 +692,8 @@ function user_delete($mode, $user_ids, $retain_username = true)
|
||||
PRIVMSGS_RULES_TABLE,
|
||||
$phpbb_container->getParameter('tables.auth_provider_oauth_token_storage'),
|
||||
$phpbb_container->getParameter('tables.auth_provider_oauth_states'),
|
||||
$phpbb_container->getParameter('tables.auth_provider_oauth_account_assoc')
|
||||
$phpbb_container->getParameter('tables.auth_provider_oauth_account_assoc'),
|
||||
$phpbb_container->getParameter('tables.user_notifications')
|
||||
];
|
||||
|
||||
// Ignore errors on deleting from non-existent tables, e.g. when migrating
|
||||
@@ -1709,17 +1718,21 @@ function phpbb_validate_timezone($timezone)
|
||||
return (in_array($timezone, phpbb_get_timezone_identifiers($timezone))) ? false : 'TIMEZONE_INVALID';
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if the username has been taken, or if it is disallowed.
|
||||
* Also checks if it includes the " character, which we don't allow in usernames.
|
||||
* Used for registering, changing names, and posting anonymously with a username
|
||||
*
|
||||
* @param string $username The username to check
|
||||
* @param string $allowed_username An allowed username, default being $user->data['username']
|
||||
*
|
||||
* @return mixed Either false if validation succeeded or a string which will be used as the error message (with the variable name appended)
|
||||
*/
|
||||
function validate_username($username, $allowed_username = false)
|
||||
/***
|
||||
* Validate Username
|
||||
*
|
||||
* Check to see if the username has been taken, or if it is disallowed.
|
||||
* Also checks if it includes the " character or the 4-bytes Unicode ones
|
||||
* (aka emojis) which we don't allow in usernames.
|
||||
* Used for registering, changing names, and posting anonymously with a username
|
||||
*
|
||||
* @param string $username The username to check
|
||||
* @param string $allowed_username An allowed username, default being $user->data['username']
|
||||
*
|
||||
* @return mixed Either false if validation succeeded or a string which will be
|
||||
* used as the error message (with the variable name appended)
|
||||
*/
|
||||
function validate_username($username, $allowed_username = false, $allow_all_names = false)
|
||||
{
|
||||
global $config, $db, $user, $cache;
|
||||
|
||||
@@ -1731,6 +1744,14 @@ function validate_username($username, $allowed_username = false)
|
||||
return false;
|
||||
}
|
||||
|
||||
// The very first check is for
|
||||
// out-of-bounds characters that are currently
|
||||
// not supported by utf8_bin in MySQL
|
||||
if (preg_match('/[\x{10000}-\x{10FFFF}]/u', $username))
|
||||
{
|
||||
return 'INVALID_EMOJIS';
|
||||
}
|
||||
|
||||
// ... fast checks first.
|
||||
if (strpos($username, '"') !== false || strpos($username, '"') !== false || empty($clean_username))
|
||||
{
|
||||
@@ -1794,13 +1815,16 @@ function validate_username($username, $allowed_username = false)
|
||||
return 'USERNAME_TAKEN';
|
||||
}
|
||||
|
||||
$bad_usernames = $cache->obtain_disallowed_usernames();
|
||||
|
||||
foreach ($bad_usernames as $bad_username)
|
||||
if (!$allow_all_names)
|
||||
{
|
||||
if (preg_match('#^' . $bad_username . '$#', $clean_username))
|
||||
$bad_usernames = $cache->obtain_disallowed_usernames();
|
||||
|
||||
foreach ($bad_usernames as $bad_username)
|
||||
{
|
||||
return 'USERNAME_DISALLOWED';
|
||||
if (preg_match('#^' . $bad_username . '$#', $clean_username))
|
||||
{
|
||||
return 'USERNAME_DISALLOWED';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1921,9 +1945,9 @@ function validate_user_email($email, $allowed_email = false)
|
||||
return $validate_email;
|
||||
}
|
||||
|
||||
if (($ban_reason = $user->check_ban(false, false, $email, true)) !== false)
|
||||
if (($ban = $user->check_ban(false, false, $email, true)) !== false)
|
||||
{
|
||||
return ($ban_reason === true) ? 'EMAIL_BANNED' : $ban_reason;
|
||||
return ($ban === true) ? 'EMAIL_BANNED' : (!empty($ban['ban_give_reason']) ? $ban['ban_give_reason'] : $ban);
|
||||
}
|
||||
|
||||
if (!$config['allow_emailreuse'])
|
||||
@@ -2698,6 +2722,13 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false,
|
||||
return 'NO_USER';
|
||||
}
|
||||
|
||||
// Because the item that gets passed into the previous function is unset, the reference is lost and our original
|
||||
// array is retained - so we know there's a problem if there's a different number of ids to usernames now.
|
||||
if (count($user_id_ary) != count($username_ary))
|
||||
{
|
||||
return 'GROUP_USERS_INVALID';
|
||||
}
|
||||
|
||||
// Remove users who are already members of this group
|
||||
$sql = 'SELECT user_id, group_leader
|
||||
FROM ' . USER_GROUP_TABLE . '
|
||||
|
@@ -34,7 +34,10 @@ class mcp_ban
|
||||
}
|
||||
|
||||
// Include the admin banning interface...
|
||||
include($phpbb_root_path . 'includes/acp/acp_ban.' . $phpEx);
|
||||
if (!class_exists('acp_ban'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/acp/acp_ban.' . $phpEx);
|
||||
}
|
||||
|
||||
$bansubmit = $request->is_set_post('bansubmit');
|
||||
$unbansubmit = $request->is_set_post('unbansubmit');
|
||||
@@ -266,7 +269,7 @@ class mcp_ban
|
||||
}
|
||||
else if ($post_id)
|
||||
{
|
||||
$post_info = phpbb_get_post_data($post_id, 'm_ban');
|
||||
$post_info = phpbb_get_post_data(array($post_id), 'm_ban');
|
||||
|
||||
if (count($post_info) && !empty($post_info[$post_id]))
|
||||
{
|
||||
|
@@ -290,7 +290,10 @@ function mcp_front_view($id, $mode, $action)
|
||||
|
||||
if ($total)
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
|
||||
if (!function_exists('get_recipient_strings'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
|
||||
}
|
||||
|
||||
$sql_ary = array(
|
||||
'SELECT' => 'r.report_id, r.report_time, p.msg_id, p.message_subject, p.message_time, p.to_address, p.bcc_address, p.message_attachment, u.username, u.username_clean, u.user_colour, u.user_id, u2.username as author_name, u2.username_clean as author_name_clean, u2.user_colour as author_colour, u2.user_id as author_id',
|
||||
|
@@ -28,9 +28,9 @@ class mcp_logs
|
||||
var $u_action;
|
||||
var $p_master;
|
||||
|
||||
function __construct(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -28,9 +28,9 @@ class mcp_main
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function __construct(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
@@ -41,6 +41,22 @@ class mcp_main
|
||||
|
||||
$quickmod = ($mode == 'quickmod') ? true : false;
|
||||
|
||||
/**
|
||||
* Event to perform additional actions before an MCP action is executed.
|
||||
*
|
||||
* @event core.mcp_main_before
|
||||
* @var string action The action that is about to be performed
|
||||
* @var string mode The mode in which the MCP is accessed, e.g. front, forum_view, topic_view, post_details, quickmod
|
||||
* @var boolean quickmod Whether or not the action is performed via QuickMod
|
||||
* @since 3.2.8-RC1
|
||||
*/
|
||||
$vars = [
|
||||
'action',
|
||||
'mode',
|
||||
'quickmod',
|
||||
];
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_main_before', compact($vars)));
|
||||
|
||||
switch ($action)
|
||||
{
|
||||
case 'lock':
|
||||
@@ -174,7 +190,10 @@ class mcp_main
|
||||
switch ($mode)
|
||||
{
|
||||
case 'front':
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_front.' . $phpEx);
|
||||
if (!function_exists('mcp_front_view'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_front.' . $phpEx);
|
||||
}
|
||||
|
||||
$user->add_lang('acp/common');
|
||||
|
||||
@@ -185,7 +204,10 @@ class mcp_main
|
||||
break;
|
||||
|
||||
case 'forum_view':
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_forum.' . $phpEx);
|
||||
if (!function_exists('mcp_forum_view'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_forum.' . $phpEx);
|
||||
}
|
||||
|
||||
$user->add_lang('viewforum');
|
||||
|
||||
@@ -208,7 +230,10 @@ class mcp_main
|
||||
break;
|
||||
|
||||
case 'topic_view':
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_topic.' . $phpEx);
|
||||
if (!function_exists('mcp_topic_view'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_topic.' . $phpEx);
|
||||
}
|
||||
|
||||
mcp_topic_view($id, $mode, $action);
|
||||
|
||||
@@ -217,7 +242,10 @@ class mcp_main
|
||||
break;
|
||||
|
||||
case 'post_details':
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_post.' . $phpEx);
|
||||
if (!function_exists('mcp_post_details'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_post.' . $phpEx);
|
||||
}
|
||||
|
||||
mcp_post_details($id, $mode, $action);
|
||||
|
||||
@@ -366,7 +394,7 @@ function lock_unlock($action, $ids)
|
||||
*/
|
||||
function change_topic_type($action, $topic_ids)
|
||||
{
|
||||
global $user, $db, $request, $phpbb_log;
|
||||
global $user, $db, $request, $phpbb_log, $phpbb_dispatcher;
|
||||
|
||||
switch ($action)
|
||||
{
|
||||
@@ -414,6 +442,25 @@ function change_topic_type($action, $topic_ids)
|
||||
|
||||
if (confirm_box(true))
|
||||
{
|
||||
|
||||
/**
|
||||
* Perform additional actions before changing topic(s) type
|
||||
*
|
||||
* @event core.mcp_change_topic_type_before
|
||||
* @var int new_topic_type The candidated topic type.
|
||||
* @var int forum_id The forum ID for the topic ID(s).
|
||||
* @var array topic_ids Array containing the topic ID(s) that will be changed
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'new_topic_type',
|
||||
'forum_id',
|
||||
'topic_ids',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_change_topic_type_before', compact($vars)));
|
||||
|
||||
$db->sql_transaction('begin');
|
||||
|
||||
$sql = 'UPDATE ' . TOPICS_TABLE . "
|
||||
SET topic_type = $new_topic_type
|
||||
WHERE " . $db->sql_in_set('topic_id', $topic_ids);
|
||||
@@ -425,13 +472,10 @@ function change_topic_type($action, $topic_ids)
|
||||
$sql = 'DELETE FROM ' . TOPICS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('topic_moved_id', $topic_ids);
|
||||
$db->sql_query($sql);
|
||||
|
||||
$sql = 'UPDATE ' . TOPICS_TABLE . "
|
||||
SET topic_type = $new_topic_type
|
||||
WHERE " . $db->sql_in_set('topic_id', $topic_ids);
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
|
||||
$db->sql_transaction('commit');
|
||||
|
||||
$success_msg = (count($topic_ids) == 1) ? 'TOPIC_TYPE_CHANGED' : 'TOPICS_TYPE_CHANGED';
|
||||
|
||||
if (count($topic_ids))
|
||||
@@ -448,6 +492,22 @@ function change_topic_type($action, $topic_ids)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform additional actions after changing topic types
|
||||
*
|
||||
* @event core.mcp_change_topic_type_after
|
||||
* @var int new_topic_type The newly changed topic type.
|
||||
* @var int forum_id The forum ID where the newly changed topic type belongs to.
|
||||
* @var array topic_ids Array containing the topic IDs that have been changed
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'new_topic_type',
|
||||
'forum_id',
|
||||
'topic_ids',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_change_topic_type_after', compact($vars)));
|
||||
|
||||
meta_refresh(2, $redirect);
|
||||
$message = $user->lang[$success_msg];
|
||||
|
||||
@@ -930,10 +990,11 @@ function mcp_delete_topic($topic_ids, $is_soft = false, $soft_delete_reason = ''
|
||||
'DELETE_TOPIC_PERMANENTLY_EXPLAIN' => $user->lang('DELETE_TOPIC_PERMANENTLY', count($topic_ids)),
|
||||
));
|
||||
|
||||
$l_confirm = (count($topic_ids) == 1) ? 'DELETE_TOPIC' : 'DELETE_TOPICS';
|
||||
$count = count($topic_ids);
|
||||
$l_confirm = $count === 1 ? 'DELETE_TOPIC' : 'DELETE_TOPICS';
|
||||
if ($only_softdeleted)
|
||||
{
|
||||
$l_confirm .= '_PERMANENTLY';
|
||||
$l_confirm = array($l_confirm . '_PERMANENTLY', $count);
|
||||
$s_hidden_fields['delete_permanent'] = '1';
|
||||
}
|
||||
else if ($only_shadow || !$auth->acl_get('m_softdelete', $forum_id))
|
||||
@@ -1184,10 +1245,11 @@ function mcp_delete_post($post_ids, $is_soft = false, $soft_delete_reason = '',
|
||||
'DELETE_POST_PERMANENTLY_EXPLAIN' => $user->lang('DELETE_POST_PERMANENTLY', count($post_ids)),
|
||||
));
|
||||
|
||||
$l_confirm = (count($post_ids) == 1) ? 'DELETE_POST' : 'DELETE_POSTS';
|
||||
$count = count($post_ids);
|
||||
$l_confirm = $count === 1 ? 'DELETE_POST' : 'DELETE_POSTS';
|
||||
if ($only_softdeleted)
|
||||
{
|
||||
$l_confirm .= '_PERMANENTLY';
|
||||
$l_confirm = array($l_confirm . '_PERMANENTLY', $count);
|
||||
$s_hidden_fields['delete_permanent'] = '1';
|
||||
}
|
||||
else if (!$auth->acl_get('m_softdelete', $forum_id))
|
||||
|
@@ -28,9 +28,9 @@ class mcp_notes
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function __construct(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -28,9 +28,9 @@ class mcp_pm_reports
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function __construct(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -28,9 +28,9 @@ class mcp_queue
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
public function __construct(&$p_master)
|
||||
public function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
public function main($id, $mode)
|
||||
|
@@ -28,9 +28,9 @@ class mcp_reports
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function __construct(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -93,7 +93,11 @@ function mcp_topic_view($id, $mode, $action)
|
||||
// Restore or pprove posts?
|
||||
if (($action == 'restore' || $action == 'approve') && $auth->acl_get('m_approve', $topic_info['forum_id']))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_queue.' . $phpEx);
|
||||
if (!class_exists('mcp_queue'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/mcp/mcp_queue.' . $phpEx);
|
||||
}
|
||||
|
||||
include_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
|
||||
|
||||
@@ -138,14 +142,36 @@ function mcp_topic_view($id, $mode, $action)
|
||||
}
|
||||
$start = $pagination->validate_start($start, $posts_per_page, $total);
|
||||
|
||||
$sql = 'SELECT u.username, u.username_clean, u.user_colour, p.*
|
||||
FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u
|
||||
WHERE ' . (($action == 'reports') ? 'p.post_reported = 1 AND ' : '') . '
|
||||
$sql_where = (($action == 'reports') ? 'p.post_reported = 1 AND ' : '') . '
|
||||
p.topic_id = ' . $topic_id . '
|
||||
AND ' . $phpbb_content_visibility->get_visibility_sql('post', $topic_info['forum_id'], 'p.') . '
|
||||
AND p.poster_id = u.user_id ' .
|
||||
$limit_time_sql . '
|
||||
ORDER BY ' . $sort_order_sql;
|
||||
$limit_time_sql;
|
||||
|
||||
$sql_ary = array(
|
||||
'SELECT' => 'u.username, u.username_clean, u.user_colour, p.*',
|
||||
'FROM' => array(
|
||||
POSTS_TABLE => 'p',
|
||||
USERS_TABLE => 'u'
|
||||
),
|
||||
'LEFT_JOIN' => array(),
|
||||
'WHERE' => $sql_where,
|
||||
'ORDER_BY' => $sort_order_sql,
|
||||
);
|
||||
|
||||
/**
|
||||
* Event to modify the SQL query before the MCP topic review posts is queried
|
||||
*
|
||||
* @event core.mcp_topic_modify_sql_ary
|
||||
* @var array sql_ary The SQL array to get the data of the MCP topic review posts
|
||||
* @since 3.2.8-RC1
|
||||
*/
|
||||
$vars = array('sql_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.mcp_topic_modify_sql_ary', compact($vars)));
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_ary);
|
||||
unset($sql_ary);
|
||||
|
||||
$result = $db->sql_query_limit($sql, $posts_per_page, $start);
|
||||
|
||||
$rowset = $post_id_list = array();
|
||||
|
@@ -28,9 +28,9 @@ class mcp_warn
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function __construct(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
|
@@ -1587,6 +1587,16 @@ class parse_message extends bbcode_firstpass
|
||||
'poster_id' => $user->data['user_id'],
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify attachment sql array on submit
|
||||
*
|
||||
* @event core.modify_attachment_sql_ary_on_submit
|
||||
* @var array sql_ary Array containing SQL data
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array('sql_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_attachment_sql_ary_on_submit', compact($vars)));
|
||||
|
||||
$db->sql_query('INSERT INTO ' . ATTACHMENTS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
|
||||
|
||||
$new_entry = array(
|
||||
@@ -1722,6 +1732,16 @@ class parse_message extends bbcode_firstpass
|
||||
'poster_id' => $user->data['user_id'],
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify attachment sql array on upload
|
||||
*
|
||||
* @event core.modify_attachment_sql_ary_on_upload
|
||||
* @var array sql_ary Array containing SQL data
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array('sql_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_attachment_sql_ary_on_upload', compact($vars)));
|
||||
|
||||
$db->sql_query('INSERT INTO ' . ATTACHMENTS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
|
||||
|
||||
$new_entry = array(
|
||||
|
@@ -29,7 +29,7 @@ class ucp_attachments
|
||||
|
||||
function main($id, $mode)
|
||||
{
|
||||
global $template, $user, $db, $config, $phpEx, $phpbb_root_path, $phpbb_container, $request;
|
||||
global $template, $user, $db, $config, $phpEx, $phpbb_root_path, $phpbb_container, $request, $auth;
|
||||
|
||||
$start = $request->variable('start', 0);
|
||||
$sort_key = $request->variable('sk', 'a');
|
||||
@@ -41,16 +41,27 @@ class ucp_attachments
|
||||
if ($delete && count($delete_ids))
|
||||
{
|
||||
// Validate $delete_ids...
|
||||
$sql = 'SELECT attach_id
|
||||
FROM ' . ATTACHMENTS_TABLE . '
|
||||
WHERE poster_id = ' . $user->data['user_id'] . '
|
||||
AND is_orphan = 0
|
||||
AND ' . $db->sql_in_set('attach_id', $delete_ids);
|
||||
$sql = 'SELECT a.attach_id, p.post_edit_locked, t.topic_status, f.forum_id, f.forum_status
|
||||
FROM ' . ATTACHMENTS_TABLE . ' a
|
||||
LEFT JOIN ' . POSTS_TABLE . ' p
|
||||
ON (a.post_msg_id = p.post_id AND a.in_message = 0)
|
||||
LEFT JOIN ' . TOPICS_TABLE . ' t
|
||||
ON (t.topic_id = p.topic_id AND a.in_message = 0)
|
||||
LEFT JOIN ' . FORUMS_TABLE . ' f
|
||||
ON (f.forum_id = t.forum_id AND a.in_message = 0)
|
||||
WHERE a.poster_id = ' . $user->data['user_id'] . '
|
||||
AND a.is_orphan = 0
|
||||
AND ' . $db->sql_in_set('a.attach_id', $delete_ids);
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$delete_ids = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
if (!$auth->acl_get('m_edit', $row['forum_id']) && ($row['forum_status'] == ITEM_LOCKED || $row['topic_status'] == ITEM_LOCKED || $row['post_edit_locked']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$delete_ids[] = $row['attach_id'];
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
@@ -124,10 +135,12 @@ class ucp_attachments
|
||||
$pagination = $phpbb_container->get('pagination');
|
||||
$start = $pagination->validate_start($start, $config['topics_per_page'], $num_attachments);
|
||||
|
||||
$sql = 'SELECT a.*, t.topic_title, p.message_subject as message_title
|
||||
$sql = 'SELECT a.*, t.topic_title, pr.message_subject as message_title, p.post_edit_locked, t.topic_status, f.forum_id, f.forum_status
|
||||
FROM ' . ATTACHMENTS_TABLE . ' a
|
||||
LEFT JOIN ' . POSTS_TABLE . ' p ON (a.post_msg_id = p.post_id AND a.in_message = 0)
|
||||
LEFT JOIN ' . TOPICS_TABLE . ' t ON (a.topic_id = t.topic_id AND a.in_message = 0)
|
||||
LEFT JOIN ' . PRIVMSGS_TABLE . ' p ON (a.post_msg_id = p.msg_id AND a.in_message = 1)
|
||||
LEFT JOIN ' . FORUMS_TABLE . ' f ON (f.forum_id = t.forum_id AND a.in_message = 0)
|
||||
LEFT JOIN ' . PRIVMSGS_TABLE . ' pr ON (a.post_msg_id = pr.msg_id AND a.in_message = 1)
|
||||
WHERE a.poster_id = ' . $user->data['user_id'] . "
|
||||
AND a.is_orphan = 0
|
||||
ORDER BY $order_by";
|
||||
@@ -164,6 +177,7 @@ class ucp_attachments
|
||||
'TOPIC_ID' => $row['topic_id'],
|
||||
|
||||
'S_IN_MESSAGE' => $row['in_message'],
|
||||
'S_LOCKED' => !$row['in_message'] && !$auth->acl_get('m_edit', $row['forum_id']) && ($row['forum_status'] == ITEM_LOCKED || $row['topic_status'] == ITEM_LOCKED || $row['post_edit_locked']),
|
||||
|
||||
'U_VIEW_ATTACHMENT' => append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $row['attach_id']),
|
||||
'U_VIEW_TOPIC' => $view_topic)
|
||||
|
@@ -32,6 +32,9 @@ class ucp_groups
|
||||
global $db, $user, $auth, $cache, $template;
|
||||
global $request, $phpbb_container, $phpbb_log;
|
||||
|
||||
/** @var \phpbb\language\language $language Language object */
|
||||
$language = $phpbb_container->get('language');
|
||||
|
||||
$user->add_lang('groups');
|
||||
|
||||
$return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>');
|
||||
@@ -396,7 +399,10 @@ class ucp_groups
|
||||
$action = (isset($_POST['addusers'])) ? 'addusers' : $request->variable('action', '');
|
||||
$group_id = $request->variable('g', 0);
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
if (!function_exists('phpbb_get_user_rank'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
add_form_key('ucp_groups');
|
||||
|
||||
@@ -1054,13 +1060,27 @@ class ucp_groups
|
||||
|
||||
if (confirm_box(true))
|
||||
{
|
||||
$return_manage_page = '<br /><br />' . $language->lang('RETURN_PAGE', '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>');
|
||||
|
||||
// Add user/s to group
|
||||
if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, 0, 0, $group_row))
|
||||
{
|
||||
trigger_error($user->lang[$error] . $return_page);
|
||||
$display_message = $language->lang($error);
|
||||
|
||||
if ($error == 'GROUP_USERS_INVALID')
|
||||
{
|
||||
// Find which users don't exist
|
||||
$actual_name_ary = $name_ary;
|
||||
$actual_user_id_ary = [];
|
||||
user_get_id_name($actual_user_id_ary, $actual_name_ary, false, true);
|
||||
|
||||
$display_message = $language->lang('GROUP_USERS_INVALID', implode($language->lang('COMMA_SEPARATOR'), array_udiff($name_ary, $actual_name_ary, 'strcasecmp')));
|
||||
}
|
||||
|
||||
trigger_error($display_message . $return_manage_page);
|
||||
}
|
||||
|
||||
trigger_error($user->lang['GROUP_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>'));
|
||||
trigger_error($language->lang('GROUP_USERS_ADDED') . $return_manage_page);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -28,9 +28,9 @@ class ucp_main
|
||||
var $p_master;
|
||||
var $u_action;
|
||||
|
||||
function __construct(&$p_master)
|
||||
function __construct($p_master)
|
||||
{
|
||||
$this->p_master = &$p_master;
|
||||
$this->p_master = $p_master;
|
||||
}
|
||||
|
||||
function main($id, $mode)
|
||||
@@ -245,7 +245,10 @@ class ucp_main
|
||||
|
||||
case 'subscribed':
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
if (!function_exists('topic_status'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
$user->add_lang('viewforum');
|
||||
|
||||
@@ -481,7 +484,10 @@ class ucp_main
|
||||
break;
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
if (!function_exists('topic_status'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
$user->add_lang('viewforum');
|
||||
|
||||
|
@@ -82,7 +82,10 @@ class ucp_pm
|
||||
$mode = 'view';
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
|
||||
if (!function_exists('get_folder'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
|
||||
}
|
||||
|
||||
switch ($mode)
|
||||
{
|
||||
@@ -104,7 +107,10 @@ class ucp_pm
|
||||
break;
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_compose.' . $phpEx);
|
||||
if (!function_exists('compose_pm'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_compose.' . $phpEx);
|
||||
}
|
||||
compose_pm($id, $mode, $action, $user_folders);
|
||||
|
||||
$tpl_file = 'posting_body';
|
||||
@@ -114,7 +120,10 @@ class ucp_pm
|
||||
set_user_message_limit();
|
||||
get_folder($user->data['user_id']);
|
||||
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_options.' . $phpEx);
|
||||
if (!function_exists('message_options'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_options.' . $phpEx);
|
||||
}
|
||||
message_options($id, $mode, $global_privmsgs_rules, $global_rule_conditions);
|
||||
|
||||
$tpl_file = 'ucp_pm_options';
|
||||
@@ -125,8 +134,10 @@ class ucp_pm
|
||||
get_folder($user->data['user_id']);
|
||||
$this->p_name = 'pm';
|
||||
|
||||
// Call another module... please do not try this at home... Hoochie Coochie Man
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_main.' . $phpEx);
|
||||
if (!class_exists('ucp_main'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_main.' . $phpEx);
|
||||
}
|
||||
|
||||
$module = new ucp_main($this);
|
||||
$module->u_action = $this->u_action;
|
||||
@@ -375,7 +386,10 @@ class ucp_pm
|
||||
|
||||
if ($action == 'view_folder')
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_viewfolder.' . $phpEx);
|
||||
if (!function_exists('view_folder'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_viewfolder.' . $phpEx);
|
||||
}
|
||||
view_folder($id, $mode, $folder_id, $folder);
|
||||
|
||||
$tpl_file = 'ucp_pm_viewfolder';
|
||||
@@ -393,7 +407,10 @@ class ucp_pm
|
||||
trigger_error('NO_MESSAGE');
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_viewmessage.' . $phpEx);
|
||||
if (!function_exists('view_message'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/ucp/ucp_pm_viewmessage.' . $phpEx);
|
||||
}
|
||||
view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row);
|
||||
|
||||
$tpl_file = ($view == 'print') ? 'ucp_pm_viewmessage_print' : 'ucp_pm_viewmessage';
|
||||
|
@@ -33,9 +33,20 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
// Needed for handle_message_list_actions()
|
||||
global $refresh, $submit, $preview;
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
|
||||
if (!function_exists('generate_smilies'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
}
|
||||
|
||||
if (!function_exists('display_custom_bbcodes'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
if (!class_exists('parse_message'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
|
||||
}
|
||||
|
||||
if (!$action)
|
||||
{
|
||||
@@ -996,6 +1007,16 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
if (($action == 'reply' || $action == 'quote' || $action == 'quotepost') && !$preview && !$refresh)
|
||||
{
|
||||
$message_subject = ((!preg_match('/^Re:/', $message_subject)) ? 'Re: ' : '') . censor_text($message_subject);
|
||||
|
||||
/**
|
||||
* This event allows you to modify the PM subject of the PM being quoted
|
||||
*
|
||||
* @event core.pm_modify_message_subject
|
||||
* @var string message_subject String with the PM subject already censored.
|
||||
* @since 3.2.8-RC1
|
||||
*/
|
||||
$vars = array('message_subject');
|
||||
extract($phpbb_dispatcher->trigger_event('core.pm_modify_message_subject', compact($vars)));
|
||||
}
|
||||
|
||||
if ($action == 'forward' && !$preview && !$refresh && !$submit)
|
||||
@@ -1195,7 +1216,7 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
$controller_helper = $phpbb_container->get('controller.helper');
|
||||
|
||||
// Start assigning vars for main posting page ...
|
||||
$template->assign_vars(array(
|
||||
$template_ary = array(
|
||||
'L_POST_A' => $page_title,
|
||||
'L_ICON' => $user->lang['PM_ICON'],
|
||||
'L_MESSAGE_BODY_EXPLAIN' => $user->lang('MESSAGE_BODY_EXPLAIN', (int) $config['max_post_chars']),
|
||||
@@ -1240,7 +1261,19 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
'S_CLOSE_PROGRESS_WINDOW' => isset($_POST['add_file']),
|
||||
'U_PROGRESS_BAR' => append_sid("{$phpbb_root_path}posting.$phpEx", 'f=0&mode=popup'),
|
||||
'UA_PROGRESS_BAR' => addslashes(append_sid("{$phpbb_root_path}posting.$phpEx", 'f=0&mode=popup')),
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify the default template vars
|
||||
*
|
||||
* @event core.ucp_pm_compose_template
|
||||
* @var array template_ary Template variables
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array('template_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_pm_compose_template', compact($vars)));
|
||||
|
||||
$template->assign_vars($template_ary);
|
||||
|
||||
// Build custom bbcodes array
|
||||
display_custom_bbcodes();
|
||||
|
@@ -39,7 +39,7 @@ function view_folder($id, $mode, $folder_id, $folder)
|
||||
// Grab icons
|
||||
$icons = $cache->obtain_icons();
|
||||
|
||||
$color_rows = array('marked', 'replied');
|
||||
$color_rows = array('message_reported', 'marked', 'replied');
|
||||
|
||||
$_module = new p_master();
|
||||
$_module->list_modules('ucp');
|
||||
@@ -138,9 +138,9 @@ function view_folder($id, $mode, $folder_id, $folder)
|
||||
$row_indicator = '';
|
||||
foreach ($color_rows as $var)
|
||||
{
|
||||
if (($var != 'friend' && $var != 'foe' && $row['pm_' . $var])
|
||||
if (($var !== 'friend' && $var !== 'foe' && $row[($var === 'message_reported') ? $var : "pm_{$var}"])
|
||||
||
|
||||
(($var == 'friend' || $var == 'foe') && isset(${$var}[$row['author_id']]) && ${$var}[$row['author_id']]))
|
||||
(($var === 'friend' || $var === 'foe') && isset(${$var}[$row['author_id']]) && ${$var}[$row['author_id']]))
|
||||
{
|
||||
$row_indicator = $var;
|
||||
break;
|
||||
|
@@ -133,7 +133,6 @@ class ucp_profile
|
||||
'user_email' => ($auth->acl_get('u_chgemail')) ? $data['email'] : $user->data['user_email'],
|
||||
'user_email_hash' => ($auth->acl_get('u_chgemail')) ? phpbb_email_hash($data['email']) : $user->data['user_email_hash'],
|
||||
'user_password' => ($auth->acl_get('u_chgpasswd') && $data['new_password']) ? $passwords_manager->hash($data['new_password']) : $user->data['user_password'],
|
||||
'user_passchg' => ($auth->acl_get('u_chgpasswd') && $data['new_password']) ? time() : 0,
|
||||
);
|
||||
|
||||
if ($auth->acl_get('u_chgname') && $config['allow_namechange'] && $data['username'] != $user->data['username'])
|
||||
@@ -147,6 +146,8 @@ class ucp_profile
|
||||
|
||||
if ($auth->acl_get('u_chgpasswd') && $data['new_password'] && !$passwords_manager->check($data['new_password'], $user->data['user_password']))
|
||||
{
|
||||
$sql_ary['user_passchg'] = time();
|
||||
|
||||
$user->reset_login_keys();
|
||||
$phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_NEW_PASSWORD', false, array(
|
||||
'reportee_id' => $user->data['user_id'],
|
||||
@@ -469,8 +470,15 @@ class ucp_profile
|
||||
trigger_error('NO_AUTH_SIGNATURE');
|
||||
}
|
||||
|
||||
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
if (!function_exists('generate_smilies'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
|
||||
}
|
||||
|
||||
if (!function_exists('display_custom_bbcodes'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||
}
|
||||
|
||||
$preview = $request->is_set_post('preview');
|
||||
|
||||
|
@@ -55,6 +55,17 @@ if (($mark_notification = $request->variable('mark_notification', 0)))
|
||||
|
||||
$notification->mark_read();
|
||||
|
||||
/**
|
||||
* You can use this event to perform additional tasks or redirect user elsewhere.
|
||||
*
|
||||
* @event core.index_mark_notification_after
|
||||
* @var int mark_notification Notification ID
|
||||
* @var \phpbb\notification\type\type_interface notification Notification instance
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array('mark_notification', 'notification');
|
||||
extract($phpbb_dispatcher->trigger_event('core.index_mark_notification_after', compact($vars)));
|
||||
|
||||
if ($request->is_ajax())
|
||||
{
|
||||
$json_response = new \phpbb\json_response();
|
||||
|
@@ -20,9 +20,9 @@ define('PHPBB_ENVIRONMENT', 'production');
|
||||
$phpbb_root_path = '../';
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
|
||||
if (version_compare(PHP_VERSION, '5.4') < 0)
|
||||
if (version_compare(PHP_VERSION, '5.4.7', '<') || version_compare(PHP_VERSION, '7.3-dev', '>='))
|
||||
{
|
||||
die('You are running an unsupported PHP version. Please upgrade to PHP 5.4.0 or higher before trying to install or update to phpBB 3.2');
|
||||
die('You are running an unsupported PHP version. Please upgrade to PHP equal to or greater than 5.4.7 but less than 7.3-dev in order to install or update to phpBB 3.2');
|
||||
}
|
||||
|
||||
$startup_new_path = $phpbb_root_path . 'install/update/update/new/install/startup.' . $phpEx;
|
||||
|
@@ -38,7 +38,7 @@ $dbms = $phpbb_config_php_file->convert_30_dbms_to_31($dbms);
|
||||
$convertor_data = array(
|
||||
'forum_name' => 'phpBB 2.0.x',
|
||||
'version' => '1.0.3',
|
||||
'phpbb_version' => '3.2.5',
|
||||
'phpbb_version' => '3.2.8',
|
||||
'author' => '<a href="https://www.phpbb.com/">phpBB Limited</a>',
|
||||
'dbms' => $dbms,
|
||||
'dbhost' => $dbhost,
|
||||
|
@@ -23,7 +23,7 @@ if (php_sapi_name() !== 'cli')
|
||||
define('IN_PHPBB', true);
|
||||
define('IN_INSTALL', true);
|
||||
define('PHPBB_ENVIRONMENT', 'production');
|
||||
define('PHPBB_VERSION', '3.2.5');
|
||||
define('PHPBB_VERSION', '3.2.8-RC1');
|
||||
$phpbb_root_path = __DIR__ . '/../';
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
|
||||
|
@@ -269,9 +269,9 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('smilies_per_page',
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('smtp_auth_method', 'PLAIN');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('smtp_delivery', '0');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('smtp_host', '');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('smtp_password', '');
|
||||
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('smtp_password', '', 1);
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('smtp_port', '25');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('smtp_username', '');
|
||||
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('smtp_username', '', 1);
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('teampage_memberships', '1');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('teampage_forums', '1');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_page', '25');
|
||||
@@ -279,7 +279,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('use_system_cron', '0');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.2.5');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.2.8-RC1');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400');
|
||||
|
||||
|
@@ -44,7 +44,7 @@ $lang = array_merge($lang, array(
|
||||
'BOARD_STYLE' => 'Board style',
|
||||
'CUSTOM_DATEFORMAT' => 'Custom…',
|
||||
'DEFAULT_DATE_FORMAT' => 'Date format',
|
||||
'DEFAULT_DATE_FORMAT_EXPLAIN' => 'The date format is the same as the PHP <code>date</code> function.',
|
||||
'DEFAULT_DATE_FORMAT_EXPLAIN' => 'The date format is the same as the PHP <code><a href="https://secure.php.net/manual/function.date.php">date()</a></code> function.',
|
||||
'DEFAULT_LANGUAGE' => 'Default language',
|
||||
'DEFAULT_STYLE' => 'Default style',
|
||||
'DEFAULT_STYLE_EXPLAIN' => 'The default style for new users.',
|
||||
@@ -111,9 +111,9 @@ $lang = array_merge($lang, array(
|
||||
'ALLOW_GRAVATAR' => 'Enable gravatar avatars',
|
||||
'ALLOW_LOCAL' => 'Enable gallery avatars',
|
||||
'ALLOW_REMOTE' => 'Enable remote avatars',
|
||||
'ALLOW_REMOTE_EXPLAIN' => 'Avatars linked to from another website.',
|
||||
'ALLOW_REMOTE_EXPLAIN' => 'Avatars linked to from another website.<br><em><strong class="error">Warning:</strong> Enabling this feature might allow users to check for the existence of files and services that are only accessible on the local network.</em>',
|
||||
'ALLOW_REMOTE_UPLOAD' => 'Enable remote avatar uploading',
|
||||
'ALLOW_REMOTE_UPLOAD_EXPLAIN' => 'Allow uploading of avatars from another website.',
|
||||
'ALLOW_REMOTE_UPLOAD_EXPLAIN' => 'Allow uploading of avatars from another website.<br><em><strong class="error">Warning:</strong> Enabling this feature might allow users to check for the existence of files and services that are only accessible on the local network.</em>',
|
||||
'ALLOW_UPLOAD' => 'Enable avatar uploading',
|
||||
'AVATAR_GALLERY_PATH' => 'Avatar gallery path',
|
||||
'AVATAR_GALLERY_PATH_EXPLAIN' => 'Path under your phpBB root directory for pre-loaded images, e.g. <samp>images/avatars/gallery</samp>.<br>Double dots like <samp>../</samp> will be stripped from the path for security reasons.',
|
||||
@@ -568,6 +568,8 @@ $lang = array_merge($lang, array(
|
||||
'EMAIL_FORCE_SENDER_EXPLAIN' => 'This will set the <samp>Return-Path</samp> to the from email address instead of using the local user and hostname of the server. This setting does not apply when using SMTP.<br><em><strong>Warning:</strong> Requires the user that the webserver runs as to be added as trusted user to the sendmail configuration.</em>',
|
||||
'EMAIL_PACKAGE_SIZE' => 'Email package size',
|
||||
'EMAIL_PACKAGE_SIZE_EXPLAIN' => 'This is the number of maximum emails sent out in one package. This setting is applied to the internal message queue; set this value to 0 if you have problems with non-delivered notification emails.',
|
||||
'EMAIL_MAX_CHUNK_SIZE' => 'Maximum allowed email recipients',
|
||||
'EMAIL_MAX_CHUNK_SIZE_EXPLAIN' => 'If necessary, set this to not exceed the maximum number of recipients that your email server will allow in one email message.',
|
||||
'EMAIL_SIG' => 'Email signature',
|
||||
'EMAIL_SIG_EXPLAIN' => 'This text will be attached to all emails the board sends.',
|
||||
'ENABLE_EMAIL' => 'Enable board-wide emails',
|
||||
@@ -587,8 +589,8 @@ $lang = array_merge($lang, array(
|
||||
'SMTP_POP_BEFORE_SMTP' => 'POP-BEFORE-SMTP',
|
||||
'SMTP_PORT' => 'SMTP server port',
|
||||
'SMTP_PORT_EXPLAIN' => 'Only change this if you know your SMTP server is on a different port.',
|
||||
'SMTP_SERVER' => 'SMTP server address and protocol',
|
||||
'SMTP_SERVER_EXPLAIN' => 'Note that you have to provide the protocol that your server uses. If you are using SSL, this has to be "ssl://your.mailserver.com"',
|
||||
'SMTP_SERVER' => 'SMTP server address',
|
||||
'SMTP_SERVER_EXPLAIN' => 'Do not provide a protocol (<samp>ssl://</samp> or <samp>tsl://</samp>) unless your mail host tells you to do so.',
|
||||
'SMTP_SETTINGS' => 'SMTP settings',
|
||||
'SMTP_USERNAME' => 'SMTP username',
|
||||
'SMTP_USERNAME_EXPLAIN' => 'Only enter a username if your SMTP server requires it.',
|
||||
|
@@ -325,6 +325,7 @@ $lang = array_merge($lang, array(
|
||||
'TOTAL_SIZE' => 'Total size',
|
||||
|
||||
'UCP' => 'User Control Panel',
|
||||
'URL_INVALID' => 'The provided URL for the setting “%1$s” is invalid.',
|
||||
'USERNAMES_EXPLAIN' => 'Place each username on a separate line.',
|
||||
'USER_CONTROL_PANEL' => 'User Control Panel',
|
||||
|
||||
|
@@ -38,14 +38,15 @@ if (empty($lang) || !is_array($lang))
|
||||
|
||||
// Database Backup/Restore
|
||||
$lang = array_merge($lang, array(
|
||||
'ACP_BACKUP_EXPLAIN' => 'Here you can backup all your phpBB related data. You may store the resulting archive in your <samp>store/</samp> folder or download it directly. Depending on your server configuration you may be able to compress the file in a number of formats.',
|
||||
'ACP_BACKUP_EXPLAIN' => 'Here you can backup all your phpBB related data. The resulting archive will be stored in your <samp>store/</samp> folder. Depending on your server configuration you may be able to compress the file in a number of formats.',
|
||||
'ACP_RESTORE_EXPLAIN' => 'This will perform a full restore of all phpBB tables from a saved file. If your server supports it you may use a gzip or bzip2 compressed text file and it will automatically be decompressed. <strong>WARNING</strong> This will overwrite any existing data. The restore may take a long time to process please do not move from this page till it is complete. Backups are stored in the <samp>store/</samp> folder and are assumed to be generated by phpBB’s backup functionality. Restoring backups that were not created by the built in system may or may not work.',
|
||||
|
||||
'BACKUP_DELETE' => 'The backup file has been deleted successfully.',
|
||||
'BACKUP_INVALID' => 'The selected file to backup is invalid.',
|
||||
'BACKUP_OPTIONS' => 'Backup options',
|
||||
'BACKUP_SUCCESS' => 'The backup file has been created successfully.',
|
||||
'BACKUP_TYPE' => 'Backup type',
|
||||
'BACKUP_DELETE' => 'The backup file has been deleted successfully.',
|
||||
'BACKUP_INVALID' => 'The selected file to backup is invalid.',
|
||||
'BACKUP_NOT_SUPPORTED' => 'The selected backup is not supported',
|
||||
'BACKUP_OPTIONS' => 'Backup options',
|
||||
'BACKUP_SUCCESS' => 'The backup file has been created successfully.',
|
||||
'BACKUP_TYPE' => 'Backup type',
|
||||
|
||||
'DATABASE' => 'Database utilities',
|
||||
'DATA_ONLY' => 'Data only',
|
||||
|
@@ -97,6 +97,7 @@ $lang = array_merge($lang, array(
|
||||
'FORUM_LINK_TRACK_EXPLAIN' => 'Records the number of times a forum link was clicked.',
|
||||
'FORUM_NAME' => 'Forum name',
|
||||
'FORUM_NAME_EMPTY' => 'You must enter a name for this forum.',
|
||||
'FORUM_NAME_EMOJI' => 'The forum name you entered is invalid.<br>It contains the following unsupported characters:<br>%s',
|
||||
'FORUM_PARENT' => 'Parent forum',
|
||||
'FORUM_PASSWORD' => 'Forum password',
|
||||
'FORUM_PASSWORD_CONFIRM' => 'Confirm forum password',
|
||||
|
@@ -111,6 +111,7 @@ $lang = array_merge($lang, array(
|
||||
'GROUP_USERS_ADDED' => 'New users added to group successfully.',
|
||||
'GROUP_USERS_EXIST' => 'The selected users are already members.',
|
||||
'GROUP_USERS_REMOVE' => 'Users removed from group and new defaults set successfully.',
|
||||
'GROUP_USERS_INVALID' => 'No users were added to the group as the following usernames do not exist: %s',
|
||||
|
||||
'LEGEND_EXPLAIN' => 'These are the groups which are displayed in the group legend:',
|
||||
'LEGEND_SETTINGS' => 'Legend settings',
|
||||
|
@@ -81,8 +81,8 @@ $lang = array_merge($lang, array(
|
||||
'ACL_U_SIG' => 'Can use signature',
|
||||
|
||||
'ACL_U_SENDPM' => 'Can send private messages',
|
||||
'ACL_U_MASSPM' => 'Can send messages to multiple users',
|
||||
'ACL_U_MASSPM_GROUP'=> 'Can send messages to groups',
|
||||
'ACL_U_MASSPM' => 'Can send private messages to multiple users',
|
||||
'ACL_U_MASSPM_GROUP'=> 'Can send private messages to groups',
|
||||
'ACL_U_READPM' => 'Can read private messages',
|
||||
'ACL_U_PM_EDIT' => 'Can edit own private messages',
|
||||
'ACL_U_PM_DELETE' => 'Can remove private messages from own folder',
|
||||
|
@@ -111,7 +111,7 @@ $lang = array_merge($lang, array(
|
||||
'FIRST_OPTION' => 'First option',
|
||||
|
||||
'HIDE_PROFILE_FIELD' => 'Hide profile field',
|
||||
'HIDE_PROFILE_FIELD_EXPLAIN' => 'Hide the profile field from all other users except the user, administrators and moderators who are still able to see this field. If the Display in user control panel option is disabled, the user will not be able to see or change this field and the field can only be changed by administrators.',
|
||||
'HIDE_PROFILE_FIELD_EXPLAIN' => 'Hide the profile field from all users except administrators and moderators, who are still able to see this field. If the Display in user control panel option is disabled, the user will not be able to see or change this field and the field can only be changed by administrators.',
|
||||
|
||||
'INVALID_CHARS_FIELD_IDENT' => 'Field identification can only contain lowercase a-z and _',
|
||||
'INVALID_FIELD_IDENT_LEN' => 'Field identification can only be 17 characters long',
|
||||
|
@@ -21,7 +21,7 @@ if (!defined('IN_PHPBB'))
|
||||
|
||||
if (empty($lang) || !is_array($lang))
|
||||
{
|
||||
$lang = array();
|
||||
$lang = [];
|
||||
}
|
||||
|
||||
// DEVELOPERS PLEASE NOTE
|
||||
@@ -36,55 +36,56 @@ if (empty($lang) || !is_array($lang))
|
||||
// equally where a string contains only two placeholders which are used to wrap text
|
||||
// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
|
||||
|
||||
$lang = array_merge($lang, array(
|
||||
'ACP_STYLES_EXPLAIN' => 'Here you can manage the available styles on your board. You may alter existing styles, delete, deactivate, reactivate, install new ones. You can also see what a style will look like using the preview function. Also listed is the total user count for each style, note that overriding user styles will not be reflected here.',
|
||||
$lang = array_merge($lang, [
|
||||
'ACP_STYLES_EXPLAIN' => 'Here you can manage the styles available on your board.<br>Please note you cannot uninstall the “<strong>prosilver</strong>” style as it is phpBB’s default and primary parent style.',
|
||||
|
||||
'CANNOT_BE_INSTALLED' => 'Cannot be installed',
|
||||
'CONFIRM_UNINSTALL_STYLES' => 'Are you sure you wish to uninstall selected styles?',
|
||||
'COPYRIGHT' => 'Copyright',
|
||||
'CANNOT_BE_INSTALLED' => 'Cannot be installed',
|
||||
'CONFIRM_UNINSTALL_STYLES' => 'Are you sure you wish to uninstall selected styles?',
|
||||
'COPYRIGHT' => 'Copyright',
|
||||
|
||||
'DEACTIVATE_DEFAULT' => 'You cannot deactivate the default style.',
|
||||
'DELETE_FROM_FS' => 'Delete from filesystem',
|
||||
'DELETE_STYLE_FILES_FAILED' => 'Error deleting files for style "%s".',
|
||||
'DELETE_STYLE_FILES_SUCCESS' => 'Files for style "%s" have been deleted.',
|
||||
'DETAILS' => 'Details',
|
||||
'DEACTIVATE_DEFAULT' => 'You cannot deactivate the default style.',
|
||||
'DELETE_FROM_FS' => 'Delete from filesystem',
|
||||
'DELETE_STYLE_FILES_FAILED' => 'Error deleting files for style "%s".',
|
||||
'DELETE_STYLE_FILES_SUCCESS' => 'Files for style "%s" have been deleted.',
|
||||
'DETAILS' => 'Details',
|
||||
|
||||
'INHERITING_FROM' => 'Inherits from',
|
||||
'INSTALL_STYLE' => 'Install style',
|
||||
'INSTALL_STYLES' => 'Install styles',
|
||||
'INSTALL_STYLES_EXPLAIN' => 'Here you can install new styles.<br />If you cannot find a specific style in list below, check to make sure style is already installed. If it is not installed, check if it was uploaded correctly.',
|
||||
'INVALID_STYLE_ID' => 'Invalid style ID.',
|
||||
'INHERITING_FROM' => 'Inherits from',
|
||||
'INSTALL_STYLE' => 'Install style',
|
||||
'INSTALL_STYLES' => 'Install styles',
|
||||
'INSTALL_STYLES_EXPLAIN' => 'Here you can install new styles.<br>If you cannot find a specific style in list below, check to make sure style is already installed. If it is not installed, check if it was uploaded correctly.',
|
||||
'INVALID_STYLE_ID' => 'Invalid style ID.',
|
||||
|
||||
'NO_MATCHING_STYLES_FOUND' => 'No styles match your query.',
|
||||
'NO_UNINSTALLED_STYLE' => 'No uninstalled styles detected.',
|
||||
'NO_MATCHING_STYLES_FOUND' => 'No styles match your query.',
|
||||
'NO_UNINSTALLED_STYLE' => 'No uninstalled styles detected.',
|
||||
|
||||
'PURGED_CACHE' => 'Cache was purged.',
|
||||
'PURGED_CACHE' => 'Cache was purged.',
|
||||
|
||||
'REQUIRES_STYLE' => 'This style requires the style "%s" to be installed.',
|
||||
'REQUIRES_STYLE' => 'This style requires the style "%s" to be installed.',
|
||||
|
||||
'STYLE_ACTIVATE' => 'Activate',
|
||||
'STYLE_ACTIVE' => 'Active',
|
||||
'STYLE_DEACTIVATE' => 'Deactivate',
|
||||
'STYLE_DEFAULT' => 'Make default style',
|
||||
'STYLE_DEFAULT_CHANGE_INACTIVE' => 'You must activate style before making it default style.',
|
||||
'STYLE_ERR_INVALID_PARENT' => 'Invalid parent style.',
|
||||
'STYLE_ERR_NAME_EXIST' => 'A style with that name already exists.',
|
||||
'STYLE_ERR_STYLE_NAME' => 'You must supply a name for this style.',
|
||||
'STYLE_INSTALLED' => 'Style "%s" has been installed.',
|
||||
'STYLE_ACTIVATE' => 'Activate',
|
||||
'STYLE_ACTIVE' => 'Active',
|
||||
'STYLE_DEACTIVATE' => 'Deactivate',
|
||||
'STYLE_DEFAULT' => 'Make default style',
|
||||
'STYLE_DEFAULT_CHANGE_INACTIVE' => 'You must activate style before making it default style.',
|
||||
'STYLE_ERR_INVALID_PARENT' => 'Invalid parent style.',
|
||||
'STYLE_ERR_NAME_EXIST' => 'A style with that name already exists.',
|
||||
'STYLE_ERR_STYLE_NAME' => 'You must supply a name for this style.',
|
||||
'STYLE_INSTALLED' => 'Style "%s" has been installed.',
|
||||
'STYLE_INSTALLED_RETURN_INSTALLED_STYLES' => 'Return to installed styles list',
|
||||
'STYLE_INSTALLED_RETURN_UNINSTALLED_STYLES' => 'Install more styles',
|
||||
'STYLE_NAME' => 'Style name',
|
||||
'STYLE_NAME_RESERVED' => 'Style "%s" can not be installed, because the name is reserved.',
|
||||
'STYLE_NOT_INSTALLED' => 'Style "%s" was not installed.',
|
||||
'STYLE_PATH' => 'Style path',
|
||||
'STYLE_UNINSTALL' => 'Uninstall',
|
||||
'STYLE_UNINSTALL_DEPENDENT' => 'Style "%s" cannot be uninstalled because it has one or more child styles.',
|
||||
'STYLE_UNINSTALLED' => 'Style "%s" uninstalled successfully.',
|
||||
'STYLE_PHPBB_VERSION' => 'phpBB Version',
|
||||
'STYLE_USED_BY' => 'Used by (including robots)',
|
||||
'STYLE_VERSION' => 'Style version',
|
||||
'STYLE_NAME' => 'Style name',
|
||||
'STYLE_NAME_RESERVED' => 'Style "%s" can not be installed, because the name is reserved.',
|
||||
'STYLE_NOT_INSTALLED' => 'Style "%s" was not installed.',
|
||||
'STYLE_PATH' => 'Style path',
|
||||
'STYLE_UNINSTALL' => 'Uninstall',
|
||||
'STYLE_UNINSTALL_DEPENDENT' => 'Style "%s" cannot be uninstalled because it has one or more child styles.',
|
||||
'STYLE_UNINSTALLED' => 'Style "%s" uninstalled successfully.',
|
||||
'STYLE_PHPBB_VERSION' => 'phpBB Version',
|
||||
'STYLE_USED_BY' => 'Used by (including robots)',
|
||||
'STYLE_VERSION' => 'Style version',
|
||||
|
||||
'UNINSTALL_DEFAULT' => 'You cannot uninstall the default style.',
|
||||
'UNINSTALL_PROSILVER' => 'You cannot uninstall the style “prosilver”.',
|
||||
'UNINSTALL_DEFAULT' => 'You cannot uninstall the default style.',
|
||||
|
||||
'BROWSE_STYLES_DATABASE' => 'Browse styles database',
|
||||
));
|
||||
'BROWSE_STYLES_DATABASE' => 'Browse styles database',
|
||||
]);
|
||||
|
@@ -91,6 +91,7 @@ $lang = array_merge($lang, array(
|
||||
'ATTACHED_IMAGE_NOT_IMAGE' => 'The image file you tried to attach is invalid.',
|
||||
'AUTHOR' => 'Author',
|
||||
'AUTH_NO_PROFILE_CREATED' => 'The creation of a user profile was unsuccessful.',
|
||||
'AUTH_PROVIDER_OAUTH_ERROR_ALREADY_LINKED' => 'The account is already linked with other user.',
|
||||
'AUTH_PROVIDER_OAUTH_ERROR_INVALID_ENTRY' => 'Invalid database entry.',
|
||||
'AUTH_PROVIDER_OAUTH_ERROR_INVALID_SERVICE_TYPE' => 'Invalid service type provided to OAuth service handler.',
|
||||
'AUTH_PROVIDER_OAUTH_ERROR_SERVICE_NOT_CREATED' => 'OAuth service not created',
|
||||
@@ -519,6 +520,7 @@ $lang = array_merge($lang, array(
|
||||
'NO_FEED_ENABLED' => 'Feeds are not available on this board.',
|
||||
'NO_FEED' => 'The requested feed is not available.',
|
||||
'NO_STYLE_DATA' => 'Could not get style data',
|
||||
'NO_STYLE_CFG' => 'Could not get the style configuration file for: %s',
|
||||
'NO_SUBJECT' => 'No subject specified', // Used for posts having no subject defined but displayed within management pages.
|
||||
'NO_SUCH_SEARCH_MODULE' => 'The specified search backend doesn’t exist.',
|
||||
'NO_SUPPORTED_AUTH_METHODS' => 'No supported authentication methods.',
|
||||
@@ -780,6 +782,10 @@ $lang = array_merge($lang, array(
|
||||
'TOPIC_REVIEW' => 'Topic review',
|
||||
'TOPIC_TITLE' => 'Topic title',
|
||||
'TOPIC_UNAPPROVED' => 'This topic has not been approved.',
|
||||
'TOPIC_UNAPPROVED_FORUM' => array(
|
||||
1 => 'Topic awaiting approval',
|
||||
2 => 'Topics awaiting approval',
|
||||
),
|
||||
'TOPIC_DELETED' => 'This topic has been deleted.',
|
||||
'TOTAL_ATTACHMENTS' => 'Attachment(s)',
|
||||
'TOTAL_LOGS' => array(
|
||||
|
@@ -7,7 +7,7 @@ The account owned by "{USERNAME}" has been deactivated or newly created, you sho
|
||||
Use this link to view the user's profile:
|
||||
{U_USER_DETAILS}
|
||||
|
||||
Use this link to activate the account:
|
||||
You may activate the account immediately by clicking on this link:
|
||||
{U_ACTIVATE}
|
||||
|
||||
{EMAIL_SIG}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
Subject: Private Message report - "{TOPIC_TITLE}"
|
||||
Subject: Private Message report - "{SUBJECT}"
|
||||
|
||||
Hello {USERNAME},
|
||||
|
||||
|
@@ -43,6 +43,7 @@ $lang = array_merge($lang, array(
|
||||
'ADD_POLL' => 'Poll creation',
|
||||
'ADD_POLL_EXPLAIN' => 'If you do not want to add a poll to your topic leave the fields blank.',
|
||||
'ALREADY_DELETED' => 'Sorry but this message is already deleted.',
|
||||
'ATTACH_COMMENT_NO_EMOJIS' => 'The attachment comment contains forbidden characters (Emoji).',
|
||||
'ATTACH_DISK_FULL' => 'There is not enough free disk space to post this attachment.',
|
||||
'ATTACH_QUOTA_REACHED' => 'Sorry, the board attachment quota has been reached.',
|
||||
'ATTACH_SIG' => 'Attach a signature (signatures can be altered via the UCP)',
|
||||
@@ -145,6 +146,7 @@ $lang = array_merge($lang, array(
|
||||
'LOAD_DRAFT_EXPLAIN' => 'Here you are able to select the draft you want to continue writing. Your current post will be cancelled, all current post contents will be deleted. View, edit and delete drafts within your User Control Panel.',
|
||||
'LOGIN_EXPLAIN_BUMP' => 'You need to login in order to bump topics within this forum.',
|
||||
'LOGIN_EXPLAIN_DELETE' => 'You need to login in order to delete posts within this forum.',
|
||||
'LOGIN_EXPLAIN_SOFT_DELETE' => 'You need to login in order to soft-delete posts within this forum.',
|
||||
'LOGIN_EXPLAIN_POST' => 'You need to login in order to post within this forum.',
|
||||
'LOGIN_EXPLAIN_QUOTE' => 'You need to login in order to quote posts within this forum.',
|
||||
'LOGIN_EXPLAIN_REPLY' => 'You need to login in order to reply to topics within this forum.',
|
||||
|
@@ -89,6 +89,7 @@ $lang = array_merge($lang, array(
|
||||
'ATTACHMENTS_EXPLAIN' => 'This is a list of attachments you have made in posts to this board.',
|
||||
'ATTACHMENTS_DELETED' => 'Attachments successfully deleted.',
|
||||
'ATTACHMENT_DELETED' => 'Attachment successfully deleted.',
|
||||
'ATTACHMENT_LOCKED' => 'This topic is locked, you cannot delete the attachment.',
|
||||
'AUTOLOGIN_SESSION_KEYS_DELETED'=> 'The selected "Remember Me" login keys were successfully deleted.',
|
||||
'AVATAR_CATEGORY' => 'Category',
|
||||
'AVATAR_DRIVER_GRAVATAR_TITLE' => 'Gravatar',
|
||||
@@ -115,7 +116,7 @@ $lang = array_merge($lang, array(
|
||||
'BIRTHDAY' => 'Birthday',
|
||||
'BIRTHDAY_EXPLAIN' => 'Setting a year will list your age when it is your birthday.',
|
||||
'BOARD_DATE_FORMAT' => 'My date format',
|
||||
'BOARD_DATE_FORMAT_EXPLAIN' => 'The syntax used is identical to the PHP <a href="http://www.php.net/date">date()</a> function.',
|
||||
'BOARD_DATE_FORMAT_EXPLAIN' => 'The syntax used is identical to the PHP <a href="https://secure.php.net/manual/function.date.php">date()</a> function.',
|
||||
'BOARD_LANGUAGE' => 'My language',
|
||||
'BOARD_STYLE' => 'My board style',
|
||||
'BOARD_TIMEZONE' => 'My timezone',
|
||||
@@ -272,6 +273,7 @@ $lang = array_merge($lang, array(
|
||||
'IMPORTANT_NEWS' => 'Important announcements',
|
||||
'INVALID_USER_BIRTHDAY' => 'The entered birthday is not a valid date.',
|
||||
'INVALID_CHARS_USERNAME' => 'The username contains forbidden characters.',
|
||||
'INVALID_EMOJIS_USERNAME' => 'The username contains forbidden characters (Emoji).',
|
||||
'INVALID_CHARS_NEW_PASSWORD'=> 'The password does not contain the required characters.',
|
||||
'ITEMS_REQUIRED' => 'The items marked with * are required profile fields and need to be filled out.',
|
||||
|
||||
@@ -302,6 +304,7 @@ $lang = array_merge($lang, array(
|
||||
'MESSAGE_EDITED' => 'Message successfully edited.',
|
||||
'MESSAGE_HISTORY' => 'Message history',
|
||||
'MESSAGE_REMOVED_FROM_OUTBOX' => 'This message was deleted by its author.',
|
||||
'MESSAGE_REPORTED_MESSAGE' => 'Reported message',
|
||||
'MESSAGE_SENT_ON' => 'on',
|
||||
'MESSAGE_STORED' => 'This message has been sent successfully.',
|
||||
'MESSAGE_TO' => 'To',
|
||||
|
@@ -489,9 +489,31 @@ switch ($mode)
|
||||
}
|
||||
|
||||
// Get user...
|
||||
$sql = 'SELECT *
|
||||
FROM ' . USERS_TABLE . '
|
||||
WHERE ' . (($username) ? "username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'" : "user_id = $user_id");
|
||||
$sql_array = array(
|
||||
'SELECT' => 'u.*',
|
||||
'FROM' => array(
|
||||
USERS_TABLE => 'u'
|
||||
),
|
||||
'WHERE' => (($username) ? "u.username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'" : "u.user_id = $user_id"),
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify user data SQL before member profile row is created
|
||||
*
|
||||
* @event core.memberlist_modify_viewprofile_sql
|
||||
* @var int user_id The user ID
|
||||
* @var string username The username
|
||||
* @var array sql_array Array containing the main query
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'user_id',
|
||||
'username',
|
||||
'sql_array',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.memberlist_modify_viewprofile_sql', compact($vars)));
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_array);
|
||||
$result = $db->sql_query($sql);
|
||||
$member = $db->sql_fetchrow($result);
|
||||
$db->sql_freeresult($result);
|
||||
@@ -523,12 +545,37 @@ switch ($mode)
|
||||
$sql_uid_ary = ($auth_hidden_groups) ? array($user_id) : array($user_id, (int) $user->data['user_id']);
|
||||
|
||||
// Do the SQL thang
|
||||
$sql = 'SELECT g.group_id, g.group_name, g.group_type, ug.user_id
|
||||
FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
|
||||
WHERE ' . $db->sql_in_set('ug.user_id', $sql_uid_ary) . '
|
||||
AND g.group_id = ug.group_id
|
||||
AND ug.user_pending = 0';
|
||||
$result = $db->sql_query($sql);
|
||||
$sql_ary = [
|
||||
'SELECT' => 'g.group_id, g.group_name, g.group_type, ug.user_id',
|
||||
|
||||
'FROM' => [
|
||||
GROUPS_TABLE => 'g',
|
||||
],
|
||||
|
||||
'LEFT_JOIN' => [
|
||||
[
|
||||
'FROM' => [USER_GROUP_TABLE => 'ug'],
|
||||
'ON' => 'g.group_id = ug.group_id',
|
||||
],
|
||||
],
|
||||
|
||||
'WHERE' => $db->sql_in_set('ug.user_id', $sql_uid_ary) . '
|
||||
AND ug.user_pending = 0',
|
||||
];
|
||||
|
||||
/**
|
||||
* Modify the query used to get the group data
|
||||
*
|
||||
* @event core.modify_memberlist_viewprofile_group_sql
|
||||
* @var array sql_ary Array containing the query
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'sql_ary',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_memberlist_viewprofile_group_sql', compact($vars)));
|
||||
|
||||
$result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary));
|
||||
|
||||
// Divide data into profile data and current user data
|
||||
$profile_groups = $user_groups = array();
|
||||
@@ -567,6 +614,20 @@ switch ($mode)
|
||||
unset($user_groups);
|
||||
asort($group_sort);
|
||||
|
||||
/**
|
||||
* Modify group data before options is created and data is unset
|
||||
*
|
||||
* @event core.modify_memberlist_viewprofile_group_data
|
||||
* @var array group_data Array containing the group data
|
||||
* @var array group_sort Array containing the sorted group data
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'group_data',
|
||||
'group_sort',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_memberlist_viewprofile_group_data', compact($vars)));
|
||||
|
||||
$group_options = '';
|
||||
foreach ($group_sort as $group_id => $null)
|
||||
{
|
||||
@@ -702,42 +763,58 @@ switch ($mode)
|
||||
$member['posts_in_queue'] = 0;
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
'L_POSTS_IN_QUEUE' => $user->lang('NUM_POSTS_IN_QUEUE', $member['posts_in_queue']),
|
||||
// Define the main array of vars to assign to memberlist_view.html
|
||||
$template_ary = array(
|
||||
'L_POSTS_IN_QUEUE' => $user->lang('NUM_POSTS_IN_QUEUE', $member['posts_in_queue']),
|
||||
|
||||
'POSTS_DAY' => $user->lang('POST_DAY', $posts_per_day),
|
||||
'POSTS_PCT' => $user->lang('POST_PCT', $percentage),
|
||||
'POSTS_DAY' => $user->lang('POST_DAY', $posts_per_day),
|
||||
'POSTS_PCT' => $user->lang('POST_PCT', $percentage),
|
||||
|
||||
'SIGNATURE' => $member['user_sig'],
|
||||
'POSTS_IN_QUEUE'=> $member['posts_in_queue'],
|
||||
'SIGNATURE' => $member['user_sig'],
|
||||
'POSTS_IN_QUEUE' => $member['posts_in_queue'],
|
||||
|
||||
'PM_IMG' => $user->img('icon_contact_pm', $user->lang['SEND_PRIVATE_MESSAGE']),
|
||||
'L_SEND_EMAIL_USER' => $user->lang('SEND_EMAIL_USER', $member['username']),
|
||||
'EMAIL_IMG' => $user->img('icon_contact_email', $user->lang['EMAIL']),
|
||||
'JABBER_IMG' => $user->img('icon_contact_jabber', $user->lang['JABBER']),
|
||||
'SEARCH_IMG' => $user->img('icon_user_search', $user->lang['SEARCH']),
|
||||
'PM_IMG' => $user->img('icon_contact_pm', $user->lang['SEND_PRIVATE_MESSAGE']),
|
||||
'L_SEND_EMAIL_USER' => $user->lang('SEND_EMAIL_USER', $member['username']),
|
||||
'EMAIL_IMG' => $user->img('icon_contact_email', $user->lang['EMAIL']),
|
||||
'JABBER_IMG' => $user->img('icon_contact_jabber', $user->lang['JABBER']),
|
||||
'SEARCH_IMG' => $user->img('icon_user_search', $user->lang['SEARCH']),
|
||||
|
||||
'S_PROFILE_ACTION' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group'),
|
||||
'S_GROUP_OPTIONS' => $group_options,
|
||||
'S_CUSTOM_FIELDS' => (isset($profile_fields['row']) && count($profile_fields['row'])) ? true : false,
|
||||
'S_PROFILE_ACTION' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group'),
|
||||
'S_GROUP_OPTIONS' => $group_options,
|
||||
'S_CUSTOM_FIELDS' => (isset($profile_fields['row']) && count($profile_fields['row'])) ? true : false,
|
||||
|
||||
'U_USER_ADMIN' => ($auth->acl_get('a_user')) ? append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&mode=overview&u=' . $user_id, true, $user->session_id) : '',
|
||||
'U_USER_BAN' => ($auth->acl_get('m_ban') && $user_id != $user->data['user_id']) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=ban&mode=user&u=' . $user_id, true, $user->session_id) : '',
|
||||
'U_MCP_QUEUE' => ($auth->acl_getf_global('m_approve')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue', true, $user->session_id) : '',
|
||||
'U_USER_ADMIN' => ($auth->acl_get('a_user')) ? append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&mode=overview&u=' . $user_id, true, $user->session_id) : '',
|
||||
'U_USER_BAN' => ($auth->acl_get('m_ban') && $user_id != $user->data['user_id']) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=ban&mode=user&u=' . $user_id, true, $user->session_id) : '',
|
||||
'U_MCP_QUEUE' => ($auth->acl_getf_global('m_approve')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue', true, $user->session_id) : '',
|
||||
|
||||
'U_SWITCH_PERMISSIONS' => ($auth->acl_get('a_switchperm') && $user->data['user_id'] != $user_id) ? append_sid("{$phpbb_root_path}ucp.$phpEx", "mode=switch_perm&u={$user_id}&hash=" . generate_link_hash('switchperm')) : '',
|
||||
'U_EDIT_SELF' => ($user_id == $user->data['user_id'] && $auth->acl_get('u_chgprofileinfo')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=ucp_profile&mode=profile_info') : '',
|
||||
'U_SWITCH_PERMISSIONS' => ($auth->acl_get('a_switchperm') && $user->data['user_id'] != $user_id) ? append_sid("{$phpbb_root_path}ucp.$phpEx", "mode=switch_perm&u={$user_id}&hash=" . generate_link_hash('switchperm')) : '',
|
||||
'U_EDIT_SELF' => ($user_id == $user->data['user_id'] && $auth->acl_get('u_chgprofileinfo')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=ucp_profile&mode=profile_info') : '',
|
||||
|
||||
'S_USER_NOTES' => ($user_notes_enabled) ? true : false,
|
||||
'S_WARN_USER' => ($warn_user_enabled) ? true : false,
|
||||
'S_ZEBRA' => ($user->data['user_id'] != $user_id && $user->data['is_registered'] && $zebra_enabled) ? true : false,
|
||||
'U_ADD_FRIEND' => (!$friend && !$foe && $friends_enabled) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=zebra&add=' . urlencode(htmlspecialchars_decode($member['username']))) : '',
|
||||
'U_ADD_FOE' => (!$friend && !$foe && $foes_enabled) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=zebra&mode=foes&add=' . urlencode(htmlspecialchars_decode($member['username']))) : '',
|
||||
'U_REMOVE_FRIEND' => ($friend && $friends_enabled) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=zebra&remove=1&usernames[]=' . $user_id) : '',
|
||||
'U_REMOVE_FOE' => ($foe && $foes_enabled) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=zebra&remove=1&mode=foes&usernames[]=' . $user_id) : '',
|
||||
'S_USER_NOTES' => ($user_notes_enabled) ? true : false,
|
||||
'S_WARN_USER' => ($warn_user_enabled) ? true : false,
|
||||
'S_ZEBRA' => ($user->data['user_id'] != $user_id && $user->data['is_registered'] && $zebra_enabled) ? true : false,
|
||||
'U_ADD_FRIEND' => (!$friend && !$foe && $friends_enabled) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=zebra&add=' . urlencode(htmlspecialchars_decode($member['username']))) : '',
|
||||
'U_ADD_FOE' => (!$friend && !$foe && $foes_enabled) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=zebra&mode=foes&add=' . urlencode(htmlspecialchars_decode($member['username']))) : '',
|
||||
'U_REMOVE_FRIEND' => ($friend && $friends_enabled) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=zebra&remove=1&usernames[]=' . $user_id) : '',
|
||||
'U_REMOVE_FOE' => ($foe && $foes_enabled) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=zebra&remove=1&mode=foes&usernames[]=' . $user_id) : '',
|
||||
|
||||
'U_CANONICAL' => generate_board_url() . '/' . append_sid("memberlist.$phpEx", 'mode=viewprofile&u=' . $user_id, true, ''),
|
||||
));
|
||||
'U_CANONICAL' => generate_board_url() . '/' . append_sid("memberlist.$phpEx", 'mode=viewprofile&u=' . $user_id, true, ''),
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify user's template vars before we display the profile
|
||||
*
|
||||
* @event core.memberlist_modify_view_profile_template_vars
|
||||
* @var array template_ary Array with user's template vars
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'template_ary',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.memberlist_modify_view_profile_template_vars', compact($vars)));
|
||||
|
||||
// Assign vars to memberlist_view.html
|
||||
$template->assign_vars($template_ary);
|
||||
|
||||
if (!empty($profile_fields['row']))
|
||||
{
|
||||
@@ -996,7 +1073,18 @@ switch ($mode)
|
||||
|
||||
if ($active_time !== false)
|
||||
{
|
||||
$sql_where .= " AND u.user_lastvisit " . $find_key_match[$active_select] . ' ' . $active_time;
|
||||
if ($active_select === 'lt' && (int) $active[0] == 0 && (int) $active[1] == 0 && (int) $active[2] == 0)
|
||||
{
|
||||
$sql_where .= ' AND u.user_lastvisit = 0';
|
||||
}
|
||||
else if ($active_select === 'gt')
|
||||
{
|
||||
$sql_where .= ' AND u.user_lastvisit ' . $find_key_match[$active_select] . ' ' . $active_time;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql_where .= ' AND (u.user_lastvisit > 0 AND u.user_lastvisit < ' . $active_time . ')';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1146,18 +1234,18 @@ switch ($mode)
|
||||
$avatar_img = phpbb_get_group_avatar($group_row);
|
||||
|
||||
// ... same for group rank
|
||||
$user_rank_data = array(
|
||||
$group_rank_data = array(
|
||||
'title' => null,
|
||||
'img' => null,
|
||||
'img_src' => null,
|
||||
);
|
||||
if ($group_row['group_rank'])
|
||||
{
|
||||
$user_rank_data = phpbb_get_user_rank($group_row, false);
|
||||
$group_rank_data = $group_helper->get_rank($group_row);
|
||||
|
||||
if ($user_rank_data['img'])
|
||||
if ($group_rank_data['img'])
|
||||
{
|
||||
$user_rank_data['img'] .= '<br />';
|
||||
$group_rank_data['img'] .= '<br />';
|
||||
}
|
||||
}
|
||||
// include modules for manage groups link display or not
|
||||
@@ -1184,11 +1272,11 @@ switch ($mode)
|
||||
'GROUP_NAME' => $group_helper->get_name($group_row['group_name']),
|
||||
'GROUP_COLOR' => $group_row['group_colour'],
|
||||
'GROUP_TYPE' => $user->lang['GROUP_IS_' . $group_row['l_group_type']],
|
||||
'GROUP_RANK' => $user_rank_data['title'],
|
||||
'GROUP_RANK' => $group_rank_data['title'],
|
||||
|
||||
'AVATAR_IMG' => $avatar_img,
|
||||
'RANK_IMG' => $user_rank_data['img'],
|
||||
'RANK_IMG_SRC' => $user_rank_data['img_src'],
|
||||
'RANK_IMG' => $group_rank_data['img'],
|
||||
'RANK_IMG_SRC' => $group_rank_data['img_src'],
|
||||
|
||||
'U_PM' => ($auth->acl_get('u_sendpm') && $auth->acl_get('u_masspm_group') && $group_row['group_receive_pm'] && $config['allow_privmsg'] && $config['allow_mass_pm']) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=compose&g=' . $group_id) : '',
|
||||
'U_MANAGE' => ($can_manage_group) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=ucp_groups&mode=manage') : false,)
|
||||
@@ -1308,11 +1396,6 @@ switch ($mode)
|
||||
}
|
||||
$sort_params[] = "mode=$mode";
|
||||
|
||||
$pagination_url = append_sid("{$phpbb_root_path}memberlist.$phpEx", implode('&', $params));
|
||||
$sort_url = append_sid("{$phpbb_root_path}memberlist.$phpEx", implode('&', $sort_params));
|
||||
|
||||
unset($search_params, $sort_params);
|
||||
|
||||
$u_first_char_params = implode('&', $u_first_char_params);
|
||||
$u_first_char_params .= ($u_first_char_params) ? '&' : '';
|
||||
|
||||
@@ -1324,16 +1407,47 @@ switch ($mode)
|
||||
}
|
||||
$first_characters['other'] = $user->lang['OTHER'];
|
||||
|
||||
$first_char_block_vars = [];
|
||||
|
||||
foreach ($first_characters as $char => $desc)
|
||||
{
|
||||
$template->assign_block_vars('first_char', array(
|
||||
$first_char_block_vars[] = [
|
||||
'DESC' => $desc,
|
||||
'VALUE' => $char,
|
||||
'S_SELECTED' => ($first_char == $char) ? true : false,
|
||||
'U_SORT' => append_sid("{$phpbb_root_path}memberlist.$phpEx", $u_first_char_params . 'first_char=' . $char) . '#memberlist',
|
||||
));
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify memberlist sort and pagination parameters
|
||||
*
|
||||
* @event core.memberlist_modify_sort_pagination_params
|
||||
* @var array sort_params Array with URL parameters for sorting
|
||||
* @var array params Array with URL parameters for pagination
|
||||
* @var array first_characters Array that maps each letter in a-z, 'other' and the empty string to their display representation
|
||||
* @var string u_first_char_params Concatenated URL parameters for first character search links
|
||||
* @var array first_char_block_vars Template block variables for each first character
|
||||
* @var int total_users Total number of users found in this search
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = [
|
||||
'sort_params',
|
||||
'params',
|
||||
'first_characters',
|
||||
'u_first_char_params',
|
||||
'first_char_block_vars',
|
||||
'total_users',
|
||||
];
|
||||
extract($phpbb_dispatcher->trigger_event('core.memberlist_modify_sort_pagination_params', compact($vars)));
|
||||
|
||||
$template->assign_block_vars_array('first_char', $first_char_block_vars);
|
||||
|
||||
$pagination_url = append_sid("{$phpbb_root_path}memberlist.$phpEx", implode('&', $params));
|
||||
$sort_url = append_sid("{$phpbb_root_path}memberlist.$phpEx", implode('&', $sort_params));
|
||||
|
||||
unset($search_params, $sort_params);
|
||||
|
||||
// Some search user specific data
|
||||
if (($mode == '' || $mode == 'searchuser') && ($config['load_search'] || $auth->acl_get('a_')))
|
||||
{
|
||||
@@ -1469,19 +1583,58 @@ switch ($mode)
|
||||
// Do the SQL thang
|
||||
if ($mode == 'group')
|
||||
{
|
||||
$sql = "SELECT u.*
|
||||
$sql_select
|
||||
FROM " . USERS_TABLE . " u
|
||||
$sql_from
|
||||
WHERE " . $db->sql_in_set('u.user_id', $user_list) . "
|
||||
$sql_where_data";
|
||||
$sql_from_ary = explode(',', $sql_from);
|
||||
$extra_tables = [];
|
||||
foreach ($sql_from_ary as $entry)
|
||||
{
|
||||
$table_data = explode(' ', trim($entry));
|
||||
|
||||
if (empty($table_data[0]) || empty($table_data[1]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$extra_tables[$table_data[0]] = $table_data[1];
|
||||
}
|
||||
|
||||
$sql_array = array(
|
||||
'SELECT' => 'u.*' . $sql_select,
|
||||
'FROM' => array_merge([USERS_TABLE => 'u'], $extra_tables),
|
||||
'WHERE' => $db->sql_in_set('u.user_id', $user_list) . $sql_where_data . '',
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = 'SELECT *
|
||||
FROM ' . USERS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('user_id', $user_list);
|
||||
$sql_array = array(
|
||||
'SELECT' => 'u.*',
|
||||
'FROM' => array(
|
||||
USERS_TABLE => 'u'
|
||||
),
|
||||
'WHERE' => $db->sql_in_set('u.user_id', $user_list),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify user data SQL before member row is created
|
||||
*
|
||||
* @event core.memberlist_modify_memberrow_sql
|
||||
* @var string mode Memberlist mode
|
||||
* @var string sql_select Additional select statement
|
||||
* @var string sql_from Additional from statement
|
||||
* @var array sql_array Array containing the main query
|
||||
* @var array user_list Array containing list of users
|
||||
* @since 3.2.6-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'mode',
|
||||
'sql_select',
|
||||
'sql_from',
|
||||
'sql_array',
|
||||
'user_list',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.memberlist_modify_memberrow_sql', compact($vars)));
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_array);
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$id_cache = array();
|
||||
@@ -1492,9 +1645,10 @@ switch ($mode)
|
||||
|
||||
$id_cache[$row['user_id']] = $row;
|
||||
}
|
||||
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
// Load custom profile fields
|
||||
// Load custom profile fields if required
|
||||
if ($config['load_cpf_memberlist'])
|
||||
{
|
||||
// Grab all profile fields from users in id cache for later use - similar to the poster cache
|
||||
|
@@ -191,7 +191,7 @@ class oauth extends \phpbb\auth\provider\base
|
||||
return $provider->login($username, $password);
|
||||
}
|
||||
|
||||
// Requst the name of the OAuth service
|
||||
// Request the name of the OAuth service
|
||||
$service_name_original = $this->request->variable('oauth_service', '', false);
|
||||
$service_name = 'auth.provider.oauth.service.' . strtolower($service_name_original);
|
||||
if ($service_name_original === '' || !array_key_exists($service_name, $this->service_providers))
|
||||
@@ -221,24 +221,33 @@ class oauth extends \phpbb\auth\provider\base
|
||||
'provider' => $service_name_original,
|
||||
'oauth_provider_id' => $unique_id
|
||||
);
|
||||
|
||||
$sql = 'SELECT user_id FROM ' . $this->auth_provider_oauth_token_account_assoc . '
|
||||
WHERE ' . $this->db->sql_build_array('SELECT', $data);
|
||||
$result = $this->db->sql_query($sql);
|
||||
$row = $this->db->sql_fetchrow($result);
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
$redirect_data = array(
|
||||
'auth_provider' => 'oauth',
|
||||
'login_link_oauth_service' => $service_name_original,
|
||||
);
|
||||
|
||||
/**
|
||||
* Event is triggered before check if provider is already associated with an account
|
||||
*
|
||||
* @event core.oauth_login_after_check_if_provider_id_has_match
|
||||
* @var array row User row
|
||||
* @var array data Provider data
|
||||
* @var \OAuth\Common\Service\ServiceInterface service OAuth service
|
||||
* @var array row User row
|
||||
* @var array data Provider data
|
||||
* @var array redirect_data Data to be appended to the redirect url
|
||||
* @var \OAuth\Common\Service\ServiceInterface service OAuth service
|
||||
* @since 3.2.3-RC1
|
||||
* @changed 3.2.6-RC1 Added redirect_data
|
||||
*/
|
||||
$vars = array(
|
||||
'row',
|
||||
'data',
|
||||
'redirect_data',
|
||||
'service',
|
||||
);
|
||||
extract($this->dispatcher->trigger_event('core.oauth_login_after_check_if_provider_id_has_match', compact($vars)));
|
||||
@@ -250,15 +259,12 @@ class oauth extends \phpbb\auth\provider\base
|
||||
'status' => LOGIN_SUCCESS_LINK_PROFILE,
|
||||
'error_msg' => 'LOGIN_OAUTH_ACCOUNT_NOT_LINKED',
|
||||
'user_row' => array(),
|
||||
'redirect_data' => array(
|
||||
'auth_provider' => 'oauth',
|
||||
'login_link_oauth_service' => $service_name_original,
|
||||
),
|
||||
'redirect_data' => $redirect_data,
|
||||
);
|
||||
}
|
||||
|
||||
// Retrieve the user's account
|
||||
$sql = 'SELECT user_id, username, user_password, user_passchg, user_email, user_type, user_login_attempts
|
||||
$sql = 'SELECT user_id, username, user_password, user_passchg, user_email, user_ip, user_type, user_login_attempts
|
||||
FROM ' . $this->users_table . '
|
||||
WHERE user_id = ' . (int) $row['user_id'];
|
||||
$result = $this->db->sql_query($sql);
|
||||
@@ -270,11 +276,36 @@ class oauth extends \phpbb\auth\provider\base
|
||||
throw new \Exception('AUTH_PROVIDER_OAUTH_ERROR_INVALID_ENTRY');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the user is banned.
|
||||
* The fourth parameter, return, has to be true,
|
||||
* otherwise the OAuth login is still called and
|
||||
* an uncaught exception is thrown as there is no
|
||||
* token stored in the database.
|
||||
*/
|
||||
$ban = $this->user->check_ban($row['user_id'], $row['user_ip'], $row['user_email'], true);
|
||||
if (!empty($ban))
|
||||
{
|
||||
$till_date = !empty($ban['ban_end']) ? $this->user->format_date($ban['ban_end']) : '';
|
||||
$message = !empty($ban['ban_end']) ? 'BOARD_BAN_TIME' : 'BOARD_BAN_PERM';
|
||||
|
||||
$contact_link = phpbb_get_board_contact_link($this->config, $this->phpbb_root_path, $this->php_ext);
|
||||
$message = $this->user->lang($message, $till_date, '<a href="' . $contact_link . '">', '</a>');
|
||||
$message .= !empty($ban['ban_give_reason']) ? '<br /><br />' . $this->user->lang('BOARD_BAN_REASON', $ban['ban_give_reason']) : '';
|
||||
$message .= !empty($ban['ban_triggered_by']) ? '<br /><br /><em>' . $this->user->lang('BAN_TRIGGERED_BY_' . strtoupper($ban['ban_triggered_by'])) . '</em>' : '';
|
||||
|
||||
return array(
|
||||
'status' => LOGIN_BREAK,
|
||||
'error_msg' => $message,
|
||||
'user_row' => $row,
|
||||
);
|
||||
}
|
||||
|
||||
// Update token storage to store the user_id
|
||||
$storage->set_user_id($row['user_id']);
|
||||
|
||||
/**
|
||||
* Event is triggered after user is successfuly logged in via OAuth.
|
||||
* Event is triggered after user is successfully logged in via OAuth.
|
||||
*
|
||||
* @event core.auth_oauth_login_after
|
||||
* @var array row User row
|
||||
@@ -392,7 +423,7 @@ class oauth extends \phpbb\auth\provider\base
|
||||
if ($credentials['key'] && $credentials['secret'])
|
||||
{
|
||||
$actual_name = str_replace('auth.provider.oauth.service.', '', $service_name);
|
||||
$redirect_url = build_url(false) . '&login=external&oauth_service=' . $actual_name;
|
||||
$redirect_url = generate_board_url() . '/ucp.' . $this->php_ext . '?mode=login&login=external&oauth_service=' . $actual_name;
|
||||
$login_data['BLOCK_VARS'][$service_name] = array(
|
||||
'REDIRECT_URL' => redirect($redirect_url, true),
|
||||
'SERVICE_NAME' => $this->user->lang['AUTH_PROVIDER_OAUTH_SERVICE_' . strtoupper($actual_name)],
|
||||
@@ -603,6 +634,21 @@ class oauth extends \phpbb\auth\provider\base
|
||||
*/
|
||||
protected function link_account_perform_link(array $data)
|
||||
{
|
||||
// Check if the external account is already associated with other user
|
||||
$sql = 'SELECT user_id
|
||||
FROM ' . $this->auth_provider_oauth_token_account_assoc . "
|
||||
WHERE provider = '" . $this->db->sql_escape($data['provider']) . "'
|
||||
AND oauth_provider_id = '" . $this->db->sql_escape($data['oauth_provider_id']) . "'";
|
||||
$result = $this->db->sql_query($sql);
|
||||
$row = $this->db->sql_fetchrow($result);
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
if ($row)
|
||||
{
|
||||
trigger_error('AUTH_PROVIDER_OAUTH_ERROR_ALREADY_LINKED');
|
||||
}
|
||||
|
||||
// Link account
|
||||
$sql = 'INSERT INTO ' . $this->auth_provider_oauth_token_account_assoc . '
|
||||
' . $this->db->sql_build_array('INSERT', $data);
|
||||
$this->db->sql_query($sql);
|
||||
@@ -674,6 +720,7 @@ class oauth extends \phpbb\auth\provider\base
|
||||
'oauth_service' => $actual_name,
|
||||
),
|
||||
|
||||
'SERVICE_ID' => $actual_name,
|
||||
'SERVICE_NAME' => $this->user->lang['AUTH_PROVIDER_OAUTH_SERVICE_' . strtoupper($actual_name)],
|
||||
'UNIQUE_ID' => (isset($oauth_user_ids[$actual_name])) ? $oauth_user_ids[$actual_name] : null,
|
||||
);
|
||||
@@ -707,7 +754,7 @@ class oauth extends \phpbb\auth\provider\base
|
||||
AND user_id = " . (int) $user_id;
|
||||
$this->db->sql_query($sql);
|
||||
|
||||
// Clear all tokens belonging to the user on this servce
|
||||
// Clear all tokens belonging to the user on this service
|
||||
$service_name = 'auth.provider.oauth.service.' . strtolower($link_data['oauth_service']);
|
||||
$storage = new \phpbb\auth\provider\oauth\token_storage($this->db, $this->user, $this->auth_provider_oauth_token_storage_table, $this->auth_provider_oauth_state_table);
|
||||
$storage->clearToken($service_name);
|
||||
|
@@ -71,9 +71,10 @@ interface provider_interface
|
||||
* options with whatever configuraton values are passed to it as an array.
|
||||
* It then returns the name of the acp file related to this authentication
|
||||
* provider.
|
||||
* @param array $new_config Contains the new configuration values that
|
||||
* have been set in acp_board.
|
||||
* @return array|null Returns null if not implemented or an array with
|
||||
*
|
||||
* @param \phpbb\config\config $new_config Contains the new configuration values
|
||||
* that have been set in acp_board.
|
||||
* @return array|null Returns null if not implemented or an array with
|
||||
* the template file name and an array of the vars
|
||||
* that the template needs that must conform to the
|
||||
* following example:
|
||||
|
@@ -148,7 +148,8 @@ class upload extends \phpbb\avatar\driver\driver
|
||||
|
||||
// Do not allow specifying the port (see RFC 3986) or IP addresses
|
||||
// remote_upload() will do its own check for allowed filetypes
|
||||
if (preg_match('@^(http|https|ftp)://[^/:?#]+:[0-9]+[/:?#]@i', $url) ||
|
||||
if (!preg_match('#^(http|https|ftp)://(?:(.*?\.)*?[a-z0-9\-]+?\.[a-z]{2,4}|(?:\d{1,3}\.){3,5}\d{1,3}):?([0-9]*?).*?\.('. implode('|', $this->allowed_extensions) . ')$#i', $url) ||
|
||||
preg_match('@^(http|https|ftp)://[^/:?#]+:[0-9]+[/:?#]@i', $url) ||
|
||||
preg_match('#^(http|https|ftp)://(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])#i', $url) ||
|
||||
preg_match('#^(http|https|ftp)://(?:(?:(?:[\dA-F]{1,4}:){6}(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:::(?:[\dA-F]{1,4}:){0,5}(?:[\dA-F]{1,4}(?::[\dA-F]{1,4})?|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:):(?:[\dA-F]{1,4}:){4}(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,2}:(?:[\dA-F]{1,4}:){3}(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,3}:(?:[\dA-F]{1,4}:){2}(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,4}:(?:[\dA-F]{1,4}:)(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,5}:(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,6}:[\dA-F]{1,4})|(?:(?:[\dA-F]{1,4}:){1,7}:)|(?:::))#i', $url))
|
||||
{
|
||||
|
@@ -271,7 +271,7 @@ class manager
|
||||
$config_name = $driver->get_config_name();
|
||||
|
||||
return array(
|
||||
'allow_avatar_' . $config_name => array('lang' => 'ALLOW_' . strtoupper(str_replace('\\', '_', $config_name)), 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
|
||||
'allow_avatar_' . $config_name => array('lang' => 'ALLOW_' . strtoupper(str_replace('\\', '_', $config_name)), 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -51,7 +51,7 @@ class gd extends captcha_abstract
|
||||
return 'CAPTCHA_GD';
|
||||
}
|
||||
|
||||
function acp_page($id, &$module)
|
||||
function acp_page($id, $module)
|
||||
{
|
||||
global $user, $template, $phpbb_log, $request;
|
||||
global $config;
|
||||
|
@@ -33,7 +33,7 @@ class gd_wave extends captcha_abstract
|
||||
return '\\phpbb\\captcha\\gd_wave';
|
||||
}
|
||||
|
||||
function acp_page($id, &$module)
|
||||
function acp_page($id, $module)
|
||||
{
|
||||
global $user;
|
||||
|
||||
|
@@ -33,7 +33,7 @@ class nogd extends captcha_abstract
|
||||
return '\\phpbb\\captcha\\non_gd';
|
||||
}
|
||||
|
||||
function acp_page($id, &$module)
|
||||
function acp_page($id, $module)
|
||||
{
|
||||
global $user;
|
||||
|
||||
|
@@ -21,7 +21,7 @@ class qa
|
||||
{
|
||||
var $confirm_id;
|
||||
var $answer;
|
||||
var $question_ids;
|
||||
var $question_ids = [];
|
||||
var $question_text;
|
||||
var $question_lang;
|
||||
var $question_strict;
|
||||
@@ -107,8 +107,7 @@ class qa
|
||||
|
||||
$sql = 'SELECT q.question_id, q.lang_iso
|
||||
FROM ' . $this->table_captcha_questions . ' q, ' . $this->table_captcha_answers . ' a
|
||||
WHERE q.question_id = a.question_id
|
||||
GROUP BY lang_iso';
|
||||
WHERE q.question_id = a.question_id';
|
||||
$result = $db->sql_query($sql, 7200);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
@@ -638,7 +637,7 @@ class qa
|
||||
/**
|
||||
* API function - The ACP backend, this marks the end of the easy methods
|
||||
*/
|
||||
function acp_page($id, &$module)
|
||||
function acp_page($id, $module)
|
||||
{
|
||||
global $config, $request, $phpbb_log, $template, $user;
|
||||
|
||||
@@ -776,7 +775,7 @@ class qa
|
||||
/**
|
||||
* This handles the list overview
|
||||
*/
|
||||
function acp_question_list(&$module)
|
||||
function acp_question_list($module)
|
||||
{
|
||||
global $db, $template;
|
||||
|
||||
|
@@ -66,7 +66,7 @@ class recaptcha extends captcha_abstract
|
||||
throw new \Exception('No generator class given.');
|
||||
}
|
||||
|
||||
function acp_page($id, &$module)
|
||||
function acp_page($id, $module)
|
||||
{
|
||||
global $config, $template, $user, $phpbb_log, $request;
|
||||
|
||||
|
@@ -18,6 +18,11 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
class delete extends \phpbb\console\command\command
|
||||
{
|
||||
/**
|
||||
* @var \phpbb\config\config
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* @var \phpbb\db\driver\driver_interface
|
||||
*/
|
||||
@@ -32,12 +37,14 @@ class delete extends \phpbb\console\command\command
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param \config\config $config The config
|
||||
* @param \phpbb\user $user The user object (used to get language information)
|
||||
* @param \phpbb\db\driver\driver_interface $db Database connection
|
||||
* @param string $phpbb_root_path Root path
|
||||
*/
|
||||
public function __construct(\phpbb\user $user, \phpbb\db\driver\driver_interface $db, $phpbb_root_path)
|
||||
public function __construct(\phpbb\config\config $config, \phpbb\user $user, \phpbb\db\driver\driver_interface $db, $phpbb_root_path)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->db = $db;
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
|
||||
@@ -101,7 +108,7 @@ class delete extends \phpbb\console\command\command
|
||||
$return = 0;
|
||||
while ($row = $this->db->sql_fetchrow($result))
|
||||
{
|
||||
$thumbnail_path = $this->phpbb_root_path . 'files/thumb_' . $row['physical_filename'];
|
||||
$thumbnail_path = $this->phpbb_root_path . $this->config['upload_path'] . '/thumb_' . $row['physical_filename'];
|
||||
|
||||
if (@unlink($thumbnail_path))
|
||||
{
|
||||
|
@@ -19,6 +19,11 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
class generate extends \phpbb\console\command\command
|
||||
{
|
||||
/**
|
||||
* @var \phpbb\config\config
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* @var \phpbb\db\driver\driver_interface
|
||||
*/
|
||||
@@ -45,14 +50,16 @@ class generate extends \phpbb\console\command\command
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param \config\config $config The config
|
||||
* @param \phpbb\user $user The user object (used to get language information)
|
||||
* @param \phpbb\db\driver\driver_interface $db Database connection
|
||||
* @param \phpbb\cache\service $cache The cache service
|
||||
* @param string $phpbb_root_path Root path
|
||||
* @param string $php_ext PHP extension
|
||||
*/
|
||||
public function __construct(\phpbb\user $user, \phpbb\db\driver\driver_interface $db, \phpbb\cache\service $cache, $phpbb_root_path, $php_ext)
|
||||
public function __construct(\phpbb\config\config $config, \phpbb\user $user, \phpbb\db\driver\driver_interface $db, \phpbb\cache\service $cache, $phpbb_root_path, $php_ext)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->db = $db;
|
||||
$this->cache = $cache;
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
@@ -126,8 +133,8 @@ class generate extends \phpbb\console\command\command
|
||||
{
|
||||
if (isset($extensions[$row['extension']]['display_cat']) && $extensions[$row['extension']]['display_cat'] == ATTACHMENT_CATEGORY_IMAGE)
|
||||
{
|
||||
$source = $this->phpbb_root_path . 'files/' . $row['physical_filename'];
|
||||
$destination = $this->phpbb_root_path . 'files/thumb_' . $row['physical_filename'];
|
||||
$source = $this->phpbb_root_path . $this->config['upload_path'] . '/' . $row['physical_filename'];
|
||||
$destination = $this->phpbb_root_path . $this->config['upload_path'] . '/thumb_' . $row['physical_filename'];
|
||||
|
||||
if (create_thumbnail($source, $destination, $row['mimetype']))
|
||||
{
|
||||
|
34
phpBB/phpbb/db/migration/data/v32x/disable_remote_avatar.php
Normal file
34
phpBB/phpbb/db/migration/data/v32x/disable_remote_avatar.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\db\migration\data\v32x;
|
||||
|
||||
use phpbb\db\migration\migration;
|
||||
|
||||
class disable_remote_avatar extends migration
|
||||
{
|
||||
static public function depends_on()
|
||||
{
|
||||
return array(
|
||||
'\phpbb\db\migration\data\v32x\v325',
|
||||
);
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('config.update', array('allow_avatar_remote', '0')),
|
||||
array('config.update', array('allow_avatar_remote_upload', '0')),
|
||||
);
|
||||
}
|
||||
}
|
42
phpBB/phpbb/db/migration/data/v32x/smtp_dynamic_data.php
Normal file
42
phpBB/phpbb/db/migration/data/v32x/smtp_dynamic_data.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\db\migration\data\v32x;
|
||||
|
||||
class smtp_dynamic_data extends \phpbb\db\migration\migration
|
||||
{
|
||||
static public function depends_on()
|
||||
{
|
||||
return array(
|
||||
'\phpbb\db\migration\data\v32x\v326rc1',
|
||||
);
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('custom', array(array($this, 'set_smtp_dynamic'))),
|
||||
);
|
||||
}
|
||||
|
||||
public function set_smtp_dynamic()
|
||||
{
|
||||
$smtp_auth_entries = [
|
||||
'smtp_password',
|
||||
'smtp_username',
|
||||
];
|
||||
$this->sql_query('UPDATE ' . CONFIG_TABLE . '
|
||||
SET is_dynamic = 1
|
||||
WHERE ' . $this->db->sql_in_set('config_name', $smtp_auth_entries));
|
||||
}
|
||||
}
|
29
phpBB/phpbb/db/migration/data/v32x/timezone_p3.php
Normal file
29
phpBB/phpbb/db/migration/data/v32x/timezone_p3.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\db\migration\data\v32x;
|
||||
|
||||
class timezone_p3 extends \phpbb\db\migration\migration
|
||||
{
|
||||
static public function depends_on()
|
||||
{
|
||||
return array('\phpbb\db\migration\data\v310\timezone');
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('config.remove', array('board_dst')),
|
||||
);
|
||||
}
|
||||
}
|
39
phpBB/phpbb/db/migration/data/v32x/v326.php
Normal file
39
phpBB/phpbb/db/migration/data/v32x/v326.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\db\migration\data\v32x;
|
||||
|
||||
class v326 extends \phpbb\db\migration\migration
|
||||
{
|
||||
public function effectively_installed()
|
||||
{
|
||||
return phpbb_version_compare($this->config['version'], '3.2.6', '>=');
|
||||
}
|
||||
|
||||
static public function depends_on()
|
||||
{
|
||||
return array(
|
||||
'\phpbb\db\migration\data\v32x\v326rc1',
|
||||
'\phpbb\db\migration\data\v32x\disable_remote_avatar',
|
||||
'\phpbb\db\migration\data\v32x\smtp_dynamic_data',
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('config.update', array('version', '3.2.6')),
|
||||
);
|
||||
}
|
||||
}
|
37
phpBB/phpbb/db/migration/data/v32x/v326rc1.php
Normal file
37
phpBB/phpbb/db/migration/data/v32x/v326rc1.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\db\migration\data\v32x;
|
||||
|
||||
class v326rc1 extends \phpbb\db\migration\migration
|
||||
{
|
||||
public function effectively_installed()
|
||||
{
|
||||
return phpbb_version_compare($this->config['version'], '3.2.6-RC1', '>=');
|
||||
}
|
||||
|
||||
static public function depends_on()
|
||||
{
|
||||
return array(
|
||||
'\phpbb\db\migration\data\v32x\v325',
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('config.update', array('version', '3.2.6-RC1')),
|
||||
);
|
||||
}
|
||||
}
|
37
phpBB/phpbb/db/migration/data/v32x/v327.php
Normal file
37
phpBB/phpbb/db/migration/data/v32x/v327.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\db\migration\data\v32x;
|
||||
|
||||
class v327 extends \phpbb\db\migration\migration
|
||||
{
|
||||
public function effectively_installed()
|
||||
{
|
||||
return phpbb_version_compare($this->config['version'], '3.2.7', '>=');
|
||||
}
|
||||
|
||||
static public function depends_on()
|
||||
{
|
||||
return array(
|
||||
'\phpbb\db\migration\data\v32x\v327rc1',
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('config.update', array('version', '3.2.7')),
|
||||
);
|
||||
}
|
||||
}
|
36
phpBB/phpbb/db/migration/data/v32x/v327rc1.php
Normal file
36
phpBB/phpbb/db/migration/data/v32x/v327rc1.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\db\migration\data\v32x;
|
||||
|
||||
class v327rc1 extends \phpbb\db\migration\migration
|
||||
{
|
||||
public function effectively_installed()
|
||||
{
|
||||
return phpbb_version_compare($this->config['version'], '3.2.7-RC1', '>=');
|
||||
}
|
||||
|
||||
static public function depends_on()
|
||||
{
|
||||
return array(
|
||||
'\phpbb\db\migration\data\v32x\v326',
|
||||
);
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('config.update', array('version', '3.2.7-RC1')),
|
||||
);
|
||||
}
|
||||
}
|
37
phpBB/phpbb/db/migration/data/v32x/v328rc1.php
Normal file
37
phpBB/phpbb/db/migration/data/v32x/v328rc1.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace phpbb\db\migration\data\v32x;
|
||||
|
||||
class v328rc1 extends \phpbb\db\migration\migration
|
||||
{
|
||||
public function effectively_installed()
|
||||
{
|
||||
return phpbb_version_compare($this->config['version'], '3.2.8-RC1', '>=');
|
||||
}
|
||||
|
||||
static public function depends_on()
|
||||
{
|
||||
return array(
|
||||
'\phpbb\db\migration\data\v32x\timezone_p3',
|
||||
'\phpbb\db\migration\data\v32x\v327',
|
||||
);
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('config.update', array('version', '3.2.8-RC1')),
|
||||
);
|
||||
}
|
||||
}
|
@@ -576,7 +576,7 @@ class tools implements tools_interface
|
||||
{
|
||||
foreach ($indexes as $index_name)
|
||||
{
|
||||
if (!$this->sql_index_exists($table, $index_name))
|
||||
if (!$this->sql_index_exists($table, $index_name) && !$this->sql_unique_index_exists($table, $index_name))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user