mirror of
https://github.com/phpbb/phpbb.git
synced 2025-09-20 04:51:38 +02:00
Compare commits
207 Commits
release-3.
...
release-3.
Author | SHA1 | Date | |
---|---|---|---|
|
7d73d1ff83 | ||
|
c958ba13e8 | ||
|
2f17757f4e | ||
|
b8bbf9db03 | ||
|
4267cc3a43 | ||
|
90e9d5c462 | ||
|
cdd56c0505 | ||
|
18f9c9f6e2 | ||
|
97040dc6ff | ||
|
931582aad9 | ||
|
3910387ee5 | ||
|
d2f95ef875 | ||
|
537dca0892 | ||
|
2436af94e3 | ||
|
75f57fa407 | ||
|
a078336cb1 | ||
|
4da479d47f | ||
|
bc08813866 | ||
|
6b435cbf13 | ||
|
72f6241aa2 | ||
|
585a3ed863 | ||
|
abb01946bd | ||
|
27e33f39f7 | ||
|
c3578bc3e3 | ||
|
0d3ca3883e | ||
|
a084b07495 | ||
|
bf397cb985 | ||
|
73b9327631 | ||
|
bd59241110 | ||
|
33584f12f0 | ||
|
2ae08dc3ba | ||
|
32ba128ea5 | ||
|
70aa4407d3 | ||
|
5503c09cd5 | ||
|
6d589a8bb9 | ||
|
43c52b073b | ||
|
4b8e8df55c | ||
|
dccb5564d2 | ||
|
857a085496 | ||
|
ce48b4de57 | ||
|
2efdaaa0e2 | ||
|
64178b40b8 | ||
|
65921a7891 | ||
|
f008708d5c | ||
|
d737430a03 | ||
|
b3e8eb9feb | ||
|
bd0244180b | ||
|
3ee5472a8c | ||
|
557f85e7fc | ||
|
a019a86bfc | ||
|
71a70500ea | ||
|
863d65112b | ||
|
429ecb938c | ||
|
a36f96aefa | ||
|
b14043b276 | ||
|
6bcc372af5 | ||
|
eccb3d6602 | ||
|
773f6d08a5 | ||
|
463e8e4b13 | ||
|
7c99fcf782 | ||
|
775d1c855a | ||
|
e050cf5c11 | ||
|
bb11294b96 | ||
|
488fd8f54c | ||
|
f68e98c064 | ||
|
c016e09ca4 | ||
|
48696b5148 | ||
|
263fbe54fc | ||
|
4a92a8efb5 | ||
|
c12d67cd90 | ||
|
52afa74f4e | ||
|
b00a39b9ad | ||
|
6078bae7f8 | ||
|
317f3e848f | ||
|
2ee8bd0c4a | ||
|
a277f9cf07 | ||
|
8e1461ca61 | ||
|
9fb649793d | ||
|
b74e811496 | ||
|
7e1e3e1a5e | ||
|
0771eaa732 | ||
|
1455be2260 | ||
|
3bf64de247 | ||
|
2dae36e3fb | ||
|
6fd507f60d | ||
|
5330ea0f09 | ||
|
3038bf5eaf | ||
|
ba13832085 | ||
|
2081a78095 | ||
|
f68820762b | ||
|
f222f8a84a | ||
|
d51c67440e | ||
|
0cc41be3c0 | ||
|
4ac2547d62 | ||
|
ef132e1531 | ||
|
55223e6840 | ||
|
29d2c66922 | ||
|
941be83395 | ||
|
8e8e25cc1f | ||
|
e7289fa019 | ||
|
5b501e594c | ||
|
4eecc95a42 | ||
|
5eb493fa86 | ||
|
43e0283fb1 | ||
|
8cf2790d55 | ||
|
eaafb758ce | ||
|
33cd613406 | ||
|
20e08aa2a0 | ||
|
da7c41f167 | ||
|
ef91c6abed | ||
|
f3fe610a5e | ||
|
0026ed02ae | ||
|
befacabf7e | ||
|
775df0eb8a | ||
|
3df9b2c8f8 | ||
|
e8454e018d | ||
|
78a0d10a5a | ||
|
960dc08946 | ||
|
d0a5f87a44 | ||
|
a1ecb6db69 | ||
|
63db42522b | ||
|
a840d70bbf | ||
|
51952005eb | ||
|
b54aa81cdd | ||
|
6f109dd1ef | ||
|
38082c41e3 | ||
|
652e3da28d | ||
|
927cc2ebad | ||
|
2ec4855cba | ||
|
55b854906d | ||
|
1c52968df6 | ||
|
cddb884be6 | ||
|
53b9216c78 | ||
|
a3c10f575b | ||
|
2f53761eaf | ||
|
c4b93c9c1c | ||
|
65a4f0d631 | ||
|
9170261885 | ||
|
f75a01182f | ||
|
7f1c4cd205 | ||
|
e4336de68d | ||
|
4653951673 | ||
|
a19bf11f73 | ||
|
9595946508 | ||
|
773a701d62 | ||
|
c60dbede3e | ||
|
aaa99b4719 | ||
|
804236bce4 | ||
|
cf8c13b04c | ||
|
83f737a30a | ||
|
6764bea40c | ||
|
3708770eb9 | ||
|
8d3716ab91 | ||
|
cff2895599 | ||
|
516670225d | ||
|
256730c76a | ||
|
e9cbb45435 | ||
|
2a53831124 | ||
|
7dc1af25bc | ||
|
d316927225 | ||
|
cf2b96def7 | ||
|
9d88238f89 | ||
|
b2141fd1a8 | ||
|
4cf666f0bc | ||
|
ff8b5058e0 | ||
|
08acf2acba | ||
|
b63c61d099 | ||
|
72248cab45 | ||
|
73073ac8c3 | ||
|
9961aefa38 | ||
|
6350798e97 | ||
|
0a512b2695 | ||
|
e30518461c | ||
|
10d96d4f33 | ||
|
191b80a750 | ||
|
c103c42857 | ||
|
dcf90a8d8b | ||
|
a8fb33218c | ||
|
e6e4c0e62d | ||
|
7e6371ea8e | ||
|
c3fd07a5f0 | ||
|
559325fbd6 | ||
|
0d7625c534 | ||
|
06507f9fa6 | ||
|
9ca3cd519a | ||
|
e7262e2d39 | ||
|
734972cc3d | ||
|
03348087d8 | ||
|
f57f09f814 | ||
|
3572f4c92e | ||
|
c7bbcd7b84 | ||
|
c0f3463819 | ||
|
c3b30144e3 | ||
|
aa3c5286cd | ||
|
8e1102b1da | ||
|
269e253524 | ||
|
4cdec74e94 | ||
|
ed378a2ec3 | ||
|
96bdcedacd | ||
|
c938077172 | ||
|
58dfff38fa | ||
|
c4ef83e4d2 | ||
|
e80f79fc9a | ||
|
920219dc56 | ||
|
04f320cb01 | ||
|
ebe5eb8342 | ||
|
3479f95090 |
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
Checklist:
|
||||
|
||||
- [ ] Correct branch: master for new features; 3.2.x, 3.1.x for fixes
|
||||
- [ ] Tests pass
|
||||
- [ ] Code follows coding guidelines: [master / 3.2.x](https://area51.phpbb.com/docs/master/coding-guidelines.html), [3.1.x](https://area51.phpbb.com/docs/31x/coding-guidelines.html)
|
||||
- [ ] Commit follows commit message [format](https://wiki.phpbb.com/Git#Commit_Messages)
|
||||
|
||||
Tracker ticket (set the ticket ID to **your ticket ID**):
|
||||
|
||||
https://tracker.phpbb.com/browse/PHPBB3-12345
|
@@ -19,6 +19,7 @@
|
||||
"jquery": true,
|
||||
|
||||
"globals": {
|
||||
"JSON": true
|
||||
"JSON": true,
|
||||
"phpbb": true
|
||||
}
|
||||
}
|
||||
|
@@ -22,12 +22,9 @@ matrix:
|
||||
env: DB=mysqli
|
||||
- php: 5.6
|
||||
env: DB=mysqli
|
||||
- php: 7.0
|
||||
env: DB=mysqli
|
||||
- php: hhvm
|
||||
env: DB=mysqli
|
||||
allow_failures:
|
||||
- php: 7.0
|
||||
- php: hhvm
|
||||
fast_finish: true
|
||||
|
||||
|
@@ -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.1.9" />
|
||||
<property name="prevversion" value="3.1.8" />
|
||||
<property name="olderversions" value="3.0.14, 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.9-RC1" />
|
||||
<property name="newversion" value="3.1.10-RC1" />
|
||||
<property name="prevversion" value="3.1.9" />
|
||||
<property name="olderversions" value="3.0.14, 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" />
|
||||
<!-- no configuration should be needed beyond this point -->
|
||||
|
||||
<property name="oldversions" value="${olderversions}, ${prevversion}" />
|
||||
@@ -49,7 +49,7 @@
|
||||
-->
|
||||
<target name="composer">
|
||||
<exec dir="phpBB"
|
||||
command="php ../composer.phar install --dev"
|
||||
command="php ../composer.phar install"
|
||||
checkreturn="true"
|
||||
passthru="true" />
|
||||
</target>
|
||||
@@ -143,6 +143,7 @@
|
||||
<phingcall target="export">
|
||||
<property name="revision" value="release-${version}" />
|
||||
<property name="dir" value="build/old_versions/release-${version}" />
|
||||
<property name="skip-composer" value="true" />
|
||||
</phingcall>
|
||||
|
||||
<phingcall target="clean-diff-dir">
|
||||
@@ -251,26 +252,35 @@
|
||||
<equals arg1="${composer-has-dependencies}" arg2="1" trim="true" />
|
||||
<then>
|
||||
<!-- We have non-dev composer dependencies -->
|
||||
<exec dir="."
|
||||
command="git ls-tree ${revision} composer.phar"
|
||||
checkreturn="true"
|
||||
outputProperty='composer-ls-tree-output' />
|
||||
<if>
|
||||
<equals arg1="${composer-ls-tree-output}" arg2="" trim="true" />
|
||||
<not><isset property="skip-composer" /></not>
|
||||
<then>
|
||||
<fail message="There are composer dependencies, but composer.phar is missing." />
|
||||
</then>
|
||||
<else>
|
||||
<!-- Export the phar, install dependencies, delete phar. -->
|
||||
<exec dir="."
|
||||
command="git archive ${revision} composer.phar | tar -xf - -C ${dir}"
|
||||
checkreturn="true" />
|
||||
<exec dir="${dir}"
|
||||
command="php composer.phar install --no-dev --optimize-autoloader"
|
||||
command="git ls-tree ${revision} composer.phar"
|
||||
checkreturn="true"
|
||||
passthru="true" />
|
||||
<delete file="${dir}/composer.phar" />
|
||||
</else>
|
||||
outputProperty='composer-ls-tree-output' />
|
||||
<if>
|
||||
<equals arg1="${composer-ls-tree-output}" arg2="" trim="true" />
|
||||
<then>
|
||||
<fail message="There are composer dependencies, but composer.phar is missing." />
|
||||
</then>
|
||||
<else>
|
||||
<!-- Export the phar, install dependencies, delete phar. -->
|
||||
<exec dir="."
|
||||
command="git archive ${revision} composer.phar | tar -xf - -C ${dir}"
|
||||
checkreturn="true" />
|
||||
<exec dir="${dir}"
|
||||
command="php composer.phar install --no-dev --optimize-autoloader"
|
||||
checkreturn="true"
|
||||
passthru="true" />
|
||||
<delete file="${dir}/composer.phar" />
|
||||
|
||||
<phingcall target="clean-vendor-dir">
|
||||
<property name="dir" value="${dir}" />
|
||||
</phingcall>
|
||||
</else>
|
||||
</if>
|
||||
</then>
|
||||
</if>
|
||||
</then>
|
||||
<else>
|
||||
@@ -287,10 +297,6 @@
|
||||
<delete dir="${dir}/develop" />
|
||||
<delete dir="${dir}/install/data" />
|
||||
|
||||
<phingcall target="clean-vendor-dir">
|
||||
<property name="dir" value="${dir}" />
|
||||
</phingcall>
|
||||
|
||||
<echo msg="Setting permissions for checkout of ${revision} in ${dir}" />
|
||||
<!-- set permissions of all files to 644, directories to 755 -->
|
||||
<exec dir="${dir}" command="find . -type f|xargs chmod 644" escape="false" />
|
||||
@@ -307,6 +313,7 @@
|
||||
<delete dir="${dir}/vendor/lusitanian/oauth/examples" />
|
||||
<delete dir="${dir}/vendor/lusitanian/oauth/tests" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/.gitignore" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/.scrutinizer.yml" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/.travis.yml" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/phpunit.xml.dist" />
|
||||
<delete file="${dir}/vendor/lusitanian/oauth/README.md" />
|
||||
@@ -381,10 +388,9 @@
|
||||
<delete file="${dir}/vendor/twig/twig/.editorconfig" />
|
||||
<delete file="${dir}/vendor/twig/twig/.gitignore" />
|
||||
<delete file="${dir}/vendor/twig/twig/.travis.yml" />
|
||||
<delete file="${dir}/vendor/twig/twig/AUTHORS" />
|
||||
<delete file="${dir}/vendor/twig/twig/CHANGELOG" />
|
||||
<delete file="${dir}/vendor/twig/twig/phpunit.xml.dist" />
|
||||
<delete file="${dir}/vendor/twig/twig/README.markdown" />
|
||||
<delete file="${dir}/vendor/twig/twig/README.rst" />
|
||||
</target>
|
||||
|
||||
<target name="clean-diff-dir">
|
||||
|
@@ -129,53 +129,19 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
|
||||
}
|
||||
}
|
||||
|
||||
$old_docblock = $stackPtr;
|
||||
while (($docblock = $phpcsFile->findNext(T_DOC_COMMENT_CLOSE_TAG, ($old_docblock + 1))) !== false)
|
||||
{
|
||||
$old_docblock = $docblock;
|
||||
$ok = $this->checkDocblock($phpcsFile, $docblock, $tokens, $class_name_full, $class_name_short) ? true : $ok;
|
||||
}
|
||||
|
||||
// Checks in type hinting
|
||||
$old_function_declaration = $stackPtr;
|
||||
while (($function_declaration = $phpcsFile->findNext(T_FUNCTION, ($old_function_declaration + 1))) !== false)
|
||||
{
|
||||
$old_function_declaration = $function_declaration;
|
||||
|
||||
// Check docblocks
|
||||
$find = array(
|
||||
T_COMMENT,
|
||||
T_DOC_COMMENT_CLOSE_TAG,
|
||||
T_DOC_COMMENT,
|
||||
T_CLASS,
|
||||
T_FUNCTION,
|
||||
T_OPEN_TAG,
|
||||
);
|
||||
|
||||
$comment_end = $phpcsFile->findPrevious($find, ($function_declaration - 1));
|
||||
if ($comment_end !== false)
|
||||
{
|
||||
if ($tokens[$comment_end]['code'] === T_DOC_COMMENT_CLOSE_TAG)
|
||||
{
|
||||
$comment_start = $tokens[$comment_end]['comment_opener'];
|
||||
foreach ($tokens[$comment_start]['comment_tags'] as $tag) {
|
||||
if ($tokens[$tag]['content'] !== '@param' && $tokens[$tag]['content'] !== '@return' && $tokens[$tag]['content'] !== '@throws') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$classes = $tokens[($tag + 2)]['content'];
|
||||
$space = strpos($classes, ' ');
|
||||
if ($space !== false) {
|
||||
$classes = substr($classes, 0, $space);
|
||||
}
|
||||
|
||||
$tab = strpos($classes, "\t");
|
||||
if ($tab !== false) {
|
||||
$classes = substr($classes, 0, $tab);
|
||||
}
|
||||
|
||||
$classes = explode('|', str_replace('[]', '', $classes));
|
||||
foreach ($classes as $class)
|
||||
{
|
||||
$ok = $this->check($phpcsFile, $class, $class_name_full, $class_name_short, $tokens[$tag + 2]['line']) ? true : $ok;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check type hint
|
||||
$params = $phpcsFile->getMethodParameters($function_declaration);
|
||||
foreach ($params as $param)
|
||||
@@ -234,4 +200,49 @@ class phpbb_Sniffs_Namespaces_UnusedUseSniff implements PHP_CodeSniffer_Sniff
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PHP_CodeSniffer_File $phpcsFile
|
||||
* @param int $field
|
||||
* @param array $tokens
|
||||
* @param string $class_name_full
|
||||
* @param string $class_name_short
|
||||
* @param bool $ok
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function checkDocblock(PHP_CodeSniffer_File $phpcsFile, $comment_end, $tokens, $class_name_full, $class_name_short)
|
||||
{
|
||||
$ok = false;
|
||||
|
||||
$comment_start = $tokens[$comment_end]['comment_opener'];
|
||||
foreach ($tokens[$comment_start]['comment_tags'] as $tag)
|
||||
{
|
||||
if (!in_array($tokens[$tag]['content'], array('@param', '@var', '@return', '@throws'), true))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$classes = $tokens[($tag + 2)]['content'];
|
||||
$space = strpos($classes, ' ');
|
||||
if ($space !== false)
|
||||
{
|
||||
$classes = substr($classes, 0, $space);
|
||||
}
|
||||
|
||||
$tab = strpos($classes, "\t");
|
||||
if ($tab !== false)
|
||||
{
|
||||
$classes = substr($classes, 0, $tab);
|
||||
}
|
||||
|
||||
$classes = explode('|', str_replace('[]', '', $classes));
|
||||
foreach ($classes as $class)
|
||||
{
|
||||
$ok = $this->check($phpcsFile, $class, $class_name_full, $class_name_short, $tokens[$tag + 2]['line']) ? true : $ok;
|
||||
}
|
||||
}
|
||||
|
||||
return $ok;
|
||||
}
|
||||
}
|
||||
|
@@ -25,6 +25,7 @@ $config['versions'] = Sami\Version\GitVersionCollection::create(__DIR__ . '/../'
|
||||
*/
|
||||
->add('3.0.x')
|
||||
->add('3.1.x')
|
||||
->add('3.2.x')
|
||||
->add('master')
|
||||
;
|
||||
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<legend>{L_RESTORE_OPTIONS}</legend>
|
||||
<dl>
|
||||
<dt><label for="file">{L_SELECT_FILE}{L_COLON}</label></dt>
|
||||
<dd><select id="file" name="file" size="10"><!-- BEGIN files --><option value="{files.FILE}"<!-- IF files.S_LAST_ROW --> selected="selected"<!-- ENDIF -->>{files.NAME}</option><!-- END files --></select></dd>
|
||||
<dd><select id="file" name="file" size="10"><!-- BEGIN files --><option value="{files.FILE}"<!-- IF files.S_FIRST_ROW --> selected="selected"<!-- ENDIF -->>{files.NAME}</option><!-- END files --></select></dd>
|
||||
</dl>
|
||||
|
||||
<p class="submit-buttons">
|
||||
|
@@ -14,7 +14,11 @@
|
||||
|
||||
<p>{L_ADMIN_INTRO}</p>
|
||||
|
||||
<!-- IF S_VERSIONCHECK_FAIL -->
|
||||
<!-- IF S_UPDATE_INCOMPLETE -->
|
||||
<div class="errorbox">
|
||||
<p>{L_UPDATE_INCOMPLETE} <a href="{U_VERSIONCHECK}">{L_MORE_INFORMATION}</a></p>
|
||||
</div>
|
||||
<!-- ELSEIF S_VERSIONCHECK_FAIL -->
|
||||
<div class="errorbox notice">
|
||||
<p>{L_VERSIONCHECK_FAIL}</p>
|
||||
<p>{VERSIONCHECK_FAIL_REASON}</p>
|
||||
|
@@ -63,6 +63,7 @@
|
||||
<!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
</select>
|
||||
<!-- EVENT acp_posting_buttons_custom_tags_before -->
|
||||
<!-- BEGIN custom_tags -->
|
||||
<input type="button" class="button2" name="addbbcode{custom_tags.BBCODE_ID}" value="{custom_tags.BBCODE_TAG}" onclick="bbstyle({custom_tags.BBCODE_ID})" title="{custom_tags.BBCODE_HELPLINE}" />
|
||||
<!-- END custom_tags -->
|
||||
|
@@ -6,11 +6,16 @@
|
||||
|
||||
<p>{L_VERSION_CHECK_EXPLAIN}</p>
|
||||
|
||||
<!-- IF S_UPDATE_INCOMPLETE -->
|
||||
<div class="errorbox">
|
||||
<p>{L_UPDATE_INCOMPLETE} {L_UPDATE_INCOMPLETE_MORE}</p>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF S_UP_TO_DATE -->
|
||||
<div class="successbox">
|
||||
<p>{L_VERSION_UP_TO_DATE_ACP} - <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a></p>
|
||||
</div>
|
||||
<!-- ELSE -->
|
||||
<!-- ELSEIF not S_UPDATE_INCOMPLETE -->
|
||||
<div class="errorbox">
|
||||
<p>{L_VERSION_NOT_UP_TO_DATE_ACP} - <a href="{U_VERSIONCHECK_FORCE}">{L_VERSIONCHECK_FORCE_UPDATE}</a></p>
|
||||
</div>
|
||||
@@ -18,10 +23,21 @@
|
||||
|
||||
<fieldset>
|
||||
<legend></legend>
|
||||
<!-- IF not S_UPDATE_INCOMPLETE -->
|
||||
<dl>
|
||||
<dt><label>{L_CURRENT_VERSION}</label></dt>
|
||||
<dd><strong>{CURRENT_VERSION}</strong></dd>
|
||||
</dl>
|
||||
<!-- ELSE -->
|
||||
<dl>
|
||||
<dt><label>{L_FILES_VERSION}</label></dt>
|
||||
<dd><strong>{FILES_VERSION}</strong></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label>{L_DATABASE_VERSION}</label></dt>
|
||||
<dd><strong>{CURRENT_VERSION}</strong></dd>
|
||||
</dl>
|
||||
<!-- ENDIF -->
|
||||
</fieldset>
|
||||
|
||||
<!-- BEGIN updates_available -->
|
||||
@@ -38,6 +54,11 @@
|
||||
</fieldset>
|
||||
<!-- END updates_available -->
|
||||
|
||||
<!-- IF S_UPDATE_INCOMPLETE -->
|
||||
{INCOMPLETE_INSTRUCTIONS}
|
||||
<br>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF not S_UP_TO_DATE -->
|
||||
{UPDATE_INSTRUCTIONS}
|
||||
<br /><br />
|
||||
|
206
phpBB/composer.lock
generated
206
phpBB/composer.lock
generated
@@ -1,10 +1,11 @@
|
||||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"hash": "33fa9de480a8a9c8f7e3f2926cd4c034",
|
||||
"content-hash": "2d9c1857e65554ceb4cfa435495df188",
|
||||
"packages": [
|
||||
{
|
||||
"name": "lusitanian/oauth",
|
||||
@@ -109,17 +110,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/config",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/Config",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/config.git",
|
||||
"reference": "1324aed10a750ed5a0446a71d95e321bf5d3bd24"
|
||||
"reference": "16a645cef1c09ebfc907d3c9b3e9f5836a7d4d3b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/1324aed10a750ed5a0446a71d95e321bf5d3bd24",
|
||||
"reference": "1324aed10a750ed5a0446a71d95e321bf5d3bd24",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/16a645cef1c09ebfc907d3c9b3e9f5836a7d4d3b",
|
||||
"reference": "16a645cef1c09ebfc907d3c9b3e9f5836a7d4d3b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -156,21 +157,21 @@
|
||||
],
|
||||
"description": "Symfony Config Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-04 07:12:06"
|
||||
"time": "2016-05-30 08:14:41"
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/Console",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "cc386594e19024e53e81ee7b6d6c37c221864c4e"
|
||||
"reference": "20c12c6d6c5a087a66d4e77999451713a92a3507"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/cc386594e19024e53e81ee7b6d6c37c221864c4e",
|
||||
"reference": "cc386594e19024e53e81ee7b6d6c37c221864c4e",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/20c12c6d6c5a087a66d4e77999451713a92a3507",
|
||||
"reference": "20c12c6d6c5a087a66d4e77999451713a92a3507",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -212,21 +213,21 @@
|
||||
],
|
||||
"description": "Symfony Console Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-04 09:20:54"
|
||||
"time": "2016-05-26 08:04:58"
|
||||
},
|
||||
{
|
||||
"name": "symfony/debug",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/Debug",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/debug.git",
|
||||
"reference": "a6f7b78e406658897f689fa8b00a06205446bebd"
|
||||
"reference": "863d29c31a1ddfcf1faedf5f8362f392e3261632"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/a6f7b78e406658897f689fa8b00a06205446bebd",
|
||||
"reference": "a6f7b78e406658897f689fa8b00a06205446bebd",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/863d29c31a1ddfcf1faedf5f8362f392e3261632",
|
||||
"reference": "863d29c31a1ddfcf1faedf5f8362f392e3261632",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -274,21 +275,21 @@
|
||||
],
|
||||
"description": "Symfony Debug Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-04 13:04:09"
|
||||
"time": "2016-03-30 09:02:35"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dependency-injection",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/DependencyInjection",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dependency-injection.git",
|
||||
"reference": "7cbda8ce5b5e4bd865401cf243070708e1f9a5e6"
|
||||
"reference": "06265ee128644eb70356bd72ab28c9ded6618d19"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7cbda8ce5b5e4bd865401cf243070708e1f9a5e6",
|
||||
"reference": "7cbda8ce5b5e4bd865401cf243070708e1f9a5e6",
|
||||
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/06265ee128644eb70356bd72ab28c9ded6618d19",
|
||||
"reference": "06265ee128644eb70356bd72ab28c9ded6618d19",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -333,21 +334,21 @@
|
||||
],
|
||||
"description": "Symfony DependencyInjection Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-08 16:58:37"
|
||||
"time": "2016-05-30 08:31:06"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/EventDispatcher",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||
"reference": "b2d9d812e21d6e00983061d49ee61a82f54cace7"
|
||||
"reference": "fd6d162d97bf3e6060622e5c015af39ca72e33bc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b2d9d812e21d6e00983061d49ee61a82f54cace7",
|
||||
"reference": "b2d9d812e21d6e00983061d49ee61a82f54cace7",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fd6d162d97bf3e6060622e5c015af39ca72e33bc",
|
||||
"reference": "fd6d162d97bf3e6060622e5c015af39ca72e33bc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -390,21 +391,21 @@
|
||||
],
|
||||
"description": "Symfony EventDispatcher Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-04 07:12:06"
|
||||
"time": "2016-04-04 09:22:54"
|
||||
},
|
||||
{
|
||||
"name": "symfony/filesystem",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/Filesystem",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/filesystem.git",
|
||||
"reference": "56f6725f520a357e19deaef6558c3d223046b843"
|
||||
"reference": "8fd9cd1da0afe63f0d9d4f27875782a2b7d590d3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/56f6725f520a357e19deaef6558c3d223046b843",
|
||||
"reference": "56f6725f520a357e19deaef6558c3d223046b843",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/8fd9cd1da0afe63f0d9d4f27875782a2b7d590d3",
|
||||
"reference": "8fd9cd1da0afe63f0d9d4f27875782a2b7d590d3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -440,21 +441,21 @@
|
||||
],
|
||||
"description": "Symfony Filesystem Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-10 16:50:02"
|
||||
"time": "2016-04-12 15:20:10"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-foundation",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/HttpFoundation",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-foundation.git",
|
||||
"reference": "f5cd42d4895d9ede5d26cb1b2883dd4f7e455a40"
|
||||
"reference": "9f4dbb1f3e3cad22d9462e0306c9c71212458f61"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/f5cd42d4895d9ede5d26cb1b2883dd4f7e455a40",
|
||||
"reference": "f5cd42d4895d9ede5d26cb1b2883dd4f7e455a40",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/9f4dbb1f3e3cad22d9462e0306c9c71212458f61",
|
||||
"reference": "9f4dbb1f3e3cad22d9462e0306c9c71212458f61",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -494,21 +495,21 @@
|
||||
],
|
||||
"description": "Symfony HttpFoundation Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-12 16:03:08"
|
||||
"time": "2016-05-13 15:22:39"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-kernel",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/HttpKernel",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-kernel.git",
|
||||
"reference": "a704146970a1ff261c05e865b636bcc5d95f1b5b"
|
||||
"reference": "57e0329236e8edf2b0e683043c604f7c9aba9398"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/a704146970a1ff261c05e865b636bcc5d95f1b5b",
|
||||
"reference": "a704146970a1ff261c05e865b636bcc5d95f1b5b",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/57e0329236e8edf2b0e683043c604f7c9aba9398",
|
||||
"reference": "57e0329236e8edf2b0e683043c604f7c9aba9398",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -570,20 +571,20 @@
|
||||
],
|
||||
"description": "Symfony HttpKernel Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-13 16:38:02"
|
||||
"time": "2016-05-30 08:41:10"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.1.1",
|
||||
"version": "v1.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "1289d16209491b584839022f29257ad859b8532d"
|
||||
"reference": "dff51f72b0706335131b00a7f49606168c582594"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d",
|
||||
"reference": "1289d16209491b584839022f29257ad859b8532d",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594",
|
||||
"reference": "dff51f72b0706335131b00a7f49606168c582594",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -595,7 +596,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.1-dev"
|
||||
"dev-master": "1.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -629,21 +630,21 @@
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2016-01-20 09:13:37"
|
||||
"time": "2016-05-18 14:26:46"
|
||||
},
|
||||
{
|
||||
"name": "symfony/routing",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/Routing",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/routing.git",
|
||||
"reference": "9f464f27cb127232f5c32d5a736fe769e5249442"
|
||||
"reference": "5b8a2bb7569df81401171829498809e90d6e446c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/routing/zipball/9f464f27cb127232f5c32d5a736fe769e5249442",
|
||||
"reference": "9f464f27cb127232f5c32d5a736fe769e5249442",
|
||||
"url": "https://api.github.com/repos/symfony/routing/zipball/5b8a2bb7569df81401171829498809e90d6e446c",
|
||||
"reference": "5b8a2bb7569df81401171829498809e90d6e446c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -691,21 +692,21 @@
|
||||
],
|
||||
"description": "Symfony Routing Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-04 07:12:06"
|
||||
"time": "2016-05-29 10:13:06"
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/Yaml",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/yaml.git",
|
||||
"reference": "d5a6f4c771ae5d3faedda30eeb8db4cfb40a59fe"
|
||||
"reference": "2cb5f366f9e0df014fc93de46cc416ba0a3055f8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/d5a6f4c771ae5d3faedda30eeb8db4cfb40a59fe",
|
||||
"reference": "d5a6f4c771ae5d3faedda30eeb8db4cfb40a59fe",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/2cb5f366f9e0df014fc93de46cc416ba0a3055f8",
|
||||
"reference": "2cb5f366f9e0df014fc93de46cc416ba0a3055f8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -741,20 +742,20 @@
|
||||
],
|
||||
"description": "Symfony Yaml Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-04 07:12:08"
|
||||
"time": "2016-05-30 08:10:17"
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v1.24.0",
|
||||
"version": "v1.24.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8"
|
||||
"reference": "3566d311a92aae4deec6e48682dc5a4528c4a512"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8",
|
||||
"reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3566d311a92aae4deec6e48682dc5a4528c4a512",
|
||||
"reference": "3566d311a92aae4deec6e48682dc5a4528c4a512",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -802,7 +803,7 @@
|
||||
"keywords": [
|
||||
"templating"
|
||||
],
|
||||
"time": "2016-01-25 21:22:18"
|
||||
"time": "2016-05-30 09:11:59"
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
@@ -1421,21 +1422,24 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-timer",
|
||||
"version": "1.0.7",
|
||||
"version": "1.0.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-timer.git",
|
||||
"reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
|
||||
"reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
|
||||
"reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
|
||||
"reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~4|~5"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
@@ -1458,7 +1462,7 @@
|
||||
"keywords": [
|
||||
"timer"
|
||||
],
|
||||
"time": "2015-06-21 08:01:12"
|
||||
"time": "2016-05-12 18:03:57"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-token-stream",
|
||||
@@ -1863,16 +1867,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/environment",
|
||||
"version": "1.3.5",
|
||||
"version": "1.3.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/environment.git",
|
||||
"reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf"
|
||||
"reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
|
||||
"reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716",
|
||||
"reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1909,20 +1913,20 @@
|
||||
"environment",
|
||||
"hhvm"
|
||||
],
|
||||
"time": "2016-02-26 18:40:46"
|
||||
"time": "2016-05-17 03:18:57"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/exporter",
|
||||
"version": "1.2.1",
|
||||
"version": "1.2.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/exporter.git",
|
||||
"reference": "7ae5513327cb536431847bcc0c10edba2701064e"
|
||||
"reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e",
|
||||
"reference": "7ae5513327cb536431847bcc0c10edba2701064e",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
|
||||
"reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1930,12 +1934,13 @@
|
||||
"sebastian/recursion-context": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-mbstring": "*",
|
||||
"phpunit/phpunit": "~4.4"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.2.x-dev"
|
||||
"dev-master": "1.3.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1975,7 +1980,7 @@
|
||||
"export",
|
||||
"exporter"
|
||||
],
|
||||
"time": "2015-06-21 07:55:53"
|
||||
"time": "2016-06-17 09:04:28"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/recursion-context",
|
||||
@@ -2067,19 +2072,20 @@
|
||||
},
|
||||
{
|
||||
"name": "squizlabs/php_codesniffer",
|
||||
"version": "2.5.1",
|
||||
"version": "2.6.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
|
||||
"reference": "6731851d6aaf1d0d6c58feff1065227b7fda3ba8"
|
||||
"reference": "4edb770cb853def6e60c93abb088ad5ac2010c83"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6731851d6aaf1d0d6c58feff1065227b7fda3ba8",
|
||||
"reference": "6731851d6aaf1d0d6c58feff1065227b7fda3ba8",
|
||||
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/4edb770cb853def6e60c93abb088ad5ac2010c83",
|
||||
"reference": "4edb770cb853def6e60c93abb088ad5ac2010c83",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-simplexml": "*",
|
||||
"ext-tokenizer": "*",
|
||||
"ext-xmlwriter": "*",
|
||||
"php": ">=5.1.2"
|
||||
@@ -2140,11 +2146,11 @@
|
||||
"phpcs",
|
||||
"standards"
|
||||
],
|
||||
"time": "2016-01-19 23:39:10"
|
||||
"time": "2016-07-13 23:29:13"
|
||||
},
|
||||
{
|
||||
"name": "symfony/browser-kit",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/BrowserKit",
|
||||
"source": {
|
||||
"type": "git",
|
||||
@@ -2202,7 +2208,7 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/css-selector",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/CssSelector",
|
||||
"source": {
|
||||
"type": "git",
|
||||
@@ -2256,17 +2262,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/dom-crawler",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/DomCrawler",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dom-crawler.git",
|
||||
"reference": "507dca599566359a4489aa732612347ff65b9a51"
|
||||
"reference": "b1a52aeafe4dd31914c75e72fc9b9ca3a3e5981d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/507dca599566359a4489aa732612347ff65b9a51",
|
||||
"reference": "507dca599566359a4489aa732612347ff65b9a51",
|
||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b1a52aeafe4dd31914c75e72fc9b9ca3a3e5981d",
|
||||
"reference": "b1a52aeafe4dd31914c75e72fc9b9ca3a3e5981d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2308,21 +2314,21 @@
|
||||
],
|
||||
"description": "Symfony DomCrawler Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-04 07:12:08"
|
||||
"time": "2016-04-06 13:13:46"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/Finder",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "24cbc57da78ef7d05250c657b18b1ddcb1298bdf"
|
||||
"reference": "dce4b58434fc1cbd66e3006e539bb53074dfea82"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/24cbc57da78ef7d05250c657b18b1ddcb1298bdf",
|
||||
"reference": "24cbc57da78ef7d05250c657b18b1ddcb1298bdf",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/dce4b58434fc1cbd66e3006e539bb53074dfea82",
|
||||
"reference": "dce4b58434fc1cbd66e3006e539bb53074dfea82",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2358,21 +2364,21 @@
|
||||
],
|
||||
"description": "Symfony Finder Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-09 12:50:31"
|
||||
"time": "2016-05-13 14:58:35"
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v2.3.39",
|
||||
"version": "v2.3.42",
|
||||
"target-dir": "Symfony/Component/Process",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "12b5d095f70d2dd706c181e51106005e008e5ca8"
|
||||
"reference": "89aced1438655ad81fc828c2e2e555e9b88fef3b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/12b5d095f70d2dd706c181e51106005e008e5ca8",
|
||||
"reference": "12b5d095f70d2dd706c181e51106005e008e5ca8",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/89aced1438655ad81fc828c2e2e555e9b88fef3b",
|
||||
"reference": "89aced1438655ad81fc828c2e2e555e9b88fef3b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2408,7 +2414,7 @@
|
||||
],
|
||||
"description": "Symfony Process Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2016-03-04 07:12:06"
|
||||
"time": "2016-03-31 08:39:43"
|
||||
}
|
||||
],
|
||||
"aliases": [],
|
||||
|
@@ -25,6 +25,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.forums:
|
||||
@@ -38,6 +39,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.news:
|
||||
@@ -51,6 +53,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.overall:
|
||||
@@ -64,6 +67,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.topic:
|
||||
@@ -77,6 +81,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.topics:
|
||||
@@ -90,6 +95,7 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
||||
feed.topics_active:
|
||||
@@ -103,4 +109,5 @@ services:
|
||||
- @user
|
||||
- @auth
|
||||
- @content.visibility
|
||||
- @dispatcher
|
||||
- %core.php_ext%
|
||||
|
@@ -55,6 +55,18 @@ if ($cron_lock->acquire())
|
||||
$task = $cron->find_task($cron_type);
|
||||
if ($task)
|
||||
{
|
||||
/**
|
||||
* This event enables you to catch the task before it runs
|
||||
*
|
||||
* @event core.cron_run_before
|
||||
* @var \phpbb\cron\task\wrapper task Current Cron task
|
||||
* @since 3.1.8-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'task',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.cron_run_before', compact($vars)));
|
||||
|
||||
if ($task->is_parametrized())
|
||||
{
|
||||
$task->parse_parameters($request);
|
||||
|
@@ -50,6 +50,7 @@
|
||||
<ol>
|
||||
<li><a href="#changelog">Changelog</a>
|
||||
<ul>
|
||||
<li><a href="#v319">Changes since 3.1.9</a></li>
|
||||
<li><a href="#v318">Changes since 3.1.8</a></li>
|
||||
<li><a href="#v317pl1">Changes since 3.1.7-PL1</a></li>
|
||||
<li><a href="#v317">Changes since 3.1.7</a></li>
|
||||
@@ -118,7 +119,88 @@
|
||||
|
||||
<div class="content">
|
||||
|
||||
<a name="v318"></a><h3>Changes since 3.1.8</h3>
|
||||
<a name="v319"></a><h3>Changes since 3.1.9</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-11446">PHPBB3-11446</a>] - Use sql_in_set as designed and consistent with the rest of phpBB code in phpbb_notification_manager</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12230">PHPBB3-12230</a>] - Do not auto remove user group when Newly Registered Users group was disabled</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12925">PHPBB3-12925</a>] - Use plural for permanent delete posts/topics confirmation</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14109">PHPBB3-14109</a>] - MySQL InnoDB does not support multiple index definitions on the same query.</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14291">PHPBB3-14291</a>] - Function send_file_to_browser() endlessly overwrites 'filesize' in ATTACHMENTS_TABLE</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14610">PHPBB3-14610</a>] - Q&A CAPTCHA logs error when it has been solved</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14615">PHPBB3-14615</a>] - delete avatar triggers the new min max value in the HTML5 inputs</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14616">PHPBB3-14616</a>] - Auto-prune fails on large forums</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14631">PHPBB3-14631</a>] - 3.1.9 DB cli update crashes with PHP Fatal error: Call to undefined function phpbb\truncate_string()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14654">PHPBB3-14654</a>] - Imagemagick > ImageMagick</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14661">PHPBB3-14661</a>] - Fix a typo in twig.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14673">PHPBB3-14673</a>] - Missing Language Variable</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14683">PHPBB3-14683</a>] - Typos in operators in some email templates</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14703">PHPBB3-14703</a>] - module.add adds a module to the wrong parent</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14704">PHPBB3-14704</a>] - Remove unused language files and corresponding functions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14721">PHPBB3-14721</a>] - New registrants choosing old deleted usernames get linked to old accounts with namechange</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14742">PHPBB3-14742</a>] - Improvements to migrator</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14745">PHPBB3-14745</a>] - "U_NOTIFICATION_SETTINGS" contains an HTML entity but is printed in a plaintext email</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14755">PHPBB3-14755</a>] - Error in MCP Move posts</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14782">PHPBB3-14782</a>] - Quick Links > Your Posts gives mysql error</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14788">PHPBB3-14788</a>] - Update developer list to reflect team changes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14796">PHPBB3-14796</a>] - Log table is using constant in log delete method</li>
|
||||
</ul>
|
||||
<h4>Improvement</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13709">PHPBB3-13709</a>] - Fallback to english in email templates by extensions</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13716">PHPBB3-13716</a>] - Check phpBB version constant against config version</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13865">PHPBB3-13865</a>] - Complement core event search_modify_param</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14184">PHPBB3-14184</a>] - Missing info on SMTP mail function option</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14429">PHPBB3-14429</a>] - core.obtain_users_online_string_modify</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14466">PHPBB3-14466</a>] - Add an event to cron.php</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14469">PHPBB3-14469</a>] - [Template] - <!-- EVENT viewforum_topicrow_before --></li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14516">PHPBB3-14516</a>] - [Template] - memberlist_email_before</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14581">PHPBB3-14581</a>] - Add core events relating to soft delete</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14592">PHPBB3-14592</a>] - [PHP] - core.search_backend_search_after</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14596">PHPBB3-14596</a>] - Prevent installs of 3.1 on PHP 7</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14624">PHPBB3-14624</a>] - Add event to ucp_profile in signature section</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14630">PHPBB3-14630</a>] - Add event to ucp_pm_compose</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14638">PHPBB3-14638</a>] - [PHP] - multiple UCP subscription events for form data and template variables</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14643">PHPBB3-14643</a>] - Select newest file in restore list</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14652">PHPBB3-14652</a>] - Typo birthdays</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14664">PHPBB3-14664</a>] - Fix PHPDoc comment in cron manager</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14672">PHPBB3-14672</a>] - Add template event to viewforum</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14685">PHPBB3-14685</a>] - PHP event for altering announcements sql</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14687">PHPBB3-14687</a>] - Modify viewforum_modify_topicrow</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14688">PHPBB3-14688</a>] - Add core events to the feeds</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14689">PHPBB3-14689</a>] - Build 3.2.x API docs</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14695">PHPBB3-14695</a>] - Add posting_editor_subject_prepend/append template events</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14712">PHPBB3-14712</a>] - Add search.php core event to allow modifying the forum select list</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14713">PHPBB3-14713</a>] - Add core event to the admin function get_forum_list()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14715">PHPBB3-14715</a>] - Add template events in posting_topic_review & mcp_topic</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14720">PHPBB3-14720</a>] - Add global javascript variable 'phpbb' to jshint settings</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14727">PHPBB3-14727</a>] - Event core.search_modify_submit_parameters</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14738">PHPBB3-14738</a>] - Add core events to improve modifying forum lists</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14747">PHPBB3-14747</a>] - Add topic_last_poster_id and topic_last_post_time to Event core.modify_posting_auth</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14762">PHPBB3-14762</a>] - Add core event to session.php to alter IP address</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14781">PHPBB3-14781</a>] - Add core event to the function group_user_attributes()</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14783">PHPBB3-14783</a>] - Event - ACP Posting Buttons Before Custom BBCodes</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14784">PHPBB3-14784</a>] - missing rewrite for lighttpd</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14785">PHPBB3-14785</a>] - [Template event] - overall_header_headerbar_append</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14787">PHPBB3-14787</a>] - Add more parameters to the core.search_modify_url_parameters event</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14789">PHPBB3-14789</a>] - Add missing link hash and form token checks to ACP</li>
|
||||
</ul>
|
||||
<h4>New Feature</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-13978">PHPBB3-13978</a>] - [PHP] - User control panel - on signature change</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14484">PHPBB3-14484</a>] - Support extensions in UI tests</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14506">PHPBB3-14506</a>] - [Template] - mcp_move_before</li>
|
||||
</ul>
|
||||
<h4>Task</h4>
|
||||
<ul>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-12133">PHPBB3-12133</a>] - Update list of browsers supporting filename* in Content-Disposition</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14538">PHPBB3-14538</a>] - Update composer dependencies</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14598">PHPBB3-14598</a>] - Phing Sniffer Testing Use Statements in DocBlocks</li>
|
||||
<li>[<a href="http://tracker.phpbb.com/browse/PHPBB3-14743">PHPBB3-14743</a>] - Remove PHP7 from test matrix in 3.1.x</li>
|
||||
</ul>
|
||||
|
||||
<a name="v318"></a><h3>Changes since 3.1.8</h3>
|
||||
|
||||
<h4>Bug</h4>
|
||||
<ul>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* phpBB © Copyright phpBB Limited 2003-2014
|
||||
* phpBB © Copyright phpBB Limited 2003-2016
|
||||
* http://www.phpbb.com
|
||||
*
|
||||
* phpBB is free software. You can redistribute it and/or modify it
|
||||
@@ -20,13 +20,13 @@
|
||||
|
||||
phpBB Project Manager: Marshalrusty (Yuriy Rusko)
|
||||
|
||||
phpBB Lead Developer: naderman (Nils Adermann)
|
||||
phpBB Product Manager: naderman (Nils Adermann)
|
||||
|
||||
phpBB Lead Developer: Marc (Marc Alexander)
|
||||
|
||||
phpBB Developers: bantu (Andreas Fischer)
|
||||
CHItA (Máté Bartus)
|
||||
dhruv.goel92 (Dhruv Goel)
|
||||
Elsensee (Oliver Schramm)
|
||||
marc1706 (Marc Alexander)
|
||||
nickvergessen (Joas Schilling)
|
||||
Nicofuma (Tristan Darricau)
|
||||
prototech (Cesar Gallegos)
|
||||
@@ -54,6 +54,7 @@ phpBB Developers: A_Jelly_Doughnut (Josh Woody) [01/2010 - 11/2010]
|
||||
ckwalsh (Cullen Walsh) [01/2010 - 07/2011]
|
||||
DavidMJ (David M.) [12/2005 - 08/2009]
|
||||
dhn (Dominik Dröscher) [05/2007 - 01/2011]
|
||||
dhruv.goel92 (Dhruv Goel) [04/2013 - 05/2016]
|
||||
EXreaction (Nathan Guse) [07/2012 - 05/2014]
|
||||
GrahamJE (Graham Eames) [09/2005 - 11/2006]
|
||||
igorw (Igor Wiedler) [08/2010 - 02/2013]
|
||||
|
@@ -160,7 +160,7 @@
|
||||
<li>zlib Compression support</li>
|
||||
<li>Remote FTP support</li>
|
||||
<li>XML support</li>
|
||||
<li>Imagemagick support</li>
|
||||
<li>ImageMagick support</li>
|
||||
<li>GD Support</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
@@ -343,6 +343,13 @@ acp_posting_buttons_before
|
||||
* Since: 3.1.0-b4
|
||||
* Purpose: Add content before BBCode posting buttons in the ACP
|
||||
|
||||
acp_posting_buttons_custom_tags_before
|
||||
===
|
||||
* Locations:
|
||||
+ adm/style/acp_posting_buttons.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before the custom BBCodes in the ACP
|
||||
|
||||
acp_profile_contact_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -843,6 +850,14 @@ mcp_front_latest_unapproved_before
|
||||
* Since: 3.1.3-RC1
|
||||
* Purpose: Add content before latest unapproved posts list
|
||||
|
||||
mcp_move_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_move.html
|
||||
+ styles/subsilver2/template/mcp_move.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before move topic/post form
|
||||
|
||||
mcp_post_additional_options
|
||||
===
|
||||
* Locations:
|
||||
@@ -867,6 +882,22 @@ mcp_topic_options_before
|
||||
* Since: 3.1.6-RC1
|
||||
* Purpose: Add some options (field, checkbox, ...) before the subject field when split a subject
|
||||
|
||||
mcp_topic_postrow_post_details_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_topic.html
|
||||
+ styles/subsilver2/template/mcp_topic.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content after post details in topic moderation
|
||||
|
||||
mcp_topic_postrow_post_details_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/mcp_topic.html
|
||||
+ styles/subsilver2/template/mcp_topic.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before post details in topic moderation
|
||||
|
||||
mcp_topic_topic_title_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -951,6 +982,14 @@ memberlist_body_username_prepend
|
||||
* Purpose: Add information before every username in the memberlist. Works in
|
||||
all display modes (leader, group and normal memberlist).
|
||||
|
||||
memberlist_email_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_email.html
|
||||
+ styles/subsilver2/template/memberlist_email.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Allow adding customizations before the memberlist_email form.
|
||||
|
||||
memberlist_search_fields_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -1336,6 +1375,20 @@ overall_header_head_append
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add asset calls directly before the `</head>` tag
|
||||
|
||||
overall_header_headerbar_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/overall_header.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content at the end of the headerbar
|
||||
|
||||
overall_header_headerbar_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/overall_header.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content at the beginning of the headerbar
|
||||
|
||||
overall_header_navbar_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -1487,6 +1540,14 @@ posting_editor_subject_after
|
||||
* Since: 3.1.0-a2
|
||||
* Purpose: Add field (e.g. textbox) to the posting screen after the subject
|
||||
|
||||
posting_editor_subject_append
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/posting_editor.html
|
||||
+ styles/subsilver2/template/posting_body.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add field, text, etc. to the posting after the subject text box
|
||||
|
||||
posting_editor_subject_before
|
||||
===
|
||||
* Locations:
|
||||
@@ -1495,6 +1556,14 @@ posting_editor_subject_before
|
||||
* Since: 3.1.0-a2
|
||||
* Purpose: Add field (e.g. textbox) to the posting screen before the subject
|
||||
|
||||
posting_editor_subject_prepend
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/posting_editor.html
|
||||
+ styles/subsilver2/template/posting_body.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add field, text, etc. to the posting before the subject text box
|
||||
|
||||
posting_editor_submit_buttons
|
||||
===
|
||||
* Locations:
|
||||
@@ -1556,6 +1625,22 @@ posting_preview_poll_after
|
||||
* Since: 3.1.7-RC1
|
||||
* Purpose: Add content after the poll preview block
|
||||
|
||||
posting_topic_review_row_post_details_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/posting_topic_review.html
|
||||
+ styles/subsilver2/template/posting_topic_review.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content after post details in topic review
|
||||
|
||||
posting_topic_review_row_post_details_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/posting_topic_review.html
|
||||
+ styles/subsilver2/template/posting_topic_review.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before post details in topic review
|
||||
|
||||
posting_topic_title_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -1853,6 +1938,18 @@ topiclist_row_append
|
||||
* Changed: 3.1.6-RC1 Added event to mcp_forum.html
|
||||
* Purpose: Add content into topic rows (inside the elements containing topic titles)
|
||||
|
||||
topiclist_row_topic_title_after
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/search_results.html
|
||||
+ styles/prosilver/template/viewforum_body.html
|
||||
+ styles/prosilver/template/mcp_forum.html
|
||||
+ styles/subsilver2/template/search_results.html
|
||||
+ styles/subsilver2/template/viewforum_body.html
|
||||
+ styles/subsilver2/template/mcp_forum.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content into topic rows (after the elements containing the topic titles)
|
||||
|
||||
ucp_agreement_terms_after
|
||||
===
|
||||
* Locations:
|
||||
@@ -2227,6 +2324,14 @@ viewforum_body_topic_row_prepend
|
||||
* Since: 3.1.7-RC1
|
||||
* Purpose: Add content at the end of the topic list item.
|
||||
|
||||
viewforum_body_topicrow_row_before
|
||||
===
|
||||
* Locations:
|
||||
+ styles/prosilver/template/viewforum_body.html
|
||||
+ styles/subsilver2/template/viewforum_body.html
|
||||
* Since: 3.1.10-RC1
|
||||
* Purpose: Add content before list of topics.
|
||||
|
||||
viewforum_buttons_bottom_before
|
||||
===
|
||||
* Locations:
|
||||
|
@@ -1,7 +1,7 @@
|
||||
# Sample lighttpd configuration file for phpBB.
|
||||
# Global settings have been removed, copy them
|
||||
# from your system's lighttpd.conf.
|
||||
# Tested with lighttpd 1.4.26
|
||||
# Tested with lighttpd 1.4.35
|
||||
|
||||
# If you want to use the X-Sendfile feature,
|
||||
# uncomment the 'allow-x-send-file' for the fastcgi
|
||||
@@ -16,6 +16,7 @@
|
||||
server.modules += (
|
||||
"mod_access",
|
||||
"mod_fastcgi",
|
||||
"mod_rewrite",
|
||||
"mod_accesslog"
|
||||
)
|
||||
|
||||
@@ -49,7 +50,15 @@ $HTTP["host"] == "www.myforums.com" {
|
||||
$HTTP["url"] =~ "/\.htaccess|/\.htpasswd|/\.htgroups" {
|
||||
url.access-deny = ( "" )
|
||||
}
|
||||
|
||||
|
||||
# The following 3 lines will rewrite URLs passed through the front controller
|
||||
# to not require app.php in the actual URL. In other words, a controller is
|
||||
# by default accessed at /app.php/my/controller, but can also be accessed at
|
||||
# /my/controller
|
||||
url.rewrite-if-not-file = (
|
||||
"^/(.*)$" => "/app.php/$1"
|
||||
)
|
||||
|
||||
fastcgi.server = ( ".php" =>
|
||||
((
|
||||
"bin-path" => "/usr/bin/php-cgi",
|
||||
|
@@ -84,6 +84,20 @@ $feed->open();
|
||||
// Iterate through items
|
||||
while ($row = $feed->get_item())
|
||||
{
|
||||
/**
|
||||
* Event to modify the feed row
|
||||
*
|
||||
* @event core.feed_modify_feed_row
|
||||
* @var int forum_id Forum ID
|
||||
* @var string mode Feeds mode (forums|topics|topics_new|topics_active|news)
|
||||
* @var array row Array with feed data
|
||||
* @var int topic_id Topic ID
|
||||
*
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('forum_id', 'mode', 'row', 'topic_id');
|
||||
extract($phpbb_dispatcher->trigger_event('core.feed_modify_feed_row', compact($vars)));
|
||||
|
||||
// BBCode options to correctly disable urls, smilies, bbcode...
|
||||
if ($feed->get('options') === NULL)
|
||||
{
|
||||
|
@@ -449,7 +449,7 @@ class acp_board
|
||||
|
||||
'legend2' => 'SMTP_SETTINGS',
|
||||
'smtp_delivery' => array('lang' => 'USE_SMTP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
|
||||
'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => false),
|
||||
'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => true),
|
||||
'smtp_port' => array('lang' => 'SMTP_PORT', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true),
|
||||
'smtp_auth_method' => array('lang' => 'SMTP_AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true),
|
||||
'smtp_username' => array('lang' => 'SMTP_USERNAME', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true),
|
||||
|
@@ -39,6 +39,14 @@ class acp_database
|
||||
$action = request_var('action', '');
|
||||
$submit = (isset($_POST['submit'])) ? true : false;
|
||||
|
||||
$form_key = 'acp_database';
|
||||
add_form_key($form_key);
|
||||
|
||||
if ($submit && !check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
'MODE' => $mode
|
||||
));
|
||||
|
@@ -842,9 +842,26 @@ class acp_forums
|
||||
ORDER BY left_id";
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
if ($row = $db->sql_fetchrow($result))
|
||||
$rowset = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
do
|
||||
$rowset[(int) $row['forum_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
/**
|
||||
* Modify the forum list data
|
||||
*
|
||||
* @event core.acp_manage_forums_modify_forum_list
|
||||
* @var array rowset Array with the forums list data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('rowset');
|
||||
extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_modify_forum_list', compact($vars)));
|
||||
|
||||
if (!empty($rowset))
|
||||
{
|
||||
foreach ($rowset as $row)
|
||||
{
|
||||
$forum_type = $row['forum_type'];
|
||||
|
||||
@@ -888,7 +905,6 @@ class acp_forums
|
||||
'U_SYNC' => $url . '&action=sync')
|
||||
);
|
||||
}
|
||||
while ($row = $db->sql_fetchrow($result));
|
||||
}
|
||||
else if ($this->parent_id)
|
||||
{
|
||||
@@ -904,7 +920,7 @@ class acp_forums
|
||||
'U_SYNC' => $url . '&action=sync')
|
||||
);
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
unset($rowset);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'ERROR_MSG' => (sizeof($errors)) ? implode('<br />', $errors) : '',
|
||||
|
@@ -40,6 +40,15 @@ class acp_icons
|
||||
$action = (isset($_POST['edit'])) ? 'edit' : $action;
|
||||
$action = (isset($_POST['import'])) ? 'import' : $action;
|
||||
$icon_id = request_var('id', 0);
|
||||
$submit = $request->is_set_post('submit', false);
|
||||
|
||||
$form_key = 'acp_icons';
|
||||
add_form_key($form_key);
|
||||
|
||||
if ($submit && !check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$mode = ($mode == 'smilies') ? 'smilies' : 'icons';
|
||||
|
||||
@@ -811,6 +820,11 @@ class acp_icons
|
||||
case 'move_up':
|
||||
case 'move_down':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_icons'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
// Get current order id...
|
||||
$sql = "SELECT {$fields}_order as current_order
|
||||
FROM $table
|
||||
@@ -928,8 +942,8 @@ class acp_icons
|
||||
'EMOTION' => (isset($row['emotion'])) ? $row['emotion'] : '',
|
||||
'U_EDIT' => $this->u_action . '&action=edit&id=' . $row[$fields . '_id'],
|
||||
'U_DELETE' => $this->u_action . '&action=delete&id=' . $row[$fields . '_id'],
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start,
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start,
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start . '&hash=' . generate_link_hash('acp_icons'),
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start . '&hash=' . generate_link_hash('acp_icons'),
|
||||
));
|
||||
|
||||
if (!$spacer && !$row['display_on_posting'])
|
||||
|
@@ -244,6 +244,11 @@ class acp_language
|
||||
break;
|
||||
|
||||
case 'install':
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_language'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$lang_iso = request_var('iso', '');
|
||||
$lang_iso = basename($lang_iso);
|
||||
|
||||
@@ -423,7 +428,7 @@ class acp_language
|
||||
'ISO' => htmlspecialchars($lang_ary['iso']),
|
||||
'LOCAL_NAME' => htmlspecialchars($lang_ary['local_name'], ENT_COMPAT, 'UTF-8'),
|
||||
'NAME' => htmlspecialchars($lang_ary['name'], ENT_COMPAT, 'UTF-8'),
|
||||
'U_INSTALL' => $this->u_action . '&action=install&iso=' . urlencode($lang_ary['iso']))
|
||||
'U_INSTALL' => $this->u_action . '&action=install&iso=' . urlencode($lang_ary['iso']) . '&hash=' . generate_link_hash('acp_language'))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -453,6 +453,12 @@ class acp_main
|
||||
$template->assign_var('S_VERSION_UP_TO_DATE', true);
|
||||
}
|
||||
|
||||
// Incomplete update?
|
||||
if (phpbb_version_compare($config['version'], PHPBB_VERSION, '<'))
|
||||
{
|
||||
$template->assign_var('S_UPDATE_INCOMPLETE', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notice admin
|
||||
*
|
||||
|
@@ -46,6 +46,9 @@ class acp_modules
|
||||
$user->add_lang('acp/modules');
|
||||
$this->tpl_name = 'acp_modules';
|
||||
|
||||
$form_key = 'acp_modules';
|
||||
add_form_key($form_key);
|
||||
|
||||
// module class
|
||||
$this->module_class = $mode;
|
||||
|
||||
@@ -119,6 +122,11 @@ class acp_modules
|
||||
trigger_error($user->lang['NO_MODULE_ID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_modules'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT *
|
||||
FROM ' . MODULES_TABLE . "
|
||||
WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
|
||||
@@ -150,6 +158,11 @@ class acp_modules
|
||||
trigger_error($user->lang['NO_MODULE_ID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_modules'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT *
|
||||
FROM ' . MODULES_TABLE . "
|
||||
WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
|
||||
@@ -273,6 +286,11 @@ class acp_modules
|
||||
|
||||
if ($submit)
|
||||
{
|
||||
if (!check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (!$module_data['module_langname'])
|
||||
{
|
||||
trigger_error($user->lang['NO_MODULE_LANGNAME'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
|
||||
@@ -460,12 +478,12 @@ class acp_modules
|
||||
'S_ACP_MODULE_MANAGEMENT' => ($this->module_class == 'acp' && ($row['module_basename'] == 'modules' || $row['module_langname'] == 'ACP_MODULE_MANAGEMENT')) ? true : false,
|
||||
|
||||
'U_MODULE' => $this->u_action . '&parent_id=' . $row['module_id'],
|
||||
'U_MOVE_UP' => $url . '&action=move_up',
|
||||
'U_MOVE_DOWN' => $url . '&action=move_down',
|
||||
'U_MOVE_UP' => $url . '&action=move_up&hash=' . generate_link_hash('acp_modules'),
|
||||
'U_MOVE_DOWN' => $url . '&action=move_down&hash=' . generate_link_hash('acp_modules'),
|
||||
'U_EDIT' => $url . '&action=edit',
|
||||
'U_DELETE' => $url . '&action=delete',
|
||||
'U_ENABLE' => $url . '&action=enable',
|
||||
'U_DISABLE' => $url . '&action=disable')
|
||||
'U_ENABLE' => $url . '&action=enable&hash=' . generate_link_hash('acp_modules'),
|
||||
'U_DISABLE' => $url . '&action=disable&hash=' . generate_link_hash('acp_modules'))
|
||||
);
|
||||
}
|
||||
while ($row = $db->sql_fetchrow($result));
|
||||
@@ -484,8 +502,8 @@ class acp_modules
|
||||
|
||||
'U_EDIT' => $url . '&action=edit',
|
||||
'U_DELETE' => $url . '&action=delete',
|
||||
'U_ENABLE' => $url . '&action=enable',
|
||||
'U_DISABLE' => $url . '&action=disable')
|
||||
'U_ENABLE' => $url . '&action=enable&hash=' . generate_link_hash('acp_modules'),
|
||||
'U_DISABLE' => $url . '&action=disable&hash=' . generate_link_hash('acp_modules'))
|
||||
);
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
@@ -366,6 +366,11 @@ class acp_permission_roles
|
||||
case 'move_up':
|
||||
case 'move_down':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_permission_roles'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT role_order
|
||||
FROM ' . ACL_ROLES_TABLE . "
|
||||
WHERE role_id = $role_id";
|
||||
@@ -440,8 +445,8 @@ class acp_permission_roles
|
||||
|
||||
'U_EDIT' => $this->u_action . '&action=edit&role_id=' . $row['role_id'],
|
||||
'U_REMOVE' => $this->u_action . '&action=remove&role_id=' . $row['role_id'],
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&role_id=' . $row['role_id'],
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&role_id=' . $row['role_id'],
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&role_id=' . $row['role_id'] . '&hash=' . generate_link_hash('acp_permission_roles'),
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&role_id=' . $row['role_id'] . '&hash=' . generate_link_hash('acp_permission_roles'),
|
||||
'U_DISPLAY_ITEMS' => ($row['role_id'] == $display_item) ? '' : $this->u_action . '&display_item=' . $row['role_id'] . '#assigned_to')
|
||||
);
|
||||
|
||||
|
@@ -53,6 +53,9 @@ class acp_profile
|
||||
$error = array();
|
||||
$s_hidden_fields = '';
|
||||
|
||||
$form_key = 'acp_profile';
|
||||
add_form_key($form_key);
|
||||
|
||||
if (!$field_id && in_array($action, array('delete','activate', 'deactivate', 'move_up', 'move_down', 'edit')))
|
||||
{
|
||||
trigger_error($user->lang['NO_FIELD_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
@@ -161,6 +164,11 @@ class acp_profile
|
||||
|
||||
case 'activate':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_profile'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT lang_id
|
||||
FROM ' . LANG_TABLE . "
|
||||
WHERE lang_iso = '" . $db->sql_escape($config['default_lang']) . "'";
|
||||
@@ -201,6 +209,11 @@ class acp_profile
|
||||
|
||||
case 'deactivate':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_profile'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'UPDATE ' . PROFILE_FIELDS_TABLE . "
|
||||
SET field_active = 0
|
||||
WHERE field_id = $field_id";
|
||||
@@ -230,6 +243,11 @@ class acp_profile
|
||||
case 'move_up':
|
||||
case 'move_down':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_profile'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT field_order
|
||||
FROM ' . PROFILE_FIELDS_TABLE . "
|
||||
WHERE field_id = $field_id";
|
||||
@@ -579,6 +597,11 @@ class acp_profile
|
||||
|
||||
if (!sizeof($error))
|
||||
{
|
||||
if (!check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if (($step == 3 && (sizeof($this->lang_defs['iso']) == 1 || $save)) || ($action == 'edit' && $save))
|
||||
{
|
||||
$this->save_profile_field($cp, $field_type, $action);
|
||||
@@ -735,12 +758,12 @@ class acp_profile
|
||||
'FIELD_TYPE' => $profile_field->get_name(),
|
||||
|
||||
'L_ACTIVATE_DEACTIVATE' => $user->lang[$active_lang],
|
||||
'U_ACTIVATE_DEACTIVATE' => $this->u_action . "&action=$active_value&field_id=$id",
|
||||
'U_ACTIVATE_DEACTIVATE' => $this->u_action . "&action=$active_value&field_id=$id" . '&hash=' . generate_link_hash('acp_profile'),
|
||||
'U_EDIT' => $this->u_action . "&action=edit&field_id=$id",
|
||||
'U_TRANSLATE' => $this->u_action . "&action=edit&field_id=$id&step=3",
|
||||
'U_DELETE' => $this->u_action . "&action=delete&field_id=$id",
|
||||
'U_MOVE_UP' => $this->u_action . "&action=move_up&field_id=$id",
|
||||
'U_MOVE_DOWN' => $this->u_action . "&action=move_down&field_id=$id",
|
||||
'U_MOVE_UP' => $this->u_action . "&action=move_up&field_id=$id" . '&hash=' . generate_link_hash('acp_profile'),
|
||||
'U_MOVE_DOWN' => $this->u_action . "&action=move_down&field_id=$id" . '&hash=' . generate_link_hash('acp_profile'),
|
||||
|
||||
'S_NEED_EDIT' => $s_need_edit)
|
||||
);
|
||||
|
@@ -282,6 +282,11 @@ class acp_reasons
|
||||
case 'move_up':
|
||||
case 'move_down':
|
||||
|
||||
if (!check_link_hash($request->variable('hash', ''), 'acp_reasons'))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$sql = 'SELECT reason_order
|
||||
FROM ' . REPORTS_REASONS_TABLE . "
|
||||
WHERE reason_id = $reason_id";
|
||||
@@ -383,8 +388,8 @@ class acp_reasons
|
||||
|
||||
'U_EDIT' => $this->u_action . '&action=edit&id=' . $row['reason_id'],
|
||||
'U_DELETE' => (!$other_reason) ? $this->u_action . '&action=delete&id=' . $row['reason_id'] : '',
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row['reason_id'],
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row['reason_id'])
|
||||
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row['reason_id'] . '&hash=' . generate_link_hash('acp_reasons'),
|
||||
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row['reason_id'] . '&hash=' . generate_link_hash('acp_reasons'))
|
||||
);
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
@@ -54,6 +54,13 @@ class acp_search
|
||||
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
|
||||
|
||||
$submit = (isset($_POST['submit'])) ? true : false;
|
||||
$form_key = 'acp_search';
|
||||
add_form_key($form_key);
|
||||
|
||||
if ($submit && !check_form_key($form_key))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$search_types = $this->get_search_types();
|
||||
|
||||
@@ -232,7 +239,7 @@ class acp_search
|
||||
|
||||
function index($id, $mode)
|
||||
{
|
||||
global $db, $user, $auth, $template, $cache;
|
||||
global $db, $user, $auth, $template, $cache, $request;
|
||||
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
|
||||
|
||||
$action = request_var('action', '');
|
||||
@@ -244,6 +251,15 @@ class acp_search
|
||||
$this->state = array();
|
||||
$this->save_state();
|
||||
}
|
||||
$submit = $request->is_set_post('submit', false);
|
||||
|
||||
$form_key = 'acp_search';
|
||||
add_form_key($form_key);
|
||||
|
||||
if (!check_form_key($form_key) && in_array($action, array('delete', 'create')))
|
||||
{
|
||||
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if ($action)
|
||||
{
|
||||
|
@@ -62,5 +62,17 @@ class acp_update
|
||||
|
||||
'UPDATE_INSTRUCTIONS' => sprintf($user->lang['UPDATE_INSTRUCTIONS'], $update_link),
|
||||
));
|
||||
|
||||
// Incomplete update?
|
||||
if (phpbb_version_compare($config['version'], PHPBB_VERSION, '<'))
|
||||
{
|
||||
$database_update_link = append_sid($phpbb_root_path . 'install/database_update.' . $phpEx);
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_UPDATE_INCOMPLETE' => true,
|
||||
'FILES_VERSION' => PHPBB_VERSION,
|
||||
'INCOMPLETE_INSTRUCTIONS' => $user->lang('UPDATE_INCOMPLETE_EXPLAIN', $database_update_link),
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -28,7 +28,7 @@ if (!defined('IN_PHPBB'))
|
||||
*/
|
||||
|
||||
// phpBB Version
|
||||
define('PHPBB_VERSION', '3.1.9');
|
||||
define('PHPBB_VERSION', '3.1.10-RC1');
|
||||
|
||||
// QA-related
|
||||
// define('PHPBB_QA', 1);
|
||||
|
@@ -4334,6 +4334,30 @@ function obtain_users_online_string($online_users, $item_id = 0, $item = 'forum'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify online userlist data
|
||||
*
|
||||
* @event core.obtain_users_online_string_before_modify
|
||||
* @var array online_users Array with online users data
|
||||
* from obtain_users_online()
|
||||
* @var int item_id Restrict online users to item id
|
||||
* @var string item Restrict online users to a certain
|
||||
* session item, e.g. forum for
|
||||
* session_forum_id
|
||||
* @var array rowset Array with online users data
|
||||
* @var array user_online_link Array with online users items (usernames)
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'online_users',
|
||||
'item_id',
|
||||
'item',
|
||||
'rowset',
|
||||
'user_online_link',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.obtain_users_online_string_before_modify', compact($vars)));
|
||||
|
||||
$online_userlist = implode(', ', $user_online_link);
|
||||
|
||||
if (!$online_userlist)
|
||||
|
@@ -65,7 +65,7 @@ function recalc_nested_sets(&$new_id, $pkey, $table, $parent_id = 0, $where = ar
|
||||
*/
|
||||
function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl = false, $ignore_nonpost = false, $ignore_emptycat = true, $only_acl_post = false, $return_array = false)
|
||||
{
|
||||
global $db, $user, $auth;
|
||||
global $db, $user, $auth, $phpbb_dispatcher;
|
||||
|
||||
// This query is identical to the jumpbox one
|
||||
$sql = 'SELECT forum_id, forum_name, parent_id, forum_type, forum_flags, forum_options, left_id, right_id
|
||||
@@ -73,16 +73,33 @@ function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl =
|
||||
ORDER BY left_id ASC';
|
||||
$result = $db->sql_query($sql, 600);
|
||||
|
||||
$rowset = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$rowset[(int) $row['forum_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$right = 0;
|
||||
$padding_store = array('0' => '');
|
||||
$padding = '';
|
||||
$forum_list = ($return_array) ? array() : '';
|
||||
|
||||
/**
|
||||
* Modify the forum list data
|
||||
*
|
||||
* @event core.make_forum_select_modify_forum_list
|
||||
* @var array rowset Array with the forums list data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('rowset');
|
||||
extract($phpbb_dispatcher->trigger_event('core.make_forum_select_modify_forum_list', compact($vars)));
|
||||
|
||||
// Sometimes it could happen that forums will be displayed here not be displayed within the index page
|
||||
// This is the result of forums not displayed at index, having list permissions and a parent of a forum with no permissions.
|
||||
// If this happens, the padding could be "broken"
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
foreach ($rowset as $row)
|
||||
{
|
||||
if ($row['left_id'] < $right)
|
||||
{
|
||||
@@ -133,8 +150,7 @@ function make_forum_select($select_id = false, $ignore_id = false, $ignore_acl =
|
||||
$forum_list .= '<option value="' . $row['forum_id'] . '"' . (($disabled) ? ' disabled="disabled" class="disabled-option"' : $selected) . '>' . $padding . $row['forum_name'] . '</option>';
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
unset($padding_store);
|
||||
unset($padding_store, $rowset);
|
||||
|
||||
return $forum_list;
|
||||
}
|
||||
@@ -201,7 +217,7 @@ function group_select_options($group_id, $exclude_ids = false, $manage_founder =
|
||||
*/
|
||||
function get_forum_list($acl_list = 'f_list', $id_only = true, $postable_only = false, $no_cache = false)
|
||||
{
|
||||
global $db, $auth;
|
||||
global $db, $auth, $phpbb_dispatcher;
|
||||
static $forum_rows;
|
||||
|
||||
if (!isset($forum_rows))
|
||||
@@ -256,6 +272,16 @@ function get_forum_list($acl_list = 'f_list', $id_only = true, $postable_only =
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify the forum list data
|
||||
*
|
||||
* @event core.get_forum_list_modify_data
|
||||
* @var array rowset Array with the forum list data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('rowset');
|
||||
extract($phpbb_dispatcher->trigger_event('core.get_forum_list_modify_data', compact($vars)));
|
||||
|
||||
return $rowset;
|
||||
}
|
||||
|
||||
@@ -2531,7 +2557,7 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
|
||||
/**
|
||||
* Prune function
|
||||
*/
|
||||
function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync = true)
|
||||
function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync = true, $prune_limit = 0)
|
||||
{
|
||||
global $db, $phpbb_dispatcher;
|
||||
|
||||
@@ -2583,9 +2609,19 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
|
||||
* @var int prune_flags The prune flags
|
||||
* @var bool auto_sync Whether or not to perform auto sync
|
||||
* @var string sql_and SQL text appended to where clause
|
||||
* @var int prune_limit The prune limit
|
||||
* @since 3.1.3-RC1
|
||||
* @changed 3.1.10-RC1 Added prune_limit
|
||||
*/
|
||||
$vars = array('forum_id', 'prune_mode', 'prune_date', 'prune_flags', 'auto_sync', 'sql_and');
|
||||
$vars = array(
|
||||
'forum_id',
|
||||
'prune_mode',
|
||||
'prune_date',
|
||||
'prune_flags',
|
||||
'auto_sync',
|
||||
'sql_and',
|
||||
'prune_limit',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.prune_sql', compact($vars)));
|
||||
|
||||
$sql = 'SELECT topic_id
|
||||
@@ -2593,7 +2629,7 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
|
||||
WHERE ' . $db->sql_in_set('forum_id', $forum_id) . "
|
||||
AND poll_start = 0
|
||||
$sql_and";
|
||||
$result = $db->sql_query($sql);
|
||||
$result = $db->sql_query_limit($sql, $prune_limit);
|
||||
|
||||
$topic_list = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
@@ -2610,7 +2646,7 @@ function prune($forum_id, $prune_mode, $prune_date, $prune_flags = 0, $auto_sync
|
||||
AND poll_start > 0
|
||||
AND poll_last_vote < $prune_date
|
||||
$sql_and";
|
||||
$result = $db->sql_query($sql);
|
||||
$result = $db->sql_query_limit($sql, $prune_limit);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
@@ -2643,12 +2679,15 @@ function auto_prune($forum_id, $prune_mode, $prune_flags, $prune_days, $prune_fr
|
||||
$prune_date = time() - ($prune_days * 86400);
|
||||
$next_prune = time() + ($prune_freq * 86400);
|
||||
|
||||
prune($forum_id, $prune_mode, $prune_date, $prune_flags, true);
|
||||
$result = prune($forum_id, $prune_mode, $prune_date, $prune_flags, true, 300);
|
||||
|
||||
$sql = 'UPDATE ' . FORUMS_TABLE . "
|
||||
SET prune_next = $next_prune
|
||||
WHERE forum_id = $forum_id";
|
||||
$db->sql_query($sql);
|
||||
if ($result['topics'] == 0 && $result['posts'] == 0)
|
||||
{
|
||||
$sql = 'UPDATE ' . FORUMS_TABLE . "
|
||||
SET prune_next = $next_prune
|
||||
WHERE forum_id = $forum_id";
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
|
||||
add_log('admin', 'LOG_AUTO_PRUNE', $row['forum_name']);
|
||||
}
|
||||
|
@@ -150,7 +150,7 @@ function gen_sort_selects(&$limit_days, &$sort_by_text, &$sort_days, &$sort_key,
|
||||
*/
|
||||
function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list = false, $force_display = false)
|
||||
{
|
||||
global $config, $auth, $template, $user, $db, $phpbb_path_helper;
|
||||
global $config, $auth, $template, $user, $db, $phpbb_path_helper, $phpbb_dispatcher;
|
||||
|
||||
// We only return if the jumpbox is not forced to be displayed (in case it is needed for functionality)
|
||||
if (!$config['load_jumpbox'] && $force_display === false)
|
||||
@@ -163,16 +163,33 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
ORDER BY left_id ASC';
|
||||
$result = $db->sql_query($sql, 600);
|
||||
|
||||
$rowset = array();
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$rowset[(int) $row['forum_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$right = $padding = 0;
|
||||
$padding_store = array('0' => 0);
|
||||
$display_jumpbox = false;
|
||||
$iteration = 0;
|
||||
|
||||
/**
|
||||
* Modify the jumpbox forum list data
|
||||
*
|
||||
* @event core.make_jumpbox_modify_forum_list
|
||||
* @var array rowset Array with the forums list data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('rowset');
|
||||
extract($phpbb_dispatcher->trigger_event('core.make_jumpbox_modify_forum_list', compact($vars)));
|
||||
|
||||
// Sometimes it could happen that forums will be displayed here not be displayed within the index page
|
||||
// This is the result of forums not displayed at index, having list permissions and a parent of a forum with no permissions.
|
||||
// If this happens, the padding could be "broken"
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
foreach ($rowset as $row)
|
||||
{
|
||||
if ($row['left_id'] < $right)
|
||||
{
|
||||
@@ -205,20 +222,21 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
continue;
|
||||
}
|
||||
|
||||
$tpl_ary = array();
|
||||
if (!$display_jumpbox)
|
||||
{
|
||||
$template->assign_block_vars('jumpbox_forums', array(
|
||||
$tpl_ary[] = array(
|
||||
'FORUM_ID' => ($select_all) ? 0 : -1,
|
||||
'FORUM_NAME' => ($select_all) ? $user->lang['ALL_FORUMS'] : $user->lang['SELECT_FORUM'],
|
||||
'S_FORUM_COUNT' => $iteration,
|
||||
'LINK' => $phpbb_path_helper->append_url_params($action, array('f' => $forum_id)),
|
||||
));
|
||||
);
|
||||
|
||||
$iteration++;
|
||||
$display_jumpbox = true;
|
||||
}
|
||||
|
||||
$template->assign_block_vars('jumpbox_forums', array(
|
||||
$tpl_ary[] = array(
|
||||
'FORUM_ID' => $row['forum_id'],
|
||||
'FORUM_NAME' => $row['forum_name'],
|
||||
'SELECTED' => ($row['forum_id'] == $forum_id) ? ' selected="selected"' : '',
|
||||
@@ -227,7 +245,25 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
'S_IS_LINK' => ($row['forum_type'] == FORUM_LINK) ? true : false,
|
||||
'S_IS_POST' => ($row['forum_type'] == FORUM_POST) ? true : false,
|
||||
'LINK' => $phpbb_path_helper->append_url_params($action, array('f' => $row['forum_id'])),
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify the jumpbox before it is assigned to the template
|
||||
*
|
||||
* @event core.make_jumpbox_modify_tpl_ary
|
||||
* @var array row The data of the forum
|
||||
* @var array tpl_ary Template data of the forum
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'row',
|
||||
'tpl_ary',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.make_jumpbox_modify_tpl_ary', compact($vars)));
|
||||
|
||||
$template->assign_block_vars_array('jumpbox_forums', $tpl_ary);
|
||||
|
||||
unset($tpl_ary);
|
||||
|
||||
for ($i = 0; $i < $padding; $i++)
|
||||
{
|
||||
@@ -235,8 +271,7 @@ function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list
|
||||
}
|
||||
$iteration++;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
unset($padding_store);
|
||||
unset($padding_store, $rowset);
|
||||
|
||||
$url_parts = $phpbb_path_helper->get_url_parts($action);
|
||||
|
||||
|
@@ -166,7 +166,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
|
||||
}
|
||||
|
||||
// Make sure the database record for the filesize is correct
|
||||
if ($size > 0 && $size != $attachment['filesize'])
|
||||
if ($size > 0 && $size != $attachment['filesize'] && strpos($attachment['physical_filename'], 'thumb_') === false)
|
||||
{
|
||||
// Update database record
|
||||
$sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
|
||||
@@ -284,7 +284,7 @@ function header_filename($file)
|
||||
|
||||
// There be dragons here.
|
||||
// Not many follows the RFC...
|
||||
if (strpos($user_agent, 'MSIE') !== false || strpos($user_agent, 'Safari') !== false || strpos($user_agent, 'Konqueror') !== false)
|
||||
if (strpos($user_agent, 'MSIE') !== false || strpos($user_agent, 'Konqueror') !== false)
|
||||
{
|
||||
return "filename=" . rawurlencode($file);
|
||||
}
|
||||
|
@@ -231,6 +231,13 @@ class messenger
|
||||
$template_lang = basename($config['default_lang']);
|
||||
}
|
||||
|
||||
$ext_template_paths = array(
|
||||
array(
|
||||
'name' => $template_lang . '_email',
|
||||
'ext_path' => 'language/' . $template_lang . '/email' . $template_dir_prefix,
|
||||
),
|
||||
);
|
||||
|
||||
if ($template_path)
|
||||
{
|
||||
$template_paths = array(
|
||||
@@ -246,23 +253,38 @@ class messenger
|
||||
$template_path . $template_dir_prefix,
|
||||
);
|
||||
|
||||
$board_language = basename($config['default_lang']);
|
||||
|
||||
// we can only specify default language fallback when the path is not a custom one for which we
|
||||
// do not know the default language alternative
|
||||
if ($template_lang !== basename($config['default_lang']))
|
||||
if ($template_lang !== $board_language)
|
||||
{
|
||||
$fallback_template_path = (!empty($user->lang_path)) ? $user->lang_path : $phpbb_root_path . 'language/';
|
||||
$fallback_template_path .= basename($config['default_lang']) . '/email';
|
||||
$fallback_template_path .= $board_language . '/email';
|
||||
|
||||
$template_paths[] = $fallback_template_path . $template_dir_prefix;
|
||||
|
||||
$ext_template_paths[] = array(
|
||||
'name' => $board_language . '_email',
|
||||
'ext_path' => 'language/' . $board_language . '/email' . $template_dir_prefix,
|
||||
);
|
||||
}
|
||||
// If everything fails just fall back to en template
|
||||
if ($template_lang !== 'en' && $board_language !== 'en')
|
||||
{
|
||||
$fallback_template_path = (!empty($user->lang_path)) ? $user->lang_path : $phpbb_root_path . 'language/';
|
||||
$fallback_template_path .= 'en/email';
|
||||
|
||||
$template_paths[] = $fallback_template_path . $template_dir_prefix;
|
||||
|
||||
$ext_template_paths[] = array(
|
||||
'name' => 'en_email',
|
||||
'ext_path' => 'language/en/email' . $template_dir_prefix,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->set_template_paths(array(
|
||||
array(
|
||||
'name' => $template_lang . '_email',
|
||||
'ext_path' => 'language/' . $template_lang . '/email' . $template_dir_prefix,
|
||||
),
|
||||
), $template_paths);
|
||||
$this->set_template_paths($ext_template_paths, $template_paths);
|
||||
|
||||
$this->template->set_filenames(array(
|
||||
'body' => $template_file . '.txt',
|
||||
|
@@ -702,7 +702,7 @@ function create_thumbnail($source, $destination, $mimetype)
|
||||
|
||||
$used_imagick = false;
|
||||
|
||||
// Only use imagemagick if defined and the passthru function not disabled
|
||||
// Only use ImageMagick if defined and the passthru function not disabled
|
||||
if ($config['img_imagick'] && function_exists('passthru'))
|
||||
{
|
||||
if (substr($config['img_imagick'], -1) !== '/')
|
||||
|
@@ -119,19 +119,29 @@ function user_update_name($old_name, $new_name)
|
||||
global $config, $db, $cache, $phpbb_dispatcher;
|
||||
|
||||
$update_ary = array(
|
||||
FORUMS_TABLE => array('forum_last_poster_name'),
|
||||
MODERATOR_CACHE_TABLE => array('username'),
|
||||
POSTS_TABLE => array('post_username'),
|
||||
TOPICS_TABLE => array('topic_first_poster_name', 'topic_last_poster_name'),
|
||||
FORUMS_TABLE => array(
|
||||
'forum_last_poster_id' => 'forum_last_poster_name',
|
||||
),
|
||||
MODERATOR_CACHE_TABLE => array(
|
||||
'user_id' => 'username',
|
||||
),
|
||||
POSTS_TABLE => array(
|
||||
'poster_id' => 'post_username',
|
||||
),
|
||||
TOPICS_TABLE => array(
|
||||
'topic_poster' => 'topic_first_poster_name',
|
||||
'topic_last_poster_id' => 'topic_last_poster_name',
|
||||
),
|
||||
);
|
||||
|
||||
foreach ($update_ary as $table => $field_ary)
|
||||
{
|
||||
foreach ($field_ary as $field)
|
||||
foreach ($field_ary as $id_field => $name_field)
|
||||
{
|
||||
$sql = "UPDATE $table
|
||||
SET $field = '" . $db->sql_escape($new_name) . "'
|
||||
WHERE $field = '" . $db->sql_escape($old_name) . "'";
|
||||
SET $name_field = '" . $db->sql_escape($new_name) . "'
|
||||
WHERE $name_field = '" . $db->sql_escape($old_name) . "'
|
||||
AND $id_field <> " . ANONYMOUS;
|
||||
$db->sql_query($sql);
|
||||
}
|
||||
}
|
||||
@@ -3076,7 +3086,7 @@ function remove_default_rank($group_id, $user_ids)
|
||||
*/
|
||||
function group_user_attributes($action, $group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $group_attributes = false)
|
||||
{
|
||||
global $db, $auth, $phpbb_root_path, $phpEx, $config, $phpbb_container;
|
||||
global $db, $auth, $phpbb_root_path, $phpEx, $config, $phpbb_container, $phpbb_dispatcher;
|
||||
|
||||
// We need both username and user_id info
|
||||
$result = user_get_id_name($user_id_ary, $username_ary);
|
||||
@@ -3207,6 +3217,28 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna
|
||||
break;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event to perform additional actions on setting user group attributes
|
||||
*
|
||||
* @event core.user_set_group_attributes
|
||||
* @var int group_id ID of the group
|
||||
* @var string group_name Name of the group
|
||||
* @var array user_id_ary IDs of the users to set group attributes
|
||||
* @var array username_ary Names of the users to set group attributes
|
||||
* @var array group_attributes Group attributes which were changed
|
||||
* @var string action Action to perform over the group members
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'group_id',
|
||||
'group_name',
|
||||
'user_id_ary',
|
||||
'username_ary',
|
||||
'group_attributes',
|
||||
'action',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.user_set_group_attributes', compact($vars)));
|
||||
|
||||
// Clear permissions cache of relevant users
|
||||
$auth->acl_clear_prefetch($user_id_ary);
|
||||
|
||||
|
@@ -273,7 +273,7 @@ function mcp_forum_view($id, $mode, $action, $forum_info)
|
||||
'TOPIC_ICON_IMG_WIDTH' => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['width'] : '',
|
||||
'TOPIC_ICON_IMG_HEIGHT' => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['height'] : '',
|
||||
'UNAPPROVED_IMG' => ($topic_unapproved || $posts_unapproved) ? $user->img('icon_topic_unapproved', ($topic_unapproved) ? 'TOPIC_UNAPPROVED' : 'POSTS_UNAPPROVED') : '',
|
||||
'DELETED_IMG' => ($topic_deleted) ? $user->img('icon_topic_deleted', 'POSTS_DELETED') : '',
|
||||
'DELETED_IMG' => ($topic_deleted) ? $user->img('icon_topic_deleted', 'TOPIC_DELETED') : '',
|
||||
|
||||
'TOPIC_AUTHOR' => get_username_string('username', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
|
||||
'TOPIC_AUTHOR_COLOUR' => get_username_string('colour', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
|
||||
|
@@ -877,11 +877,12 @@ function mcp_delete_topic($topic_ids, $is_soft = false, $soft_delete_reason = ''
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_SHADOW_TOPICS' => $only_shadow,
|
||||
'S_SOFTDELETED' => $only_softdeleted,
|
||||
'S_TOPIC_MODE' => true,
|
||||
'S_ALLOWED_DELETE' => $auth->acl_get('m_delete', $forum_id),
|
||||
'S_ALLOWED_SOFTDELETE' => $auth->acl_get('m_softdelete', $forum_id),
|
||||
'S_SHADOW_TOPICS' => $only_shadow,
|
||||
'S_SOFTDELETED' => $only_softdeleted,
|
||||
'S_TOPIC_MODE' => true,
|
||||
'S_ALLOWED_DELETE' => $auth->acl_get('m_delete', $forum_id),
|
||||
'S_ALLOWED_SOFTDELETE' => $auth->acl_get('m_softdelete', $forum_id),
|
||||
'DELETE_TOPIC_PERMANENTLY_EXPLAIN' => $user->lang('DELETE_TOPIC_PERMANENTLY', sizeof($topic_ids)),
|
||||
));
|
||||
|
||||
$l_confirm = (sizeof($topic_ids) == 1) ? 'DELETE_TOPIC' : 'DELETE_TOPICS';
|
||||
@@ -1116,9 +1117,10 @@ function mcp_delete_post($post_ids, $is_soft = false, $soft_delete_reason = '',
|
||||
}
|
||||
|
||||
$template->assign_vars(array(
|
||||
'S_SOFTDELETED' => $only_softdeleted,
|
||||
'S_ALLOWED_DELETE' => $auth->acl_get('m_delete', $forum_id),
|
||||
'S_ALLOWED_SOFTDELETE' => $auth->acl_get('m_softdelete', $forum_id),
|
||||
'S_SOFTDELETED' => $only_softdeleted,
|
||||
'S_ALLOWED_DELETE' => $auth->acl_get('m_delete', $forum_id),
|
||||
'S_ALLOWED_SOFTDELETE' => $auth->acl_get('m_softdelete', $forum_id),
|
||||
'DELETE_POST_PERMANENTLY_EXPLAIN' => $user->lang('DELETE_POST_PERMANENTLY', sizeof($post_ids)),
|
||||
));
|
||||
|
||||
$l_confirm = (sizeof($post_ids) == 1) ? 'DELETE_POST' : 'DELETE_POSTS';
|
||||
|
@@ -35,7 +35,7 @@ class ucp_main
|
||||
|
||||
function main($id, $mode)
|
||||
{
|
||||
global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx;
|
||||
global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx, $phpbb_dispatcher;
|
||||
global $request;
|
||||
|
||||
switch ($mode)
|
||||
@@ -215,6 +215,14 @@ class ucp_main
|
||||
|
||||
$unwatch = (isset($_POST['unwatch'])) ? true : false;
|
||||
|
||||
/**
|
||||
* Read and potentially modify the post data used to remove subscriptions to forums/topics
|
||||
*
|
||||
* @event core.ucp_main_subscribed_post_data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$phpbb_dispatcher->dispatch('core.ucp_main_subscribed_post_data');
|
||||
|
||||
if ($unwatch)
|
||||
{
|
||||
if (check_form_key('ucp_front_subscribed'))
|
||||
@@ -300,6 +308,20 @@ class ucp_main
|
||||
$tracking_topics = ($tracking_topics) ? tracking_unserialize($tracking_topics) : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify the query used to retrieve a list of subscribed forums
|
||||
*
|
||||
* @event core.ucp_main_subscribed_forums_modify_query
|
||||
* @var array sql_array The subscribed forums query
|
||||
* @var array forbidden_forums The list of forbidden forums
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'sql_array',
|
||||
'forbidden_forums',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_main_subscribed_forums_modify_query', compact($vars)));
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_array);
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
@@ -341,7 +363,7 @@ class ucp_main
|
||||
$last_post_time = $last_post_url = '';
|
||||
}
|
||||
|
||||
$template->assign_block_vars('forumrow', array(
|
||||
$template_vars = array(
|
||||
'FORUM_ID' => $forum_id,
|
||||
'FORUM_IMG_STYLE' => $folder_image,
|
||||
'FORUM_FOLDER_IMG' => $user->img($folder_image, $folder_alt),
|
||||
@@ -360,8 +382,36 @@ class ucp_main
|
||||
'S_UNREAD_FORUM' => $unread_forum,
|
||||
|
||||
'U_LAST_POST' => $last_post_url,
|
||||
'U_VIEWFORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']))
|
||||
'U_VIEWFORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id'])
|
||||
);
|
||||
|
||||
/**
|
||||
* Add template variables to a subscribed forum row.
|
||||
*
|
||||
* @event core.ucp_main_subscribed_forum_modify_template_vars
|
||||
* @var array template_vars Array containing the template variables for the row
|
||||
* @var array row Array containing the subscribed forum row data
|
||||
* @var int forum_id Forum ID
|
||||
* @var string folder_image Folder image
|
||||
* @var string folder_alt Alt text for the folder image
|
||||
* @var bool unread_forum Whether the forum has unread content or not
|
||||
* @var string last_post_time The time of the most recent post, expressed as a formatted date string
|
||||
* @var string last_post_url The URL of the most recent post in the forum
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'template_vars',
|
||||
'row',
|
||||
'forum_id',
|
||||
'folder_image',
|
||||
'folder_alt',
|
||||
'unread_forum',
|
||||
'last_post_time',
|
||||
'last_post_url',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_main_subscribed_forum_modify_template_vars', compact($vars)));
|
||||
|
||||
$template->assign_block_vars('forumrow', $template_vars);
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
@@ -643,7 +693,7 @@ class ucp_main
|
||||
*/
|
||||
function assign_topiclist($mode = 'subscribed', $forbidden_forum_ary = array())
|
||||
{
|
||||
global $user, $db, $template, $config, $cache, $auth, $phpbb_root_path, $phpEx, $phpbb_container;
|
||||
global $user, $db, $template, $config, $cache, $auth, $phpbb_root_path, $phpEx, $phpbb_container, $request, $phpbb_dispatcher;
|
||||
|
||||
$table = ($mode == 'subscribed') ? TOPICS_WATCH_TABLE : BOOKMARKS_TABLE;
|
||||
$start = request_var('start', 0);
|
||||
@@ -664,6 +714,23 @@ class ucp_main
|
||||
AND i.user_id = ' . $user->data['user_id'] . '
|
||||
AND ' . $db->sql_in_set('t.forum_id', $forbidden_forum_ary, true, true),
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify the query used to retrieve the count of subscribed/bookmarked topics
|
||||
*
|
||||
* @event core.ucp_main_topiclist_count_modify_query
|
||||
* @var array sql_array The subscribed/bookmarked topics query
|
||||
* @var array forbidden_forum_ary The list of forbidden forums
|
||||
* @var string mode The type of topic list ('subscribed' or 'bookmarks')
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'sql_array',
|
||||
'forbidden_forum_ary',
|
||||
'mode',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_main_topiclist_count_modify_query', compact($vars)));
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_array);
|
||||
$result = $db->sql_query($sql);
|
||||
$topics_count = (int) $db->sql_fetchfield('topics_count');
|
||||
@@ -732,6 +799,22 @@ class ucp_main
|
||||
$sql_array['SELECT'] .= ', tp.topic_posted';
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify the query used to retrieve the list of subscribed/bookmarked topics
|
||||
*
|
||||
* @event core.ucp_main_topiclist_modify_query
|
||||
* @var array sql_array The subscribed/bookmarked topics query
|
||||
* @var array forbidden_forum_ary The list of forbidden forums
|
||||
* @var string mode The type of topic list ('subscribed' or 'bookmarks')
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'sql_array',
|
||||
'forbidden_forum_ary',
|
||||
'mode',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_main_topiclist_modify_query', compact($vars)));
|
||||
|
||||
$sql = $db->sql_build_query('SELECT', $sql_array);
|
||||
$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
|
||||
|
||||
@@ -796,7 +879,7 @@ class ucp_main
|
||||
$view_topic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", $view_topic_url_params);
|
||||
|
||||
// Send vars to template
|
||||
$template->assign_block_vars('topicrow', array(
|
||||
$template_vars = array(
|
||||
'FORUM_ID' => $forum_id,
|
||||
'TOPIC_ID' => $topic_id,
|
||||
'FIRST_POST_TIME' => $user->format_date($row['topic_time']),
|
||||
@@ -838,7 +921,41 @@ class ucp_main
|
||||
'U_LAST_POST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", $view_topic_url_params . '&p=' . $row['topic_last_post_id']) . '#p' . $row['topic_last_post_id'],
|
||||
'U_VIEW_TOPIC' => $view_topic_url,
|
||||
'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id),
|
||||
));
|
||||
);
|
||||
|
||||
/**
|
||||
* Add template variables to a subscribed/bookmarked topic row.
|
||||
*
|
||||
* @event core.ucp_main_topiclist_topic_modify_template_vars
|
||||
* @var array template_vars Array containing the template variables for the row
|
||||
* @var array row Array containing the subscribed/bookmarked topic row data
|
||||
* @var int forum_id ID of the forum containing the topic
|
||||
* @var int topic_id Topic ID
|
||||
* @var int replies Number of replies in the topic
|
||||
* @var string topic_type Topic type
|
||||
* @var string folder_img Folder image
|
||||
* @var string folder_alt Alt text for the folder image
|
||||
* @var array icons Array containing topic icons
|
||||
* @var bool unread_topic Whether the topic has unread content or not
|
||||
* @var string view_topic_url The URL of the topic
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'template_vars',
|
||||
'row',
|
||||
'forum_id',
|
||||
'topic_id',
|
||||
'replies',
|
||||
'topic_type',
|
||||
'folder_img',
|
||||
'folder_alt',
|
||||
'icons',
|
||||
'unread_topic',
|
||||
'view_topic_url',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_main_topiclist_topic_modify_template_vars', compact($vars)));
|
||||
|
||||
$template->assign_block_vars('topicrow', $template_vars);
|
||||
|
||||
$pagination->generate_template_pagination(append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . "&t=$topic_id"), 'topicrow.pagination', 'start', $replies + 1, $config['posts_per_page'], 1, true, true);
|
||||
}
|
||||
|
@@ -751,6 +751,34 @@ function compose_pm($id, $mode, $action, $user_folders = array())
|
||||
$enable_urls = (isset($_POST['disable_magic_url'])) ? 0 : 1;
|
||||
$enable_sig = (!$config['allow_sig'] ||!$config['allow_sig_pm']) ? false : ((isset($_POST['attach_sig'])) ? true : false);
|
||||
|
||||
/**
|
||||
* Modify private message
|
||||
*
|
||||
* @event core.ucp_pm_compose_modify_parse_before
|
||||
* @var bool enable_bbcode Whether or not bbcode is enabled
|
||||
* @var bool enable_smilies Whether or not smilies are enabled
|
||||
* @var bool enable_urls Whether or not urls are enabled
|
||||
* @var bool enable_sig Whether or not signature is enabled
|
||||
* @var string subject PM subject text
|
||||
* @var object message_parser The message parser object
|
||||
* @var bool submit Whether or not the form has been sumitted
|
||||
* @var bool preview Whether or not the signature is being previewed
|
||||
* @var array error Any error strings
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'enable_bbcode',
|
||||
'enable_smilies',
|
||||
'enable_urls',
|
||||
'enable_sig',
|
||||
'subject',
|
||||
'message_parser',
|
||||
'submit',
|
||||
'preview',
|
||||
'error',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_pm_compose_modify_parse_before', compact($vars)));
|
||||
|
||||
if ($submit)
|
||||
{
|
||||
$status_switch = (($enable_bbcode+1) << 8) + (($enable_smilies+1) << 4) + (($enable_urls+1) << 2) + (($enable_sig+1) << 1);
|
||||
|
@@ -479,6 +479,32 @@ class ucp_profile
|
||||
{
|
||||
$message_parser = new parse_message($signature);
|
||||
|
||||
/**
|
||||
* Modify user signature on editing profile in UCP
|
||||
*
|
||||
* @event core.ucp_profile_modify_signature
|
||||
* @var bool enable_bbcode Whether or not bbcode is enabled
|
||||
* @var bool enable_smilies Whether or not smilies are enabled
|
||||
* @var bool enable_urls Whether or not urls are enabled
|
||||
* @var string signature Users signature text
|
||||
* @var object message_parser The message parser object
|
||||
* @var array error Any error strings
|
||||
* @var bool submit Whether or not the form has been sumitted
|
||||
* @var bool preview Whether or not the signature is being previewed
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'enable_bbcode',
|
||||
'enable_smilies',
|
||||
'enable_urls',
|
||||
'signature',
|
||||
'message_parser',
|
||||
'error',
|
||||
'submit',
|
||||
'preview',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_profile_modify_signature', compact($vars)));
|
||||
|
||||
// Allowing Quote BBCode
|
||||
$message_parser->parse($enable_bbcode, $enable_urls, $enable_smilies, $config['allow_sig_img'], $config['allow_sig_flash'], true, $config['allow_sig_links'], true, 'sig');
|
||||
|
||||
@@ -505,6 +531,16 @@ class ucp_profile
|
||||
'user_sig_bbcode_bitfield' => $message_parser->bbcode_bitfield
|
||||
);
|
||||
|
||||
/**
|
||||
* Modify user registration data before submitting it to the database
|
||||
*
|
||||
* @event core.ucp_profile_modify_signature_sql_ary
|
||||
* @var array sql_ary Array with user signature data to submit to the database
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('sql_ary');
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_profile_modify_signature_sql_ary', compact($vars)));
|
||||
|
||||
$sql = 'UPDATE ' . USERS_TABLE . '
|
||||
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
|
||||
WHERE user_id = ' . $user->data['user_id'];
|
||||
|
@@ -184,8 +184,8 @@ if ($config['load_birthdays'] && $config['allow_birthdays'] && $auth->acl_gets('
|
||||
* Event to modify the birthdays list
|
||||
*
|
||||
* @event core.index_modify_birthdays_list
|
||||
* @var array birthdays Array with the users birhtdays data
|
||||
* @var array rows Array with the birhtdays SQL query result
|
||||
* @var array birthdays Array with the users birthdays data
|
||||
* @var array rows Array with the birthdays SQL query result
|
||||
* @since 3.1.7-RC1
|
||||
*/
|
||||
$vars = array('birthdays', 'rows');
|
||||
|
@@ -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.1.9',
|
||||
'phpbb_version' => '3.1.10',
|
||||
'author' => '<a href="https://www.phpbb.com/">phpBB Limited</a>',
|
||||
'dbms' => $dbms,
|
||||
'dbhost' => $dbhost,
|
||||
|
@@ -211,13 +211,6 @@ while (!$migrator->finished())
|
||||
phpbb_end_update($cache, $config);
|
||||
}
|
||||
|
||||
$state = array_merge(array(
|
||||
'migration_schema_done' => false,
|
||||
'migration_data_done' => false,
|
||||
),
|
||||
$migrator->last_run_migration['state']
|
||||
);
|
||||
|
||||
// Are we approaching the time limit? If so we want to pause the update and continue after refreshing
|
||||
if ((time() - $update_start_time) >= $safe_time_limit)
|
||||
{
|
||||
|
@@ -151,10 +151,10 @@ class install_install extends module
|
||||
'LEGEND_EXPLAIN' => $lang['PHP_SETTINGS_EXPLAIN'],
|
||||
));
|
||||
|
||||
// Test the minimum PHP version
|
||||
// Test the minimum and maximum version of PHP
|
||||
$php_version = PHP_VERSION;
|
||||
|
||||
if (version_compare($php_version, '5.3.3') < 0)
|
||||
if ((version_compare($php_version, '5.3.3') < 0) || (version_compare($php_version, '7.0.0-dev', '>=')))
|
||||
{
|
||||
$result = '<strong style="color:red">' . $lang['NO'] . '</strong>';
|
||||
}
|
||||
@@ -404,7 +404,7 @@ class install_install extends module
|
||||
));
|
||||
}
|
||||
|
||||
// Can we find Imagemagick anywhere on the system?
|
||||
// Can we find ImageMagick anywhere on the system?
|
||||
$exe = (DIRECTORY_SEPARATOR == '\\') ? '.exe' : '';
|
||||
|
||||
$magic_home = getenv('MAGICK_HOME');
|
||||
|
@@ -273,7 +273,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.1.9');
|
||||
INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.1.10-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');
|
||||
|
||||
|
@@ -117,7 +117,7 @@ $lang = array_merge($lang, array(
|
||||
|
||||
'IMAGE_LINK_SIZE' => 'Image link dimensions',
|
||||
'IMAGE_LINK_SIZE_EXPLAIN' => 'Display image attachment as an inline text link if image is larger than this. To disable this behaviour, set the values to 0px by 0px.',
|
||||
'IMAGICK_PATH' => 'Imagemagick path',
|
||||
'IMAGICK_PATH' => 'ImageMagick path',
|
||||
'IMAGICK_PATH_EXPLAIN' => 'Full path to the imagemagick convert application, e.g. <samp>/usr/bin/</samp>.',
|
||||
|
||||
'MAX_ATTACHMENTS' => 'Maximum number of attachments per post',
|
||||
@@ -153,7 +153,7 @@ $lang = array_merge($lang, array(
|
||||
'REMOVE_DISALLOWED_IPS' => 'Remove or un-exclude <em>disallowed</em> IPs/hostnames',
|
||||
'RESYNC_FILES_STATS_CONFIRM' => 'Are you sure you wish to resynchronise file statistics?',
|
||||
|
||||
'SEARCH_IMAGICK' => 'Search for Imagemagick',
|
||||
'SEARCH_IMAGICK' => 'Search for ImageMagick',
|
||||
'SECURE_ALLOW_DENY' => 'Allow/Deny list',
|
||||
'SECURE_ALLOW_DENY_EXPLAIN' => 'Change the default behaviour when secure downloads are enabled of the Allow/Deny list to that of a <strong>whitelist</strong> (Allow) or a <strong>blacklist</strong> (Deny).',
|
||||
'SECURE_DOWNLOADS' => 'Enable secure downloads',
|
||||
|
@@ -570,6 +570,7 @@ $lang = array_merge($lang, array(
|
||||
'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',
|
||||
'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_SETTINGS' => 'SMTP settings',
|
||||
'SMTP_USERNAME' => 'SMTP username',
|
||||
'SMTP_USERNAME_EXPLAIN' => 'Only enter a username if your SMTP server requires it.',
|
||||
|
@@ -54,7 +54,7 @@ $lang = array_merge($lang, array(
|
||||
'DELETING_INDEX_IN_PROGRESS_EXPLAIN' => 'The search backend is currently cleaning its index. This can take a few minutes.',
|
||||
|
||||
'FULLTEXT_MYSQL_INCOMPATIBLE_DATABASE' => 'The MySQL fulltext backend can only be used with MySQL4 and above.',
|
||||
'FULLTEXT_MYSQL_NOT_SUPPORTED' => 'MySQL fulltext indexes can only be used with MyISAM or InnoDB tables. MySQL 5.6.4 or later is required for fulltext indexes on InnoDB tables.',
|
||||
'FULLTEXT_MYSQL_NOT_SUPPORTED' => 'MySQL fulltext indexes can only be used with MyISAM or InnoDB tables. MySQL 5.6.8 or later is required for fulltext indexes on InnoDB tables.',
|
||||
'FULLTEXT_MYSQL_TOTAL_POSTS' => 'Total number of indexed posts',
|
||||
'FULLTEXT_MYSQL_MIN_SEARCH_CHARS_EXPLAIN' => 'Words with at least this many characters will be indexed for searching. You or your host can only change this setting by changing the mysql configuration.',
|
||||
'FULLTEXT_MYSQL_MAX_SEARCH_CHARS_EXPLAIN' => 'Words with no more than this many characters will be indexed for searching. You or your host can only change this setting by changing the mysql configuration.',
|
||||
|
@@ -2,7 +2,7 @@ Subject: Forum post notification - "{FORUM_NAME}"
|
||||
|
||||
Hello {USERNAME},
|
||||
|
||||
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new reply to the topic "{TOPIC_TITLE}"<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. You can use the following link to view the last unread reply, no more notifications will be sent until you visit the topic.
|
||||
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new reply to the topic "{TOPIC_TITLE}"<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. You can use the following link to view the last unread reply, no more notifications will be sent until you visit the topic.
|
||||
|
||||
{U_NEWEST_POST}
|
||||
|
||||
|
@@ -2,7 +2,7 @@ Subject: New topic notification - "{FORUM_NAME}"
|
||||
|
||||
Hello {USERNAME},
|
||||
|
||||
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum.
|
||||
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum.
|
||||
|
||||
{U_FORUM}
|
||||
|
||||
|
@@ -2,7 +2,7 @@ Subject: New topic notification - "{FORUM_NAME}"
|
||||
|
||||
Hello {USERNAME},
|
||||
|
||||
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum.
|
||||
You are receiving this notification because you are watching the forum "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum.
|
||||
|
||||
{U_FORUM}
|
||||
|
||||
|
@@ -2,7 +2,7 @@ Subject: Topic reply notification - "{TOPIC_TITLE}"
|
||||
|
||||
Hello {USERNAME},
|
||||
|
||||
You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. You can use the following link to view the replies made, no more notifications will be sent until you visit the topic.
|
||||
You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. You can use the following link to view the replies made, no more notifications will be sent until you visit the topic.
|
||||
|
||||
If you want to view the newest post made since your last visit, click the following link:
|
||||
{U_NEWEST_POST}
|
||||
|
@@ -2,7 +2,7 @@ Subject: Topic reply notification - "{TOPIC_TITLE}"
|
||||
|
||||
Hello {USERNAME},
|
||||
|
||||
You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME !== '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. No more notifications will be sent until you visit the topic.
|
||||
You are receiving this notification because you are watching the topic "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply<!-- IF AUTHOR_NAME != '' --> by {AUTHOR_NAME}<!-- ENDIF --> since your last visit. No more notifications will be sent until you visit the topic.
|
||||
|
||||
If you want to view the newest post made since your last visit, click the following link:
|
||||
{U_NEWEST_POST}
|
||||
|
@@ -44,7 +44,7 @@ $lang = array_merge($lang, array(
|
||||
'ADMIN_TEST' => 'Check administrator settings',
|
||||
'ADMIN_USERNAME' => 'Administrator username',
|
||||
'ADMIN_USERNAME_EXPLAIN' => 'Please enter a username between 3 and 20 characters in length.',
|
||||
'APP_MAGICK' => 'Imagemagick support [ Attachments ]',
|
||||
'APP_MAGICK' => 'ImageMagick support [ Attachments ]',
|
||||
'AUTHOR_NOTES' => 'Author notes<br />» %s',
|
||||
'AVAILABLE' => 'Available',
|
||||
'AVAILABLE_CONVERTORS' => 'Available convertors',
|
||||
@@ -282,7 +282,7 @@ $lang = array_merge($lang, array(
|
||||
'NOT_UNDERSTAND' => 'Could not understand %s #%d, table %s (“%s”)',
|
||||
'NO_CONVERTORS' => 'No convertors are available for use.',
|
||||
'NO_CONVERT_SPECIFIED' => 'No convertor specified.',
|
||||
'NO_LOCATION' => 'Cannot determine location. If you know Imagemagick is installed, you may specify the location later within your administration control panel',
|
||||
'NO_LOCATION' => 'Cannot determine location. If you know ImageMagick is installed, you may specify the location later within your administration control panel',
|
||||
'NO_TABLES_FOUND' => 'No tables found.',
|
||||
|
||||
'OVERVIEW_BODY' => 'Welcome to phpBB3!<br /><br />phpBB® is the most widely used open source bulletin board solution in the world. phpBB3 is the latest installment in a package line started in 2000. Like its predecessors, phpBB3 is feature-rich, user-friendly, and fully supported by the phpBB Team. phpBB3 greatly improves on what made phpBB2 popular, and adds commonly requested features that were not present in previous versions. We hope it exceeds your expectations.<br /><br />This installation system will guide you through installing phpBB3, updating to the latest version of phpBB3 from past releases, as well as converting to phpBB3 from a different discussion board system (including phpBB2). For more information, we encourage you to read <a href="../docs/INSTALL.html">the installation guide</a>.<br /><br />To read the phpBB3 license or learn about obtaining support and our stance on it, please select the respective options from the side menu. To continue, please select the appropriate tab above.',
|
||||
@@ -301,10 +301,10 @@ $lang = array_merge($lang, array(
|
||||
'PHP_REGISTER_GLOBALS_EXPLAIN' => 'phpBB will still run if this setting is enabled, but if possible, it is recommended that register_globals is disabled on your PHP install for security reasons.',
|
||||
'PHP_SAFE_MODE' => 'Safe mode',
|
||||
'PHP_SETTINGS' => 'PHP version and settings',
|
||||
'PHP_SETTINGS_EXPLAIN' => '<strong>Required</strong> - You must be running at least version 5.3.3 of PHP in order to install phpBB. If <var>safe mode</var> is displayed below your PHP installation is running in that mode. This will impose limitations on remote administration and similar features.',
|
||||
'PHP_SETTINGS_EXPLAIN' => '<strong>Required</strong> - You must be running at least version 5.3.3 of PHP (PHP 7 is not supported) in order to install phpBB. If <var>safe mode</var> is displayed below your PHP installation is running in that mode. This will impose limitations on remote administration and similar features.',
|
||||
'PHP_URL_FOPEN_SUPPORT' => 'PHP setting <var>allow_url_fopen</var> is enabled',
|
||||
'PHP_URL_FOPEN_SUPPORT_EXPLAIN' => '<strong>Optional</strong> - This setting is optional, however certain phpBB functions like off-site avatars will not work properly without it.',
|
||||
'PHP_VERSION_REQD' => 'PHP version >= 5.3.3',
|
||||
'PHP_VERSION_REQD' => 'PHP version: >= 5.3.3, < 7.0.0-dev',
|
||||
'POST_ID' => 'Post ID',
|
||||
'PREFIX_FOUND' => 'A scan of your tables has shown a valid installation using <strong>%s</strong> as table prefix.',
|
||||
'PREPROCESS_STEP' => 'Executing pre-processing functions/queries',
|
||||
@@ -400,6 +400,7 @@ $lang = array_merge($lang, array(
|
||||
'DATABASE_UPDATE_CONTINUE' => 'Continue database update',
|
||||
'DATABASE_UPDATE_INFO_OLD' => 'The database update file within the install directory is outdated. Please make sure you uploaded the correct version of the file.',
|
||||
'DATABASE_UPDATE_NOT_COMPLETED' => 'The database update has not yet completed.',
|
||||
'DATABASE_VERSION' => 'Database version',
|
||||
'DELETE_USER_REMOVE' => 'Delete user and remove posts',
|
||||
'DELETE_USER_RETAIN' => 'Delete user but keep posts',
|
||||
'DESTINATION' => 'Destination file',
|
||||
@@ -439,6 +440,7 @@ $lang = array_merge($lang, array(
|
||||
'FILES_NOT_MODIFIED_EXPLAIN' => 'The following files are not modified and represent the original phpBB files from the version you want to update from.',
|
||||
'FILES_UP_TO_DATE' => 'Already updated files',
|
||||
'FILES_UP_TO_DATE_EXPLAIN' => 'The following files are already up to date and do not need to be updated.',
|
||||
'FILES_VERSION' => 'Files Version',
|
||||
'FTP_SETTINGS' => 'FTP settings',
|
||||
'FTP_UPDATE_METHOD' => 'FTP upload',
|
||||
|
||||
@@ -486,6 +488,7 @@ $lang = array_merge($lang, array(
|
||||
'OLD_UPDATE_FILES' => 'Update files are out of date. The update files found are for updating from phpBB %1$s to phpBB %2$s but the latest version of phpBB is %3$s.',
|
||||
|
||||
'PACKAGE_UPDATES_TO' => 'Current package updates to version',
|
||||
'PACKAGE_VERSION' => 'Package version installed',
|
||||
'PERFORM_DATABASE_UPDATE' => 'Perform database update',
|
||||
'PERFORM_DATABASE_UPDATE_EXPLAIN' => 'Below you will find a button to the database update script. The database update can take a while, so please do not stop the execution if it seems to hang. After the database update has been performed just follow the instructions to continue the update process.',
|
||||
'PREVIOUS_VERSION' => 'Previous version',
|
||||
@@ -530,6 +533,12 @@ $lang = array_merge($lang, array(
|
||||
'UPDATE_DATABASE_SCHEMA' => 'Updating database schema',
|
||||
'UPDATE_FILES' => 'Update files',
|
||||
'UPDATE_FILES_NOTICE' => 'Please make sure you have updated your board files too, this file is only updating your database.',
|
||||
'UPDATE_INCOMPLETE' => 'Your phpBB installation has not been correctly updated.',
|
||||
'UPDATE_INCOMPLETE_MORE' => 'Please read the information below in order to fix this error.',
|
||||
'UPDATE_INCOMPLETE_EXPLAIN' => '<h1>Incomplete update</h1>
|
||||
|
||||
<p>We noticed that the last update of your phpBB installation hasn’t been completed. Visit the <a href="%1$s" title="%1$s">database_update script</a> and run it. If it is missing, please <a href="https://www.phpbb.com/downloads/" title="phpBB downloads">download your package version</a>, upload the "install" folder to your phpBB root directory (where your config.php file is) and <a href="%1$s" title="%1$s">run the database update script</a>.</p>',
|
||||
|
||||
'UPDATE_INSTALLATION' => 'Update phpBB installation',
|
||||
'UPDATE_INSTALLATION_EXPLAIN' => 'With this option, it is possible to update your phpBB installation to the latest version.<br />During the process all of your files will be checked for their integrity. You are able to review all differences and files before the update.<br /><br />The file update itself can be done in two different ways.</p><h2>Manual Update</h2><p>With this update you only download your personal set of changed files to make sure you do not lose your file modifications you may have done. After you downloaded this package you need to manually upload the files to their correct position under your phpBB root directory. Once done, you are able to do the file check stage again to see if you moved the files to their correct location.</p><h2>Automatic Update with FTP</h2><p>This method is similar to the first one but without the need to download the changed files and uploading them on your own. This will be done for you. In order to use this method you need to know your FTP login details since you will be asked for them. Once finished you will be redirected to the file check again to make sure everything got updated correctly.<br /><br />',
|
||||
'UPDATE_INSTRUCTIONS' => '
|
||||
|
@@ -50,6 +50,7 @@ $lang = array_merge($lang, array(
|
||||
'MIGRATION_NOT_FULFILLABLE' => 'The migration "%1$s" is not fulfillable, missing migration "%2$s".',
|
||||
'MIGRATION_NOT_VALID' => '%s is not a valid migration.',
|
||||
'MIGRATION_SCHEMA_DONE' => 'Installed Schema: %1$s; Time: %2$.2f seconds',
|
||||
'MIGRATION_SCHEMA_IN_PROGRESS' => 'Installing Schema: %1$s; Time: %2$.2f seconds',
|
||||
'MIGRATION_SCHEMA_RUNNING' => 'Installing Schema: %s.',
|
||||
|
||||
'MIGRATION_INVALID_DATA_MISSING_CONDITION' => 'A migration is invalid. An if statement helper is missing a condition.',
|
||||
@@ -60,9 +61,12 @@ $lang = array_merge($lang, array(
|
||||
'MIGRATION_INVALID_DATA_UNDEFINED_METHOD' => 'A migration is invalid. An undefined migration tool method was encountered.',
|
||||
|
||||
'MODULE_ERROR' => 'An error occurred while creating a module: %s',
|
||||
'MODULE_EXISTS' => 'A module already exists: %s',
|
||||
'MODULE_EXIST_MULTIPLE' => 'Several modules with the given parent module langname already exist: %s. Try using before/after keys to clarify the module placement.',
|
||||
'MODULE_INFO_FILE_NOT_EXIST' => 'A required module info file is missing: %2$s',
|
||||
'MODULE_NOT_EXIST' => 'A required module does not exist: %s',
|
||||
|
||||
'PARENT_MODULE_FIND_ERROR' => 'Unable to determine the parent module identifier: %s',
|
||||
'PERMISSION_NOT_EXIST' => 'The permission setting "%s" unexpectedly does not exist.',
|
||||
|
||||
'ROLE_NOT_EXIST' => 'The permission role "%s" unexpectedly does not exist.',
|
||||
|
@@ -90,14 +90,20 @@ $lang = array_merge($lang, array(
|
||||
'DELETE_PERMANENTLY' => 'Delete permanently',
|
||||
'DELETE_POST_CONFIRM' => 'Are you sure you want to delete this post?',
|
||||
'DELETE_POST_PERMANENTLY_CONFIRM' => 'Are you sure you want to <strong>permanently</strong> delete this post?',
|
||||
'DELETE_POST_PERMANENTLY' => 'Permanently delete this post so it can not be recovered',
|
||||
'DELETE_POST_PERMANENTLY' => array(
|
||||
1 => 'Permanently delete this post so it can not be recovered',
|
||||
2 => 'Permanently delete %1$d posts so they can not be recovered',
|
||||
),
|
||||
'DELETE_POSTS_CONFIRM' => 'Are you sure you want to delete these posts?',
|
||||
'DELETE_POSTS_PERMANENTLY_CONFIRM' => 'Are you sure you want to <strong>permanently</strong> delete these posts?',
|
||||
'DELETE_REASON' => 'Reason for deletion',
|
||||
'DELETE_REASON_EXPLAIN' => 'The specified reason for deletion will be visible to moderators.',
|
||||
'DELETE_POST_WARN' => 'Delete this post',
|
||||
'DELETE_TOPIC_CONFIRM' => 'Are you sure you want to delete this topic?',
|
||||
'DELETE_TOPIC_PERMANENTLY' => 'Permanently delete this topic so it can not be recovered',
|
||||
'DELETE_TOPIC_PERMANENTLY' => array(
|
||||
1 => 'Permanently delete this topic so it can not be recovered',
|
||||
2 => 'Permanently delete %1$d topics so they can not be recovered',
|
||||
),
|
||||
'DELETE_TOPIC_PERMANENTLY_CONFIRM' => 'Are you sure you want to <strong>permanently</strong> delete this topic?',
|
||||
'DELETE_TOPICS_CONFIRM' => 'Are you sure you want to delete these topics?',
|
||||
'DELETE_TOPICS_PERMANENTLY_CONFIRM' => 'Are you sure you want to <strong>permanently</strong> delete these topics?',
|
||||
|
@@ -1,271 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
$words = array(
|
||||
'a',
|
||||
'about',
|
||||
'after',
|
||||
'ago',
|
||||
'all',
|
||||
'almost',
|
||||
'along',
|
||||
'alot',
|
||||
'also',
|
||||
'am',
|
||||
'an',
|
||||
'and',
|
||||
'answer',
|
||||
'any',
|
||||
'anybody',
|
||||
'anybodys',
|
||||
'anywhere',
|
||||
'are',
|
||||
'arent',
|
||||
'around',
|
||||
'as',
|
||||
'ask',
|
||||
'askd',
|
||||
'at',
|
||||
'bad',
|
||||
'be',
|
||||
'because',
|
||||
'been',
|
||||
'before',
|
||||
'being',
|
||||
'best',
|
||||
'better',
|
||||
'between',
|
||||
'big',
|
||||
'btw',
|
||||
'but',
|
||||
'by',
|
||||
'can',
|
||||
'cant',
|
||||
'come',
|
||||
'could',
|
||||
'couldnt',
|
||||
'day',
|
||||
'days',
|
||||
'days',
|
||||
'did',
|
||||
'didnt',
|
||||
'do',
|
||||
'does',
|
||||
'doesnt',
|
||||
'dont',
|
||||
'down',
|
||||
'each',
|
||||
'etc',
|
||||
'either',
|
||||
'else',
|
||||
'even',
|
||||
'ever',
|
||||
'every',
|
||||
'everybody',
|
||||
'everybodys',
|
||||
'everyone',
|
||||
'far',
|
||||
'find',
|
||||
'for',
|
||||
'found',
|
||||
'from',
|
||||
'get',
|
||||
'go',
|
||||
'going',
|
||||
'gone',
|
||||
'good',
|
||||
'got',
|
||||
'gotten',
|
||||
'had',
|
||||
'has',
|
||||
'have',
|
||||
'havent',
|
||||
'having',
|
||||
'her',
|
||||
'here',
|
||||
'hers',
|
||||
'him',
|
||||
'his',
|
||||
'home',
|
||||
'how',
|
||||
'hows',
|
||||
'href',
|
||||
'I',
|
||||
'Ive',
|
||||
'if',
|
||||
'in',
|
||||
'ini',
|
||||
'into',
|
||||
'is',
|
||||
'isnt',
|
||||
'it',
|
||||
'its',
|
||||
'its',
|
||||
'just',
|
||||
'know',
|
||||
'large',
|
||||
'less',
|
||||
'like',
|
||||
'liked',
|
||||
'little',
|
||||
'looking',
|
||||
'look',
|
||||
'looked',
|
||||
'looking',
|
||||
'lot',
|
||||
'maybe',
|
||||
'many',
|
||||
'me',
|
||||
'more',
|
||||
'most',
|
||||
'much',
|
||||
'must',
|
||||
'mustnt',
|
||||
'my',
|
||||
'near',
|
||||
'need',
|
||||
'never',
|
||||
'new',
|
||||
'news',
|
||||
'no',
|
||||
'none',
|
||||
'not',
|
||||
'nothing',
|
||||
'now',
|
||||
'of',
|
||||
'off',
|
||||
'often',
|
||||
'old',
|
||||
'on',
|
||||
'once',
|
||||
'only',
|
||||
'oops',
|
||||
'or',
|
||||
'other',
|
||||
'our',
|
||||
'ours',
|
||||
'out',
|
||||
'over',
|
||||
'page',
|
||||
'please',
|
||||
'put',
|
||||
'question',
|
||||
'questions',
|
||||
'questioned',
|
||||
'quote',
|
||||
'rather',
|
||||
'really',
|
||||
'recent',
|
||||
'said',
|
||||
'saw',
|
||||
'say',
|
||||
'says',
|
||||
'she',
|
||||
'see',
|
||||
'sees',
|
||||
'should',
|
||||
'sites',
|
||||
'small',
|
||||
'so',
|
||||
'some',
|
||||
'something',
|
||||
'sometime',
|
||||
'somewhere',
|
||||
'soon',
|
||||
'take',
|
||||
'than',
|
||||
'true',
|
||||
'thank',
|
||||
'that',
|
||||
'thatd',
|
||||
'thats',
|
||||
'the',
|
||||
'their',
|
||||
'theirs',
|
||||
'theres',
|
||||
'theirs',
|
||||
'them',
|
||||
'then',
|
||||
'there',
|
||||
'these',
|
||||
'they',
|
||||
'theyll',
|
||||
'theyd',
|
||||
'theyre',
|
||||
'this',
|
||||
'those',
|
||||
'though',
|
||||
'through',
|
||||
'thus',
|
||||
'time',
|
||||
'times',
|
||||
'to',
|
||||
'too',
|
||||
'under',
|
||||
'until',
|
||||
'untrue',
|
||||
'up',
|
||||
'upon',
|
||||
'use',
|
||||
'users',
|
||||
'version',
|
||||
'very',
|
||||
'via',
|
||||
'want',
|
||||
'was',
|
||||
'way',
|
||||
'we',
|
||||
'well',
|
||||
'went',
|
||||
'were',
|
||||
'werent',
|
||||
'what',
|
||||
'when',
|
||||
'where',
|
||||
'which',
|
||||
'who',
|
||||
'whom',
|
||||
'whose',
|
||||
'why',
|
||||
'wide',
|
||||
'will',
|
||||
'with',
|
||||
'within',
|
||||
'without',
|
||||
'wont',
|
||||
'world',
|
||||
'worse',
|
||||
'worst',
|
||||
'would',
|
||||
'wrote',
|
||||
'www',
|
||||
'yes',
|
||||
'yet',
|
||||
'you',
|
||||
'youd',
|
||||
'youll',
|
||||
'your',
|
||||
'youre',
|
||||
'yours',
|
||||
'AFAIK',
|
||||
'IIRC',
|
||||
'LOL',
|
||||
'ROTF',
|
||||
'ROTFLMAO',
|
||||
'YMMV',
|
||||
);
|
@@ -1,191 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of the phpBB Forum Software package.
|
||||
*
|
||||
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||
*
|
||||
* For full copyright and license information, please see
|
||||
* the docs/CREDITS.txt file.
|
||||
*
|
||||
*/
|
||||
|
||||
if (!defined('IN_PHPBB'))
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
$synonyms = array(
|
||||
'abcense' => 'absence',
|
||||
'abridgement' => 'abridgment',
|
||||
'accomodate' => 'accommodate',
|
||||
'acknowledgment' => 'acknowledgement',
|
||||
'airplane' => 'aeroplane',
|
||||
'allright' => 'alright ',
|
||||
'andy' => 'andrew',
|
||||
'anemia' => 'anaemia',
|
||||
'anemic' => 'anaemic',
|
||||
'anesthesia' => 'anaesthesia',
|
||||
'apologize' => 'apologise',
|
||||
'archean' => 'archaean',
|
||||
'archeology' => 'archaeology',
|
||||
'archeozoic' => 'archaeozoic',
|
||||
'armor' => 'armour',
|
||||
'artic' => 'arctic',
|
||||
'attachment' => 'attachement',
|
||||
'attendence' => 'attendance',
|
||||
|
||||
'barbecue' => 'barbeque',
|
||||
'behavior' => 'behaviour',
|
||||
'biassed' => 'biased',
|
||||
'biol' => 'biology',
|
||||
'buletin' => 'bulletin',
|
||||
|
||||
'calender' => 'calendar',
|
||||
'canceled' => 'cancelled',
|
||||
'car' => 'automobile',
|
||||
'catalog' => 'catalogue',
|
||||
'cenozoic' => 'caenozoic',
|
||||
'center' => 'centre',
|
||||
'check' => 'cheque',
|
||||
'color' => 'colour',
|
||||
'comission' => 'commission',
|
||||
'comittee' => 'committee',
|
||||
'commitee' => 'committee',
|
||||
'conceed' => 'concede',
|
||||
'creating' => 'createing',
|
||||
'curiculum' => 'curriculum',
|
||||
|
||||
'defense' => 'defence',
|
||||
'develope' => 'develop',
|
||||
'discription' => 'description',
|
||||
'dulness' => 'dullness',
|
||||
|
||||
'encyclopedia' => 'encyclopaedia',
|
||||
'enroll' => 'enrol',
|
||||
'esthetic' => 'aesthetic',
|
||||
'etiology' => 'aetiology',
|
||||
'exhorbitant' => 'exorbitant',
|
||||
'exhuberant' => 'exuberant',
|
||||
'existance' => 'existence',
|
||||
|
||||
'favorite' => 'favourite',
|
||||
'fetus' => 'foetus',
|
||||
'ficticious' => 'fictitious',
|
||||
'flavor' => 'flavour',
|
||||
'flourescent' => 'fluorescent',
|
||||
'foriegn' => 'foreign',
|
||||
'fourty' => 'forty',
|
||||
|
||||
'gage' => 'gauge',
|
||||
'geneology' => 'genealogy',
|
||||
'grammer' => 'grammar',
|
||||
'gray' => 'grey',
|
||||
'guerilla' => 'guerrilla',
|
||||
'gynecology' => 'gynaecology',
|
||||
|
||||
'harbor' => 'harbour',
|
||||
'heighth' => 'height',
|
||||
'hemaglobin' => 'haemaglobin',
|
||||
'hematin' => 'haematin',
|
||||
'hematite' => 'haematite',
|
||||
'hematology' => 'haematology',
|
||||
'honor' => 'honour',
|
||||
|
||||
'innoculate' => 'inoculate',
|
||||
'installment' => 'instalment',
|
||||
'irrelevent' => 'irrelevant',
|
||||
'irrevelant' => 'irrelevant',
|
||||
|
||||
'jeweler' => 'jeweller',
|
||||
'judgment' => 'judgement',
|
||||
|
||||
'labeled' => 'labelled',
|
||||
'labor' => 'labour',
|
||||
'laborer' => 'labourer',
|
||||
'laborers' => 'labourers',
|
||||
'laboring' => 'labouring',
|
||||
'licence' => 'license',
|
||||
'liesure' => 'leisure',
|
||||
'liquify' => 'liquefy',
|
||||
|
||||
'maintainance' => 'maintenance',
|
||||
'maintenence' => 'maintenance',
|
||||
'medieval' => 'mediaeval',
|
||||
'meter' => 'metre',
|
||||
'milage' => 'mileage',
|
||||
'millipede' => 'millepede',
|
||||
'miscelaneous' => 'miscellaneous',
|
||||
'morgage' => 'mortgage',
|
||||
|
||||
'noticable' => 'noticeable',
|
||||
|
||||
'occurence' => 'occurrence',
|
||||
'offense' => 'offence',
|
||||
'ommision' => 'omission',
|
||||
'ommission' => 'omission',
|
||||
'optimize' => 'optimise',
|
||||
'organize' => 'organise',
|
||||
|
||||
'pajamas' => 'pyjamas',
|
||||
'paleography' => 'palaeography',
|
||||
'paleolithic' => 'palaeolithic',
|
||||
'paleontological' => 'palaeontological',
|
||||
'paleontologist' => 'palaeontologist',
|
||||
'paleontology' => 'palaeontology',
|
||||
'paleozoic' => 'palaeozoic',
|
||||
'pamplet' => 'pamphlet',
|
||||
'paralell' => 'parallel',
|
||||
'parl' => 'parliament',
|
||||
'parlt' => 'parliament',
|
||||
'pediatric' => 'paediatric',
|
||||
'pediatrician' => 'paediatrician',
|
||||
'pediatrics' => 'paediatrics',
|
||||
'pedodontia' => 'paedodontia',
|
||||
'pedodontics' => 'paedodontics',
|
||||
'personel' => 'personnel',
|
||||
'practise' => 'practice',
|
||||
'program' => 'programme',
|
||||
'psych' => 'psychology',
|
||||
|
||||
'questionaire' => 'questionnaire',
|
||||
|
||||
'rarify' => 'rarefy',
|
||||
'reccomend' => 'recommend',
|
||||
'recieve' => 'receive',
|
||||
'resistence' => 'resistance',
|
||||
'restaraunt' => 'restaurant',
|
||||
|
||||
'savior' => 'saviour',
|
||||
'sep' => 'september',
|
||||
'seperate' => 'separate',
|
||||
'sept' => 'september',
|
||||
'sieze' => 'seize',
|
||||
'summarize' => 'summarise',
|
||||
'summerize' => 'summarise',
|
||||
'superceed' => 'supercede',
|
||||
'superintendant' => 'superintendent',
|
||||
'supersede' => 'supercede',
|
||||
'suprise' => 'surprise',
|
||||
'surprize' => 'surprise',
|
||||
'synchronise' => 'synchronize',
|
||||
|
||||
'temperary' => 'temporary',
|
||||
'theater' => 'theatre',
|
||||
'threshhold' => 'threshold',
|
||||
'transfered' => 'transferred',
|
||||
'truely' => 'truly',
|
||||
'truley' => 'truly',
|
||||
|
||||
'useable' => 'usable',
|
||||
|
||||
'valor' => 'valour',
|
||||
'vigor' => 'vigour',
|
||||
'vol' => 'volume',
|
||||
|
||||
'whack' => 'wack',
|
||||
'withold' => 'withhold',
|
||||
|
||||
'yeild' => 'yield',
|
||||
);
|
@@ -52,8 +52,8 @@ class gravatar extends \phpbb\avatar\driver\driver
|
||||
public function prepare_form($request, $template, $user, $row, &$error)
|
||||
{
|
||||
$template->assign_vars(array(
|
||||
'AVATAR_GRAVATAR_WIDTH' => (($row['avatar_type'] == $this->get_name() || $row['avatar_type'] == 'gravatar') && $row['avatar_width']) ? $row['avatar_width'] : $request->variable('avatar_gravatar_width', 0),
|
||||
'AVATAR_GRAVATAR_HEIGHT' => (($row['avatar_type'] == $this->get_name() || $row['avatar_type'] == 'gravatar') && $row['avatar_height']) ? $row['avatar_height'] : $request->variable('avatar_gravatar_width', 0),
|
||||
'AVATAR_GRAVATAR_WIDTH' => (($row['avatar_type'] == $this->get_name() || $row['avatar_type'] == 'gravatar') && $row['avatar_width']) ? $row['avatar_width'] : $request->variable('avatar_gravatar_width', ''),
|
||||
'AVATAR_GRAVATAR_HEIGHT' => (($row['avatar_type'] == $this->get_name() || $row['avatar_type'] == 'gravatar') && $row['avatar_height']) ? $row['avatar_height'] : $request->variable('avatar_gravatar_width', ''),
|
||||
'AVATAR_GRAVATAR_EMAIL' => (($row['avatar_type'] == $this->get_name() || $row['avatar_type'] == 'gravatar') && $row['avatar']) ? $row['avatar'] : '',
|
||||
));
|
||||
|
||||
|
@@ -36,8 +36,8 @@ class remote extends \phpbb\avatar\driver\driver
|
||||
public function prepare_form($request, $template, $user, $row, &$error)
|
||||
{
|
||||
$template->assign_vars(array(
|
||||
'AVATAR_REMOTE_WIDTH' => ((in_array($row['avatar_type'], array(AVATAR_REMOTE, $this->get_name(), 'remote'))) && $row['avatar_width']) ? $row['avatar_width'] : $request->variable('avatar_remote_width', 0),
|
||||
'AVATAR_REMOTE_HEIGHT' => ((in_array($row['avatar_type'], array(AVATAR_REMOTE, $this->get_name(), 'remote'))) && $row['avatar_height']) ? $row['avatar_height'] : $request->variable('avatar_remote_width', 0),
|
||||
'AVATAR_REMOTE_WIDTH' => ((in_array($row['avatar_type'], array(AVATAR_REMOTE, $this->get_name(), 'remote'))) && $row['avatar_width']) ? $row['avatar_width'] : $request->variable('avatar_remote_width', ''),
|
||||
'AVATAR_REMOTE_HEIGHT' => ((in_array($row['avatar_type'], array(AVATAR_REMOTE, $this->get_name(), 'remote'))) && $row['avatar_height']) ? $row['avatar_height'] : $request->variable('avatar_remote_width', ''),
|
||||
'AVATAR_REMOTE_URL' => ((in_array($row['avatar_type'], array(AVATAR_REMOTE, $this->get_name(), 'remote'))) && $row['avatar']) ? $row['avatar'] : '',
|
||||
));
|
||||
|
||||
|
@@ -222,7 +222,11 @@ class qa
|
||||
{
|
||||
global $phpbb_log, $template, $user;
|
||||
|
||||
if ($this->is_solved() || empty($this->question_text) || !count($this->question_ids))
|
||||
if ($this->is_solved())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (empty($this->question_text) || !count($this->question_ids))
|
||||
{
|
||||
/** @var \phpbb\log\log_interface $phpbb_log */
|
||||
$phpbb_log->add('critical', $user->data['user_id'], $user->ip, 'LOG_ERROR_CAPTCHA', time(), array($user->lang('CONFIRM_QUESTION_MISSING')));
|
||||
@@ -231,10 +235,10 @@ class qa
|
||||
else
|
||||
{
|
||||
$template->assign_vars(array(
|
||||
'QA_CONFIRM_QUESTION' => $this->question_text,
|
||||
'QA_CONFIRM_ID' => $this->confirm_id,
|
||||
'S_CONFIRM_CODE' => true,
|
||||
'S_TYPE' => $this->type,
|
||||
'QA_CONFIRM_QUESTION' => $this->question_text,
|
||||
'QA_CONFIRM_ID' => $this->confirm_id,
|
||||
'S_CONFIRM_CODE' => true,
|
||||
'S_TYPE' => $this->type,
|
||||
));
|
||||
|
||||
return 'captcha_qa.html';
|
||||
|
@@ -417,13 +417,46 @@ class content_visibility
|
||||
return array();
|
||||
}
|
||||
|
||||
if (!function_exists('truncate_string'))
|
||||
{
|
||||
include($this->phpbb_root_path . 'includes/functions_content.' . $this->php_ext);
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'post_visibility' => (int) $visibility,
|
||||
'post_delete_user' => (int) $user_id,
|
||||
'post_delete_time' => ((int) $time) ?: time(),
|
||||
'post_delete_reason' => truncate_string($reason, 255, 255, false),
|
||||
);
|
||||
|
||||
/**
|
||||
* Perform actions right before the query to change post visibility
|
||||
*
|
||||
* @event core.set_post_visibility_before_sql
|
||||
* @var int visibility Element of {ITEM_APPROVED, ITEM_DELETED, ITEM_REAPPROVE}
|
||||
* @var array post_id Array containing all post IDs to be modified. If blank, all posts within the topic are modified.
|
||||
* @var int topic_id Topic of the post IDs to be modified.
|
||||
* @var int forum_id Forum ID that the topic_id resides in.
|
||||
* @var int user_id User ID doing this action.
|
||||
* @var int timestamp Timestamp of this action.
|
||||
* @var string reason Reason specified by the user for this change.
|
||||
* @var bool is_starter Are we changing the topic's starter?
|
||||
* @var bool is_latest Are we changing the topic's latest post?
|
||||
* @var array data The data array for this action.
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'visibility',
|
||||
'post_id',
|
||||
'topic_id',
|
||||
'forum_id',
|
||||
'user_id',
|
||||
'timestamp',
|
||||
'reason',
|
||||
'is_starter',
|
||||
'is_latest',
|
||||
'data',
|
||||
);
|
||||
extract($this->phpbb_dispatcher->trigger_event('core.set_post_visibility_before_sql', compact($vars)));
|
||||
$sql = 'UPDATE ' . $this->posts_table . '
|
||||
SET ' . $this->db->sql_build_array('UPDATE', $data) . '
|
||||
WHERE ' . $this->db->sql_in_set('post_id', $post_ids);
|
||||
@@ -580,7 +613,35 @@ class content_visibility
|
||||
WHERE topic_id = ' . (int) $topic_id;
|
||||
$this->db->sql_query($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform actions after all steps to changing post visibility
|
||||
*
|
||||
* @event core.set_post_visibility_after
|
||||
* @var int visibility Element of {ITEM_APPROVED, ITEM_DELETED, ITEM_REAPPROVE}
|
||||
* @var array post_id Array containing all post IDs to be modified. If blank, all posts within the topic are modified.
|
||||
* @var int topic_id Topic of the post IDs to be modified.
|
||||
* @var int forum_id Forum ID that the topic_id resides in.
|
||||
* @var int user_id User ID doing this action.
|
||||
* @var int timestamp Timestamp of this action.
|
||||
* @var string reason Reason specified by the user for this change.
|
||||
* @var bool is_starter Are we changing the topic's starter?
|
||||
* @var bool is_latest Are we changing the topic's latest post?
|
||||
* @var array data The data array for this action.
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'visibility',
|
||||
'post_id',
|
||||
'topic_id',
|
||||
'forum_id',
|
||||
'user_id',
|
||||
'timestamp',
|
||||
'reason',
|
||||
'is_starter',
|
||||
'is_latest',
|
||||
'data',
|
||||
);
|
||||
extract($this->phpbb_dispatcher->trigger_event('core.set_post_visibility_after', compact($vars)));
|
||||
return $data;
|
||||
}
|
||||
|
||||
@@ -628,6 +689,11 @@ class content_visibility
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('truncate_string'))
|
||||
{
|
||||
include($this->phpbb_root_path . 'includes/functions_content.' . $this->php_ext);
|
||||
}
|
||||
|
||||
// Note, we do not set a reason for the posts, just for the topic
|
||||
$data = array(
|
||||
'topic_visibility' => (int) $visibility,
|
||||
@@ -635,7 +701,31 @@ class content_visibility
|
||||
'topic_delete_time' => ((int) $time) ?: time(),
|
||||
'topic_delete_reason' => truncate_string($reason, 255, 255, false),
|
||||
);
|
||||
|
||||
/**
|
||||
* Perform actions right before the query to change topic visibility
|
||||
*
|
||||
* @event core.set_topic_visibility_before_sql
|
||||
* @var int visibility Element of {ITEM_APPROVED, ITEM_DELETED, ITEM_REAPPROVE}
|
||||
* @var int topic_id Topic of the post IDs to be modified.
|
||||
* @var int forum_id Forum ID that the topic_id resides in.
|
||||
* @var int user_id User ID doing this action.
|
||||
* @var int timestamp Timestamp of this action.
|
||||
* @var string reason Reason specified by the user for this change.
|
||||
* @var bool force_update_all Force an update on all posts within the topic, regardless of their current approval state.
|
||||
* @var array data The data array for this action.
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'visibility',
|
||||
'topic_id',
|
||||
'forum_id',
|
||||
'user_id',
|
||||
'timestamp',
|
||||
'reason',
|
||||
'force_update_all',
|
||||
'data',
|
||||
);
|
||||
extract($this->phpbb_dispatcher->trigger_event('core.set_topic_visibility_before_sql', compact($vars)));
|
||||
$sql = 'UPDATE ' . $this->topics_table . '
|
||||
SET ' . $this->db->sql_build_array('UPDATE', $data) . '
|
||||
WHERE topic_id = ' . (int) $topic_id;
|
||||
@@ -660,7 +750,31 @@ class content_visibility
|
||||
{
|
||||
$this->set_post_visibility($visibility, false, $topic_id, $forum_id, $user_id, $time, '', true, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform actions after all steps to changing topic visibility
|
||||
*
|
||||
* @event core.set_topic_visibility_after
|
||||
* @var int visibility Element of {ITEM_APPROVED, ITEM_DELETED, ITEM_REAPPROVE}
|
||||
* @var int topic_id Topic of the post IDs to be modified.
|
||||
* @var int forum_id Forum ID that the topic_id resides in.
|
||||
* @var int user_id User ID doing this action.
|
||||
* @var int timestamp Timestamp of this action.
|
||||
* @var string reason Reason specified by the user for this change.
|
||||
* @var bool force_update_all Force an update on all posts within the topic, regardless of their current approval state.
|
||||
* @var array data The data array for this action.
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'visibility',
|
||||
'topic_id',
|
||||
'forum_id',
|
||||
'user_id',
|
||||
'timestamp',
|
||||
'reason',
|
||||
'force_update_all',
|
||||
'data',
|
||||
);
|
||||
extract($this->phpbb_dispatcher->trigger_event('core.set_topic_visibility_after', compact($vars)));
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
@@ -110,7 +110,7 @@ class manager
|
||||
* Web runner uses this method to resolve names to tasks.
|
||||
*
|
||||
* @param string $name Name of the task to look up.
|
||||
* @return \phpbb\cron\task\task A task corresponding to the given name, or null.
|
||||
* @return \phpbb\cron\task\wrapper A wrapped task corresponding to the given name, or null.
|
||||
*/
|
||||
public function find_task($name)
|
||||
{
|
||||
|
36
phpBB/phpbb/db/migration/data/v31x/v3110rc1.php
Normal file
36
phpBB/phpbb/db/migration/data/v31x/v3110rc1.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\v31x;
|
||||
|
||||
class v3110rc1 extends \phpbb\db\migration\migration
|
||||
{
|
||||
public function effectively_installed()
|
||||
{
|
||||
return phpbb_version_compare($this->config['version'], '3.1.10-RC1', '>=');
|
||||
}
|
||||
|
||||
static public function depends_on()
|
||||
{
|
||||
return array(
|
||||
'\phpbb\db\migration\data\v31x\v319',
|
||||
);
|
||||
}
|
||||
|
||||
public function update_data()
|
||||
{
|
||||
return array(
|
||||
array('config.update', array('version', '3.1.10-RC1')),
|
||||
);
|
||||
}
|
||||
}
|
@@ -81,4 +81,36 @@ class helper
|
||||
|
||||
return $steps;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the update steps from an array of data changes
|
||||
*
|
||||
* 'If' statements and custom methods will be skipped, for all
|
||||
* other calls the reverse method of the tool class will be called
|
||||
*
|
||||
* @param array $steps Update changes from migration
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function reverse_update_data($steps)
|
||||
{
|
||||
$reversed_array = array();
|
||||
|
||||
foreach ($steps as $step)
|
||||
{
|
||||
$parts = explode('.', $step[0]);
|
||||
$parameters = $step[1];
|
||||
|
||||
$class = $parts[0];
|
||||
$method = isset($parts[1]) ? $parts[1] : false;
|
||||
|
||||
if ($class !== 'if' && $class !== 'custom')
|
||||
{
|
||||
array_unshift($parameters, $method);
|
||||
$reversed_array[] = array($class . '.reverse', $parameters);
|
||||
}
|
||||
}
|
||||
|
||||
return array_reverse($reversed_array);
|
||||
}
|
||||
}
|
||||
|
@@ -150,6 +150,11 @@ class config implements \phpbb\db\migration\tool\tool_interface
|
||||
$arguments[0],
|
||||
);
|
||||
break;
|
||||
|
||||
case 'reverse':
|
||||
// Reversing a reverse is just the call itself
|
||||
$call = array_shift($arguments);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($call)
|
||||
|
@@ -115,6 +115,11 @@ class config_text implements \phpbb\db\migration\tool\tool_interface
|
||||
$arguments[] = '';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'reverse':
|
||||
// Reversing a reverse is just the call itself
|
||||
$call = array_shift($arguments);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($call)
|
||||
|
@@ -36,6 +36,9 @@ class module implements \phpbb\db\migration\tool\tool_interface
|
||||
/** @var string */
|
||||
protected $modules_table;
|
||||
|
||||
/** @var array */
|
||||
protected $module_categories = array();
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@@ -87,30 +90,8 @@ class module implements \phpbb\db\migration\tool\tool_interface
|
||||
$parent_sql = '';
|
||||
if ($parent !== false)
|
||||
{
|
||||
// Allows '' to be sent as 0
|
||||
$parent = $parent ?: 0;
|
||||
|
||||
if (!is_numeric($parent))
|
||||
{
|
||||
$sql = 'SELECT module_id
|
||||
FROM ' . $this->modules_table . "
|
||||
WHERE module_langname = '" . $this->db->sql_escape($parent) . "'
|
||||
AND module_class = '" . $this->db->sql_escape($class) . "'";
|
||||
$result = $this->db->sql_query($sql);
|
||||
$module_id = $this->db->sql_fetchfield('module_id');
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
if (!$module_id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$parent_sql = 'AND parent_id = ' . (int) $module_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
$parent_sql = 'AND parent_id = ' . (int) $parent;
|
||||
}
|
||||
$parent = $this->get_parent_module_id($parent, $module);
|
||||
$parent_sql = 'AND parent_id = ' . (int) $parent;
|
||||
}
|
||||
|
||||
$sql = 'SELECT module_id
|
||||
@@ -171,15 +152,14 @@ class module implements \phpbb\db\migration\tool\tool_interface
|
||||
*/
|
||||
public function add($class, $parent = 0, $data = array())
|
||||
{
|
||||
// Allows '' to be sent as 0
|
||||
$parent = $parent ?: 0;
|
||||
|
||||
// allow sending the name as a string in $data to create a category
|
||||
if (!is_array($data))
|
||||
{
|
||||
$data = array('module_langname' => $data);
|
||||
}
|
||||
|
||||
$parent = $data['parent_id'] = $this->get_parent_module_id($parent, $data);
|
||||
|
||||
if (!isset($data['module_langname']))
|
||||
{
|
||||
// The "automatic" way
|
||||
@@ -210,31 +190,14 @@ class module implements \phpbb\db\migration\tool\tool_interface
|
||||
}
|
||||
|
||||
// The "manual" way
|
||||
if (!is_numeric($parent))
|
||||
{
|
||||
$sql = 'SELECT module_id
|
||||
FROM ' . $this->modules_table . "
|
||||
WHERE module_langname = '" . $this->db->sql_escape($parent) . "'
|
||||
AND module_class = '" . $this->db->sql_escape($class) . "'";
|
||||
$result = $this->db->sql_query($sql);
|
||||
$module_id = $this->db->sql_fetchfield('module_id');
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
if (!$module_id)
|
||||
{
|
||||
throw new \phpbb\db\migration\exception('MODULE_NOT_EXIST', $parent);
|
||||
}
|
||||
|
||||
$parent = $data['parent_id'] = $module_id;
|
||||
}
|
||||
else if (!$this->exists($class, false, $parent))
|
||||
if (!$this->exists($class, false, $parent))
|
||||
{
|
||||
throw new \phpbb\db\migration\exception('MODULE_NOT_EXIST', $parent);
|
||||
}
|
||||
|
||||
if ($this->exists($class, $parent, $data['module_langname']))
|
||||
{
|
||||
return;
|
||||
throw new \phpbb\db\migration\exception('MODULE_EXISTS', $module_id);
|
||||
}
|
||||
|
||||
if (!class_exists('acp_modules'))
|
||||
@@ -373,26 +336,8 @@ class module implements \phpbb\db\migration\tool\tool_interface
|
||||
$parent_sql = '';
|
||||
if ($parent !== false)
|
||||
{
|
||||
// Allows '' to be sent as 0
|
||||
$parent = ($parent) ?: 0;
|
||||
|
||||
if (!is_numeric($parent))
|
||||
{
|
||||
$sql = 'SELECT module_id
|
||||
FROM ' . $this->modules_table . "
|
||||
WHERE module_langname = '" . $this->db->sql_escape($parent) . "'
|
||||
AND module_class = '" . $this->db->sql_escape($class) . "'";
|
||||
$result = $this->db->sql_query($sql);
|
||||
$module_id = $this->db->sql_fetchfield('module_id');
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
// we know it exists from the module_exists check
|
||||
$parent_sql = 'AND parent_id = ' . (int) $module_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
$parent_sql = 'AND parent_id = ' . (int) $parent;
|
||||
}
|
||||
$parent = $this->get_parent_module_id($parent, $module);
|
||||
$parent_sql = 'AND parent_id = ' . (int) $parent;
|
||||
}
|
||||
|
||||
$module_ids = array();
|
||||
@@ -454,6 +399,11 @@ class module implements \phpbb\db\migration\tool\tool_interface
|
||||
case 'remove':
|
||||
$call = 'add';
|
||||
break;
|
||||
|
||||
case 'reverse':
|
||||
// Reversing a reverse is just the call itself
|
||||
$call = array_shift($arguments);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($call)
|
||||
@@ -487,4 +437,110 @@ class module implements \phpbb\db\migration\tool\tool_interface
|
||||
|
||||
return array_pop($module);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of installed module categories
|
||||
* key - module_id
|
||||
* value - module_langname
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
protected function get_categories_list()
|
||||
{
|
||||
// Select the top level categories
|
||||
// and 2nd level [sub]categories which exist for ACP only
|
||||
$sql = 'SELECT m2.module_id, m2.module_langname
|
||||
FROM ' . $this->modules_table . ' m1, ' . $this->modules_table . " m2
|
||||
WHERE m1.parent_id = 0
|
||||
AND (m1.module_id = m2.module_id
|
||||
OR m2.module_class = 'acp' AND m2.parent_id = m1.module_id)
|
||||
ORDER BY m1.module_id, m2.module_id ASC";
|
||||
|
||||
$result = $this->db->sql_query($sql);
|
||||
while ($row = $this->db->sql_fetchrow($result))
|
||||
{
|
||||
$this->module_categories[(int) $row['module_id']] = $row['module_langname'];
|
||||
}
|
||||
$this->db->sql_freeresult($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get parent module id
|
||||
*
|
||||
* @param string|int $parent_id The parent module_id|module_langname
|
||||
* @param int|string|array $data The module_id, module_langname for existance checking or module data array for adding
|
||||
* @return int The parent module_id
|
||||
* @throws \phpbb\db\migration\exception
|
||||
*/
|
||||
public function get_parent_module_id($parent_id, $data = '')
|
||||
{
|
||||
// Allow '' to be sent as 0
|
||||
$parent_id = $parent_id ?: 0;
|
||||
|
||||
// If automatic adding is in action, convert array back to string to simplify things
|
||||
if (is_array($data) && sizeof($data) == 1)
|
||||
{
|
||||
$data = $data['module_langname'];
|
||||
}
|
||||
|
||||
if (!is_numeric($parent_id))
|
||||
{
|
||||
// Refresh the $module_categories array
|
||||
$this->get_categories_list();
|
||||
|
||||
// Search for the parent module_langname
|
||||
$ids = array_keys($this->module_categories, $parent_id);
|
||||
|
||||
switch (sizeof($ids))
|
||||
{
|
||||
// No parent with the given module_langname exist
|
||||
case 0:
|
||||
throw new \phpbb\db\migration\exception('MODULE_NOT_EXIST', $parent_id);
|
||||
break;
|
||||
|
||||
// Return the module id
|
||||
case 1:
|
||||
$parent_id = (int) $ids[0];
|
||||
break;
|
||||
|
||||
// Several modules with the given module_langname were found
|
||||
// Try to determine the parent_id by the neighbour module parent
|
||||
default:
|
||||
if (is_array($data) && (isset($data['before']) || isset($data['after'])))
|
||||
{
|
||||
$neighbour_module_langname = isset($data['before']) ? $data['before'] : $data['after'];
|
||||
$sql = 'SELECT parent_id
|
||||
FROM ' . $this->modules_table . "
|
||||
WHERE module_langname = '" . $this->db->sql_escape($neighbour_module_langname) . "'
|
||||
AND " . $this->db->sql_in_set('parent_id', $ids);
|
||||
$result = $this->db->sql_query($sql);
|
||||
$parent_id = (int) $this->db->sql_fetchfield('parent_id');
|
||||
if (!$parent_id)
|
||||
{
|
||||
throw new \phpbb\db\migration\exception('PARENT_MODULE_FIND_ERROR', $data['parent_id']);
|
||||
}
|
||||
}
|
||||
else if (!empty($data) && !is_array($data))
|
||||
{
|
||||
// The module_langname is set, checking for the module existance
|
||||
// As more than 1 parents were found already, there's no way for null parent_id here
|
||||
$sql = 'SELECT m2.module_id as module_parent_id
|
||||
FROM ' . $this->modules_table . ' m1, ' . $this->modules_table . " m2
|
||||
WHERE " . ((is_numeric($data)) ? 'm1.module_id = ' . (int) $data : "m1.module_langname = '" . $this->db->sql_escape($data)) . "'
|
||||
AND m2.module_id = m1.parent_id
|
||||
AND " . $this->db->sql_in_set('m2.module_id', $ids);
|
||||
$result = $this->db->sql_query($sql);
|
||||
$parent_id = (int) $this->db->sql_fetchfield('module_parent_id');
|
||||
}
|
||||
else
|
||||
{
|
||||
//Unable to get the parent module id, throwing an exception
|
||||
throw new \phpbb\db\migration\exception('MODULE_EXIST_MULTIPLE', $parent_id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $parent_id;
|
||||
}
|
||||
}
|
||||
|
@@ -637,6 +637,11 @@ class permission implements \phpbb\db\migration\tool\tool_interface
|
||||
$arguments[0],
|
||||
);
|
||||
break;
|
||||
|
||||
case 'reverse':
|
||||
// Reversing a reverse is just the call itself
|
||||
$call = array_shift($arguments);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($call)
|
||||
|
@@ -80,14 +80,14 @@ class migrator
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $last_run_migration = false;
|
||||
protected $last_run_migration = false;
|
||||
|
||||
/**
|
||||
* The output handler. A null handler is configured by default.
|
||||
*
|
||||
* @var migrator_output_handler_interface
|
||||
*/
|
||||
public $output_handler;
|
||||
protected $output_handler;
|
||||
|
||||
/**
|
||||
* Constructor of the database migrator
|
||||
@@ -152,6 +152,7 @@ class migrator
|
||||
$this->migration_state[$migration['migration_name']] = $migration;
|
||||
|
||||
$this->migration_state[$migration['migration_name']]['migration_depends_on'] = unserialize($migration['migration_depends_on']);
|
||||
$this->migration_state[$migration['migration_name']]['migration_data_state'] = !empty($migration['migration_data_state']) ? unserialize($migration['migration_data_state']) : '';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,6 +161,19 @@ class migrator
|
||||
$this->db->sql_return_on_error(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array with information about the last migration run.
|
||||
*
|
||||
* The array contains 'name', 'class' and 'state'. 'effectively_installed' is set
|
||||
* and set to true if the last migration was effectively_installed.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_last_run_migration()
|
||||
{
|
||||
return $this->last_run_migration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the list of available migration class names to the given array.
|
||||
*
|
||||
@@ -297,38 +311,70 @@ class migrator
|
||||
|
||||
if (!$state['migration_schema_done'])
|
||||
{
|
||||
$this->output_handler->write(array('MIGRATION_SCHEMA_RUNNING', $name), migrator_output_handler_interface::VERBOSITY_VERBOSE);
|
||||
$verbosity = empty($state['migration_data_state']) ?
|
||||
migrator_output_handler_interface::VERBOSITY_VERBOSE : migrator_output_handler_interface::VERBOSITY_DEBUG;
|
||||
$this->output_handler->write(array('MIGRATION_SCHEMA_RUNNING', $name), $verbosity);
|
||||
|
||||
$this->last_run_migration['task'] = 'process_schema_step';
|
||||
|
||||
$total_time = (is_array($state['migration_data_state']) && isset($state['migration_data_state']['_total_time'])) ?
|
||||
$state['migration_data_state']['_total_time'] : 0.0;
|
||||
$elapsed_time = microtime(true);
|
||||
|
||||
$steps = $this->helper->get_schema_steps($migration->update_schema());
|
||||
$result = $this->process_data_step($steps, $state['migration_data_state']);
|
||||
|
||||
$elapsed_time = microtime(true) - $elapsed_time;
|
||||
$total_time += $elapsed_time;
|
||||
|
||||
if (is_array($result))
|
||||
{
|
||||
$result['_total_time'] = $total_time;
|
||||
}
|
||||
|
||||
$state['migration_data_state'] = ($result === true) ? '' : $result;
|
||||
$state['migration_schema_done'] = ($result === true);
|
||||
|
||||
$this->output_handler->write(array('MIGRATION_SCHEMA_DONE', $name, $elapsed_time), migrator_output_handler_interface::VERBOSITY_NORMAL);
|
||||
if ($state['migration_schema_done'])
|
||||
{
|
||||
$this->output_handler->write(array('MIGRATION_SCHEMA_DONE', $name, $total_time), migrator_output_handler_interface::VERBOSITY_NORMAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output_handler->write(array('MIGRATION_SCHEMA_IN_PROGRESS', $name, $elapsed_time), migrator_output_handler_interface::VERBOSITY_VERY_VERBOSE);
|
||||
}
|
||||
}
|
||||
else if (!$state['migration_data_done'])
|
||||
{
|
||||
try
|
||||
{
|
||||
$this->output_handler->write(array('MIGRATION_DATA_RUNNING', $name), migrator_output_handler_interface::VERBOSITY_VERBOSE);
|
||||
$verbosity = empty($state['migration_data_state']) ?
|
||||
migrator_output_handler_interface::VERBOSITY_VERBOSE : migrator_output_handler_interface::VERBOSITY_DEBUG;
|
||||
$this->output_handler->write(array('MIGRATION_DATA_RUNNING', $name), $verbosity);
|
||||
|
||||
$this->last_run_migration['task'] = 'process_data_step';
|
||||
|
||||
$total_time = (is_array($state['migration_data_state']) && isset($state['migration_data_state']['_total_time'])) ?
|
||||
$state['migration_data_state']['_total_time'] : 0.0;
|
||||
$elapsed_time = microtime(true);
|
||||
|
||||
$result = $this->process_data_step($migration->update_data(), $state['migration_data_state']);
|
||||
|
||||
$elapsed_time = microtime(true) - $elapsed_time;
|
||||
$total_time += $elapsed_time;
|
||||
|
||||
if (is_array($result))
|
||||
{
|
||||
$result['_total_time'] = $total_time;
|
||||
}
|
||||
|
||||
$state['migration_data_state'] = ($result === true) ? '' : $result;
|
||||
$state['migration_data_done'] = ($result === true);
|
||||
$state['migration_end_time'] = ($result === true) ? time() : 0;
|
||||
|
||||
if ($state['migration_schema_done'])
|
||||
if ($state['migration_data_done'])
|
||||
{
|
||||
$this->output_handler->write(array('MIGRATION_DATA_DONE', $name, $elapsed_time), migrator_output_handler_interface::VERBOSITY_NORMAL);
|
||||
$this->output_handler->write(array('MIGRATION_DATA_DONE', $name, $total_time), migrator_output_handler_interface::VERBOSITY_NORMAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -337,10 +383,12 @@ class migrator
|
||||
}
|
||||
catch (\phpbb\db\migration\exception $e)
|
||||
{
|
||||
// Revert the schema changes
|
||||
// Reset data state and revert the schema changes
|
||||
$state['migration_data_state'] = '';
|
||||
$this->set_migration_state($name, $state);
|
||||
|
||||
$this->revert_do($name);
|
||||
|
||||
// Rethrow exception
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
@@ -416,19 +464,11 @@ class migrator
|
||||
|
||||
if ($state['migration_data_done'])
|
||||
{
|
||||
if ($state['migration_data_state'] !== 'revert_data')
|
||||
{
|
||||
$result = $this->process_data_step($migration->update_data(), $state['migration_data_state'], true);
|
||||
$steps = array_merge($this->helper->reverse_update_data($migration->update_data()), $migration->revert_data());
|
||||
$result = $this->process_data_step($steps, $state['migration_data_state']);
|
||||
|
||||
$state['migration_data_state'] = ($result === true) ? 'revert_data' : $result;
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->process_data_step($migration->revert_data(), '', false);
|
||||
|
||||
$state['migration_data_state'] = ($result === true) ? '' : $result;
|
||||
$state['migration_data_done'] = ($result === true) ? false : true;
|
||||
}
|
||||
$state['migration_data_state'] = ($result === true) ? '' : $result;
|
||||
$state['migration_data_done'] = ($result === true) ? false : true;
|
||||
|
||||
$this->set_migration_state($name, $state);
|
||||
}
|
||||
@@ -446,8 +486,13 @@ class migrator
|
||||
WHERE migration_name = '" . $this->db->sql_escape($name) . "'";
|
||||
$this->db->sql_query($sql);
|
||||
|
||||
$this->last_run_migration = false;
|
||||
unset($this->migration_state[$name]);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->set_migration_state($name, $state);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -464,7 +509,12 @@ class migrator
|
||||
*/
|
||||
protected function process_data_step($steps, $state, $revert = false)
|
||||
{
|
||||
$state = ($state) ? unserialize($state) : false;
|
||||
if (sizeof($steps) === 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
$state = is_array($state) ? $state : false;
|
||||
|
||||
// reverse order of steps if reverting
|
||||
if ($revert === true)
|
||||
@@ -472,54 +522,45 @@ class migrator
|
||||
$steps = array_reverse($steps);
|
||||
}
|
||||
|
||||
foreach ($steps as $step_identifier => $step)
|
||||
$step = $last_result = 0;
|
||||
if ($state)
|
||||
{
|
||||
$last_result = 0;
|
||||
if ($state)
|
||||
$step = $state['step'];
|
||||
|
||||
// We send the result from last time to the callable function
|
||||
$last_result = $state['result'];
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Result will be null or true if everything completed correctly
|
||||
// Stop after each update step, to let the updater control the script runtime
|
||||
$result = $this->run_step($steps[$step], $last_result, $revert);
|
||||
if (($result !== null && $result !== true) || $step + 1 < sizeof($steps))
|
||||
{
|
||||
// Continue until we reach the step that matches the last step called
|
||||
if ($state['step'] != $step_identifier)
|
||||
return array(
|
||||
'result' => $result,
|
||||
// Move on if the last call finished
|
||||
'step' => ($result !== null && $result !== true) ? $step : $step + 1,
|
||||
);
|
||||
}
|
||||
}
|
||||
catch (\phpbb\db\migration\exception $e)
|
||||
{
|
||||
// We should try rolling back here
|
||||
foreach ($steps as $reverse_step_identifier => $reverse_step)
|
||||
{
|
||||
// If we've reached the current step we can break because we reversed everything that was run
|
||||
if ($reverse_step_identifier == $step)
|
||||
{
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
// We send the result from last time to the callable function
|
||||
$last_result = $state['result'];
|
||||
|
||||
// Set state to false since we reached the point we were at
|
||||
$state = false;
|
||||
// Reverse the step that was run
|
||||
$result = $this->run_step($reverse_step, false, !$revert);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Result will be null or true if everything completed correctly
|
||||
$result = $this->run_step($step, $last_result, $revert);
|
||||
if ($result !== null && $result !== true)
|
||||
{
|
||||
return serialize(array(
|
||||
'result' => $result,
|
||||
'step' => $step_identifier,
|
||||
));
|
||||
}
|
||||
}
|
||||
catch (\phpbb\db\migration\exception $e)
|
||||
{
|
||||
// We should try rolling back here
|
||||
foreach ($steps as $reverse_step_identifier => $reverse_step)
|
||||
{
|
||||
// If we've reached the current step we can break because we reversed everything that was run
|
||||
if ($reverse_step_identifier == $step_identifier)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// Reverse the step that was run
|
||||
$result = $this->run_step($reverse_step, false, !$revert);
|
||||
}
|
||||
|
||||
// rethrow the exception
|
||||
throw $e;
|
||||
}
|
||||
throw $e;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -587,6 +628,13 @@ class migrator
|
||||
throw new \phpbb\db\migration\exception('MIGRATION_INVALID_DATA_MISSING_STEP', $step);
|
||||
}
|
||||
|
||||
if ($reverse)
|
||||
{
|
||||
// We might get unexpected results when trying
|
||||
// to revert this, so just avoid it
|
||||
return false;
|
||||
}
|
||||
|
||||
$condition = $parameters[0];
|
||||
|
||||
if (!$condition)
|
||||
@@ -664,6 +712,7 @@ class migrator
|
||||
{
|
||||
$migration_row = $state;
|
||||
$migration_row['migration_depends_on'] = serialize($state['migration_depends_on']);
|
||||
$migration_row['migration_data_state'] = !empty($state['migration_data_state']) ? serialize($state['migration_data_state']) : '';
|
||||
|
||||
if (isset($this->migration_state[$name]))
|
||||
{
|
||||
|
@@ -15,11 +15,11 @@ namespace phpbb\db;
|
||||
|
||||
interface migrator_output_handler_interface
|
||||
{
|
||||
const VERBOSITY_QUIET = 0;
|
||||
const VERBOSITY_NORMAL = 1;
|
||||
const VERBOSITY_VERBOSE = 2;
|
||||
const VERBOSITY_VERY_VERBOSE = 3;
|
||||
const VERBOSITY_DEBUG = 4;
|
||||
const VERBOSITY_QUIET = 16;
|
||||
const VERBOSITY_NORMAL = 32;
|
||||
const VERBOSITY_VERBOSE = 64;
|
||||
const VERBOSITY_VERY_VERBOSE = 128;
|
||||
const VERBOSITY_DEBUG = 256;
|
||||
|
||||
/**
|
||||
* Write output using the configured closure.
|
||||
|
@@ -39,6 +39,12 @@ abstract class base
|
||||
/** @var \phpbb\auth\auth */
|
||||
protected $auth;
|
||||
|
||||
/** @var \phpbb\content_visibility */
|
||||
protected $content_visibility;
|
||||
|
||||
/** @var \phpbb\event\dispatcher_interface */
|
||||
protected $phpbb_dispatcher;
|
||||
|
||||
/** @var string */
|
||||
protected $phpEx;
|
||||
|
||||
@@ -79,10 +85,21 @@ abstract class base
|
||||
* @param \phpbb\cache\driver\driver_interface $cache Cache object
|
||||
* @param \phpbb\user $user User object
|
||||
* @param \phpbb\auth\auth $auth Auth object
|
||||
* @param \phpbb\content_visibility $content_visibility Auth object
|
||||
* @param \phpbb\content_visibility $content_visibility Content visibility object
|
||||
* @param \phpbb\event\dispatcher_interface $phpbb_dispatcher Event dispatcher object
|
||||
* @param string $phpEx php file extension
|
||||
*/
|
||||
function __construct(\phpbb\feed\helper $helper, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\cache\driver\driver_interface $cache, \phpbb\user $user, \phpbb\auth\auth $auth, \phpbb\content_visibility $content_visibility, $phpEx)
|
||||
function __construct(
|
||||
\phpbb\feed\helper $helper,
|
||||
\phpbb\config\config $config,
|
||||
\phpbb\db\driver\driver_interface $db,
|
||||
\phpbb\cache\driver\driver_interface $cache,
|
||||
\phpbb\user $user,
|
||||
\phpbb\auth\auth $auth,
|
||||
\phpbb\content_visibility $content_visibility,
|
||||
\phpbb\event\dispatcher_interface $phpbb_dispatcher,
|
||||
$phpEx
|
||||
)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->helper = $helper;
|
||||
@@ -91,6 +108,7 @@ abstract class base
|
||||
$this->user = $user;
|
||||
$this->auth = $auth;
|
||||
$this->content_visibility = $content_visibility;
|
||||
$this->phpbb_dispatcher = $phpbb_dispatcher;
|
||||
$this->phpEx = $phpEx;
|
||||
|
||||
$this->set_keys();
|
||||
@@ -239,6 +257,21 @@ abstract class base
|
||||
return false;
|
||||
}
|
||||
|
||||
$sql_ary = $this->sql;
|
||||
|
||||
/**
|
||||
* Event to modify the feed item sql
|
||||
*
|
||||
* @event core.feed_base_modify_item_sql
|
||||
* @var array sql_ary The SQL array to get the feed item data
|
||||
*
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('sql_ary');
|
||||
extract($this->phpbb_dispatcher->trigger_event('core.feed_base_modify_item_sql', compact($vars)));
|
||||
$this->sql = $sql_ary;
|
||||
unset($sql_ary);
|
||||
|
||||
// Query database
|
||||
$sql = $this->db->sql_build_query('SELECT', $this->sql);
|
||||
$this->result = $this->db->sql_query_limit($sql, $this->num_items);
|
||||
|
@@ -402,7 +402,7 @@ class log implements \phpbb\log\log_interface
|
||||
}
|
||||
}
|
||||
|
||||
$sql = 'DELETE FROM ' . LOG_TABLE . "
|
||||
$sql = 'DELETE FROM ' . $this->log_table . "
|
||||
$sql_where";
|
||||
$this->db->sql_query($sql);
|
||||
|
||||
|
@@ -192,7 +192,7 @@ class manager
|
||||
$sql = 'SELECT n.*, nt.notification_type_name
|
||||
FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
|
||||
WHERE n.user_id = ' . (int) $options['user_id'] .
|
||||
(($options['notification_id']) ? ((is_array($options['notification_id'])) ? ' AND ' . $this->db->sql_in_set('n.notification_id', $options['notification_id']) : ' AND n.notification_id = ' . (int) $options['notification_id']) : '') . '
|
||||
(($options['notification_id']) ? ' AND ' . $this->db->sql_in_set('n.notification_id', $options['notification_id']) : '') . '
|
||||
AND nt.notification_type_id = n.notification_type_id
|
||||
AND nt.notification_type_enabled = 1
|
||||
ORDER BY n.' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']);
|
||||
@@ -275,10 +275,9 @@ class manager
|
||||
$sql = 'UPDATE ' . $this->notifications_table . "
|
||||
SET notification_read = 1
|
||||
WHERE notification_time <= " . (int) $time .
|
||||
(($notification_type_name !== false) ? ' AND ' .
|
||||
(is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name)) : '') .
|
||||
(($user_id !== false) ? ' AND ' . (is_array($user_id) ? $this->db->sql_in_set('user_id', $user_id) : 'user_id = ' . (int) $user_id) : '') .
|
||||
(($item_id !== false) ? ' AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id) : '');
|
||||
(($notification_type_name !== false) ? ' AND ' . $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : '') .
|
||||
(($user_id !== false) ? ' AND ' . $this->db->sql_in_set('user_id', $user_id) : '') .
|
||||
(($item_id !== false) ? ' AND ' . $this->db->sql_in_set('item_id', $item_id) : '');
|
||||
$this->db->sql_query($sql);
|
||||
}
|
||||
|
||||
@@ -297,10 +296,9 @@ class manager
|
||||
$sql = 'UPDATE ' . $this->notifications_table . "
|
||||
SET notification_read = 1
|
||||
WHERE notification_time <= " . (int) $time .
|
||||
(($notification_type_name !== false) ? ' AND ' .
|
||||
(is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name)) : '') .
|
||||
(($item_parent_id !== false) ? ' AND ' . (is_array($item_parent_id) ? $this->db->sql_in_set('item_parent_id', $item_parent_id, false, true) : 'item_parent_id = ' . (int) $item_parent_id) : '') .
|
||||
(($user_id !== false) ? ' AND ' . (is_array($user_id) ? $this->db->sql_in_set('user_id', $user_id) : 'user_id = ' . (int) $user_id) : '');
|
||||
(($notification_type_name !== false) ? ' AND ' . $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : '') .
|
||||
(($item_parent_id !== false) ? ' AND ' . $this->db->sql_in_set('item_parent_id', $item_parent_id, false, true) : '') .
|
||||
(($user_id !== false) ? ' AND ' . $this->db->sql_in_set('user_id', $user_id) : '');
|
||||
$this->db->sql_query($sql);
|
||||
}
|
||||
|
||||
@@ -317,7 +315,7 @@ class manager
|
||||
$sql = 'UPDATE ' . $this->notifications_table . "
|
||||
SET notification_read = 1
|
||||
WHERE notification_time <= " . (int) $time . '
|
||||
AND ' . ((is_array($notification_id)) ? $this->db->sql_in_set('notification_id', $notification_id) : 'notification_id = ' . (int) $notification_id);
|
||||
AND ' . $this->db->sql_in_set('notification_id', $notification_id);
|
||||
$this->db->sql_query($sql);
|
||||
}
|
||||
|
||||
@@ -542,8 +540,8 @@ class manager
|
||||
|
||||
$sql = 'DELETE FROM ' . $this->notifications_table . '
|
||||
WHERE notification_type_id = ' . (int) $notification_type_id . '
|
||||
AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id) .
|
||||
(($parent_id !== false) ? ' AND ' . ((is_array($parent_id) ? $this->db->sql_in_set('item_parent_id', $parent_id) : 'item_parent_id = ' . (int) $parent_id)) : '');
|
||||
AND ' . $this->db->sql_in_set('item_id', $item_id) .
|
||||
(($parent_id !== false) ? ' AND ' . $this->db->sql_in_set('item_parent_id', $parent_id) : '');
|
||||
$this->db->sql_query($sql);
|
||||
}
|
||||
|
||||
@@ -969,11 +967,16 @@ class manager
|
||||
/**
|
||||
* Get notification type ids (as an array)
|
||||
*
|
||||
* @param array $notification_type_names Array of strings
|
||||
* @param string|array $notification_type_names Notification type names
|
||||
* @return array Array of integers
|
||||
*/
|
||||
public function get_notification_type_ids(array $notification_type_names)
|
||||
public function get_notification_type_ids($notification_type_names)
|
||||
{
|
||||
if (!is_array($notification_type_names))
|
||||
{
|
||||
$notification_type_names = array($notification_type_names);
|
||||
}
|
||||
|
||||
$notification_type_ids = array();
|
||||
|
||||
foreach ($notification_type_names as $name)
|
||||
|
@@ -81,7 +81,7 @@ abstract class messenger_base extends \phpbb\notification\method\base
|
||||
$messenger->assign_vars(array_merge(array(
|
||||
'USERNAME' => $user['username'],
|
||||
|
||||
'U_NOTIFICATION_SETTINGS' => generate_board_url() . '/ucp.' . $this->php_ext . '?i=ucp_notifications&mode=notification_options',
|
||||
'U_NOTIFICATION_SETTINGS' => generate_board_url() . '/ucp.' . $this->php_ext . '?i=ucp_notifications&mode=notification_options',
|
||||
), $notification->get_email_template_variables()));
|
||||
|
||||
$messenger->send($notify_method);
|
||||
|
@@ -36,52 +36,6 @@ class base
|
||||
$error = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a language dependend list of words that should be ignored by the search
|
||||
*/
|
||||
function get_ignore_words()
|
||||
{
|
||||
if (!sizeof($this->ignore_words))
|
||||
{
|
||||
global $user, $phpEx;
|
||||
|
||||
$words = array();
|
||||
|
||||
if (file_exists("{$user->lang_path}{$user->lang_name}/search_ignore_words.$phpEx"))
|
||||
{
|
||||
// include the file containing ignore words
|
||||
include("{$user->lang_path}{$user->lang_name}/search_ignore_words.$phpEx");
|
||||
}
|
||||
|
||||
$this->ignore_words = $words;
|
||||
unset($words);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores a list of synonyms that should be replaced in $this->match_synonym and $this->replace_synonym and caches them
|
||||
*/
|
||||
function get_synonyms()
|
||||
{
|
||||
if (!sizeof($this->match_synonym))
|
||||
{
|
||||
global $user, $phpEx;
|
||||
|
||||
$synonyms = array();
|
||||
|
||||
if (file_exists("{$user->lang_path}{$user->lang_name}/search_synonyms.$phpEx"))
|
||||
{
|
||||
// include the file containing synonyms
|
||||
include("{$user->lang_path}{$user->lang_name}/search_synonyms.$phpEx");
|
||||
}
|
||||
|
||||
$this->match_synonym = array_keys($synonyms);
|
||||
$this->replace_synonym = array_values($synonyms);
|
||||
|
||||
unset($synonyms);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves cached search results
|
||||
*
|
||||
|
@@ -177,8 +177,10 @@ class fulltext_mysql extends \phpbb\search\base
|
||||
$engine === 'MyISAM' ||
|
||||
// FULLTEXT is supported on InnoDB since MySQL 5.6.4 according to
|
||||
// http://dev.mysql.com/doc/refman/5.6/en/innodb-storage-engine.html
|
||||
// We also require https://bugs.mysql.com/bug.php?id=67004 to be
|
||||
// fixed for proper overall operation. Hence we require 5.6.8.
|
||||
$engine === 'InnoDB' &&
|
||||
phpbb_version_compare($this->db->sql_server_info(true), '5.6.4', '>=');
|
||||
phpbb_version_compare($this->db->sql_server_info(true), '5.6.8', '>=');
|
||||
|
||||
if (!$fulltext_supported)
|
||||
{
|
||||
|
@@ -1262,7 +1262,7 @@ class fulltext_native extends \phpbb\search\base
|
||||
if (!$total_results && $is_mysql)
|
||||
{
|
||||
// Count rows for the executed queries. Replace $select within $sql with SQL_CALC_FOUND_ROWS, and run it.
|
||||
$sql_calc = str_replace('SELECT ' . $select, 'SELECT DISTINCT SQL_CALC_FOUND_ROWS p.post_id', $sql);
|
||||
$sql_calc = str_replace('SELECT ' . $select, 'SELECT SQL_CALC_FOUND_ROWS ' . $select, $sql);
|
||||
|
||||
$result = $this->db->sql_query($sql_calc);
|
||||
$this->db->sql_freeresult($result);
|
||||
|
@@ -219,7 +219,7 @@ class session
|
||||
function session_begin($update_session_page = true)
|
||||
{
|
||||
global $phpEx, $SID, $_SID, $_EXTRA_URL, $db, $config, $phpbb_root_path;
|
||||
global $request, $phpbb_container;
|
||||
global $request, $phpbb_container, $phpbb_dispatcher;
|
||||
|
||||
// Give us some basic information
|
||||
$this->time_now = time();
|
||||
@@ -281,11 +281,21 @@ class session
|
||||
|
||||
// Why no forwarded_for et al? Well, too easily spoofed. With the results of my recent requests
|
||||
// it's pretty clear that in the majority of cases you'll at least be left with a proxy/cache ip.
|
||||
$this->ip = htmlspecialchars_decode($request->server('REMOTE_ADDR'));
|
||||
$this->ip = preg_replace('# {2,}#', ' ', str_replace(',', ' ', $this->ip));
|
||||
$ip = htmlspecialchars_decode($request->server('REMOTE_ADDR'));
|
||||
$ip = preg_replace('# {2,}#', ' ', str_replace(',', ' ', $ip));
|
||||
|
||||
/**
|
||||
* Event to alter user IP address
|
||||
*
|
||||
* @event core.session_ip_after
|
||||
* @var string ip REMOTE_ADDR
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('ip');
|
||||
extract($phpbb_dispatcher->trigger_event('core.session_ip_after', compact($vars)));
|
||||
|
||||
// split the list of IPs
|
||||
$ips = explode(' ', trim($this->ip));
|
||||
$ips = explode(' ', trim($ip));
|
||||
|
||||
// Default IP if REMOTE_ADDR is invalid
|
||||
$this->ip = '127.0.0.1';
|
||||
@@ -1585,7 +1595,7 @@ class session
|
||||
|
||||
$this->data = array_merge($this->data, $sql_ary);
|
||||
|
||||
if ($this->data['user_id'] != ANONYMOUS && !empty($config['new_member_post_limit']) && $this->data['user_new'] && $config['new_member_post_limit'] <= $this->data['user_posts'])
|
||||
if ($this->data['user_id'] != ANONYMOUS && isset($config['new_member_post_limit']) && $this->data['user_new'] && $config['new_member_post_limit'] <= $this->data['user_posts'])
|
||||
{
|
||||
$this->leave_newly_registered();
|
||||
}
|
||||
|
@@ -350,7 +350,7 @@ class twig extends \phpbb\template\base
|
||||
return $this->twig->render($this->get_filename_from_handle($handle), $this->get_template_vars());
|
||||
}
|
||||
|
||||
$this->assign_var($template_var, $this->twig->render($this->get_filename_from_handle($handle, $this->get_template_vars())));
|
||||
$this->assign_var($template_var, $this->twig->render($this->get_filename_from_handle($handle), $this->get_template_vars()));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
@@ -371,7 +371,9 @@ switch ($mode)
|
||||
* NOTE: Should be actual language strings, NOT
|
||||
* language keys.
|
||||
* @var bool is_authed Does the user have the required permissions?
|
||||
* @var array post_data All post data from database
|
||||
* @since 3.1.3-RC1
|
||||
* @changed 3.1.10-RC1 Added post_data
|
||||
*/
|
||||
$vars = array(
|
||||
'post_id',
|
||||
@@ -387,6 +389,7 @@ $vars = array(
|
||||
'mode',
|
||||
'error',
|
||||
'is_authed',
|
||||
'post_data',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.modify_posting_auth', compact($vars)));
|
||||
|
||||
@@ -1741,6 +1744,7 @@ $page_data = array(
|
||||
'L_POST_A' => $page_title,
|
||||
'L_ICON' => ($mode == 'reply' || $mode == 'quote' || ($mode == 'edit' && $post_id != $post_data['topic_first_post_id'])) ? $user->lang['POST_ICON'] : $user->lang['TOPIC_ICON'],
|
||||
'L_MESSAGE_BODY_EXPLAIN' => $user->lang('MESSAGE_BODY_EXPLAIN', (int) $config['max_post_chars']),
|
||||
'L_DELETE_POST_PERMANENTLY' => $user->lang('DELETE_POST_PERMANENTLY', 1),
|
||||
|
||||
'FORUM_NAME' => $post_data['forum_name'],
|
||||
'FORUM_DESC' => ($post_data['forum_desc']) ? generate_text_for_display($post_data['forum_desc'], $post_data['forum_desc_uid'], $post_data['forum_desc_bitfield'], $post_data['forum_desc_options']) : '',
|
||||
|
@@ -126,6 +126,26 @@ gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $
|
||||
$phpbb_content_visibility = $phpbb_container->get('content.visibility');
|
||||
$pagination = $phpbb_container->get('pagination');
|
||||
|
||||
/**
|
||||
* This event allows you to alter the above parameters, such as keywords and submit
|
||||
*
|
||||
* @event core.search_modify_submit_parameters
|
||||
* @var string keywords The search keywords
|
||||
* @var string author Specifies the author match, when ANONYMOUS is also a search-match
|
||||
* @var int author_id ID of the author to search by
|
||||
* @var string search_id Predefined search type name
|
||||
* @var bool submit Whether or not the form has been submitted
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'keywords',
|
||||
'author',
|
||||
'author_id',
|
||||
'search_id',
|
||||
'submit',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.search_modify_submit_parameters', compact($vars)));
|
||||
|
||||
if ($keywords || $author || $author_id || $search_id || $submit)
|
||||
{
|
||||
// clear arrays
|
||||
@@ -320,7 +340,10 @@ if ($keywords || $author || $author_id || $search_id || $submit)
|
||||
* @var array ex_fid_ary Array of excluded forum ids
|
||||
* @var array author_id_ary Array of exclusive author ids
|
||||
* @var string search_id The id of the search request
|
||||
* @var array id_ary Array of post or topic ids for search result
|
||||
* @var string show_results 'posts' or 'topics' type of ids
|
||||
* @since 3.1.3-RC1
|
||||
* @changed 3.1.10-RC1 Added id_ary, show_results
|
||||
*/
|
||||
$vars = array(
|
||||
'keywords',
|
||||
@@ -328,6 +351,8 @@ if ($keywords || $author || $author_id || $search_id || $submit)
|
||||
'ex_fid_ary',
|
||||
'author_id_ary',
|
||||
'search_id',
|
||||
'id_ary',
|
||||
'show_results',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.search_modify_param_before', compact($vars)));
|
||||
|
||||
@@ -570,6 +595,48 @@ if ($keywords || $author || $author_id || $search_id || $submit)
|
||||
$total_match_count = $search->author_search($show_results, $firstpost_only, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $m_approve_posts_fid_sql, $topic_id, $author_id_ary, $sql_author_match, $id_ary, $start, $per_page);
|
||||
}
|
||||
|
||||
/**
|
||||
* Event to search otherwise than by keywords or author
|
||||
*
|
||||
* @event core.search_backend_search_after
|
||||
* @var string show_results 'posts' or 'topics' type of ids
|
||||
* @var string search_fields The data fields to search in
|
||||
* @var string search_terms Is either 'all' (use query as entered, words without prefix should default to "have to be in field") or 'any' (ignore search query parts and just return all posts that contain any of the specified words)
|
||||
* @var array sort_by_sql Array of SQL sorting instructions
|
||||
* @var string sort_key The sort key
|
||||
* @var string sort_dir The sort direction
|
||||
* @var int sort_days Limit the age of results
|
||||
* @var array ex_fid_ary Array of excluded forum ids
|
||||
* @var string m_approve_posts_fid_sql Specifies which types of posts the user can view in which forums
|
||||
* @var int topic_id is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched
|
||||
* @var array author_id_ary Array of exclusive author ids
|
||||
* @var string sql_author_match Specifies the author match, when ANONYMOUS is also a search-match
|
||||
* @var array id_ary Array of post or topic ids for search result
|
||||
* @var int start The starting id of the results
|
||||
* @var int per_page Number of ids each page is supposed to contain
|
||||
* @var int total_match_count The total number of search matches
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array(
|
||||
'show_results',
|
||||
'search_fields',
|
||||
'search_terms',
|
||||
'sort_by_sql',
|
||||
'sort_key',
|
||||
'sort_dir',
|
||||
'sort_days',
|
||||
'ex_fid_ary',
|
||||
'm_approve_posts_fid_sql',
|
||||
'topic_id',
|
||||
'author_id_ary',
|
||||
'sql_author_match',
|
||||
'id_ary',
|
||||
'start',
|
||||
'per_page',
|
||||
'total_match_count',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.search_backend_search_after', compact($vars)));
|
||||
|
||||
$sql_where = '';
|
||||
|
||||
if (sizeof($id_ary))
|
||||
@@ -620,11 +687,18 @@ if ($keywords || $author || $author_id || $search_id || $submit)
|
||||
* @event core.search_modify_url_parameters
|
||||
* @var string u_search Search URL parameters string
|
||||
* @var string search_id Predefined search type name
|
||||
* @var string show_results String indicating the show results mode
|
||||
* @var string sql_where The SQL WHERE string used by search to get topic data
|
||||
* @var int total_match_count The total number of search matches
|
||||
* @since 3.1.7-RC1
|
||||
* @changed 3.1.10-RC1 Added show_results, sql_where, total_match_count
|
||||
*/
|
||||
$vars = array(
|
||||
'u_search',
|
||||
'search_id',
|
||||
'show_results',
|
||||
'sql_where',
|
||||
'total_match_count',
|
||||
);
|
||||
extract($phpbb_dispatcher->trigger_event('core.search_modify_url_parameters', compact($vars)));
|
||||
|
||||
@@ -1249,6 +1323,7 @@ if ($keywords || $author || $author_id || $search_id || $submit)
|
||||
}
|
||||
|
||||
// Search forum
|
||||
$rowset = array();
|
||||
$s_forums = '';
|
||||
$sql = 'SELECT f.forum_id, f.forum_name, f.parent_id, f.forum_type, f.left_id, f.right_id, f.forum_password, f.enable_indexing, fa.user_id
|
||||
FROM ' . FORUMS_TABLE . ' f
|
||||
@@ -1257,11 +1332,27 @@ $sql = 'SELECT f.forum_id, f.forum_name, f.parent_id, f.forum_type, f.left_id, f
|
||||
ORDER BY f.left_id ASC";
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
$rowset[(int) $row['forum_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$right = $cat_right = $padding_inc = 0;
|
||||
$padding = $forum_list = $holding = '';
|
||||
$pad_store = array('0' => '');
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
/**
|
||||
* Modify the forum select list for advanced search page
|
||||
*
|
||||
* @event core.search_modify_forum_select_list
|
||||
* @var array rowset Array with the forums list data
|
||||
* @since 3.1.10-RC1
|
||||
*/
|
||||
$vars = array('rowset');
|
||||
extract($phpbb_dispatcher->trigger_event('core.search_modify_forum_select_list', compact($vars)));
|
||||
|
||||
foreach ($rowset as $row)
|
||||
{
|
||||
if ($row['forum_type'] == FORUM_CAT && ($row['left_id'] + 1 == $row['right_id']))
|
||||
{
|
||||
@@ -1333,8 +1424,8 @@ if ($holding)
|
||||
$s_forums .= $holding;
|
||||
}
|
||||
|
||||
$db->sql_freeresult($result);
|
||||
unset($pad_store);
|
||||
unset($rowset);
|
||||
|
||||
if (!$s_forums)
|
||||
{
|
||||
|
@@ -21,8 +21,8 @@
|
||||
# General Information about this style
|
||||
name = prosilver
|
||||
copyright = © phpBB Limited, 2007
|
||||
style_version = 3.1.9
|
||||
phpbb_version = 3.1.9
|
||||
style_version = 3.1.10
|
||||
phpbb_version = 3.1.10
|
||||
|
||||
# Defining a different template bitfield
|
||||
# template_bitfield = lNg=
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<label>
|
||||
<strong>{L_DELETE_PERMANENTLY}{L_COLON}</strong>
|
||||
<input id="delete_permanent" name="delete_permanent" type="checkbox" value="1" {S_CHECKED_PERMANENT} />
|
||||
<!-- IF S_TOPIC_MODE -->{L_DELETE_TOPIC_PERMANENTLY}<!-- ELSE -->{L_DELETE_POST_PERMANENTLY}<!-- ENDIF -->
|
||||
<!-- IF S_TOPIC_MODE -->{DELETE_TOPIC_PERMANENTLY_EXPLAIN}<!-- ELSE -->{DELETE_POST_PERMANENTLY_EXPLAIN}<!-- ENDIF -->
|
||||
</label>
|
||||
<!-- ENDIF -->
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<dd>
|
||||
<label for="delete_permanent">
|
||||
<input id="delete_permanent" name="delete_permanent" type="checkbox" value="1" {S_CHECKED_PERMANENT} />
|
||||
<!-- IF S_TOPIC_MODE -->{L_DELETE_TOPIC_PERMANENTLY}<!-- ELSE -->{L_DELETE_POST_PERMANENTLY}<!-- ENDIF -->
|
||||
<!-- IF S_TOPIC_MODE -->{DELETE_TOPIC_PERMANENTLY_EXPLAIN}<!-- ELSE -->{DELETE_POST_PERMANENTLY_EXPLAIN}<!-- ENDIF -->
|
||||
</label>
|
||||
</dd>
|
||||
</dl>
|
||||
|
@@ -50,7 +50,7 @@
|
||||
<!-- IF topicrow.S_TOPIC_REPORTED --><a href="{topicrow.U_MCP_REPORT}">{REPORTED_IMG}</a><!-- ENDIF -->
|
||||
<!-- IF topicrow.S_MOVED_TOPIC and S_CAN_DELETE --> <a href="{topicrow.U_DELETE_TOPIC}" class="topictitle">[ {L_DELETE_SHADOW_TOPIC} ]</a><!-- ENDIF -->
|
||||
<br />
|
||||
|
||||
<!-- EVENT topiclist_row_topic_title_after -->
|
||||
<div class="responsive-show" style="display: none;">
|
||||
<!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
|
||||
{L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} « {topicrow.LAST_POST_TIME}<br />
|
||||
|
@@ -31,6 +31,8 @@
|
||||
|
||||
<!-- INCLUDE overall_header.html -->
|
||||
|
||||
<!-- EVENT mcp_move_before -->
|
||||
|
||||
<form id="confirm" action="{S_CONFIRM_ACTION}" method="post">
|
||||
|
||||
<div class="panel">
|
||||
@@ -54,7 +56,7 @@
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="submit-buttons">
|
||||
{S_HIDDEN_FIELDS}<input type="submit" name="confirm" value="{YES_VALUE}" class="button1" />
|
||||
{S_HIDDEN_FIELDS}<input type="submit" name="confirm" value="{YES_VALUE}" class="button1" />
|
||||
<input type="submit" name="cancel" value="{L_NO}" class="button2" />
|
||||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
|
@@ -73,7 +73,7 @@
|
||||
<dl>
|
||||
<dt><label for="to_topic_id">{L_MERGE_TOPIC_ID}{L_COLON}</label></dt>
|
||||
<dd>
|
||||
<input class="inputbox autowidth" type="number" min="0" max="999999" name="to_topic_id" id="to_topic_id" value="{TO_TOPIC_ID}" />
|
||||
<input class="inputbox autowidth" type="number" min="0" max="9999999999" name="to_topic_id" id="to_topic_id" value="{TO_TOPIC_ID}" />
|
||||
<a href="{U_SELECT_TOPIC}" >{L_SELECT_TOPIC}</a>
|
||||
</dd>
|
||||
<!-- IF TO_TOPIC_INFO --><dd>{TO_TOPIC_INFO}</dd><!-- ENDIF -->
|
||||
@@ -112,7 +112,10 @@
|
||||
</ul>
|
||||
|
||||
<h3><a href="{postrow.U_POST_DETAILS}">{postrow.POST_SUBJECT}</a></h3>
|
||||
|
||||
<!-- EVENT mcp_topic_postrow_post_details_before -->
|
||||
<p class="author"><a href="#pr{postrow.POST_ID}">{postrow.MINI_POST_IMG}</a> {L_POSTED} {postrow.POST_DATE} {L_POST_BY_AUTHOR} <strong>{postrow.POST_AUTHOR_FULL}</strong><!-- IF postrow.U_MCP_DETAILS --> [ <a href="{postrow.U_MCP_DETAILS}">{L_POST_DETAILS}</a> ]<!-- ENDIF --></p>
|
||||
<!-- EVENT mcp_topic_postrow_post_details_after -->
|
||||
|
||||
<!-- IF postrow.S_POST_UNAPPROVED -->
|
||||
<p class="post-notice unapproved">
|
||||
|
@@ -1,5 +1,7 @@
|
||||
<!-- INCLUDE overall_header.html -->
|
||||
|
||||
<!-- EVENT memberlist_email_before -->
|
||||
|
||||
<!-- IF S_CONTACT_ADMIN-->
|
||||
<h2 class="titlespace">{L_CONTACT_ADMIN}</h2>
|
||||
<!-- ELSEIF S_SEND_USER -->
|
||||
|
@@ -76,6 +76,7 @@
|
||||
<a id="top" class="anchor" accesskey="t"></a>
|
||||
<div id="page-header">
|
||||
<div class="headerbar" role="banner">
|
||||
<!-- EVENT overall_header_headerbar_before -->
|
||||
<div class="inner">
|
||||
|
||||
<div id="site-description">
|
||||
@@ -100,6 +101,7 @@
|
||||
<!-- ENDIF -->
|
||||
|
||||
</div>
|
||||
<!-- EVENT overall_header_headerbar_after -->
|
||||
</div>
|
||||
<!-- EVENT overall_header_navbar_before -->
|
||||
<!-- INCLUDE navbar_header.html -->
|
||||
|
@@ -23,7 +23,11 @@
|
||||
<!-- IF S_POST_ACTION or S_PRIVMSGS or S_EDIT_DRAFT -->
|
||||
<dl style="clear: left;">
|
||||
<dt><label for="subject">{L_SUBJECT}{L_COLON}</label></dt>
|
||||
<dd><input type="text" name="subject" id="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->120<!-- ELSE -->124<!-- ENDIF -->" tabindex="2" value="{SUBJECT}{DRAFT_SUBJECT}" class="inputbox autowidth" /></dd>
|
||||
<dd>
|
||||
<!-- EVENT posting_editor_subject_prepend -->
|
||||
<input type="text" name="subject" id="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->120<!-- ELSE -->124<!-- ENDIF -->" tabindex="2" value="{SUBJECT}{DRAFT_SUBJECT}" class="inputbox autowidth" />
|
||||
<!-- EVENT posting_editor_subject_append -->
|
||||
</dd>
|
||||
</dl>
|
||||
<!-- IF CAPTCHA_TEMPLATE and S_CONFIRM_CODE -->
|
||||
<!-- DEFINE $CAPTCHA_TAB_INDEX = 3 -->
|
||||
|
@@ -43,7 +43,10 @@
|
||||
</ul>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- EVENT posting_topic_review_row_post_details_before -->
|
||||
<p class="author"><!-- IF S_IS_BOT -->{topic_review_row.MINI_POST_IMG}<!-- ELSE --><a href="{topic_review_row.U_MINI_POST}">{topic_review_row.MINI_POST_IMG}</a><!-- ENDIF --> {L_POST_BY_AUTHOR} <strong>{topic_review_row.POST_AUTHOR_FULL}</strong> » {topic_review_row.POST_DATE} </p>
|
||||
<!-- EVENT posting_topic_review_row_post_details_after -->
|
||||
|
||||
<div class="content">{topic_review_row.MESSAGE}</div>
|
||||
|
||||
<!-- IF topic_review_row.S_HAS_ATTACHMENTS -->
|
||||
|
@@ -91,6 +91,7 @@
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF searchresults.S_HAS_POLL -->{POLL_IMG} <!-- ENDIF -->
|
||||
<!-- EVENT topiclist_row_topic_title_after -->
|
||||
{L_POST_BY_AUTHOR} {searchresults.TOPIC_AUTHOR_FULL} » {searchresults.FIRST_POST_TIME} » {L_IN} <a href="{searchresults.U_VIEW_FORUM}">{searchresults.FORUM_TITLE}</a>
|
||||
<!-- EVENT topiclist_row_append -->
|
||||
|
||||
|
@@ -121,6 +121,8 @@
|
||||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- EVENT viewforum_body_topic_row_before -->
|
||||
|
||||
<!-- BEGIN topicrow -->
|
||||
|
||||
<!-- IF not topicrow.S_TOPIC_TYPE_SWITCH and not topicrow.S_FIRST_ROW -->
|
||||
@@ -145,7 +147,7 @@
|
||||
<ul class="topiclist topics">
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- EVENT viewforum_body_topic_row_before -->
|
||||
<!-- EVENT viewforum_body_topicrow_row_before -->
|
||||
<li class="row<!-- IF topicrow.S_ROW_COUNT is even --> bg1<!-- ELSE --> bg2<!-- ENDIF --><!-- IF topicrow.S_POST_GLOBAL --> global-announce<!-- ENDIF --><!-- IF topicrow.S_POST_ANNOUNCE --> announce<!-- ENDIF --><!-- IF topicrow.S_POST_STICKY --> sticky<!-- ENDIF --><!-- IF topicrow.S_TOPIC_REPORTED --> reported<!-- ENDIF -->">
|
||||
<!-- EVENT viewforum_body_topic_row_prepend -->
|
||||
<dl class="icon {topicrow.TOPIC_IMG_STYLE}">
|
||||
@@ -157,7 +159,7 @@
|
||||
<!-- IF topicrow.S_TOPIC_UNAPPROVED or topicrow.S_POSTS_UNAPPROVED --><a href="{topicrow.U_MCP_QUEUE}">{topicrow.UNAPPROVED_IMG}</a> <!-- ENDIF -->
|
||||
<!-- IF topicrow.S_TOPIC_DELETED --><a href="{topicrow.U_MCP_QUEUE}">{DELETED_IMG}</a> <!-- ENDIF -->
|
||||
<!-- IF topicrow.S_TOPIC_REPORTED --><a href="{topicrow.U_MCP_REPORT}">{REPORTED_IMG}</a><!-- ENDIF --><br />
|
||||
|
||||
<!-- EVENT topiclist_row_topic_title_after -->
|
||||
<!-- IF not S_IS_BOT -->
|
||||
<div class="responsive-show" style="display: none;">
|
||||
{L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} « <a href="{topicrow.U_LAST_POST}" title="{L_GOTO_LAST_POST}">{topicrow.LAST_POST_TIME}</a>
|
||||
|
@@ -21,8 +21,8 @@
|
||||
# General Information about this style
|
||||
name = subsilver2
|
||||
copyright = © 2005 phpBB Limited
|
||||
style_version = 3.1.9
|
||||
phpbb_version = 3.1.9
|
||||
style_version = 3.1.10
|
||||
phpbb_version = 3.1.10
|
||||
|
||||
# Defining a different template bitfield
|
||||
# template_bitfield = lNg=
|
||||
|
@@ -43,6 +43,7 @@
|
||||
<!-- IF topicrow.S_MOVED_TOPIC and S_CAN_DELETE -->
|
||||
[ <a href="{topicrow.U_DELETE_TOPIC}">{L_DELETE_SHADOW_TOPIC}</a> ]
|
||||
<!-- ENDIF -->
|
||||
<!-- EVENT topiclist_row_topic_title_after -->
|
||||
</p>
|
||||
<!-- EVENT topiclist_row_append -->
|
||||
</td>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user