mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-27 21:58:52 +00:00
[ticket/11935] Merge remote-tracking branch 'upstream/develop'
PHPBB3-11935
This commit is contained in:
commit
16213c92fe
118 changed files with 3014 additions and 1091 deletions
15
.travis.yml
15
.travis.yml
|
@ -10,18 +10,23 @@ env:
|
|||
- DB=mysql
|
||||
- DB=postgres
|
||||
|
||||
before_script:
|
||||
- sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'DROP DATABASE IF EXISTS phpbb_tests;' -U postgres; fi"
|
||||
- sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database phpbb_tests;' -U postgres; fi"
|
||||
install:
|
||||
- sh -c "if [ '$DB' = 'mariadb' ]; then travis/setup-mariadb.sh; fi"
|
||||
- sh -c "if [ '$DB' = 'mysql' -o '$DB' = 'mariadb' ]; then mysql -e 'create database IF NOT EXISTS phpbb_tests;'; fi"
|
||||
- sh -c "if [ `php -r "echo (int) version_compare(PHP_VERSION, '5.3.19', '>=');"` = "1" ]; then travis/setup-webserver.sh; fi"
|
||||
- travis/install-php-extensions.sh
|
||||
- cd phpBB
|
||||
- php ../composer.phar install --dev --no-interaction --prefer-source
|
||||
- cd ..
|
||||
- sh -c "if [ `php -r "echo (int) version_compare(PHP_VERSION, '5.3.19', '>=');"` = "1" ]; then travis/setup-webserver.sh; fi"
|
||||
|
||||
before_script:
|
||||
- sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'DROP DATABASE IF EXISTS phpbb_tests;' -U postgres; fi"
|
||||
- sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database phpbb_tests;' -U postgres; fi"
|
||||
- sh -c "if [ '$DB' = 'mysql' -o '$DB' = 'mariadb' ]; then mysql -e 'create database IF NOT EXISTS phpbb_tests;'; fi"
|
||||
|
||||
script:
|
||||
- cd build
|
||||
- sh -c "if [ '$TRAVIS_PHP_VERSION' = '5.5' -a '$DB' = 'mysql' ]; then ../phpBB/vendor/bin/phing sniff; fi"
|
||||
- cd ..
|
||||
- phpBB/vendor/bin/phpunit --configuration travis/phpunit-$DB-travis.xml
|
||||
|
||||
notifications:
|
||||
|
|
|
@ -26,8 +26,8 @@ To be able to run an installation from the repo (and not from a pre-built packag
|
|||
## AUTOMATED TESTING
|
||||
|
||||
We have unit and functional tests in order to prevent regressions. You can view the bamboo continuous integration [here](http://bamboo.phpbb.com) or check our travis build below.
|
||||
develop - [](http://travis-ci.org/phpbb/phpbb3)
|
||||
develop-olympus - [](http://travis-ci.org/phpbb/phpbb3)
|
||||
develop - [](http://travis-ci.org/phpbb/phpbb)
|
||||
develop-olympus - [](http://travis-ci.org/phpbb/phpbb)
|
||||
|
||||
## LICENSE
|
||||
|
||||
|
|
|
@ -74,6 +74,30 @@
|
|||
passthru="true" />
|
||||
</target>
|
||||
|
||||
<target name="sniff">
|
||||
<exec command="phpBB/vendor/bin/phpcs
|
||||
-s
|
||||
--extensions=php
|
||||
--standard=build/code_sniffer/ruleset-php-strict.xml
|
||||
--ignore=phpBB/phpbb/db/migration/data/v30x/*
|
||||
phpBB/phpbb"
|
||||
dir="." checkreturn="true" passthru="true" />
|
||||
<exec command="phpBB/vendor/bin/phpcs
|
||||
-s
|
||||
--extensions=php
|
||||
--standard=build/code_sniffer/ruleset-php-legacy.xml
|
||||
--ignore=phpBB/cache/*
|
||||
--ignore=phpBB/develop/*
|
||||
--ignore=phpBB/includes/diff/*.php
|
||||
--ignore=phpBB/includes/sphinxapi.php
|
||||
--ignore=phpBB/includes/utf/data/*
|
||||
--ignore=phpBB/install/data/*
|
||||
--ignore=phpBB/phpbb/*
|
||||
--ignore=phpBB/vendor/*
|
||||
phpBB"
|
||||
dir="." checkreturn="true" passthru="true" />
|
||||
</target>
|
||||
|
||||
<target name="docs">
|
||||
<!-- only works if you setup phpdoctor:
|
||||
git clone https://github.com/peej/phpdoctor.git
|
||||
|
|
12
build/code_sniffer/ruleset-minimum.xml
Normal file
12
build/code_sniffer/ruleset-minimum.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0"?>
|
||||
<ruleset name="phpBB Minimum Standard">
|
||||
|
||||
<description>phpBB minimum coding standard</description>
|
||||
|
||||
<!-- All code files MUST use only UTF-8 without BOM. -->
|
||||
<rule ref="Generic.Files.ByteOrderMark" />
|
||||
|
||||
<!-- All code files MUST use the Unix LF (linefeed) line ending. -->
|
||||
<rule ref="Generic.Files.LineEndings" />
|
||||
|
||||
</ruleset>
|
23
build/code_sniffer/ruleset-php-legacy.xml
Normal file
23
build/code_sniffer/ruleset-php-legacy.xml
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0"?>
|
||||
<ruleset name="phpBB PHP Legacy Standard">
|
||||
|
||||
<description>phpBB legacy coding standard for PHP files</description>
|
||||
|
||||
<rule ref="./ruleset-minimum.xml" />
|
||||
|
||||
<!-- The body of each structure MUST be enclosed by braces. -->
|
||||
<rule ref="Generic.ControlStructures.InlineControlStructure" />
|
||||
|
||||
<!-- Class constants MUST be declared in all upper case with underscore separators. -->
|
||||
<rule ref="Generic.NamingConventions.UpperCaseConstantName" />
|
||||
|
||||
<!-- Only <?php, no short tags. -->
|
||||
<rule ref="Generic.PHP.DisallowShortOpenTag.EchoFound" />
|
||||
|
||||
<!-- Method arguments with default values MUST go at the end of the argument list. -->
|
||||
<rule ref="PEAR.Functions.ValidDefaultValue" />
|
||||
|
||||
<!-- The ?> closing tag MUST be omitted from files containing only PHP. -->
|
||||
<rule ref="Zend.Files.ClosingTag" />
|
||||
|
||||
</ruleset>
|
42
build/code_sniffer/ruleset-php-strict.xml
Normal file
42
build/code_sniffer/ruleset-php-strict.xml
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0"?>
|
||||
<ruleset name="phpBB PHP Strict Standard">
|
||||
|
||||
<description>phpBB coding standard for PHP files</description>
|
||||
|
||||
<rule ref="./ruleset-php-legacy.xml" />
|
||||
|
||||
<!-- There SHOULD NOT be more than 80 characters per line
|
||||
There MUST NOT be more than 120 characters per line -->
|
||||
<!--
|
||||
<rule ref="Generic.Files.LineLength">
|
||||
<properties>
|
||||
<property name="lineLimit" value="80"/>
|
||||
<property name="absoluteLineLimit" value="120"/>
|
||||
</properties>
|
||||
</rule>
|
||||
-->
|
||||
|
||||
<!-- The PHP constants true, false, and null MUST be in lower case. -->
|
||||
<rule ref="Generic.PHP.LowerCaseConstant" />
|
||||
|
||||
<!-- PHP keywords MUST be in lower case. -->
|
||||
<rule ref="Generic.PHP.LowerCaseKeyword" />
|
||||
|
||||
<!-- There MUST NOT be trailing whitespace at the end of lines. -->
|
||||
<rule ref="Squiz.WhiteSpace.SuperfluousWhitespace" />
|
||||
|
||||
<!-- There MUST NOT be whitespace before the first content of a file -->
|
||||
<rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile" />
|
||||
|
||||
<!-- There MUST NOT be whitespace after the last content of a file -->
|
||||
<rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile" />
|
||||
|
||||
<!-- Functions MUST NOT contain multiple empty lines in a row -->
|
||||
<rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines" />
|
||||
|
||||
<!-- When present, all use declarations MUST go after the namespace declaration.
|
||||
There MUST be one use keyword per declaration.
|
||||
There MUST be one blank line after the use block. -->
|
||||
<rule ref="PSR2.Namespaces.UseDeclaration" />
|
||||
|
||||
</ruleset>
|
Binary file not shown.
Before Width: | Height: | Size: 796 B |
Binary file not shown.
Before Width: | Height: | Size: 55 B |
Binary file not shown.
Before Width: | Height: | Size: 175 B |
Binary file not shown.
Before Width: | Height: | Size: 56 B |
Binary file not shown.
Before Width: | Height: | Size: 788 B |
|
@ -8,18 +8,14 @@
|
|||
</select> <input type="submit" value="{L_GO}" name="avatar_local_go" class="button2" /></dd>
|
||||
</dl>
|
||||
<!-- IF AVATAR_LOCAL_SHOW -->
|
||||
<table>
|
||||
<ul id="gallery">
|
||||
<!-- BEGIN avatar_local_row -->
|
||||
<tr>
|
||||
<!-- BEGIN avatar_local_col -->
|
||||
<td class="row1" style="text-align: center;"><img src="{avatar_local_row.avatar_local_col.AVATAR_IMAGE}" alt="{avatar_local_row.avatar_local_col.AVATAR_NAME}" title="{avatar_local_row.avatar_local_col.AVATAR_NAME}"/></td>
|
||||
<!-- END avatar_local_col -->
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- BEGIN avatar_local_option -->
|
||||
<td class="row2" style="text-align: center;"><input type="radio" name="avatar_local_file" id="av-{avatar_local_row.S_ROW_COUNT}-{avatar_local_row.avatar_local_option.S_ROW_COUNT}" value="{avatar_local_row.avatar_local_option.AVATAR_FILE}" /></td>
|
||||
<!-- END avatar_local_option -->
|
||||
</tr>
|
||||
<!-- BEGIN avatar_local_col -->
|
||||
<li>
|
||||
<label for="av-{avatar_local_row.S_ROW_COUNT}-{avatar_local_row.avatar_local_col.S_ROW_COUNT}"><img src="{avatar_local_row.avatar_local_col.AVATAR_IMAGE}" alt="" /><br />
|
||||
<input type="radio" name="avatar_local_file" id="av-{avatar_local_row.S_ROW_COUNT}-{avatar_local_row.avatar_local_col.S_ROW_COUNT}" value="{avatar_local_row.avatar_local_col.AVATAR_FILE}" /></label>
|
||||
</li>
|
||||
<!-- END avatar_local_col -->
|
||||
<!-- END avatar_local_row -->
|
||||
</table>
|
||||
</ul>
|
||||
<!-- ENDIF -->
|
||||
|
|
|
@ -440,19 +440,19 @@
|
|||
<p><strong>{NAVIGATION}<!-- IF S_NO_FORUMS --> [<a href="{U_EDIT}">{L_EDIT}</a> | <a href="{U_DELETE}">{L_DELETE}</a><!-- IF not S_LINK --> | <a href="{U_SYNC}">{L_RESYNC}</a><!-- ENDIF -->]<!-- ENDIF --></strong></p>
|
||||
|
||||
<!-- IF .forums -->
|
||||
<table class="table1">
|
||||
<table class="table1 forums">
|
||||
<col class="row1" /><col class="row1" /><col class="row2" />
|
||||
<tbody>
|
||||
<!-- BEGIN forums -->
|
||||
<tr data-down="{forums.U_MOVE_DOWN}" data-up="{forums.U_MOVE_UP}">
|
||||
<td style="width: 5%; text-align: center;">{forums.FOLDER_IMAGE}</td>
|
||||
<td>
|
||||
<td class="folder">{forums.FOLDER_IMAGE}</td>
|
||||
<td class="forum-desc">
|
||||
<!-- IF forums.FORUM_IMAGE --><div style="float: {S_CONTENT_FLOW_BEGIN}; margin-right: 5px;">{forums.FORUM_IMAGE}</div><!-- ENDIF -->
|
||||
<strong><!-- IF forums.S_FORUM_LINK -->{forums.FORUM_NAME}<!-- ELSE --><a href="{forums.U_FORUM}">{forums.FORUM_NAME}</a><!-- ENDIF --></strong>
|
||||
<!-- IF forums.FORUM_DESCRIPTION --><br /><span>{forums.FORUM_DESCRIPTION}</span><!-- ENDIF -->
|
||||
<!-- IF forums.S_FORUM_POST --><br /><br /><span>{L_TOPICS}{L_COLON} <strong>{forums.FORUM_TOPICS}</strong> / {L_POSTS}{L_COLON} <strong>{forums.FORUM_POSTS}</strong></span><!-- ENDIF -->
|
||||
</td>
|
||||
<td style="vertical-align: top; width: 100px; text-align: right; white-space: nowrap;">
|
||||
<td class="actions">
|
||||
<!-- IF forums.S_FIRST_ROW && not forums.S_LAST_ROW -->
|
||||
<span class="up">{ICON_MOVE_UP_DISABLED}</span>
|
||||
<span class="down"><a href="{forums.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
<tr data-down="{legend.U_MOVE_DOWN}" data-up="{legend.U_MOVE_UP}">
|
||||
<td><strong<!-- IF legend.GROUP_COLOUR --> style="color: {legend.GROUP_COLOUR}"<!-- ENDIF -->>{legend.GROUP_NAME}</strong></td>
|
||||
<td style="text-align: center;">{legend.GROUP_TYPE}</td>
|
||||
<td style="vertical-align: top; width: 100px; text-align: right; white-space: nowrap;">
|
||||
<td class="actions">
|
||||
<!-- IF legend.S_FIRST_ROW && not legend.S_LAST_ROW -->
|
||||
<span class="up">{ICON_MOVE_UP_DISABLED}</span>
|
||||
<span class="down"><a href="{legend.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
|
||||
|
@ -136,7 +136,7 @@
|
|||
</td>
|
||||
<td style="text-align: center;"><!-- IF teampage.GROUP_TYPE -->{teampage.GROUP_TYPE}<!-- ELSE -->-<!-- ENDIF -->
|
||||
</td></td>
|
||||
<td style="vertical-align: top; width: 100px; text-align: right; white-space: nowrap;">
|
||||
<td class="actions">
|
||||
<!-- IF teampage.S_FIRST_ROW && not teampage.S_LAST_ROW -->
|
||||
<span class="up">{ICON_MOVE_UP_DISABLED}</span>
|
||||
<span class="down"><a href="{teampage.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
|
||||
<!-- EVENT acp_main_notice_after -->
|
||||
|
||||
<table class="table1">
|
||||
<table class="table1 two-columns no-header" data-no-responsive-header="true">
|
||||
<caption>{L_FORUM_STATS}</caption>
|
||||
<col class="col1" /><col class="col2" /><col class="col1" /><col class="col2" />
|
||||
<thead>
|
||||
|
@ -168,21 +168,21 @@
|
|||
</dl>
|
||||
</form>
|
||||
|
||||
<form id="action_stats_form" method="post" action="{U_ACTION}" data-ajax="true">
|
||||
<form id="action_stats_form" method="post" action="{U_ACTION}">
|
||||
<dl>
|
||||
<dt><label for="action_stats">{L_RESYNC_STATS}</label><br /><span>{L_RESYNC_STATS_EXPLAIN}</span></dt>
|
||||
<dd><input type="hidden" name="action" value="stats" /><input class="button2" type="submit" id="action_stats" name="action_stats" value="{L_RUN}" /></dd>
|
||||
</dl>
|
||||
</form>
|
||||
|
||||
<form id="action_user_form" method="post" action="{U_ACTION}" data-ajax="true">
|
||||
<form id="action_user_form" method="post" action="{U_ACTION}">
|
||||
<dl>
|
||||
<dt><label for="action_user">{L_RESYNC_POSTCOUNTS}</label><br /><span>{L_RESYNC_POSTCOUNTS_EXPLAIN}</span></dt>
|
||||
<dd><input type="hidden" name="action" value="user" /><input class="button2" type="submit" id="action_user" name="action_user" value="{L_RUN}" /></dd>
|
||||
</dl>
|
||||
</form>
|
||||
|
||||
<form id="action_db_track_form" method="post" action="{U_ACTION}" data-ajax="true">
|
||||
<form id="action_db_track_form" method="post" action="{U_ACTION}">
|
||||
<dl>
|
||||
<dt><label for="action_db_track">{L_RESYNC_POST_MARKING}</label><br /><span>{L_RESYNC_POST_MARKING_EXPLAIN}</span></dt>
|
||||
<dd><input type="hidden" name="action" value="db_track" /><input class="button2" type="submit" id="action_db_track" name="action_db_track" value="{L_RUN}" /></dd>
|
||||
|
|
|
@ -90,9 +90,8 @@
|
|||
</div>
|
||||
<!-- BEGIN auth -->
|
||||
<div class="permissions-panel" id="options00{auth.S_ROW_COUNT}"<!-- IF auth.S_FIRST_ROW --><!-- ELSE --> style="display: none;"<!-- ENDIF -->>
|
||||
<span class="corners-top"><span></span></span>
|
||||
<div class="tablewrap">
|
||||
<table id="table00{auth.S_ROW_COUNT}" class="table1">
|
||||
<table id="table00{auth.S_ROW_COUNT}" class="table1 not-responsive">
|
||||
<colgroup>
|
||||
<col class="permissions-name" />
|
||||
<col class="permissions-yes" />
|
||||
|
@ -120,7 +119,6 @@
|
|||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<span class="corners-bottom"><span></span></span>
|
||||
</div>
|
||||
<!-- END auth -->
|
||||
</div>
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
|
||||
<!-- ELSEIF S_SELECT_USERGROUP -->
|
||||
|
||||
<div style="float: {S_CONTENT_FLOW_BEGIN}; width: 48%;">
|
||||
<div class="column1">
|
||||
|
||||
<!-- IF S_CAN_SELECT_USER -->
|
||||
|
||||
|
@ -155,7 +155,7 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div style="float: {S_CONTENT_FLOW_END}; width: 48%">
|
||||
<div class="column2">
|
||||
|
||||
<!-- IF S_CAN_SELECT_GROUP -->
|
||||
|
||||
|
@ -200,7 +200,7 @@
|
|||
|
||||
<!-- ELSEIF S_SELECT_USERGROUP_VIEW -->
|
||||
|
||||
<div style="float: {S_CONTENT_FLOW_BEGIN}; width: 48%;">
|
||||
<div class="column1">
|
||||
|
||||
<h1>{L_USERS}</h1>
|
||||
|
||||
|
@ -241,7 +241,7 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div style="float: {S_CONTENT_FLOW_END}; width: 48%">
|
||||
<div class="column2">
|
||||
|
||||
<h1>{L_USERGROUPS}</h1>
|
||||
|
||||
|
@ -324,7 +324,7 @@
|
|||
</form>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<br /><br />
|
||||
<br class="responsive-hide" /><br class="responsive-hide" />
|
||||
|
||||
<!-- include tooltip file -->
|
||||
<script type="text/javascript" src="style/tooltip.js"></script>
|
||||
|
@ -340,7 +340,7 @@
|
|||
|
||||
<!-- INCLUDE permission_mask.html -->
|
||||
|
||||
<br /><br />
|
||||
<br class="responsive-hide" /><br class="responsive-hide" />
|
||||
|
||||
<fieldset class="quick" style="float: {S_CONTENT_FLOW_END};">
|
||||
<input class="button1" type="submit" name="action[apply_all_permissions]" value="{L_APPLY_ALL_PERMISSIONS}" />
|
||||
|
@ -348,7 +348,7 @@
|
|||
{S_FORM_TOKEN}
|
||||
</fieldset>
|
||||
|
||||
<br /><br />
|
||||
<br class="responsive-hide" /><br class="responsive-hide" />
|
||||
|
||||
</form>
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF .styles_list -->
|
||||
<table class="table1">
|
||||
<table class="table1 styles">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{L_STYLE_NAME}</th>
|
||||
|
@ -97,9 +97,9 @@
|
|||
<!-- ELSE -->
|
||||
<!-- IF $ROW_CLASS == 'row2a' --><!-- DEFINE $ROW_CLASS = 'row2b' --><!-- ELSE --><!-- DEFINE $ROW_CLASS = 'row2a' --><!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
<td class="{$ROW_CLASS}" style="padding-left: {styles_list.PADDING}px;">
|
||||
<td class="{$ROW_CLASS}" style="padding-{S_CONTENT_FLOW_BEGIN}: {styles_list.PADDING}px;">
|
||||
<!-- IF styles_list.STYLE_ID and styles_list.COMMENT == '' and styles_list.STYLE_ACTIVE -->
|
||||
<div class="default-style" style="display: none; float: right;">
|
||||
<div class="default-style" style="display: none; float: {S_CONTENT_FLOW_END};">
|
||||
<input class="radio" type="radio" name="default" value="{styles_list.STYLE_ID}"<!-- IF styles_list.DEFAULT --> checked="checked"<!-- ELSE --><!-- DEFINE $S_DEFAULT = 1 --><!-- ENDIF --> title="{L_STYLE_DEFAULT}" />
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
|
@ -117,9 +117,9 @@
|
|||
<!-- ENDIF -->
|
||||
</td>
|
||||
<!-- IF not STYLES_LIST_HIDE_COUNT -->
|
||||
<td class="{$ROW_CLASS}" style="text-align: center;">{styles_list.USERS}</td>
|
||||
<td class="{$ROW_CLASS} users">{styles_list.USERS}</td>
|
||||
<!-- ENDIF -->
|
||||
<td class="{$ROW_CLASS}" style="text-align: center;">
|
||||
<td class="{$ROW_CLASS} actions">
|
||||
<!-- BEGIN actions -->
|
||||
<!-- IF styles_list.actions.S_ROW_COUNT > 0 --> | <!-- ENDIF -->
|
||||
<!-- IF styles_list.actions.U_ACTION -->
|
||||
|
@ -129,7 +129,7 @@
|
|||
<!-- END actions -->
|
||||
</td>
|
||||
{styles_list.EXTRA}
|
||||
<td class="{$ROW_CLASS}" width="20" style="text-align: center;">
|
||||
<td class="{$ROW_CLASS} mark" width="20">
|
||||
<!-- IF styles_list.STYLE_ID -->
|
||||
<input class="checkbox" type="checkbox" name="ids[]" value="{styles_list.STYLE_ID}" />
|
||||
<!-- ELSE -->
|
||||
|
|
File diff suppressed because it is too large
Load diff
243
phpBB/adm/style/admin.js
Normal file
243
phpBB/adm/style/admin.js
Normal file
|
@ -0,0 +1,243 @@
|
|||
/**
|
||||
* phpBB3 ACP functions
|
||||
*/
|
||||
|
||||
/**
|
||||
* Parse document block
|
||||
*/
|
||||
function parse_document(container)
|
||||
{
|
||||
var test = document.createElement('div'),
|
||||
oldBrowser = (typeof test.style.borderRadius == 'undefined');
|
||||
|
||||
delete test;
|
||||
|
||||
/**
|
||||
* Navigation
|
||||
*/
|
||||
container.find('#menu').each(function() {
|
||||
var menu = $(this),
|
||||
blocks = menu.children('.menu-block');
|
||||
|
||||
if (!blocks.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Set onclick event
|
||||
blocks.children('a.header').click(function() {
|
||||
var parent = $(this).parent();
|
||||
if (!parent.hasClass('active')) {
|
||||
parent.siblings().removeClass('active');
|
||||
}
|
||||
parent.toggleClass('active');
|
||||
});
|
||||
|
||||
// Set active menu
|
||||
menu.find('#activemenu').parents('.menu-block').addClass('active');
|
||||
|
||||
// Check if there is active menu
|
||||
if (!blocks.filter('.active').length) {
|
||||
blocks.filter(':first').addClass('active');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Responsive tables
|
||||
*/
|
||||
container.find('table').not('.not-responsive').each(function() {
|
||||
var $this = $(this),
|
||||
th = $this.find('thead > tr > th'),
|
||||
columns = th.length,
|
||||
headers = [],
|
||||
totalHeaders = 0,
|
||||
i, headersLength;
|
||||
|
||||
// Find columns
|
||||
$this.find('colgroup:first').children().each(function(i) {
|
||||
var column = $(this);
|
||||
$this.find('td:nth-child(' + (i + 1) + ')').addClass(column.prop('className'));
|
||||
});
|
||||
|
||||
// Styles table
|
||||
if ($this.hasClass('styles')) {
|
||||
$this.find('td:first-child[style]').each(function() {
|
||||
var style = $(this).attr('style');
|
||||
if (style.length) {
|
||||
$(this).parent('tr').attr('style', style.toLowerCase().replace('padding', 'margin')).addClass('responsive-style-row');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Find each header
|
||||
if (!$this.data('no-responsive-header'))
|
||||
{
|
||||
th.each(function(column) {
|
||||
var cell = $(this),
|
||||
colspan = parseInt(cell.attr('colspan')),
|
||||
dfn = cell.attr('data-dfn'),
|
||||
text = dfn ? dfn : cell.text().trim();
|
||||
|
||||
if (text == ' ') text = '';
|
||||
colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
|
||||
|
||||
for (i=0; i<colspan; i++) {
|
||||
headers.push(text);
|
||||
}
|
||||
totalHeaders ++;
|
||||
|
||||
if (dfn && !column) {
|
||||
$this.addClass('show-header');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
headersLength = headers.length;
|
||||
|
||||
// Add header text to each cell as <dfn>
|
||||
$this.addClass('responsive');
|
||||
|
||||
if (totalHeaders < 2) {
|
||||
$this.addClass('show-header');
|
||||
return;
|
||||
}
|
||||
|
||||
$this.find('tbody > tr').each(function() {
|
||||
var row = $(this),
|
||||
cells = row.children('td'),
|
||||
column = 0;
|
||||
|
||||
if (cells.length == 1) {
|
||||
row.addClass('big-column');
|
||||
return;
|
||||
}
|
||||
|
||||
cells.each(function() {
|
||||
var cell = $(this),
|
||||
colspan = parseInt(cell.attr('colspan')),
|
||||
text = cell.text().trim();
|
||||
|
||||
if (headersLength <= column) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((text.length && text !== '-') || cell.children().length) {
|
||||
if (headers[column] != '') {
|
||||
cell.prepend('<dfn style="display: none;">' + headers[column] + '</dfn>');
|
||||
}
|
||||
}
|
||||
else {
|
||||
cell.addClass('empty');
|
||||
}
|
||||
|
||||
colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
|
||||
column += colspan;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Hide empty responsive tables
|
||||
*/
|
||||
container.find('table.responsive > tbody').each(function() {
|
||||
var items = $(this).children('tr');
|
||||
if (items.length == 0)
|
||||
{
|
||||
$(this).parent('table:first').addClass('responsive-hide');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Fieldsets with empty <span>
|
||||
*/
|
||||
container.find('fieldset dt > span:last-child').each(function() {
|
||||
var $this = $(this);
|
||||
if ($this.html() == ' ') {
|
||||
$this.addClass('responsive-hide');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* Responsive tabs
|
||||
*/
|
||||
container.find('#tabs').not('[data-skip-responsive]').each(function() {
|
||||
var $this = $(this),
|
||||
$body = $('body'),
|
||||
ul = $this.children(),
|
||||
tabs = ul.children().not('[data-skip-responsive]'),
|
||||
links = tabs.children('a'),
|
||||
item = ul.append('<li class="responsive-tab" style="display:none;"><a href="javascript:void(0);" class="responsive-tab-link"><span> </span></a><div class="dropdown tab-dropdown" style="display: none;"><div class="pointer"><div class="pointer-inner" /></div><ul class="dropdown-contents" /></div></li>').find('li.responsive-tab'),
|
||||
menu = item.find('.dropdown-contents'),
|
||||
maxHeight = 0,
|
||||
lastWidth = false,
|
||||
responsive = false;
|
||||
|
||||
links.each(function() {
|
||||
var link = $(this);
|
||||
maxHeight = Math.max(maxHeight, Math.max(link.outerHeight(true), link.parent().outerHeight(true)));
|
||||
})
|
||||
|
||||
function check() {
|
||||
var width = $body.width(),
|
||||
height = $this.height();
|
||||
|
||||
if (arguments.length == 0 && (!responsive || width <= lastWidth) && height <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
tabs.show();
|
||||
item.hide();
|
||||
|
||||
lastWidth = width;
|
||||
height = $this.height();
|
||||
if (height <= maxHeight) {
|
||||
responsive = false;
|
||||
if (item.hasClass('dropdown-visible')) {
|
||||
phpbb.toggleDropdown.call(item.find('a.responsive-tab-link').get(0));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
responsive = true;
|
||||
item.show();
|
||||
menu.html('');
|
||||
|
||||
var availableTabs = tabs.filter(':not(.activetab, .responsive-tab)'),
|
||||
total = availableTabs.length,
|
||||
i, tab;
|
||||
|
||||
for (i = total - 1; i >= 0; i --) {
|
||||
tab = availableTabs.eq(i);
|
||||
menu.prepend(tab.clone(true));
|
||||
tab.hide();
|
||||
if ($this.height() <= maxHeight) {
|
||||
menu.find('a').click(function() { check(true); });
|
||||
return;
|
||||
}
|
||||
}
|
||||
menu.find('a').click(function() { check(true); });
|
||||
}
|
||||
|
||||
phpbb.registerDropdown(item.find('a.responsive-tab-link'), item.find('.dropdown'), {visibleClass: 'activetab', verticalDirection: 'down'});
|
||||
|
||||
check(true);
|
||||
$(window).resize(check);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Run onload functions
|
||||
*/
|
||||
(function($) {
|
||||
$(document).ready(function() {
|
||||
// Swap .nojs and .hasjs
|
||||
$('body.nojs').toggleClass('nojs hasjs');
|
||||
|
||||
// Focus forms
|
||||
$('form[data-focus]:first').each(function() {
|
||||
$('#' + this.getAttribute('data-focus')).focus();
|
||||
});
|
||||
|
||||
parse_document($('body'));
|
||||
});
|
||||
})(jQuery);
|
|
@ -1,10 +1,7 @@
|
|||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /#main -->
|
||||
</div>
|
||||
<span class="corners-bottom"><span></span></span>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /#acp -->
|
||||
</div>
|
||||
|
||||
<div id="page-footer">
|
||||
|
@ -14,6 +11,8 @@
|
|||
|
||||
<script type="text/javascript" src="{T_JQUERY_LINK}"></script>
|
||||
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.js" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
<!-- INCLUDEJS admin.js -->
|
||||
{$SCRIPTS}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<!-- IF META -->{META}<!-- ENDIF -->
|
||||
<title>{PAGE_TITLE}</title>
|
||||
|
||||
|
@ -34,7 +35,7 @@ function dE(n, s, type)
|
|||
|
||||
</head>
|
||||
|
||||
<body class="{S_CONTENT_DIRECTION}">
|
||||
<body class="{S_CONTENT_DIRECTION} nojs">
|
||||
<div id="wrap">
|
||||
<div id="page-header">
|
||||
<h1>{L_INSTALL_PANEL}</h1>
|
||||
|
@ -54,16 +55,15 @@ function dE(n, s, type)
|
|||
<div id="tabs">
|
||||
<ul>
|
||||
<!-- BEGIN t_block1 -->
|
||||
<li<!-- IF t_block1.S_SELECTED --> id="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
|
||||
<li<!-- IF t_block1.S_SELECTED --> class="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
|
||||
<!-- END t_block1 -->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="acp">
|
||||
<div class="panel">
|
||||
<span class="corners-top"><span></span></span>
|
||||
<div id="content">
|
||||
<div id="menu">
|
||||
<div class="menu-block no-header">
|
||||
<ul>
|
||||
<!-- BEGIN l_block1 -->
|
||||
<li<!-- IF l_block1.S_SELECTED --> id="activemenu"<!-- ENDIF -->><a href="{l_block1.U_TITLE}"><span>{l_block1.L_TITLE}</span></a></li>
|
||||
|
@ -72,6 +72,8 @@ function dE(n, s, type)
|
|||
<li<!-- IF l_block2.S_SELECTED --> id="activemenu"<!-- ENDIF -->><span<!-- IF l_block2.S_COMPLETE --> class="completed"<!-- ENDIF -->>{l_block2.L_TITLE}</span></li>
|
||||
<!-- END l_block2 -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="main" class="install-body">
|
||||
<div class="main">
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<!-- IF META -->{META}<!-- ENDIF -->
|
||||
<title>{PAGE_TITLE}</title>
|
||||
|
||||
|
@ -33,7 +34,7 @@ window.onresize = resize_panel;
|
|||
<style type="text/css">
|
||||
/* <![CDATA[ */
|
||||
|
||||
#main {
|
||||
#main, .rtl #main {
|
||||
font-size: 1em;
|
||||
line-height: 0.7em;
|
||||
margin: 0;
|
||||
|
@ -43,6 +44,7 @@ window.onresize = resize_panel;
|
|||
|
||||
#diff_content {
|
||||
padding: 30px 10px 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
<!-- IF DIFF_MODE neq 'side_by_side' and DIFF_MODE neq 'raw' -->
|
||||
|
@ -238,15 +240,13 @@ table.hrdiff caption span {
|
|||
|
||||
<div id="page-body">
|
||||
<div id="acp">
|
||||
<div class="panel" id="codepanel">
|
||||
<span class="corners-top"><span></span></span>
|
||||
<div id="codepanel">
|
||||
<div id="diff_content">
|
||||
<div id="main">
|
||||
{DIFF_CONTENT}
|
||||
</div>
|
||||
</div>
|
||||
<span class="corners-bottom"><span></span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /#main -->
|
||||
</div>
|
||||
<span class="corners-bottom"><span></span></span>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /#acp -->
|
||||
</div>
|
||||
|
||||
<div id="page-footer">
|
||||
|
@ -38,6 +35,7 @@
|
|||
<!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript src="{T_ASSETS_PATH}/javascript/jquery.js?assets_version={T_ASSETS_VERSION}" type="text/javascript"%3E%3C/script%3E'));</script><!-- ENDIF -->
|
||||
<script type="text/javascript" src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script>
|
||||
<!-- INCLUDEJS ajax.js -->
|
||||
<!-- INCLUDEJS admin.js -->
|
||||
{$SCRIPTS}
|
||||
|
||||
<!-- EVENT acp_overall_footer_after -->
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
<html dir="{S_CONTENT_DIRECTION}" lang="{S_USER_LANG}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<!-- IF META -->{META}<!-- ENDIF -->
|
||||
<title>{PAGE_TITLE}</title>
|
||||
|
||||
|
@ -14,9 +15,6 @@ var on_page = '{ON_PAGE}';
|
|||
var per_page = '{PER_PAGE}';
|
||||
var base_url = '{BASE_URL|e('js')}';
|
||||
|
||||
var menu_state = 'shown';
|
||||
|
||||
|
||||
/**
|
||||
* Jump to page
|
||||
*/
|
||||
|
@ -103,62 +101,12 @@ function popup(url, width, height, name)
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hiding/Showing the side menu
|
||||
*/
|
||||
function switch_menu()
|
||||
{
|
||||
var menu = document.getElementById('menu');
|
||||
var main = document.getElementById('main');
|
||||
var toggle = document.getElementById('toggle');
|
||||
var handle = document.getElementById('toggle-handle');
|
||||
|
||||
switch (menu_state)
|
||||
{
|
||||
// hide
|
||||
case 'shown':
|
||||
main.style.width = '93%';
|
||||
menu_state = 'hidden';
|
||||
menu.style.display = 'none';
|
||||
toggle.style.width = '20px';
|
||||
handle.style.backgroundImage = 'url(images/toggle.gif)';
|
||||
handle.style.backgroundRepeat = 'no-repeat';
|
||||
|
||||
<!-- IF S_CONTENT_DIRECTION eq 'rtl' -->
|
||||
handle.style.backgroundPosition = '0% 50%';
|
||||
toggle.style.left = '96%';
|
||||
<!-- ELSE -->
|
||||
handle.style.backgroundPosition = '100% 50%';
|
||||
toggle.style.left = '0';
|
||||
<!-- ENDIF -->
|
||||
break;
|
||||
|
||||
// show
|
||||
case 'hidden':
|
||||
main.style.width = '76%';
|
||||
menu_state = 'shown';
|
||||
menu.style.display = 'block';
|
||||
toggle.style.width = '5%';
|
||||
handle.style.backgroundImage = 'url(images/toggle.gif)';
|
||||
handle.style.backgroundRepeat = 'no-repeat';
|
||||
|
||||
<!-- IF S_CONTENT_DIRECTION eq 'rtl' -->
|
||||
handle.style.backgroundPosition = '100% 50%';
|
||||
toggle.style.left = '75%';
|
||||
<!-- ELSE -->
|
||||
handle.style.backgroundPosition = '0% 50%';
|
||||
toggle.style.left = '15%';
|
||||
<!-- ENDIF -->
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ]]>
|
||||
</script>
|
||||
<!-- EVENT acp_overall_header_head_append -->
|
||||
</head>
|
||||
|
||||
<body class="{S_CONTENT_DIRECTION}">
|
||||
<body class="{S_CONTENT_DIRECTION} nojs">
|
||||
|
||||
<div id="wrap">
|
||||
<div id="page-header">
|
||||
|
@ -171,29 +119,25 @@ function switch_menu()
|
|||
<div id="tabs">
|
||||
<ul>
|
||||
<!-- BEGIN t_block1 -->
|
||||
<li<!-- IF t_block1.S_SELECTED --> id="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
|
||||
<li<!-- IF t_block1.S_SELECTED --> class="activetab"<!-- ENDIF -->><a href="{t_block1.U_TITLE}"><span>{t_block1.L_TITLE}</span></a></li>
|
||||
<!-- END t_block1 -->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="acp">
|
||||
<div class="panel">
|
||||
<span class="corners-top"><span></span></span>
|
||||
<div id="content">
|
||||
<!-- IF not S_USER_NOTICE -->
|
||||
<div id="toggle">
|
||||
<a id="toggle-handle" accesskey="m" title="{L_MENU_TOGGLE}" onclick="switch_menu(); return false;" href="#"></a></div>
|
||||
<!-- ENDIF -->
|
||||
<div id="menu">
|
||||
<p>{L_LOGGED_IN_AS}<br /><strong>{USERNAME}</strong> [ <a href="{U_LOGOUT}">{L_LOGOUT}</a> ][ <a href="{U_ADM_LOGOUT}">{L_ADM_LOGOUT}</a> ] </p>
|
||||
<ul>
|
||||
<!-- DEFINE $LI_USED = 0 -->
|
||||
<!-- BEGIN l_block1 -->
|
||||
<!-- IF l_block1.S_SELECTED -->
|
||||
|
||||
<!-- BEGIN l_block2 -->
|
||||
<!-- IF .l_block1.l_block2.l_block3 -->
|
||||
<li class="header">{l_block1.l_block2.L_TITLE}</li>
|
||||
<!-- IF $LI_USED --></ul></div><!-- ENDIF -->
|
||||
<div class="menu-block">
|
||||
<a class="header" href="javascript:void(0);">{l_block1.l_block2.L_TITLE}</a>
|
||||
<ul>
|
||||
<!-- DEFINE $LI_USED = 1 -->
|
||||
<!-- ENDIF -->
|
||||
|
||||
|
@ -205,10 +149,12 @@ function switch_menu()
|
|||
|
||||
<!-- ENDIF -->
|
||||
<!-- END l_block1 -->
|
||||
<!-- IF not $LI_USED -->
|
||||
<li></li>
|
||||
<!-- IF $LI_USED -->
|
||||
</ul>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="main">
|
||||
<div class="main">
|
||||
|
|
|
@ -75,9 +75,8 @@
|
|||
|
||||
<!-- BEGIN category -->
|
||||
<div class="permissions-panel" id="options{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}{p_mask.f_mask.category.S_ROW_COUNT}" <!-- IF p_mask.S_FIRST_ROW and p_mask.f_mask.S_FIRST_ROW and p_mask.f_mask.category.S_FIRST_ROW --><!-- ELSE --> style="display: none;"<!-- ENDIF -->>
|
||||
<span class="corners-top"><span></span></span>
|
||||
<div class="tablewrap">
|
||||
<table id="table{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}{p_mask.f_mask.category.S_ROW_COUNT}" class="table1">
|
||||
<table id="table{p_mask.S_ROW_COUNT}{p_mask.f_mask.S_ROW_COUNT}{p_mask.f_mask.category.S_ROW_COUNT}" class="table1 not-responsive">
|
||||
<colgroup>
|
||||
<col class="permissions-name" />
|
||||
<col class="permissions-yes" />
|
||||
|
@ -128,7 +127,6 @@
|
|||
|
||||
<!-- ENDIF -->
|
||||
|
||||
<span class="corners-bottom"><span></span></span>
|
||||
</div>
|
||||
<!-- END category -->
|
||||
<div class="clearfix"></div>
|
||||
|
|
|
@ -27,12 +27,12 @@ phpbb.loadingAlert = function() {
|
|||
} else {
|
||||
loadingAlert.show();
|
||||
dark.fadeIn(phpbb.alertTime, function() {
|
||||
// Wait five seconds and display an error if nothing has been returned by then.
|
||||
// Wait fifteen seconds and display an error if nothing has been returned by then.
|
||||
phpbbAlertTimer = setTimeout(function() {
|
||||
if (loadingAlert.is(':visible')) {
|
||||
phpbb.alert($('#phpbb_alert').attr('data-l-err'), $('#phpbb_alert').attr('data-l-timeout-processing-req'));
|
||||
}
|
||||
}, 5000);
|
||||
}, 15000);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -829,6 +829,132 @@ phpbb.applyCodeEditor = function(textarea) {
|
|||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* List of classes that toggle dropdown menu,
|
||||
* list of classes that contain visible dropdown menu
|
||||
*
|
||||
* Add your own classes to strings with comma (probably you
|
||||
* will never need to do that)
|
||||
*/
|
||||
phpbb.dropdownHandles = '.dropdown-container.dropdown-visible .dropdown-toggle';
|
||||
phpbb.dropdownVisibleContainers = '.dropdown-container.dropdown-visible';
|
||||
|
||||
/**
|
||||
* Dropdown toggle event handler
|
||||
* This handler is used by phpBB.registerDropdown() and other functions
|
||||
*/
|
||||
phpbb.toggleDropdown = function() {
|
||||
var $this = $(this),
|
||||
options = $this.data('dropdown-options'),
|
||||
parent = options.parent,
|
||||
visible = parent.hasClass('dropdown-visible');
|
||||
|
||||
if (!visible) {
|
||||
// Hide other dropdown menus
|
||||
$(phpbb.dropdownHandles).each(phpbb.toggleDropdown);
|
||||
|
||||
// Figure out direction of dropdown
|
||||
var direction = options.direction,
|
||||
verticalDirection = options.verticalDirection,
|
||||
offset = $this.offset();
|
||||
|
||||
if (direction == 'auto') {
|
||||
if (($(window).width() - $this.outerWidth(true)) / 2 > offset.left) {
|
||||
direction = 'right';
|
||||
}
|
||||
else {
|
||||
direction = 'left';
|
||||
}
|
||||
}
|
||||
parent.toggleClass(options.leftClass, direction == 'left').toggleClass(options.rightClass, direction == 'right');
|
||||
|
||||
if (verticalDirection == 'auto') {
|
||||
var height = $(window).height(),
|
||||
top = offset.top - $(window).scrollTop();
|
||||
|
||||
if (top < height * 0.7) {
|
||||
verticalDirection = 'down';
|
||||
}
|
||||
else {
|
||||
verticalDirection = 'up';
|
||||
}
|
||||
}
|
||||
parent.toggleClass(options.upClass, verticalDirection == 'up').toggleClass(options.downClass, verticalDirection == 'down');
|
||||
}
|
||||
|
||||
options.dropdown.toggle();
|
||||
parent.toggleClass(options.visibleClass, !visible).toggleClass('dropdown-visible', !visible);
|
||||
|
||||
// Check dimensions when showing dropdown
|
||||
// !visible because variable shows state of dropdown before it was toggled
|
||||
if (!visible) {
|
||||
options.dropdown.find('.dropdown-contents').each(function() {
|
||||
var $this = $(this),
|
||||
windowWidth = $(window).width();
|
||||
|
||||
$this.css({
|
||||
marginLeft: 0,
|
||||
left: 0,
|
||||
maxWidth: (windowWidth - 4) + 'px'
|
||||
});
|
||||
|
||||
var offset = $this.offset().left,
|
||||
width = $this.outerWidth(true);
|
||||
|
||||
if (offset < 2) {
|
||||
$this.css('left', (2 - offset) + 'px');
|
||||
}
|
||||
else if ((offset + width + 2) > windowWidth) {
|
||||
$this.css('margin-left', (windowWidth - offset - width - 2) + 'px');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Prevent event propagation
|
||||
if (arguments.length > 0) {
|
||||
try {
|
||||
var e = arguments[0];
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
}
|
||||
catch (error) { }
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Register dropdown menu
|
||||
* Shows/hides dropdown, decides which side to open to
|
||||
*
|
||||
* @param {jQuery} toggle Link that toggles dropdown.
|
||||
* @param {jQuery} dropdown Dropdown menu.
|
||||
* @param {Object} options List of options. Optional.
|
||||
*/
|
||||
phpbb.registerDropdown = function(toggle, dropdown, options)
|
||||
{
|
||||
var ops = {
|
||||
parent: toggle.parent(), // Parent item to add classes to
|
||||
direction: 'auto', // Direction of dropdown menu. Possible values: auto, left, right
|
||||
verticalDirection: 'auto', // Vertical direction. Possible values: auto, up, down
|
||||
visibleClass: 'visible', // Class to add to parent item when dropdown is visible
|
||||
leftClass: 'dropdown-left', // Class to add to parent item when dropdown opens to left side
|
||||
rightClass: 'dropdown-right', // Class to add to parent item when dropdown opens to right side
|
||||
upClass: 'dropdown-up', // Class to add to parent item when dropdown opens above menu item
|
||||
downClass: 'dropdown-down' // Class to add to parent item when dropdown opens below menu item
|
||||
};
|
||||
if (options) {
|
||||
ops = $.extend(ops, options);
|
||||
}
|
||||
ops.dropdown = dropdown;
|
||||
|
||||
ops.parent.addClass('dropdown-container');
|
||||
toggle.addClass('dropdown-toggle');
|
||||
|
||||
toggle.data('dropdown-options', ops);
|
||||
|
||||
toggle.click(phpbb.toggleDropdown);
|
||||
};
|
||||
|
||||
/**
|
||||
* Apply code editor to all textarea elements with data-bbcode attribute
|
||||
*/
|
||||
|
@ -836,6 +962,14 @@ $(document).ready(function() {
|
|||
$('textarea[data-bbcode]').each(function() {
|
||||
phpbb.applyCodeEditor(this);
|
||||
});
|
||||
|
||||
// Hide active dropdowns when click event happens outside
|
||||
$('body').click(function(e) {
|
||||
var parents = $(e.target).parents();
|
||||
if (!parents.is(phpbb.dropdownVisibleContainers)) {
|
||||
$(phpbb.dropdownHandles).each(phpbb.toggleDropdown);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
})(jQuery); // Avoid conflicts with other libraries
|
||||
|
|
|
@ -62,6 +62,47 @@ function phpbb_plupload_clear_params(obj) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update hidden attachment inputs in posting form
|
||||
* Pre-existing hidden inputs will be removed by comparing the old attachment
|
||||
* data (old_data) to the new attachment data (data) that has been sent back
|
||||
* by plupload.
|
||||
*
|
||||
* @param object form Posting form
|
||||
* @param object data Current attachment_data
|
||||
* @param object old_date Previous attachment_data (before submission)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
phpbb.update_hidden_attachment_inputs = function(form, data, old_data) {
|
||||
// Update already existing hidden inputs
|
||||
for (var i = 0; i < form.length; i++) {
|
||||
if (data.hasOwnProperty(form[i].name)) {
|
||||
form[i].value = data[form[i].name];
|
||||
delete data[form[i].name];
|
||||
} else if (typeof old_data !== 'undefined' && old_data.hasOwnProperty(form[i].name)) {
|
||||
var inputRegex = /\b^[a-z_]+[+[0-9]+]/;
|
||||
var inputName = inputRegex.exec(form[i].name);
|
||||
if (typeof inputName !== 'undefined' && inputName[0] !== '') {
|
||||
$("input[type='hidden'][name^='" + inputName[0] + "']").remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Append new inputs
|
||||
for (var key in data) {
|
||||
if (!data.hasOwnProperty(key)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var input = $('<input />')
|
||||
.attr('type', 'hidden')
|
||||
.attr('name', key)
|
||||
.attr('value', data[key]);
|
||||
$(form).append(input);
|
||||
}
|
||||
}
|
||||
|
||||
jQuery(function($) {
|
||||
$(phpbb.plupload.config.element_hook).pluploadQueue(phpbb.plupload.config);
|
||||
var uploader = $(phpbb.plupload.config.element_hook).pluploadQueue();
|
||||
|
@ -208,26 +249,7 @@ jQuery(function($) {
|
|||
var form = $(phpbb.plupload.config.form_hook)[0];
|
||||
var data = phpbb_plupload_attachment_data_serialize();
|
||||
|
||||
// Update already existing hidden inputs
|
||||
for (var i = 0; i < form.length; i++) {
|
||||
if (data.hasOwnProperty(form[i].name)) {
|
||||
form[i].value = data[form[i].name];
|
||||
delete data[form[i].name];
|
||||
}
|
||||
}
|
||||
|
||||
// Append new inputs
|
||||
for (var key in data) {
|
||||
if (!data.hasOwnProperty(key)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var input = $('<input />')
|
||||
.attr('type', 'hidden')
|
||||
.attr('name', key)
|
||||
.attr('value', data[key]);
|
||||
$(form).append(input);
|
||||
}
|
||||
phpbb.update_hidden_attachment_inputs(form, data);
|
||||
|
||||
files.forEach(function(file) {
|
||||
if (file.status !== plupload.DONE) {
|
||||
|
@ -257,6 +279,7 @@ jQuery(function($) {
|
|||
var done = function(response) {
|
||||
up.removeFile(file);
|
||||
plupload.attachment_data = response;
|
||||
phpbb.update_hidden_attachment_inputs(form, phpbb_plupload_attachment_data_serialize(), data);
|
||||
phpbb_plupload_clear_params(up.settings.multipart_params);
|
||||
up.settings.multipart_params = $.extend(
|
||||
up.settings.multipart_params,
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
"fabpot/goutte": "1.0.*",
|
||||
"phpunit/dbunit": "1.2.*",
|
||||
"phpunit/phpunit": "3.7.*",
|
||||
"phing/phing": "2.4.*"
|
||||
"phing/phing": "2.4.*",
|
||||
"squizlabs/php_codesniffer": "1.*"
|
||||
}
|
||||
}
|
||||
|
|
74
phpBB/composer.lock
generated
74
phpBB/composer.lock
generated
|
@ -3,7 +3,7 @@
|
|||
"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"
|
||||
],
|
||||
"hash": "0bc0fd0d784720629ae0ba6d4be6a577",
|
||||
"hash": "7bcfe8f8ce4fa46cb53c276cf93dcd3e",
|
||||
"packages": [
|
||||
{
|
||||
"name": "lusitanian/oauth",
|
||||
|
@ -302,7 +302,7 @@
|
|||
"Symfony\\Component\\EventDispatcher\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "http://packagist.org/downloads/",
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
|
@ -1375,6 +1375,76 @@
|
|||
],
|
||||
"time": "2013-01-13 10:24:48"
|
||||
},
|
||||
{
|
||||
"name": "squizlabs/php_codesniffer",
|
||||
"version": "1.5.0RC4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
|
||||
"reference": "146a9b54e4adeaca0a3ae073e0a8a03570d6cc43"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/146a9b54e4adeaca0a3ae073e0a8a03570d6cc43",
|
||||
"reference": "146a9b54e4adeaca0a3ae073e0a8a03570d6cc43",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-tokenizer": "*",
|
||||
"php": ">=5.1.2"
|
||||
},
|
||||
"suggest": {
|
||||
"phpunit/php-timer": "dev-master"
|
||||
},
|
||||
"bin": [
|
||||
"scripts/phpcs"
|
||||
],
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"CodeSniffer.php",
|
||||
"CodeSniffer/CLI.php",
|
||||
"CodeSniffer/Exception.php",
|
||||
"CodeSniffer/File.php",
|
||||
"CodeSniffer/Report.php",
|
||||
"CodeSniffer/Reporting.php",
|
||||
"CodeSniffer/Sniff.php",
|
||||
"CodeSniffer/Tokens.php",
|
||||
"CodeSniffer/Reports/",
|
||||
"CodeSniffer/CommentParser/",
|
||||
"CodeSniffer/Tokenizers/",
|
||||
"CodeSniffer/DocGenerators/",
|
||||
"CodeSniffer/Standards/AbstractPatternSniff.php",
|
||||
"CodeSniffer/Standards/AbstractScopeSniff.php",
|
||||
"CodeSniffer/Standards/AbstractVariableSniff.php",
|
||||
"CodeSniffer/Standards/IncorrectPatternException.php",
|
||||
"CodeSniffer/Standards/Generic/Sniffs/",
|
||||
"CodeSniffer/Standards/MySource/Sniffs/",
|
||||
"CodeSniffer/Standards/PEAR/Sniffs/",
|
||||
"CodeSniffer/Standards/PSR1/Sniffs/",
|
||||
"CodeSniffer/Standards/PSR2/Sniffs/",
|
||||
"CodeSniffer/Standards/Squiz/Sniffs/",
|
||||
"CodeSniffer/Standards/Zend/Sniffs/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Greg Sherwood",
|
||||
"role": "lead"
|
||||
}
|
||||
],
|
||||
"description": "PHP_CodeSniffer tokenises PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
|
||||
"homepage": "http://www.squizlabs.com/php-codesniffer",
|
||||
"keywords": [
|
||||
"phpcs",
|
||||
"standards"
|
||||
],
|
||||
"time": "2013-09-26 00:14:02"
|
||||
},
|
||||
{
|
||||
"name": "symfony/browser-kit",
|
||||
"version": "v2.3.4",
|
||||
|
|
|
@ -5,6 +5,7 @@ services:
|
|||
- @config
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
- @path_helper
|
||||
- @cache.driver
|
||||
calls:
|
||||
- [set_name, [avatar.driver.gravatar]]
|
||||
|
@ -17,6 +18,7 @@ services:
|
|||
- @config
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
- @path_helper
|
||||
- @cache.driver
|
||||
calls:
|
||||
- [set_name, [avatar.driver.local]]
|
||||
|
@ -29,6 +31,7 @@ services:
|
|||
- @config
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
- @path_helper
|
||||
- @cache.driver
|
||||
calls:
|
||||
- [set_name, [avatar.driver.remote]]
|
||||
|
@ -41,6 +44,7 @@ services:
|
|||
- @config
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
- @path_helper
|
||||
- @cache.driver
|
||||
calls:
|
||||
- [set_name, [avatar.driver.upload]]
|
||||
|
|
|
@ -22,7 +22,6 @@ services:
|
|||
arguments:
|
||||
- @config
|
||||
- @avatar.driver_collection
|
||||
- @service_container
|
||||
|
||||
cache:
|
||||
class: phpbb\cache\service
|
||||
|
|
307
phpBB/develop/export_events_for_wiki.php
Normal file
307
phpBB/develop/export_events_for_wiki.php
Normal file
|
@ -0,0 +1,307 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* @copyright (c) 2013 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
if (php_sapi_name() != 'cli')
|
||||
{
|
||||
die("This program must be run from the command line.\n");
|
||||
}
|
||||
|
||||
$phpEx = substr(strrchr(__FILE__, '.'), 1);
|
||||
$phpbb_root_path = __DIR__ . '/../';
|
||||
|
||||
function usage()
|
||||
{
|
||||
echo "Usage: export_events_for_wiki.php COMMAND\n";
|
||||
echo "\n";
|
||||
echo "acp:\n";
|
||||
echo " Export all events for files in the acp style.\n";
|
||||
echo "\n";
|
||||
echo "styles:\n";
|
||||
echo " Export all events for files in the prosilver and subsilver2 styles.\n";
|
||||
echo "\n";
|
||||
echo "php:\n";
|
||||
echo " Export all events for php-files.\n";
|
||||
exit(2);
|
||||
}
|
||||
|
||||
function export_from_eventsmd($phpbb_root_path, $filter)
|
||||
{
|
||||
$file_content = file_get_contents($phpbb_root_path . 'docs/events.md');
|
||||
|
||||
$events = explode("\n\n", $file_content);
|
||||
foreach ($events as $event)
|
||||
{
|
||||
// Last row of the file
|
||||
if (strpos($event, "\n===\n") === false) continue;
|
||||
|
||||
list($event_name, $details) = explode("\n===\n", $event);
|
||||
|
||||
if ($filter == 'acp' && strpos($event_name, 'acp_') !== 0) continue;
|
||||
if ($filter == 'styles' && strpos($event_name, 'acp_') === 0) continue;
|
||||
|
||||
list($file_details, $details) = explode("\n* Since: ", $details);
|
||||
list($version, $explanition) = explode("\n* Purpose: ", $details);
|
||||
|
||||
echo "|- id=\"{$event_name}\"\n";
|
||||
echo "| [[#{$event_name}|{$event_name}]] || ";
|
||||
|
||||
if (strpos($file_details, "* Locations:\n + ") === 0)
|
||||
{
|
||||
$file_details = substr($file_details, strlen("* Locations:\n + "));
|
||||
$files = explode("\n + ", $file_details);
|
||||
$prosilver = $subsilver2 = array();
|
||||
foreach ($files as $file)
|
||||
{
|
||||
if (strpos($file, 'styles/prosilver/template/') === 0)
|
||||
{
|
||||
$prosilver[] = substr($file, strlen('styles/prosilver/template/'));
|
||||
}
|
||||
if (strpos($file, 'styles/subsilver2/template/') === 0)
|
||||
{
|
||||
$subsilver2[] = substr($file, strlen('styles/subsilver2/template/'));
|
||||
}
|
||||
}
|
||||
echo implode(', ', $prosilver) . ' || ' . implode(', ', $subsilver2);
|
||||
}
|
||||
else if ($filter == 'acp')
|
||||
{
|
||||
echo substr($file_details, strlen("* Location: adm/style/"));
|
||||
}
|
||||
echo " || {$version} || " . str_replace("\n", ' ', $explanition) . "\n";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function export_from_php($phpbb_root_path)
|
||||
{
|
||||
$files = get_file_list($phpbb_root_path);
|
||||
$events = array();
|
||||
foreach ($files as $file)
|
||||
{
|
||||
$file_events = check_for_events($phpbb_root_path, $file);
|
||||
if (!empty($file_events))
|
||||
{
|
||||
$events = array_merge($events, $file_events);
|
||||
}
|
||||
}
|
||||
|
||||
ksort($events);
|
||||
|
||||
foreach ($events as $event)
|
||||
{
|
||||
echo '|- id="' . $event['event'] . '"' . "\n";
|
||||
echo '| [[#' . $event['event'] . '|' . $event['event'] . ']] || ' . $event['file'] . ' || ' . implode(', ', $event['arguments']) . ' || ' . $event['since'] . ' || ' . $event['description'] . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
function check_for_events($phpbb_root_path, $file)
|
||||
{
|
||||
$events = array();
|
||||
$content = file_get_contents($phpbb_root_path . $file);
|
||||
|
||||
if (strpos($content, "phpbb_dispatcher->trigger_event('") || strpos($content, "phpbb_dispatcher->dispatch('"))
|
||||
{
|
||||
$lines = explode("\n", $content);
|
||||
for ($i = 0, $num_lines = sizeof($lines); $i < $num_lines; $i++)
|
||||
{
|
||||
$event_line = 0;
|
||||
if ($found_trigger_event = strpos($lines[$i], "phpbb_dispatcher->trigger_event('"))
|
||||
{
|
||||
$event_line = $i;
|
||||
$event_name = $lines[$event_line];
|
||||
$event_name = substr($event_name, $found_trigger_event + strlen("phpbb_dispatcher->trigger_event('"));
|
||||
$event_name = substr($event_name, 0, strpos($event_name, "'"));
|
||||
|
||||
// Find $vars array lines
|
||||
$find_varsarray_line = 1;
|
||||
while (strpos($lines[$event_line - $find_varsarray_line], "vars = array('") === false)
|
||||
{
|
||||
$find_varsarray_line++;
|
||||
|
||||
if ($find_varsarray_line > min(50, $event_line))
|
||||
{
|
||||
throw new LogicException('Can not find "$vars = array()"-line for event "' . $event_name . '" in file "' . $file . '"');
|
||||
}
|
||||
}
|
||||
$varsarray = substr(trim($lines[$event_line - $find_varsarray_line]), strlen("\$vars = array('"), -3);
|
||||
$arguments = explode("', '", $varsarray);
|
||||
|
||||
// Validate $vars array with @var
|
||||
$find_vars_line = 3;
|
||||
$doc_vars = array();
|
||||
while (strpos(trim($lines[$event_line - $find_vars_line]), '*') === 0)
|
||||
{
|
||||
$var_line = trim($lines[$event_line - $find_vars_line]);
|
||||
$var_line = preg_replace('!\s+!', ' ', $var_line);
|
||||
if (strpos($var_line, '* @var ') === 0)
|
||||
{
|
||||
$doc_line = explode(' ', $var_line);
|
||||
if (isset($doc_line[3]))
|
||||
{
|
||||
$doc_vars[] = $doc_line[3];
|
||||
}
|
||||
}
|
||||
$find_vars_line++;
|
||||
}
|
||||
if (sizeof($arguments) !== sizeof($doc_vars) && array_intersect($arguments, $doc_vars))
|
||||
{
|
||||
throw new LogicException('$vars array does not match the list of @var tags for event "' . $event_name . '" in file "' . $file . '"');
|
||||
}
|
||||
}
|
||||
else if ($found_trigger_event = strpos($lines[$i], "phpbb_dispatcher->dispatch('"))
|
||||
{
|
||||
$event_line = $i;
|
||||
$event_name = $lines[$event_line];
|
||||
$event_name = substr($event_name, $found_trigger_event + strlen("phpbb_dispatcher->dispatch('"));
|
||||
$event_name = substr($event_name, 0, strpos($event_name, "'"));
|
||||
$arguments = array();
|
||||
}
|
||||
|
||||
if ($event_line)
|
||||
{
|
||||
// Validate @event name
|
||||
$find_event_line = 1;
|
||||
while (strpos($lines[$event_line - $find_event_line], '* @event ') === false)
|
||||
{
|
||||
$find_event_line++;
|
||||
|
||||
if ($find_event_line > min(50, $event_line))
|
||||
{
|
||||
throw new LogicException('Can not find @event tag for event "' . $event_name . '" in file "' . $file . '"');
|
||||
}
|
||||
}
|
||||
$event_name_tag = substr(trim($lines[$event_line - $find_event_line]), strlen('* @event '));
|
||||
if ($event_name_tag !== $event_name)
|
||||
{
|
||||
throw new LogicException('Event name does not match @event tag for event "' . $event_name . '" in file "' . $file . '"');
|
||||
}
|
||||
|
||||
// Find @since
|
||||
$find_since_line = 1;
|
||||
while (strpos($lines[$event_line - $find_since_line], '* @since ') === false)
|
||||
{
|
||||
$find_since_line++;
|
||||
|
||||
if ($find_since_line > min(50, $event_line))
|
||||
{
|
||||
throw new LogicException('Can not find @since tag for event "' . $event_name . '" in file "' . $file . '"');
|
||||
}
|
||||
}
|
||||
$since = substr(trim($lines[$event_line - $find_since_line]), strlen('* @since '));
|
||||
$since = ($since == '3.1-A1') ? '3.1.0-a1' : $since;
|
||||
|
||||
// Find event description line
|
||||
$find_description_line = 3;
|
||||
while (strpos(trim($lines[$event_line - $find_description_line]), '*') === 0)
|
||||
{
|
||||
$find_description_line++;
|
||||
|
||||
if ($find_description_line > min(50, $event_line))
|
||||
{
|
||||
throw new LogicException('Can not find description-line for event "' . $event_name . '" in file "' . $file . '"');
|
||||
}
|
||||
}
|
||||
$description = substr(trim($lines[$event_line - $find_description_line + 1]), strlen('* '));
|
||||
|
||||
$events[$event_name] = array(
|
||||
'event' => $event_name,
|
||||
'file' => $file,
|
||||
'arguments' => $arguments,
|
||||
'since' => $since,
|
||||
'description' => $description,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $events;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of files in that directory
|
||||
*
|
||||
* Works recursive with any depth
|
||||
*
|
||||
* @param string $dir Directory to go through
|
||||
* @return array List of files (including directories from within $dir
|
||||
*/
|
||||
function get_file_list($dir, $path = '')
|
||||
{
|
||||
try
|
||||
{
|
||||
$iterator = new \DirectoryIterator($dir);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
$files = array();
|
||||
foreach ($iterator as $file_info)
|
||||
{
|
||||
if ($file_info->isDot())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Do not scan some directories
|
||||
if ($file_info->isDir() && (
|
||||
($path == '' && in_array($file_info->getFilename(), array('cache', 'develop', 'ext', 'files', 'language', 'store', 'vendor')))
|
||||
|| ($path == '/includes' && in_array($file_info->getFilename(), array('utf')))
|
||||
|| ($path == '/phpbb/db/migration' && in_array($file_info->getFilename(), array('data')))
|
||||
|| ($path == '/phpbb' && in_array($file_info->getFilename(), array('event')))
|
||||
))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if ($file_info->isDir())
|
||||
{
|
||||
$sub_dir = get_file_list($file_info->getPath() . '/' . $file_info->getFilename(), $path . '/' . $file_info->getFilename());
|
||||
foreach ($sub_dir as $file)
|
||||
{
|
||||
$files[] = $file_info->getFilename() . '/' . $file;
|
||||
}
|
||||
}
|
||||
else if ($file_info->getExtension() == 'php')
|
||||
{
|
||||
$files[] = $file_info->getFilename();
|
||||
}
|
||||
}
|
||||
|
||||
return $files;
|
||||
}
|
||||
|
||||
function validate_argument_count($arguments, $count)
|
||||
{
|
||||
if ($arguments <= $count)
|
||||
{
|
||||
usage();
|
||||
}
|
||||
}
|
||||
|
||||
validate_argument_count($argc, 1);
|
||||
|
||||
$action = $argv[1];
|
||||
|
||||
switch ($action)
|
||||
{
|
||||
case 'acp':
|
||||
export_from_eventsmd($phpbb_root_path, 'acp');
|
||||
break;
|
||||
|
||||
case 'styles':
|
||||
export_from_eventsmd($phpbb_root_path, 'styles');
|
||||
break;
|
||||
|
||||
case 'php':
|
||||
export_from_php($phpbb_root_path);
|
||||
break;
|
||||
|
||||
default:
|
||||
usage();
|
||||
}
|
|
@ -132,6 +132,7 @@
|
|||
<li>A SQL database system, <strong>one of</strong>:
|
||||
<ul>
|
||||
<li>MySQL 3.23 or above (MySQLi supported)</li>
|
||||
<li>MariaDB 5.1 or above</li>
|
||||
<li>PostgreSQL 8.3+</li>
|
||||
<li>SQLite 2.8.2+ (SQLite 3 is not supported)</li>
|
||||
<li>Firebird 2.1+</li>
|
||||
|
|
|
@ -323,7 +323,7 @@
|
|||
|
||||
<p>Please remember that running any application on a development (unstable, e.g. a beta release) version of PHP can lead to strange/unexpected results which may appear to be bugs in the application. Therefore, we recommend you upgrade to the newest stable version of PHP before running phpBB3. If you are running a development version of PHP please check any bugs you find on a system running a stable release before submitting.</p>
|
||||
|
||||
<p>This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 8.x, Oracle 8, SQLite 2 and Firebird. Versions of PHP used range from 5.3.x to 5.4.x without problem.</p>
|
||||
<p>This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MariaDB 5.x, MSSQL Server 2000, PostgreSQL 8.x, Oracle 8, SQLite 2 and Firebird. Versions of PHP used range from 5.3.x to 5.4.x without problem.</p>
|
||||
|
||||
<a name="phpsec"></a><h3>7.i. Notice on PHP security issues</h3>
|
||||
|
||||
|
|
|
@ -1,41 +1,49 @@
|
|||
acp_forums_normal_settings_append
|
||||
===
|
||||
* Location: adm/style/acp_forums.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add settings to forums
|
||||
|
||||
acp_main_actions_append
|
||||
===
|
||||
* Location: adm/style/acp_main.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add actions to the ACP main page below the cache purge action
|
||||
|
||||
acp_main_notice_after
|
||||
===
|
||||
* Location: adm/style/acp_main.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add notices or other blocks in the ACP below other configuration notices
|
||||
|
||||
acp_overall_footer_after
|
||||
===
|
||||
* Location: adm/style/overall_footer.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content below the footer in the ACP
|
||||
|
||||
acp_overall_header_head_append
|
||||
===
|
||||
* Location: adm/style/overall_header.html
|
||||
* Add assets within the `<head>` tags in the ACP
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add assets within the `<head>` tags in the ACP
|
||||
|
||||
acp_simple_footer_after
|
||||
===
|
||||
* Location: adm/style/simple_footer.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content below the simple footer in the ACP
|
||||
|
||||
acp_simple_header_head_append
|
||||
===
|
||||
* Location: adm/style/overall_header.html
|
||||
* Add assets within the `<head>` tags in the simple header of the ACP
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add assets within the `<head>` tags in the simple header of the ACP
|
||||
|
||||
acp_users_overview_options_append
|
||||
===
|
||||
* Location: adm/style/acp_users.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add options and settings on user overview page
|
||||
|
||||
forumlist_body_last_post_title_prepend
|
||||
|
@ -43,6 +51,7 @@ forumlist_body_last_post_title_prepend
|
|||
* Locations:
|
||||
+ styles/prosilver/template/forumlist_body.html
|
||||
+ styles/subsilver2/template/forumlist_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content before the post title of the latest post in a forum on the forum list.
|
||||
|
||||
index_body_stat_blocks_before
|
||||
|
@ -50,6 +59,7 @@ index_body_stat_blocks_before
|
|||
* Locations:
|
||||
+ styles/prosilver/template/index_body.html
|
||||
+ styles/subsilver2/template/index_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add new statistic blocks above the Who Is Online and Board Statistics blocks
|
||||
|
||||
memberlist_body_username_append
|
||||
|
@ -57,6 +67,7 @@ memberlist_body_username_append
|
|||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_body.html
|
||||
+ styles/subsilver2/template/memberlist_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add information after every username in the memberlist. Works in
|
||||
all display modes (leader, group and normal memberlist).
|
||||
|
||||
|
@ -65,6 +76,7 @@ memberlist_body_username_prepend
|
|||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_body.html
|
||||
+ styles/subsilver2/template/memberlist_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add information before every username in the memberlist. Works in
|
||||
all display modes (leader, group and normal memberlist).
|
||||
|
||||
|
@ -73,6 +85,7 @@ memberlist_view_user_statistics_after
|
|||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_view.html
|
||||
+ styles/subsilver2/template/memberlist_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add entries after the user statistics part of any user profile
|
||||
|
||||
memberlist_view_user_statistics_before
|
||||
|
@ -80,6 +93,7 @@ memberlist_view_user_statistics_before
|
|||
* Locations:
|
||||
+ styles/prosilver/template/memberlist_view.html
|
||||
+ styles/subsilver2/template/memberlist_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add entries before the user statistics part of any user profile
|
||||
|
||||
overall_footer_after
|
||||
|
@ -87,11 +101,14 @@ overall_footer_after
|
|||
* Locations:
|
||||
+ styles/prosilver/template/overall_footer.html
|
||||
+ styles/subsilver2/template/overall_footer.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content at the end of the file, directly prior to the `</body>` tag
|
||||
|
||||
overall_footer_breadcrumb_append
|
||||
===
|
||||
* Location: styles/prosilver/template/overall_footer.html
|
||||
* Locations:
|
||||
+ styles/prosilver/template/overall_footer.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add links to the list of breadcrumbs in the footer
|
||||
|
||||
overall_footer_copyright_append
|
||||
|
@ -99,6 +116,7 @@ overall_footer_copyright_append
|
|||
* Locations:
|
||||
+ styles/prosilver/template/overall_footer.html
|
||||
+ styles/subsilver2/template/overall_footer.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content after the copyright line (no new line by default), before the ACP link
|
||||
|
||||
overall_footer_copyright_prepend
|
||||
|
@ -106,6 +124,7 @@ overall_footer_copyright_prepend
|
|||
* Locations:
|
||||
+ styles/prosilver/template/overall_footer.html
|
||||
+ styles/subsilver2/template/overall_footer.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content before the copyright line
|
||||
|
||||
overall_header_breadcrumb_append
|
||||
|
@ -113,6 +132,7 @@ overall_header_breadcrumb_append
|
|||
* Locations:
|
||||
+ styles/prosilver/template/overall_header.html
|
||||
+ styles/subsilver2/template/breadcrumbs.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add links to the list of breadcrumbs in the header
|
||||
|
||||
overall_header_head_append
|
||||
|
@ -120,16 +140,21 @@ overall_header_head_append
|
|||
* Locations:
|
||||
+ styles/prosilver/template/overall_header.html
|
||||
+ styles/subsilver2/template/overall_header.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add asset calls directly before the `</head>` tag
|
||||
|
||||
overall_header_navigation_append
|
||||
===
|
||||
* Location: styles/prosilver/template/overall_header.html
|
||||
* Locations:
|
||||
+ styles/prosilver/template/overall_header.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add links after the navigation links in the header
|
||||
|
||||
overall_header_navigation_prepend
|
||||
===
|
||||
* Location: styles/prosilver/template/overall_header.html
|
||||
* Locations:
|
||||
+ styles/prosilver/template/overall_header.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add links before the navigation links in the header
|
||||
|
||||
posting_editor_options_prepend
|
||||
|
@ -137,11 +162,14 @@ posting_editor_options_prepend
|
|||
* Locations:
|
||||
+ styles/prosilver/template/posting_editor.html
|
||||
+ styles/prosilver/template/posting_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add posting options on the posting screen
|
||||
|
||||
simple_footer_after
|
||||
===
|
||||
* Location: styles/prosilver/template/simple_footer.html
|
||||
* Locations:
|
||||
+ styles/prosilver/template/simple_footer.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content directly prior to the `</body>` tag of the simple footer
|
||||
|
||||
topiclist_row_prepend
|
||||
|
@ -151,6 +179,7 @@ topiclist_row_prepend
|
|||
+ styles/prosilver/template/viewforum_body.html
|
||||
+ styles/subsilver2/template/search_results.html
|
||||
+ styles/subsilver2/template/viewforum_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content into topic rows (inside the elements containing topic titles)
|
||||
|
||||
topiclist_row_append
|
||||
|
@ -160,23 +189,30 @@ topiclist_row_append
|
|||
+ styles/prosilver/template/viewforum_body.html
|
||||
+ styles/subsilver2/template/search_results.html
|
||||
+ styles/subsilver2/template/viewforum_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content into topic rows (inside the elements containing topic titles)
|
||||
|
||||
ucp_pm_viewmessage_custom_fields_after
|
||||
===
|
||||
* Location: styles/prosilver/template/ucp_pm_viewmessage.html
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_pm_viewmessage.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add data after the custom fields on the user profile when viewing
|
||||
a private message
|
||||
|
||||
ucp_pm_viewmessage_custom_fields_before
|
||||
===
|
||||
* Location: styles/prosilver/template/ucp_pm_viewmessage.html
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_pm_viewmessage.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add data before the custom fields on the user profile when viewing
|
||||
a private message
|
||||
|
||||
ucp_pm_viewmessage_print_head_append
|
||||
===
|
||||
* Location: styles/prosilver/template/ucp_pm_viewmessage_print.html
|
||||
* Locations:
|
||||
+ styles/prosilver/template/ucp_pm_viewmessage_print.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add asset calls directly before the `</head>` tag of the Print PM screen
|
||||
|
||||
ucp_prefs_personal_prepend
|
||||
|
@ -184,6 +220,7 @@ ucp_prefs_personal_prepend
|
|||
* Locations:
|
||||
+ styles/prosilver/template/ucp_prefs_personal.html
|
||||
+ styles/subsilver2/template/ucp_prefs_personal.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add user options to the top of the Edit Global Settings block
|
||||
|
||||
ucp_prefs_personal_append
|
||||
|
@ -191,6 +228,7 @@ ucp_prefs_personal_append
|
|||
* Locations:
|
||||
+ styles/prosilver/template/ucp_prefs_personal.html
|
||||
+ styles/subsilver2/template/ucp_prefs_personal.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add user options to the bottom of the Edit Global Settings block
|
||||
|
||||
ucp_prefs_post_prepend
|
||||
|
@ -198,6 +236,7 @@ ucp_prefs_post_prepend
|
|||
* Locations:
|
||||
+ styles/prosilver/template/ucp_prefs_post.html
|
||||
+ styles/subsilver2/template/ucp_prefs_post.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add user options to the top of the Edit Posting Defaults block
|
||||
|
||||
ucp_prefs_post_append
|
||||
|
@ -205,6 +244,7 @@ ucp_prefs_post_append
|
|||
* Locations:
|
||||
+ styles/prosilver/template/ucp_prefs_post.html
|
||||
+ styles/subsilver2/template/ucp_prefs_post.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add user options to the bottom of the Edit Posting Defaults block
|
||||
|
||||
ucp_prefs_view_radio_buttons_prepend
|
||||
|
@ -212,6 +252,7 @@ ucp_prefs_view_radio_buttons_prepend
|
|||
* Locations:
|
||||
+ styles/prosilver/template/ucp_prefs_view.html
|
||||
+ styles/subsilver2/template/ucp_prefs_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add options to the top of the radio buttons block of the Edit
|
||||
Display Options screen
|
||||
|
||||
|
@ -220,6 +261,7 @@ ucp_prefs_view_radio_buttons_append
|
|||
* Locations:
|
||||
+ styles/prosilver/template/ucp_prefs_view.html
|
||||
+ styles/subsilver2/template/ucp_prefs_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add options to the bottom of the radio buttons block of the Edit
|
||||
Display Options screen
|
||||
|
||||
|
@ -228,6 +270,7 @@ ucp_prefs_view_select_menu_prepend
|
|||
* Locations:
|
||||
+ styles/prosilver/template/ucp_prefs_view.html
|
||||
+ styles/subsilver2/template/ucp_prefs_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add options to the top of the drop-down lists block of the Edit
|
||||
Display Options screen
|
||||
|
||||
|
@ -236,12 +279,15 @@ ucp_prefs_view_select_menu_append
|
|||
* Locations:
|
||||
+ styles/prosilver/template/ucp_prefs_view.html
|
||||
+ styles/subsilver2/template/ucp_prefs_view.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add options to the bottom of the drop-down lists block of the Edit
|
||||
Display Options screen
|
||||
|
||||
viewtopic_print_head_append
|
||||
===
|
||||
* Location: styles/prosilver/template/viewtopic_print.html
|
||||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_print.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add asset calls directly before the `</head>` tag of the Print Topic screen
|
||||
|
||||
viewtopic_body_footer_before
|
||||
|
@ -249,6 +295,7 @@ viewtopic_body_footer_before
|
|||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content to the bottom of the View topic screen below the posts
|
||||
and quick reply, directly before the jumpbox in Prosilver, breadcrumbs in
|
||||
Subsilver2.
|
||||
|
@ -258,6 +305,7 @@ viewtopic_body_post_buttons_after
|
|||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add post button to posts (next to edit, quote etc), at the end of
|
||||
the list.
|
||||
|
||||
|
@ -266,6 +314,7 @@ viewtopic_body_post_buttons_before
|
|||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add post button to posts (next to edit, quote etc), at the start of
|
||||
the list.
|
||||
|
||||
|
@ -274,6 +323,7 @@ viewtopic_body_postrow_custom_fields_after
|
|||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add data after the custom fields on the user profile when viewing
|
||||
a post
|
||||
|
||||
|
@ -282,6 +332,7 @@ viewtopic_body_postrow_custom_fields_before
|
|||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add data before the custom fields on the user profile when viewing
|
||||
a post
|
||||
|
||||
|
@ -290,4 +341,5 @@ viewtopic_topic_title_prepend
|
|||
* Locations:
|
||||
+ styles/prosilver/template/viewtopic_body.html
|
||||
+ styles/subsilver2/template/viewtopic_body.html
|
||||
* Since: 3.1.0-a1
|
||||
* Purpose: Add content directly before the topic title link on the View topic screen
|
||||
|
|
|
@ -181,7 +181,7 @@ else
|
|||
trigger_error('NO_ATTACHMENT_SELECTED');
|
||||
}
|
||||
|
||||
$sql = 'SELECT attach_id, post_msg_id, topic_id, in_message, is_orphan, physical_filename, real_filename, extension, mimetype, filesize, filetime
|
||||
$sql = 'SELECT attach_id, post_msg_id, topic_id, in_message, poster_id, is_orphan, physical_filename, real_filename, extension, mimetype, filesize, filetime
|
||||
FROM ' . ATTACHMENTS_TABLE . "
|
||||
WHERE $sql_where";
|
||||
$result = $db->sql_query($sql);
|
||||
|
|
|
@ -94,29 +94,29 @@ class acp_database
|
|||
case 'mysqli':
|
||||
case 'mysql4':
|
||||
case 'mysql':
|
||||
$extractor = new mysql_extractor($download, $store, $format, $filename, $time);
|
||||
$extractor = new mysql_extractor($format, $filename, $time, $download, $store);
|
||||
break;
|
||||
|
||||
case 'sqlite':
|
||||
$extractor = new sqlite_extractor($download, $store, $format, $filename, $time);
|
||||
$extractor = new sqlite_extractor($format, $filename, $time, $download, $store);
|
||||
break;
|
||||
|
||||
case 'postgres':
|
||||
$extractor = new postgres_extractor($download, $store, $format, $filename, $time);
|
||||
$extractor = new postgres_extractor($format, $filename, $time, $download, $store);
|
||||
break;
|
||||
|
||||
case 'oracle':
|
||||
$extractor = new oracle_extractor($download, $store, $format, $filename, $time);
|
||||
$extractor = new oracle_extractor($format, $filename, $time, $download, $store);
|
||||
break;
|
||||
|
||||
case 'mssql':
|
||||
case 'mssql_odbc':
|
||||
case 'mssqlnative':
|
||||
$extractor = new mssql_extractor($download, $store, $format, $filename, $time);
|
||||
$extractor = new mssql_extractor($format, $filename, $time, $download, $store);
|
||||
break;
|
||||
|
||||
case 'firebird':
|
||||
$extractor = new firebird_extractor($download, $store, $format, $filename, $time);
|
||||
$extractor = new firebird_extractor($format, $filename, $time, $download, $store);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -488,7 +488,7 @@ class base_extractor
|
|||
var $format;
|
||||
var $run_comp = false;
|
||||
|
||||
function base_extractor($download = false, $store = false, $format, $filename, $time)
|
||||
function base_extractor($format, $filename, $time, $download = false, $store = false)
|
||||
{
|
||||
global $request;
|
||||
|
||||
|
|
|
@ -1470,7 +1470,7 @@ class acp_forums
|
|||
/**
|
||||
* Event when we move content from one forum to another
|
||||
*
|
||||
* @event core.acp_manage_forums_move_children
|
||||
* @event core.acp_manage_forums_move_content
|
||||
* @var int from_id If of the current parent forum
|
||||
* @var int to_id If of the new parent forum
|
||||
* @var bool sync Shall we sync the "to"-forum's data
|
||||
|
|
|
@ -888,7 +888,11 @@ class acp_styles
|
|||
protected function list_style(&$style, $level)
|
||||
{
|
||||
// Mark row as shown
|
||||
if (!empty($style['_shown'])) return;
|
||||
if (!empty($style['_shown']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$style['_shown'] = true;
|
||||
|
||||
// Generate template variables
|
||||
|
|
|
@ -506,7 +506,7 @@ class auth_admin extends \phpbb\auth\auth
|
|||
'FORUM_ID' => $forum_id)
|
||||
);
|
||||
|
||||
$this->assign_cat_array($ug_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $show_trace, ($mode == 'view'));
|
||||
$this->assign_cat_array($ug_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, ($mode == 'view'), $show_trace);
|
||||
|
||||
unset($content_array[$ug_id]);
|
||||
}
|
||||
|
@ -593,7 +593,7 @@ class auth_admin extends \phpbb\auth\auth
|
|||
'FORUM_ID' => $forum_id)
|
||||
);
|
||||
|
||||
$this->assign_cat_array($forum_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $show_trace, ($mode == 'view'));
|
||||
$this->assign_cat_array($forum_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, ($mode == 'view'), $show_trace);
|
||||
}
|
||||
|
||||
unset($hold_ary[$ug_id], $ug_names_ary[$ug_id]);
|
||||
|
@ -1099,7 +1099,7 @@ class auth_admin extends \phpbb\auth\auth
|
|||
* Assign category to template
|
||||
* used by display_mask()
|
||||
*/
|
||||
function assign_cat_array(&$category_array, $tpl_cat, $tpl_mask, $ug_id, $forum_id, $show_trace = false, $s_view)
|
||||
function assign_cat_array(&$category_array, $tpl_cat, $tpl_mask, $ug_id, $forum_id, $s_view, $show_trace = false)
|
||||
{
|
||||
global $template, $user, $phpbb_admin_path, $phpEx, $phpbb_container;
|
||||
|
||||
|
|
|
@ -184,7 +184,7 @@ class captcha
|
|||
|
||||
for ($x = 1; $x <= $full_x; ++$x)
|
||||
{
|
||||
$cur_height = $this->wave_height($x, $y, $subdivision_factor) + $this->grid_height($x, $y, 1, $x_grid, $y_grid);
|
||||
$cur_height = $this->wave_height($x, $y, $subdivision_factor) + $this->grid_height($x, $y, $x_grid, $y_grid, 1);
|
||||
|
||||
// height is a z-factor, not a y-factor
|
||||
$offset = $cur_height - $prev_height;
|
||||
|
@ -264,7 +264,7 @@ class captcha
|
|||
return ((sin($x / (3 * $factor)) + sin($y / (3 * $factor))) * 10 * $tweak);
|
||||
}
|
||||
|
||||
function grid_height($x, $y, $factor = 1, $x_grid, $y_grid)
|
||||
function grid_height($x, $y, $x_grid, $y_grid, $factor = 1)
|
||||
{
|
||||
return ((!($x % ($x_grid * $factor)) || !($y % ($y_grid * $factor))) ? 3 : 0);
|
||||
}
|
||||
|
|
|
@ -5597,14 +5597,14 @@ function garbage_collection()
|
|||
global $cache, $db;
|
||||
global $phpbb_dispatcher;
|
||||
|
||||
/**
|
||||
* Unload some objects, to free some memory, before we finish our task
|
||||
*
|
||||
* @event core.garbage_collection
|
||||
* @since 3.1-A1
|
||||
*/
|
||||
if (!empty($phpbb_dispatcher))
|
||||
{
|
||||
/**
|
||||
* Unload some objects, to free some memory, before we finish our task
|
||||
*
|
||||
* @event core.garbage_collection
|
||||
* @since 3.1-A1
|
||||
*/
|
||||
$phpbb_dispatcher->dispatch('core.garbage_collection');
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ class compress
|
|||
|
||||
if (is_file($phpbb_root_path . $src))
|
||||
{
|
||||
$this->data($src_path, file_get_contents("$phpbb_root_path$src"), false, stat("$phpbb_root_path$src"));
|
||||
$this->data($src_path, file_get_contents("$phpbb_root_path$src"), stat("$phpbb_root_path$src"), false);
|
||||
}
|
||||
else if (is_dir($phpbb_root_path . $src))
|
||||
{
|
||||
|
@ -86,7 +86,7 @@ class compress
|
|||
continue;
|
||||
}
|
||||
|
||||
$this->data("$src_path$path$file", file_get_contents("$phpbb_root_path$src$path$file"), false, stat("$phpbb_root_path$src$path$file"));
|
||||
$this->data("$src_path$path$file", file_get_contents("$phpbb_root_path$src$path$file"), stat("$phpbb_root_path$src$path$file"), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ class compress
|
|||
return false;
|
||||
}
|
||||
|
||||
$this->data($filename, file_get_contents($src), false, stat($src));
|
||||
$this->data($filename, file_get_contents($src), stat($src), false);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -123,7 +123,7 @@ class compress
|
|||
$stat[4] = $stat[5] = 0;
|
||||
$stat[7] = strlen($src);
|
||||
$stat[9] = time();
|
||||
$this->data($name, $src, false, $stat);
|
||||
$this->data($name, $src, $stat, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -395,7 +395,7 @@ class compress_zip extends compress
|
|||
/**
|
||||
* Create the structures ... note we assume version made by is MSDOS
|
||||
*/
|
||||
function data($name, $data, $is_dir = false, $stat)
|
||||
function data($name, $data, $stat, $is_dir = false)
|
||||
{
|
||||
$name = str_replace('\\', '/', $name);
|
||||
$name = $this->unique_filename($name);
|
||||
|
@ -669,7 +669,7 @@ class compress_tar extends compress
|
|||
/**
|
||||
* Create the structures
|
||||
*/
|
||||
function data($name, $data, $is_dir = false, $stat)
|
||||
function data($name, $data, $stat, $is_dir = false)
|
||||
{
|
||||
$name = $this->unique_filename($name);
|
||||
$this->wrote = true;
|
||||
|
|
|
@ -1414,7 +1414,7 @@ class smtp_class
|
|||
$result = false;
|
||||
$stream_meta = stream_get_meta_data($this->socket);
|
||||
|
||||
if (socket_set_blocking($this->socket, 1));
|
||||
if (socket_set_blocking($this->socket, 1))
|
||||
{
|
||||
$result = stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
|
||||
socket_set_blocking($this->socket, (int) $stream_meta['blocked']);
|
||||
|
|
|
@ -32,7 +32,7 @@ function phpbb_get_url_matcher(\phpbb\extension\finder $finder, RequestContext $
|
|||
{
|
||||
if (defined('DEBUG'))
|
||||
{
|
||||
return phpbb_create_url_matcher($finder, $context);
|
||||
return phpbb_create_url_matcher($finder, $context, $root_path);
|
||||
}
|
||||
|
||||
if (!phpbb_url_matcher_dumped($root_path, $php_ext))
|
||||
|
@ -54,7 +54,7 @@ function phpbb_get_url_matcher(\phpbb\extension\finder $finder, RequestContext $
|
|||
function phpbb_create_dumped_url_matcher(\phpbb\extension\finder $finder, $root_path, $php_ext)
|
||||
{
|
||||
$provider = new \phpbb\controller\provider();
|
||||
$routes = $provider->import_paths_from_finder($finder)->find();
|
||||
$routes = $provider->import_paths_from_finder($finder)->find($root_path);
|
||||
$dumper = new PhpMatcherDumper($routes);
|
||||
$cached_url_matcher_dump = $dumper->dump(array(
|
||||
'class' => 'phpbb_url_matcher',
|
||||
|
@ -70,10 +70,10 @@ function phpbb_create_dumped_url_matcher(\phpbb\extension\finder $finder, $root_
|
|||
* @param RequestContext $context Symfony RequestContext object
|
||||
* @return UrlMatcher
|
||||
*/
|
||||
function phpbb_create_url_matcher(\phpbb\extension\finder $finder, RequestContext $context)
|
||||
function phpbb_create_url_matcher(\phpbb\extension\finder $finder, RequestContext $context, $root_path)
|
||||
{
|
||||
$provider = new \phpbb\controller\provider();
|
||||
$routes = $provider->import_paths_from_finder($finder)->find();
|
||||
$routes = $provider->import_paths_from_finder($finder)->find($root_path);
|
||||
return new UrlMatcher($routes, $context);
|
||||
}
|
||||
|
||||
|
|
|
@ -78,9 +78,9 @@ class ucp_notifications
|
|||
trigger_error($message);
|
||||
}
|
||||
|
||||
$this->output_notification_methods('notification_methods', $phpbb_notifications, $template, $user);
|
||||
$this->output_notification_methods($phpbb_notifications, $template, $user, 'notification_methods');
|
||||
|
||||
$this->output_notification_types($subscriptions, 'notification_types', $phpbb_notifications, $template, $user);
|
||||
$this->output_notification_types($subscriptions, $phpbb_notifications, $template, $user, 'notification_types');
|
||||
|
||||
$this->tpl_name = 'ucp_notifications';
|
||||
$this->page_title = 'UCP_NOTIFICATION_OPTIONS';
|
||||
|
@ -162,12 +162,12 @@ class ucp_notifications
|
|||
/**
|
||||
* Output all the notification types to the template
|
||||
*
|
||||
* @param string $block
|
||||
* @param \phpbb\notification\manager $phpbb_notifications
|
||||
* @param \phpbb\template\template $template
|
||||
* @param \phpbb\user $user
|
||||
* @param string $block
|
||||
*/
|
||||
public function output_notification_types($subscriptions, $block = 'notification_types', \phpbb\notification\manager $phpbb_notifications, \phpbb\template\template $template, \phpbb\user $user)
|
||||
public function output_notification_types($subscriptions, \phpbb\notification\manager $phpbb_notifications, \phpbb\template\template $template, \phpbb\user $user, $block = 'notification_types')
|
||||
{
|
||||
$notification_methods = $phpbb_notifications->get_subscription_methods();
|
||||
|
||||
|
@ -209,12 +209,12 @@ class ucp_notifications
|
|||
/**
|
||||
* Output all the notification methods to the template
|
||||
*
|
||||
* @param string $block
|
||||
* @param \phpbb\notification\manager $phpbb_notifications
|
||||
* @param \phpbb\template\template $template
|
||||
* @param \phpbb\user $user
|
||||
* @param string $block
|
||||
*/
|
||||
public function output_notification_methods($block = 'notification_methods', \phpbb\notification\manager $phpbb_notifications, \phpbb\template\template $template, \phpbb\user $user)
|
||||
public function output_notification_methods(\phpbb\notification\manager $phpbb_notifications, \phpbb\template\template $template, \phpbb\user $user, $block = 'notification_methods')
|
||||
{
|
||||
$notification_methods = $phpbb_notifications->get_subscription_methods();
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ class ucp_zebra
|
|||
* @var array user_ids User ids we remove
|
||||
* @since 3.1-A1
|
||||
*/
|
||||
$vars = array('user_ids');
|
||||
$vars = array('mode', 'user_ids');
|
||||
extract($phpbb_dispatcher->trigger_event('core.ucp_remove_zebra', compact($vars)));
|
||||
|
||||
$sql = 'DELETE FROM ' . ZEBRA_TABLE . '
|
||||
|
|
|
@ -97,7 +97,6 @@ class ldap extends \phpbb\auth\provider\base
|
|||
|
||||
@ldap_close($ldap);
|
||||
|
||||
|
||||
if (!is_array($result) || sizeof($result) < 2)
|
||||
{
|
||||
return sprintf($this->user->lang['LDAP_NO_IDENTITY'], $this->user->data['username']);
|
||||
|
|
|
@ -179,7 +179,7 @@ class oauth extends \phpbb\auth\provider\base
|
|||
|
||||
$storage = new \phpbb\auth\provider\oauth\token_storage($this->db, $this->user, $this->auth_provider_oauth_token_storage_table);
|
||||
$query = 'mode=login&login=external&oauth_service=' . $service_name_original;
|
||||
$service = $this->get_service($service_name_original, $storage, $service_credentials, $this->service_providers[$service_name]->get_auth_scope(), $query);
|
||||
$service = $this->get_service($service_name_original, $storage, $service_credentials, $query, $this->service_providers[$service_name]->get_auth_scope());
|
||||
|
||||
if ($this->request->is_set('code', \phpbb\request\request_interface::GET))
|
||||
{
|
||||
|
@ -273,13 +273,13 @@ class oauth extends \phpbb\auth\provider\base
|
|||
* @param string $service_name The name of the service
|
||||
* @param \phpbb\auth\provider\oauth\token_storage $storage
|
||||
* @param array $service_credentials {@see \phpbb\auth\provider\oauth\oauth::get_service_credentials}
|
||||
* @param array $scope The scope of the request against
|
||||
* the api.
|
||||
* @param string $query The query string of the
|
||||
* current_uri used in redirection
|
||||
* @param array $scope The scope of the request against
|
||||
* the api.
|
||||
* @return \OAuth\Common\Service\ServiceInterface
|
||||
*/
|
||||
protected function get_service($service_name, \phpbb\auth\provider\oauth\token_storage $storage, array $service_credentials, array $scopes = array(), $query)
|
||||
protected function get_service($service_name, \phpbb\auth\provider\oauth\token_storage $storage, array $service_credentials, $query, array $scopes = array())
|
||||
{
|
||||
$current_uri = $this->get_current_uri($service_name, $query);
|
||||
|
||||
|
@ -458,7 +458,7 @@ class oauth extends \phpbb\auth\provider\base
|
|||
// Prepare for an authentication request
|
||||
$service_credentials = $this->service_providers[$service_name]->get_service_credentials();
|
||||
$scopes = $this->service_providers[$service_name]->get_auth_scope();
|
||||
$service = $this->get_service(strtolower($link_data['oauth_service']), $storage, $service_credentials, $scopes, $query);
|
||||
$service = $this->get_service(strtolower($link_data['oauth_service']), $storage, $service_credentials, $query, $scopes);
|
||||
$this->service_providers[$service_name]->set_external_service_provider($service);
|
||||
|
||||
// The user has already authenticated successfully, request to authenticate again
|
||||
|
@ -491,7 +491,7 @@ class oauth extends \phpbb\auth\provider\base
|
|||
$query = 'i=ucp_auth_link&mode=auth_link&link=1&oauth_service=' . strtolower($link_data['oauth_service']);
|
||||
$service_credentials = $this->service_providers[$service_name]->get_service_credentials();
|
||||
$scopes = $this->service_providers[$service_name]->get_auth_scope();
|
||||
$service = $this->get_service(strtolower($link_data['oauth_service']), $storage, $service_credentials, $scopes, $query);
|
||||
$service = $this->get_service(strtolower($link_data['oauth_service']), $storage, $service_credentials, $query, $scopes);
|
||||
|
||||
if ($this->request->is_set('code', \phpbb\request\request_interface::GET))
|
||||
{
|
||||
|
|
|
@ -78,7 +78,7 @@ class token_storage implements TokenStorageInterface
|
|||
{
|
||||
$service = $this->get_service_name_for_db($service);
|
||||
|
||||
if ($this->cachedToken instanceOf TokenInterface)
|
||||
if ($this->cachedToken instanceof TokenInterface)
|
||||
{
|
||||
return $this->cachedToken;
|
||||
}
|
||||
|
@ -238,7 +238,7 @@ class token_storage implements TokenStorageInterface
|
|||
{
|
||||
$service = $this->get_service_name_for_db($service);
|
||||
|
||||
if ($this->cachedToken instanceOf TokenInterface) {
|
||||
if ($this->cachedToken instanceof TokenInterface) {
|
||||
return $this->cachedToken;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,6 +47,12 @@ abstract class driver implements \phpbb\avatar\driver\driver_interface
|
|||
*/
|
||||
protected $php_ext;
|
||||
|
||||
/**
|
||||
* Path Helper
|
||||
* @var \phpbb\path_helper
|
||||
*/
|
||||
protected $path_helper;
|
||||
|
||||
/**
|
||||
* Cache driver
|
||||
* @var \phpbb\cache\driver\driver_interface
|
||||
|
@ -75,13 +81,15 @@ abstract class driver implements \phpbb\avatar\driver\driver_interface
|
|||
* @param \phpbb\request\request $request Request object
|
||||
* @param string $phpbb_root_path Path to the phpBB root
|
||||
* @param string $php_ext PHP file extension
|
||||
* @param \phpbb_path_helper $path_helper phpBB path helper
|
||||
* @param \phpbb\cache\driver\driver_interface $cache Cache driver
|
||||
*/
|
||||
public function __construct(\phpbb\config\config $config, $phpbb_root_path, $php_ext, \phpbb\cache\driver\driver_interface $cache = null)
|
||||
public function __construct(\phpbb\config\config $config, $phpbb_root_path, $php_ext, \phpbb\path_helper $path_helper, \phpbb\cache\driver\driver_interface $cache = null)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
$this->php_ext = $php_ext;
|
||||
$this->path_helper = $path_helper;
|
||||
$this->cache = $cache;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ class local extends \phpbb\avatar\driver\driver
|
|||
public function get_data($row)
|
||||
{
|
||||
return array(
|
||||
'src' => $this->phpbb_root_path . $this->config['avatar_gallery_path'] . '/' . $row['avatar'],
|
||||
'src' => $this->path_helper->get_web_root_path() . $this->config['avatar_gallery_path'] . '/' . $row['avatar'],
|
||||
'width' => $row['avatar_width'],
|
||||
'height' => $row['avatar_height'],
|
||||
);
|
||||
|
|
|
@ -29,7 +29,7 @@ class upload extends \phpbb\avatar\driver\driver
|
|||
public function get_data($row, $ignore_config = false)
|
||||
{
|
||||
return array(
|
||||
'src' => $this->phpbb_root_path . 'download/file.' . $this->php_ext . '?avatar=' . $row['avatar'],
|
||||
'src' => $this->path_helper->get_web_root_path() . 'download/file.' . $this->php_ext . '?avatar=' . $row['avatar'],
|
||||
'width' => $row['avatar_width'],
|
||||
'height' => $row['avatar_height'],
|
||||
);
|
||||
|
|
|
@ -41,12 +41,6 @@ class manager
|
|||
*/
|
||||
protected $avatar_drivers;
|
||||
|
||||
/**
|
||||
* Service container object
|
||||
* @var object
|
||||
*/
|
||||
protected $container;
|
||||
|
||||
/**
|
||||
* Default avatar data row
|
||||
* @var array
|
||||
|
@ -63,13 +57,27 @@ class manager
|
|||
*
|
||||
* @param \phpbb\config\config $config phpBB configuration
|
||||
* @param array $avatar_drivers Avatar drivers passed via the service container
|
||||
* @param object $container Container object
|
||||
*/
|
||||
public function __construct(\phpbb\config\config $config, $avatar_drivers, $container)
|
||||
public function __construct(\phpbb\config\config $config, $avatar_drivers)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->avatar_drivers = $avatar_drivers;
|
||||
$this->container = $container;
|
||||
$this->register_avatar_drivers($avatar_drivers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register avatar drivers
|
||||
*
|
||||
* @param array $avatar_drivers Service collection of avatar drivers
|
||||
*/
|
||||
protected function register_avatar_drivers($avatar_drivers)
|
||||
{
|
||||
if (!empty($avatar_drivers))
|
||||
{
|
||||
foreach ($avatar_drivers as $driver)
|
||||
{
|
||||
$this->avatar_drivers[$driver->get_name()] = $driver;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -112,7 +120,7 @@ class manager
|
|||
* There is no need to handle invalid avatar types as the following code
|
||||
* will cause a ServiceNotFoundException if the type does not exist
|
||||
*/
|
||||
$driver = $this->container->get($avatar_type);
|
||||
$driver = $this->avatar_drivers[$avatar_type];
|
||||
|
||||
return $driver;
|
||||
}
|
||||
|
|
|
@ -31,17 +31,17 @@ class provider
|
|||
* YAML file(s) containing route information
|
||||
* @var array
|
||||
*/
|
||||
protected $routing_paths;
|
||||
protected $routing_files;
|
||||
|
||||
/**
|
||||
* Construct method
|
||||
*
|
||||
* @param array() $routing_paths Array of strings containing paths
|
||||
* @param array() $routing_files Array of strings containing paths
|
||||
* to YAML files holding route information
|
||||
*/
|
||||
public function __construct($routing_paths = array())
|
||||
public function __construct($routing_files = array())
|
||||
{
|
||||
$this->routing_paths = $routing_paths;
|
||||
$this->routing_files = $routing_files;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -54,12 +54,11 @@ class provider
|
|||
{
|
||||
// We hardcode the path to the core config directory
|
||||
// because the finder cannot find it
|
||||
$this->routing_paths = array_merge(array('config'), array_map('dirname', array_keys($finder
|
||||
$this->routing_files = array_merge(array('config/routing.yml'), array_keys($finder
|
||||
->directory('config')
|
||||
->prefix('routing')
|
||||
->suffix('yml')
|
||||
->suffix('routing.yml')
|
||||
->find()
|
||||
)));
|
||||
));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
@ -73,10 +72,10 @@ class provider
|
|||
public function find($base_path = '')
|
||||
{
|
||||
$routes = new RouteCollection;
|
||||
foreach ($this->routing_paths as $path)
|
||||
foreach ($this->routing_files as $file_path)
|
||||
{
|
||||
$loader = new YamlFileLoader(new FileLocator($base_path . $path));
|
||||
$routes->addCollection($loader->load('routing.yml'));
|
||||
$loader = new YamlFileLoader(new FileLocator($base_path));
|
||||
$routes->addCollection($loader->load($file_path));
|
||||
}
|
||||
|
||||
return $routes;
|
||||
|
|
|
@ -259,7 +259,7 @@ class mssql extends \phpbb\db\driver\driver
|
|||
{
|
||||
foreach ($row as $key => $value)
|
||||
{
|
||||
$row[$key] = ($value === ' ' || $value === NULL) ? '' : $value;
|
||||
$row[$key] = ($value === ' ' || $value === null) ? '' : $value;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -195,7 +195,7 @@ class result_mssqlnative
|
|||
*/
|
||||
class mssqlnative extends \phpbb\db\driver\mssql_base
|
||||
{
|
||||
var $m_insert_id = NULL;
|
||||
var $m_insert_id = null;
|
||||
var $last_query_text = '';
|
||||
var $query_options = array();
|
||||
var $connect_error = '';
|
||||
|
@ -427,7 +427,7 @@ class mssqlnative extends \phpbb\db\driver\mssql_base
|
|||
{
|
||||
foreach ($row as $key => $value)
|
||||
{
|
||||
$row[$key] = ($value === ' ' || $value === NULL) ? '' : $value;
|
||||
$row[$key] = ($value === ' ' || $value === null) ? '' : $value;
|
||||
}
|
||||
|
||||
// remove helper values from LIMIT queries
|
||||
|
|
|
@ -47,11 +47,11 @@ class mysqli extends \phpbb\db\driver\mysql_base
|
|||
$this->server = ($this->persistency) ? 'p:' . (($sqlserver) ? $sqlserver : 'localhost') : $sqlserver;
|
||||
|
||||
$this->dbname = $database;
|
||||
$port = (!$port) ? NULL : $port;
|
||||
$port = (!$port) ? null : $port;
|
||||
|
||||
// If port is set and it is not numeric, most likely mysqli socket is set.
|
||||
// Try to map it to the $socket parameter.
|
||||
$socket = NULL;
|
||||
$socket = null;
|
||||
if ($port)
|
||||
{
|
||||
if (is_numeric($port))
|
||||
|
@ -61,7 +61,7 @@ class mysqli extends \phpbb\db\driver\mysql_base
|
|||
else
|
||||
{
|
||||
$socket = $port;
|
||||
$port = NULL;
|
||||
$port = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -328,7 +328,7 @@ class postgres extends \phpbb\db\driver\driver
|
|||
return false;
|
||||
}
|
||||
|
||||
$temp_result = @pg_fetch_assoc($temp_q_id, NULL);
|
||||
$temp_result = @pg_fetch_assoc($temp_q_id, null);
|
||||
@pg_free_result($query_id);
|
||||
|
||||
return ($temp_result) ? $temp_result['last_value'] : false;
|
||||
|
@ -456,7 +456,7 @@ class postgres extends \phpbb\db\driver\driver
|
|||
|
||||
if ($result = @pg_query($this->db_connect_id, "EXPLAIN $explain_query"))
|
||||
{
|
||||
while ($row = @pg_fetch_assoc($result, NULL))
|
||||
while ($row = @pg_fetch_assoc($result, null))
|
||||
{
|
||||
$html_table = $this->sql_report('add_select_row', $query, $html_table, $row);
|
||||
}
|
||||
|
@ -476,7 +476,7 @@ class postgres extends \phpbb\db\driver\driver
|
|||
$endtime = $endtime[0] + $endtime[1];
|
||||
|
||||
$result = @pg_query($this->db_connect_id, $query);
|
||||
while ($void = @pg_fetch_assoc($result, NULL))
|
||||
while ($void = @pg_fetch_assoc($result, null))
|
||||
{
|
||||
// Take the time spent on parsing rows into account
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ class notifications extends \phpbb\db\migration\migration
|
|||
),
|
||||
$this->table_prefix . 'notifications' => array(
|
||||
'COLUMNS' => array(
|
||||
'notification_id' => array('UINT', NULL, 'auto_increment'),
|
||||
'notification_id' => array('UINT', null, 'auto_increment'),
|
||||
'item_type' => array('VCHAR:255', ''),
|
||||
'item_id' => array('UINT', 0),
|
||||
'item_parent_id' => array('UINT', 0),
|
||||
|
|
|
@ -26,7 +26,7 @@ class notifications_schema_fix extends \phpbb\db\migration\migration
|
|||
'add_tables' => array(
|
||||
$this->table_prefix . 'notification_types' => array(
|
||||
'COLUMNS' => array(
|
||||
'notification_type_id' => array('USINT', NULL, 'auto_increment'),
|
||||
'notification_type_id' => array('USINT', null, 'auto_increment'),
|
||||
'notification_type_name' => array('VCHAR:255', ''),
|
||||
'notification_type_enabled' => array('BOOL', 1),
|
||||
),
|
||||
|
@ -37,7 +37,7 @@ class notifications_schema_fix extends \phpbb\db\migration\migration
|
|||
),
|
||||
$this->table_prefix . 'notifications' => array(
|
||||
'COLUMNS' => array(
|
||||
'notification_id' => array('UINT:10', NULL, 'auto_increment'),
|
||||
'notification_id' => array('UINT:10', null, 'auto_increment'),
|
||||
'notification_type_id' => array('USINT', 0),
|
||||
'item_id' => array('UINT', 0),
|
||||
'item_parent_id' => array('UINT', 0),
|
||||
|
@ -73,7 +73,7 @@ class notifications_schema_fix extends \phpbb\db\migration\migration
|
|||
),
|
||||
$this->table_prefix . 'notifications' => array(
|
||||
'COLUMNS' => array(
|
||||
'notification_id' => array('UINT', NULL, 'auto_increment'),
|
||||
'notification_id' => array('UINT', null, 'auto_increment'),
|
||||
'item_type' => array('VCHAR:255', ''),
|
||||
'item_id' => array('UINT', 0),
|
||||
'item_parent_id' => array('UINT', 0),
|
||||
|
|
|
@ -56,7 +56,7 @@ class style_update_p2 extends \phpbb\db\migration\migration
|
|||
'add_tables' => array(
|
||||
$this->table_prefix . 'styles_imageset' => array(
|
||||
'COLUMNS' => array(
|
||||
'imageset_id' => array('UINT', NULL, 'auto_increment'),
|
||||
'imageset_id' => array('UINT', null, 'auto_increment'),
|
||||
'imageset_name' => array('VCHAR_UNI:255', ''),
|
||||
'imageset_copyright' => array('VCHAR_UNI', ''),
|
||||
'imageset_path' => array('VCHAR:100', ''),
|
||||
|
@ -68,7 +68,7 @@ class style_update_p2 extends \phpbb\db\migration\migration
|
|||
),
|
||||
$this->table_prefix . 'styles_imageset_data' => array(
|
||||
'COLUMNS' => array(
|
||||
'image_id' => array('UINT', NULL, 'auto_increment'),
|
||||
'image_id' => array('UINT', null, 'auto_increment'),
|
||||
'image_name' => array('VCHAR:200', ''),
|
||||
'image_filename' => array('VCHAR:200', ''),
|
||||
'image_lang' => array('VCHAR:30', ''),
|
||||
|
@ -83,7 +83,7 @@ class style_update_p2 extends \phpbb\db\migration\migration
|
|||
),
|
||||
$this->table_prefix . 'styles_template' => array(
|
||||
'COLUMNS' => array(
|
||||
'template_id' => array('UINT', NULL, 'auto_increment'),
|
||||
'template_id' => array('UINT', null, 'auto_increment'),
|
||||
'template_name' => array('VCHAR_UNI:255', ''),
|
||||
'template_copyright' => array('VCHAR_UNI', ''),
|
||||
'template_path' => array('VCHAR:100', ''),
|
||||
|
@ -112,7 +112,7 @@ class style_update_p2 extends \phpbb\db\migration\migration
|
|||
),
|
||||
$this->table_prefix . 'styles_theme' => array(
|
||||
'COLUMNS' => array(
|
||||
'theme_id' => array('UINT', NULL, 'auto_increment'),
|
||||
'theme_id' => array('UINT', null, 'auto_increment'),
|
||||
'theme_name' => array('VCHAR_UNI:255', ''),
|
||||
'theme_copyright' => array('VCHAR_UNI', ''),
|
||||
'theme_path' => array('VCHAR:100', ''),
|
||||
|
|
|
@ -27,7 +27,7 @@ class teampage extends \phpbb\db\migration\migration
|
|||
'add_tables' => array(
|
||||
$this->table_prefix . 'teampage' => array(
|
||||
'COLUMNS' => array(
|
||||
'teampage_id' => array('UINT', NULL, 'auto_increment'),
|
||||
'teampage_id' => array('UINT', null, 'auto_increment'),
|
||||
'group_id' => array('UINT', 0),
|
||||
'teampage_name' => array('VCHAR_UNI:255', ''),
|
||||
'teampage_position' => array('UINT', 0),
|
||||
|
|
|
@ -33,7 +33,7 @@ class tools
|
|||
/**
|
||||
* @var object DB object
|
||||
*/
|
||||
var $db = NULL;
|
||||
var $db = null;
|
||||
|
||||
/**
|
||||
* The Column types for every database we support
|
||||
|
|
|
@ -72,7 +72,6 @@ class kernel_exception_subscriber implements EventSubscriberInterface
|
|||
|
||||
page_footer(true, false, false);
|
||||
|
||||
|
||||
$status_code = $exception instanceof HttpException ? $exception->getStatusCode() : 500;
|
||||
$response = new Response($this->template->assign_display('body'), $status_code);
|
||||
$event->setResponse($response);
|
||||
|
|
|
@ -234,7 +234,9 @@ class manager
|
|||
*/
|
||||
public function enable($name)
|
||||
{
|
||||
// @codingStandardsIgnoreStart
|
||||
while ($this->enable_step($name));
|
||||
// @codingStandardsIgnoreEnd
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -311,7 +313,9 @@ class manager
|
|||
*/
|
||||
public function disable($name)
|
||||
{
|
||||
// @codingStandardsIgnoreStart
|
||||
while ($this->disable_step($name));
|
||||
// @codingStandardsIgnoreEnd
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -388,7 +392,9 @@ class manager
|
|||
*/
|
||||
public function purge($name)
|
||||
{
|
||||
// @codingStandardsIgnoreStart
|
||||
while ($this->purge_step($name));
|
||||
// @codingStandardsIgnoreEnd
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -169,7 +169,7 @@ class metadata_manager
|
|||
throw new \phpbb\extension\exception('file_get_contents failed on ' . $this->metadata_file);
|
||||
}
|
||||
|
||||
if (($metadata = json_decode($file_contents, true)) === NULL)
|
||||
if (($metadata = json_decode($file_contents, true)) === null)
|
||||
{
|
||||
throw new \phpbb\extension\exception('json_decode failed on ' . $this->metadata_file);
|
||||
}
|
||||
|
|
|
@ -150,7 +150,7 @@ abstract class base
|
|||
*/
|
||||
function get($key)
|
||||
{
|
||||
return (isset($this->keys[$key])) ? $this->keys[$key] : NULL;
|
||||
return (isset($this->keys[$key])) ? $this->keys[$key] : null;
|
||||
}
|
||||
|
||||
function get_readable_forums()
|
||||
|
|
|
@ -850,7 +850,6 @@ class fulltext_native extends \phpbb\search\base
|
|||
}
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
|
||||
// if we use mysql and the total result count is not cached yet, retrieve it from the db
|
||||
if (!$total_results && $is_mysql)
|
||||
{
|
||||
|
|
|
@ -1235,7 +1235,6 @@ class session
|
|||
$this->session_create(ANONYMOUS);
|
||||
}
|
||||
|
||||
|
||||
// Determine which message to output
|
||||
$till_date = ($ban_row['ban_end']) ? $this->format_date($ban_row['ban_end']) : '';
|
||||
$message = ($ban_row['ban_end']) ? 'BOARD_BAN_TIME' : 'BOARD_BAN_PERM';
|
||||
|
|
|
@ -285,7 +285,7 @@ class context
|
|||
// Search array to get correct position
|
||||
list($search_key, $search_value) = @each($key);
|
||||
|
||||
$key = NULL;
|
||||
$key = null;
|
||||
foreach ($block as $i => $val_ary)
|
||||
{
|
||||
if ($val_ary[$search_key] === $search_value)
|
||||
|
@ -296,7 +296,7 @@ class context
|
|||
}
|
||||
|
||||
// key/value pair not found
|
||||
if ($key === NULL)
|
||||
if ($key === null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ class includephp extends \Twig_Node
|
|||
/** @var Twig_Environment */
|
||||
protected $environment;
|
||||
|
||||
public function __construct(\Twig_Node_Expression $expr, \phpbb\template\twig\environment $environment, $ignoreMissing = false, $lineno, $tag = null)
|
||||
public function __construct(\Twig_Node_Expression $expr, \phpbb\template\twig\environment $environment, $lineno, $ignoreMissing = false, $tag = null)
|
||||
{
|
||||
$this->environment = $environment;
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ class includephp extends \Twig_TokenParser
|
|||
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
|
||||
return new \phpbb\template\twig\node\includephp($expr, $this->parser->getEnvironment(), $ignoreMissing, $token->getLine(), $this->getTag());
|
||||
return new \phpbb\template\twig\node\includephp($expr, $this->parser->getEnvironment(), $token->getLine(), $ignoreMissing, $this->getTag());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -343,7 +343,6 @@ class user extends \phpbb\session
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// Does the user need to change their password? If so, redirect to the
|
||||
// ucp profile reg_details page ... of course do not redirect if we're already in the ucp
|
||||
if (!defined('IN_ADMIN') && !defined('ADMIN_START') && $config['chg_passforce'] && !empty($this->data['is_registered']) && $auth->acl_get('u_chgpasswd') && $this->data['user_passchg'] < time() - ($config['chg_passforce'] * 86400))
|
||||
|
|
|
@ -1525,7 +1525,7 @@ $template->assign_vars(array(
|
|||
* @event core.posting_modify_template_vars
|
||||
* @since 3.1-A1
|
||||
*/
|
||||
$phpbb_dispatcher->trigger_event('core.posting_modify_template_vars');
|
||||
$phpbb_dispatcher->dispatch('core.posting_modify_template_vars');
|
||||
|
||||
// Build custom bbcodes array
|
||||
display_custom_bbcodes();
|
||||
|
|
|
@ -13,26 +13,31 @@
|
|||
<div class="<!-- IF not S_PRIVMSGS -->forumbg<!-- ELSE -->panel<!-- ENDIF -->">
|
||||
<div class="inner">
|
||||
|
||||
<ul class="topiclist">
|
||||
<ul class="topiclist two-long-columns">
|
||||
<li class="header">
|
||||
<dl>
|
||||
<dt>{L_LOAD_DRAFT}</dt>
|
||||
<dd class="posted">{L_SAVE_DATE}</dd>
|
||||
<dd class="info">{L_SAVE_DATE}</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="topiclist<!-- IF not S_PRIVMSGS --> topics<!-- ELSE --> cplist<!-- ENDIF -->">
|
||||
<ul class="topiclist two-long-columns<!-- IF not S_PRIVMSGS --> topics<!-- ELSE --> cplist<!-- ENDIF -->">
|
||||
|
||||
<!-- BEGIN draftrow -->
|
||||
<li class="row<!-- IF draftrow.S_ROW_COUNT is even --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
|
||||
<dl>
|
||||
<dt>
|
||||
<a href="{draftrow.U_INSERT}" title="{L_LOAD_DRAFT}" class="topictitle">{draftrow.DRAFT_SUBJECT}</a><br />
|
||||
<!-- IF not S_PRIVMSGS --><!-- IF draftrow.S_LINK_TOPIC -->{L_TOPIC}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
|
||||
<!-- ELSEIF draftrow.S_LINK_FORUM -->{L_FORUM}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
|
||||
<!-- ELSE -->{L_NO_TOPIC_FORUM}<!-- ENDIF --><!-- ENDIF -->
|
||||
<div class="list-inner">
|
||||
<a href="{draftrow.U_INSERT}" title="{L_LOAD_DRAFT}" class="topictitle">{draftrow.DRAFT_SUBJECT}</a><br />
|
||||
<!-- IF not S_PRIVMSGS --><!-- IF draftrow.S_LINK_TOPIC -->{L_TOPIC}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
|
||||
<!-- ELSEIF draftrow.S_LINK_FORUM -->{L_FORUM}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
|
||||
<!-- ELSE -->{L_NO_TOPIC_FORUM}<!-- ENDIF --><!-- ENDIF -->
|
||||
<div class="responsive-show" style="display: none;">
|
||||
{L_SAVE_DATE}{L_COLON} <strong>{draftrow.DATE}</strong>
|
||||
</div>
|
||||
</div>
|
||||
</dt>
|
||||
<dd class="posted">{draftrow.DATE}</dd>
|
||||
<dd class="info"><span>{draftrow.DATE}</span></dd>
|
||||
</dl>
|
||||
</li>
|
||||
<!-- END draftrow -->
|
||||
|
|
|
@ -409,6 +409,548 @@ function insert_single_user(formId, user)
|
|||
self.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse document block
|
||||
*/
|
||||
function parse_document(container)
|
||||
{
|
||||
var test = document.createElement('div'),
|
||||
oldBrowser = (typeof test.style.borderRadius == 'undefined');
|
||||
|
||||
delete test;
|
||||
|
||||
/**
|
||||
* Reset avatar dimensions when changing URL or EMAIL
|
||||
*/
|
||||
container.find('input[data-reset-on-edit]').bind('keyup', function() {
|
||||
$(this.getAttribute('data-reset-on-edit')).val('');
|
||||
});
|
||||
|
||||
/**
|
||||
* Pagination
|
||||
*/
|
||||
container.find('a.pagination-trigger').click(function() {
|
||||
jumpto($(this));
|
||||
});
|
||||
|
||||
/**
|
||||
* Adjust HTML code for IE8 and older versions
|
||||
*/
|
||||
if (oldBrowser) {
|
||||
// Fix .linklist.bulletin lists
|
||||
container.find('ul.linklist.bulletin li:first-child, ul.linklist.bulletin li.rightside:last-child').addClass('no-bulletin');
|
||||
|
||||
// Do not run functions below for old browsers
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resize navigation block to keep all links on same line
|
||||
*/
|
||||
container.find('.navlinks').each(function() {
|
||||
var $this = $(this),
|
||||
left = $this.children().not('.rightside'),
|
||||
right = $this.children('.rightside');
|
||||
|
||||
if (left.length !== 1 || !right.length) return;
|
||||
|
||||
function resize() {
|
||||
var width = 0,
|
||||
diff = left.outerWidth(true) - left.width();
|
||||
|
||||
right.each(function() {
|
||||
width += $(this).outerWidth(true);
|
||||
});
|
||||
left.css('max-width', Math.floor($this.width() - width - diff) + 'px');
|
||||
}
|
||||
|
||||
resize();
|
||||
$(window).resize(resize);
|
||||
});
|
||||
|
||||
/**
|
||||
* Makes breadcrumbs responsive
|
||||
*/
|
||||
container.find('.breadcrumbs:not([data-skip-responsive])').each(function() {
|
||||
var $this = $(this),
|
||||
$body = $('body'),
|
||||
links = $this.find('.crumb'),
|
||||
length = links.length,
|
||||
classes = ['wrapped-max', 'wrapped-wide', 'wrapped-medium', 'wrapped-small', 'wrapped-tiny'],
|
||||
classesLength = classes.length,
|
||||
maxHeight = 0,
|
||||
lastWidth = false,
|
||||
wrapped = false;
|
||||
|
||||
// Set tooltips
|
||||
$this.find('a').each(function() {
|
||||
var $link = $(this);
|
||||
$link.attr('title', $link.text());
|
||||
});
|
||||
|
||||
// Funciton that checks breadcrumbs
|
||||
function check() {
|
||||
var height = $this.height(),
|
||||
width = $body.width(),
|
||||
link, i, j;
|
||||
|
||||
maxHeight = parseInt($this.css('line-height')) | 0;
|
||||
links.each(function() {
|
||||
if ($(this).height() > 0) {
|
||||
maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
|
||||
}
|
||||
});
|
||||
|
||||
if (height <= maxHeight) {
|
||||
if (!wrapped || lastWidth === false || lastWidth >= width) {
|
||||
lastWidth = width;
|
||||
return;
|
||||
}
|
||||
}
|
||||
lastWidth = width;
|
||||
|
||||
if (wrapped) {
|
||||
$this.removeClass('wrapped').find('.crumb.wrapped').removeClass('wrapped ' + classes.join(' '));
|
||||
wrapped = false;
|
||||
if ($this.height() <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
wrapped = true;
|
||||
$this.addClass('wrapped');
|
||||
if ($this.height() <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < classesLength; i ++) {
|
||||
for (j = length - 1; j >= 0; j --) {
|
||||
links.eq(j).addClass('wrapped ' + classes[i]);
|
||||
if ($this.height() <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Run function and set event
|
||||
check();
|
||||
$(window).resize(check);
|
||||
});
|
||||
|
||||
/**
|
||||
* Adjust topiclist lists with check boxes
|
||||
*/
|
||||
container.find('ul.topiclist dd.mark').siblings('dt').children('.list-inner').addClass('with-mark');
|
||||
|
||||
/**
|
||||
* Appends contents of all extra columns to first column in
|
||||
* .topiclist lists for mobile devices. Copies contents as is.
|
||||
*
|
||||
* To add that functionality to .topiclist list simply add
|
||||
* responsive-show-all to list of classes
|
||||
*/
|
||||
container.find('.topiclist.responsive-show-all > li > dl').each(function() {
|
||||
var $this = $(this),
|
||||
block = $this.find('dt .responsive-show:last-child'),
|
||||
first = true;
|
||||
|
||||
// Create block that is visible only on mobile devices
|
||||
if (!block.length) {
|
||||
$this.find('dt > .list-inner').append('<div class="responsive-show" style="display:none;" />');
|
||||
block = $this.find('dt .responsive-show:last-child');
|
||||
}
|
||||
else {
|
||||
first = (block.text().trim().length == 0);
|
||||
}
|
||||
|
||||
// Copy contents of each column
|
||||
$this.find('dd').not('.mark').each(function() {
|
||||
var column = $(this),
|
||||
children = column.children(),
|
||||
html = column.html();
|
||||
|
||||
if (children.length == 1 && children.text() == column.text()) {
|
||||
html = children.html();
|
||||
}
|
||||
|
||||
block.append((first ? '' : '<br />') + html);
|
||||
|
||||
first = false;
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Same as above, but prepends text from header to each
|
||||
* column before contents of that column.
|
||||
*
|
||||
* To add that functionality to .topiclist list simply add
|
||||
* responsive-show-columns to list of classes
|
||||
*/
|
||||
container.find('.topiclist.responsive-show-columns').each(function() {
|
||||
var list = $(this),
|
||||
headers = [],
|
||||
headersLength = 0;
|
||||
|
||||
// Find all headers, get contents
|
||||
list.prev('.topiclist').find('li.header dd').not('.mark').each(function() {
|
||||
headers.push($(this).text());
|
||||
headersLength ++;
|
||||
});
|
||||
|
||||
if (!headersLength) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Parse each row
|
||||
list.find('dl').each(function() {
|
||||
var $this = $(this),
|
||||
block = $this.find('dt .responsive-show:last-child'),
|
||||
first = true;
|
||||
|
||||
// Create block that is visible only on mobile devices
|
||||
if (!block.length) {
|
||||
$this.find('dt > .list-inner').append('<div class="responsive-show" style="display:none;" />');
|
||||
block = $this.find('dt .responsive-show:last-child');
|
||||
}
|
||||
else {
|
||||
first = (block.text().trim().length == 0);
|
||||
}
|
||||
|
||||
// Copy contents of each column
|
||||
$this.find('dd').not('.mark').each(function(i) {
|
||||
var column = $(this),
|
||||
children = column.children(),
|
||||
html = column.html();
|
||||
|
||||
if (children.length == 1 && children.text() == column.text()) {
|
||||
html = children.html();
|
||||
}
|
||||
|
||||
// Prepend contents of matching header before contents of column
|
||||
if (i < headersLength) {
|
||||
html = headers[i] + ': <strong>' + html + '</strong>';
|
||||
}
|
||||
|
||||
block.append((first ? '' : '<br />') + html);
|
||||
|
||||
first = false;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Responsive tables
|
||||
*/
|
||||
container.find('table.table1').not('.not-responsive').each(function() {
|
||||
var $this = $(this),
|
||||
th = $this.find('thead > tr > th'),
|
||||
columns = th.length,
|
||||
headers = [],
|
||||
totalHeaders = 0,
|
||||
i, headersLength;
|
||||
|
||||
// Find each header
|
||||
th.each(function(column) {
|
||||
var cell = $(this),
|
||||
colspan = parseInt(cell.attr('colspan')),
|
||||
dfn = cell.attr('data-dfn'),
|
||||
text = dfn ? dfn : cell.text();
|
||||
|
||||
colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
|
||||
|
||||
for (i=0; i<colspan; i++) {
|
||||
headers.push(text);
|
||||
}
|
||||
totalHeaders ++;
|
||||
|
||||
if (dfn && !column) {
|
||||
$this.addClass('show-header');
|
||||
}
|
||||
});
|
||||
|
||||
headersLength = headers.length;
|
||||
|
||||
// Add header text to each cell as <dfn>
|
||||
$this.addClass('responsive');
|
||||
|
||||
if (totalHeaders < 2) {
|
||||
$this.addClass('show-header');
|
||||
return;
|
||||
}
|
||||
|
||||
$this.find('tbody > tr').each(function() {
|
||||
var row = $(this),
|
||||
cells = row.children('td'),
|
||||
column = 0;
|
||||
|
||||
if (cells.length == 1) {
|
||||
row.addClass('big-column');
|
||||
return;
|
||||
}
|
||||
|
||||
cells.each(function() {
|
||||
var cell = $(this),
|
||||
colspan = parseInt(cell.attr('colspan')),
|
||||
text = cell.text().trim();
|
||||
|
||||
if (headersLength <= column) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((text.length && text !== '-') || cell.children().length) {
|
||||
cell.prepend('<dfn style="display: none;">' + headers[column] + '</dfn>');
|
||||
}
|
||||
else {
|
||||
cell.addClass('empty');
|
||||
}
|
||||
|
||||
colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
|
||||
column += colspan;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Hide empty responsive tables
|
||||
*/
|
||||
container.find('table.responsive > tbody').each(function() {
|
||||
var items = $(this).children('tr');
|
||||
if (items.length == 0)
|
||||
{
|
||||
$(this).parent('table:first').addClass('responsive-hide');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Responsive link lists
|
||||
*/
|
||||
container.find('.linklist:not(.navlinks, [data-skip-responsive]), .postbody ul.profile-icons:not([data-skip-responsive])').each(function() {
|
||||
var $this = $(this),
|
||||
$body = $('body'),
|
||||
filterSkip = '.breadcrumbs, [data-skip-responsive]',
|
||||
filterLast = '.pagination, .icon-notifications, .icon-pm, .icon-logout, .icon-login, .mark-read, .edit-icon, .quote-icon',
|
||||
allLinks = $this.children(),
|
||||
links = allLinks.not(filterSkip),
|
||||
html = '<li class="responsive-menu" style="display:none;"><a href="javascript:void(0);" class="responsive-menu-link"> </a><div class="dropdown" style="display:none;"><div class="pointer"><div class="pointer-inner" /></div><ul class="dropdown-contents" /></div></li>',
|
||||
filterLastList = links.filter(filterLast);
|
||||
|
||||
if (links.is('.rightside'))
|
||||
{
|
||||
links.filter('.rightside:first').before(html);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this.append(html);
|
||||
}
|
||||
|
||||
var item = $this.children('.responsive-menu'),
|
||||
menu = item.find('.dropdown-contents'),
|
||||
lastWidth = false,
|
||||
compact = false,
|
||||
responsive = false,
|
||||
copied = false;
|
||||
|
||||
function check() {
|
||||
var width = $body.width();
|
||||
if (responsive && width <= lastWidth) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Reset responsive and compact layout
|
||||
if (responsive) {
|
||||
responsive = false;
|
||||
$this.removeClass('responsive');
|
||||
links.css('display', '');
|
||||
item.css('display', 'none');
|
||||
}
|
||||
|
||||
if (compact) {
|
||||
compact = false;
|
||||
$this.removeClass('compact');
|
||||
}
|
||||
|
||||
// Find tallest element
|
||||
var maxHeight = 0;
|
||||
allLinks.each(function() {
|
||||
if (!$(this).height()) return;
|
||||
maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
|
||||
});
|
||||
|
||||
if (maxHeight < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Nothing to resize if block's height is not bigger than tallest element's height
|
||||
if ($this.height() <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Enable compact layout, find tallest element, compare to height of whole block
|
||||
compact = true;
|
||||
$this.addClass('compact');
|
||||
|
||||
var compactMaxHeight = 0;
|
||||
allLinks.each(function() {
|
||||
if (!$(this).height()) return;
|
||||
compactMaxHeight = Math.max(compactMaxHeight, $(this).outerHeight(true));
|
||||
});
|
||||
|
||||
if ($this.height() <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Compact layout did not resize block enough, switch to responsive layout
|
||||
compact = false;
|
||||
$this.removeClass('compact');
|
||||
responsive = true;
|
||||
|
||||
if (!copied) {
|
||||
var clone = links.clone(true);
|
||||
clone.filter('.rightside').each(function() {
|
||||
menu.prepend(this);
|
||||
});
|
||||
menu.prepend(clone.not('.rightside'));
|
||||
menu.find('li.leftside, li.rightside').removeClass('leftside rightside');
|
||||
menu.find('.inputbox').parents('li:first').css('white-space', 'normal');
|
||||
copied = true;
|
||||
}
|
||||
else {
|
||||
menu.children().css('display', '');
|
||||
}
|
||||
|
||||
item.css('display', '');
|
||||
$this.addClass('responsive');
|
||||
|
||||
// Try to not hide filtered items
|
||||
if (filterLastList.length) {
|
||||
links.not(filterLast).css('display', 'none');
|
||||
|
||||
maxHeight = 0;
|
||||
filterLastList.each(function() {
|
||||
if (!$(this).height()) return;
|
||||
maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
|
||||
});
|
||||
|
||||
if ($this.height() <= maxHeight) {
|
||||
menu.children().filter(filterLast).css('display', 'none');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
links.css('display', 'none');
|
||||
}
|
||||
|
||||
phpbb.registerDropdown(item.find('a.responsive-menu-link'), item.find('.dropdown'));
|
||||
|
||||
check();
|
||||
$(window).resize(check);
|
||||
});
|
||||
|
||||
/**
|
||||
* Responsive tabs
|
||||
*/
|
||||
container.find('#tabs, #minitabs').not('[data-skip-responsive]').each(function() {
|
||||
var $this = $(this),
|
||||
$body = $('body'),
|
||||
ul = $this.children(),
|
||||
tabs = ul.children().not('[data-skip-responsive]'),
|
||||
links = tabs.children('a'),
|
||||
item = ul.append('<li class="responsive-tab" style="display:none;"><a href="javascript:void(0);" class="responsive-tab-link"><span> </span></a><div class="dropdown tab-dropdown" style="display: none;"><div class="pointer"><div class="pointer-inner" /></div><ul class="dropdown-contents" /></div></li>').find('li.responsive-tab'),
|
||||
menu = item.find('.dropdown-contents'),
|
||||
maxHeight = 0,
|
||||
lastWidth = false,
|
||||
responsive = false;
|
||||
|
||||
links.each(function() {
|
||||
var link = $(this);
|
||||
maxHeight = Math.max(maxHeight, Math.max(link.outerHeight(true), link.parent().outerHeight(true)));
|
||||
})
|
||||
|
||||
function check() {
|
||||
var width = $body.width(),
|
||||
height = $this.height();
|
||||
|
||||
if (arguments.length == 0 && (!responsive || width <= lastWidth) && height <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
tabs.show();
|
||||
item.hide();
|
||||
|
||||
lastWidth = width;
|
||||
height = $this.height();
|
||||
if (height <= maxHeight) {
|
||||
responsive = false;
|
||||
if (item.hasClass('dropdown-visible')) {
|
||||
phpbb.toggleDropdown.call(item.find('a.responsive-tab-link').get(0));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
responsive = true;
|
||||
item.show();
|
||||
menu.html('');
|
||||
|
||||
var availableTabs = tabs.filter(':not(.activetab, .responsive-tab)'),
|
||||
total = availableTabs.length,
|
||||
i, tab;
|
||||
|
||||
for (i = total - 1; i >= 0; i --) {
|
||||
tab = availableTabs.eq(i);
|
||||
menu.prepend(tab.clone(true));
|
||||
tab.hide();
|
||||
if ($this.height() <= maxHeight) {
|
||||
menu.find('a').click(function() { check(true); });
|
||||
return;
|
||||
}
|
||||
}
|
||||
menu.find('a').click(function() { check(true); });
|
||||
}
|
||||
|
||||
phpbb.registerDropdown(item.find('a.responsive-tab-link'), item.find('.dropdown'), {visibleClass: 'activetab'});
|
||||
|
||||
check(true);
|
||||
$(window).resize(check);
|
||||
});
|
||||
|
||||
/**
|
||||
* Hide UCP/MCP navigation if there is only 1 item
|
||||
*/
|
||||
container.find('#navigation').each(function() {
|
||||
var items = $(this).children('ol, ul').children('li');
|
||||
if (items.length == 1)
|
||||
{
|
||||
$(this).addClass('responsive-hide');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Replace responsive text
|
||||
*/
|
||||
container.find('[data-responsive-text]').each(function() {
|
||||
var $this = $(this),
|
||||
fullText = $this.text(),
|
||||
responsiveText = $this.attr('data-responsive-text'),
|
||||
responsive = false;
|
||||
|
||||
function check() {
|
||||
if ($(window).width() > 700) {
|
||||
if (!responsive) return;
|
||||
$this.text(fullText);
|
||||
responsive = false;
|
||||
return;
|
||||
}
|
||||
if (responsive) return;
|
||||
$this.text(responsiveText);
|
||||
responsive = true;
|
||||
}
|
||||
|
||||
check();
|
||||
$(window).resize(check);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Run onload functions
|
||||
*/
|
||||
|
@ -422,412 +964,6 @@ function insert_single_user(formId, user)
|
|||
$('#' + this.getAttribute('data-focus')).focus();
|
||||
});
|
||||
|
||||
// Reset avatar dimensions when changing URL or EMAIL
|
||||
$('input[data-reset-on-edit]').bind('keyup', function() {
|
||||
$(this.getAttribute('data-reset-on-edit')).val('');
|
||||
});
|
||||
|
||||
// Pagination
|
||||
$('a.pagination-trigger').click(function() {
|
||||
jumpto($(this));
|
||||
});
|
||||
|
||||
// Adjust HTML code for IE8 and older versions
|
||||
var test = document.createElement('div'),
|
||||
oldBrowser = (typeof test.style.borderRadius == 'undefined');
|
||||
delete test;
|
||||
|
||||
if (oldBrowser) {
|
||||
// Fix .linklist.bulletin lists
|
||||
$('ul.linklist.bulletin li:first-child, ul.linklist.bulletin li.rightside:last-child').addClass('no-bulletin');
|
||||
|
||||
// Do not run functions below for old browsers
|
||||
return;
|
||||
}
|
||||
|
||||
// Adjust topiclist lists with check boxes
|
||||
$('ul.topiclist dd.mark').siblings('dt').children('.list-inner').addClass('with-mark');
|
||||
|
||||
// Resize navigation block to keep all links on same line
|
||||
$('.navlinks').each(function() {
|
||||
var $this = $(this),
|
||||
left = $this.children().not('.rightside'),
|
||||
right = $this.children('.rightside');
|
||||
|
||||
if (left.length !== 1 || !right.length) return;
|
||||
|
||||
function resize() {
|
||||
var width = 0,
|
||||
diff = left.outerWidth(true) - left.width();
|
||||
|
||||
right.each(function() {
|
||||
width += $(this).outerWidth(true);
|
||||
});
|
||||
left.css('max-width', Math.floor($this.width() - width - diff) + 'px');
|
||||
}
|
||||
|
||||
resize();
|
||||
$(window).resize(resize);
|
||||
});
|
||||
|
||||
// Responsive breadcrumbs
|
||||
$('.breadcrumbs:not(.skip-responsive, .linklist.leftside .breadcrumbs)').each(function() {
|
||||
var $this = $(this),
|
||||
$body = $('body'),
|
||||
links = $this.find('.crumb'),
|
||||
length = links.length,
|
||||
classes = ['wrapped-wide', 'wrapped-medium', 'wrapped-small'],
|
||||
classesLength = classes.length,
|
||||
maxHeight = 0,
|
||||
lastWidth = false,
|
||||
wrapped = false;
|
||||
|
||||
// Test height by setting nowrap
|
||||
$this.css('white-space', 'nowrap');
|
||||
maxHeight = $this.height() + 1;
|
||||
$this.css('white-space', '');
|
||||
|
||||
// Set tooltips
|
||||
$this.find('a').each(function() {
|
||||
var $link = $(this);
|
||||
$link.attr('title', $link.text());
|
||||
});
|
||||
|
||||
// Funciton that checks breadcrumbs
|
||||
function check() {
|
||||
var height = $this.height(),
|
||||
width = $body.width(),
|
||||
link, i, j;
|
||||
|
||||
if (height <= maxHeight) {
|
||||
if (!wrapped || lastWidth === false || lastWidth >= width) {
|
||||
lastWidth = width;
|
||||
return;
|
||||
}
|
||||
}
|
||||
lastWidth = width;
|
||||
|
||||
if (wrapped) {
|
||||
$this.removeClass('wrapped').find('.crumb.wrapped').removeClass('wrapped ' + classes.join(' '));
|
||||
wrapped = false;
|
||||
if ($this.height() <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
wrapped = true;
|
||||
$this.addClass('wrapped');
|
||||
if ($this.height() <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < classesLength; i ++) {
|
||||
for (j = length - 1; j >= 0; j --) {
|
||||
links.eq(j).addClass('wrapped ' + classes[i]);
|
||||
if ($this.height() <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Run function and set event
|
||||
check();
|
||||
$(window).resize(check);
|
||||
});
|
||||
|
||||
// Responsive tables
|
||||
$('table.table1').not('.not-responsive').each(function() {
|
||||
var $this = $(this),
|
||||
th = $this.find('thead > tr > th'),
|
||||
columns = th.length,
|
||||
headers = [],
|
||||
totalHeaders = 0,
|
||||
i, headersLength;
|
||||
|
||||
// Find each header
|
||||
th.each(function() {
|
||||
var cell = $(this),
|
||||
colspan = parseInt(cell.attr('colspan')),
|
||||
dfn = cell.attr('data-dfn'),
|
||||
text = dfn ? dfn : cell.text();
|
||||
|
||||
colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
|
||||
|
||||
for (i=0; i<colspan; i++) {
|
||||
headers.push(text);
|
||||
}
|
||||
totalHeaders ++;
|
||||
});
|
||||
|
||||
headersLength = headers.length;
|
||||
|
||||
// Add header text to each cell as <dfn>
|
||||
$this.addClass('responsive');
|
||||
|
||||
if (totalHeaders < 2) {
|
||||
$this.addClass('show-header');
|
||||
return;
|
||||
}
|
||||
|
||||
$this.find('tbody > tr').each(function() {
|
||||
var row = $(this),
|
||||
cells = row.children('td'),
|
||||
column = 0;
|
||||
|
||||
if (cells.length == 1) {
|
||||
row.addClass('big-column');
|
||||
return;
|
||||
}
|
||||
|
||||
cells.each(function() {
|
||||
var cell = $(this),
|
||||
colspan = parseInt(cell.attr('colspan')),
|
||||
text = cell.text().trim();
|
||||
|
||||
if (headersLength <= column) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (text.length && text !== '-') {
|
||||
cell.prepend('<dfn style="display: none;">' + headers[column] + '</dfn>');
|
||||
}
|
||||
else {
|
||||
cell.addClass('empty');
|
||||
}
|
||||
|
||||
colspan = isNaN(colspan) || colspan < 1 ? 1 : colspan;
|
||||
column += colspan;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Responsive link lists
|
||||
$('.linklist:not(.navlinks, .skip-responsive), .postbody ul.profile-icons:not(.skip-responsive)').each(function() {
|
||||
var $this = $(this),
|
||||
$body = $('body'),
|
||||
links = $this.children().not('.skip-responsive'),
|
||||
html = '<li class="responsive-menu" style="display:none;"><a href="javascript:void(0);" class="responsive-menu-link"> </a><ul class="responsive-popup" style="display:none;" /></li>',
|
||||
// List of items that should be hidden last
|
||||
filterString = '.pagination, .icon-notifications, .icon-pm, .icon-logout, .icon-login, .mark-read, .breadcrumbs, .edit-icon, .quote-icon',
|
||||
filtered = links.filter(filterString);
|
||||
|
||||
if (links.is('.rightside'))
|
||||
{
|
||||
links.filter('.rightside:first').before(html);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this.append(html);
|
||||
}
|
||||
|
||||
var toggle = $this.children('.responsive-menu'),
|
||||
toggleLink = toggle.find('a.responsive-menu-link'),
|
||||
menu = toggle.find('ul.responsive-popup'),
|
||||
lastWidth = false,
|
||||
compact = false,
|
||||
responsive = false,
|
||||
copied = false;
|
||||
|
||||
function check() {
|
||||
var width = $body.width();
|
||||
if (responsive && width <= lastWidth) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Reset responsive and compact layout
|
||||
if (responsive) {
|
||||
responsive = false;
|
||||
$this.removeClass('responsive');
|
||||
links.css('display', '');
|
||||
toggle.css('display', 'none');
|
||||
}
|
||||
|
||||
if (compact) {
|
||||
compact = false;
|
||||
$this.removeClass('compact');
|
||||
}
|
||||
|
||||
// Find tallest element
|
||||
var maxHeight = 0;
|
||||
links.each(function() {
|
||||
if (!$(this).height()) return;
|
||||
maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
|
||||
});
|
||||
|
||||
if (maxHeight < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Nothing to resize if block's height is not bigger than tallest element's height
|
||||
if ($this.height() <= maxHeight) {
|
||||
toggle.removeClass('visible');
|
||||
menu.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
// Enable compact layout, find tallest element, compare to height of whole block
|
||||
compact = true;
|
||||
$this.addClass('compact');
|
||||
|
||||
var compactMaxHeight = 0;
|
||||
links.each(function() {
|
||||
if (!$(this).height()) return;
|
||||
compactMaxHeight = Math.max(compactMaxHeight, $(this).outerHeight(true));
|
||||
});
|
||||
|
||||
if ($this.height() <= maxHeight) {
|
||||
toggle.removeClass('visible');
|
||||
menu.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
// Compact layout did not resize block enough, switch to responsive layout
|
||||
compact = false;
|
||||
$this.removeClass('compact');
|
||||
responsive = true;
|
||||
|
||||
if (!copied) {
|
||||
if (menu.parents().is('.rightside')) {
|
||||
menu.addClass('responsive-rightside');
|
||||
}
|
||||
menu.append(links.clone(true));
|
||||
menu.find('li.leftside, li.rightside').removeClass('leftside rightside');
|
||||
menu.find('.inputbox').parents('li:first').css('white-space', 'normal');
|
||||
copied = true;
|
||||
}
|
||||
else {
|
||||
menu.children().css('display', '');
|
||||
}
|
||||
|
||||
toggle.css('display', '');
|
||||
$this.addClass('responsive');
|
||||
|
||||
// Try to not hide filtered items
|
||||
if (filtered.length) {
|
||||
links.not(filterString).css('display', 'none');
|
||||
|
||||
maxHeight = 0;
|
||||
filtered.each(function() {
|
||||
if (!$(this).height()) return;
|
||||
maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
|
||||
});
|
||||
|
||||
if ($this.height() <= maxHeight) {
|
||||
menu.children().filter(filterString).css('display', 'none');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
links.css('display', 'none');
|
||||
}
|
||||
|
||||
toggleLink.click(function() {
|
||||
if (!responsive) return;
|
||||
if (!toggle.hasClass('visible')) {
|
||||
// Hide other popups
|
||||
$('.responsive-menu.visible').removeClass('visible').find('.responsive-popup').hide();
|
||||
}
|
||||
toggle.toggleClass('visible');
|
||||
menu.toggle();
|
||||
});
|
||||
|
||||
check();
|
||||
$(window).resize(check);
|
||||
});
|
||||
|
||||
// Responsive tabs
|
||||
$('#tabs, #minitabs').not('.skip-responsive').each(function() {
|
||||
var $this = $(this),
|
||||
$body = $('body'),
|
||||
ul = $this.children(),
|
||||
tabs = ul.children().not('.skip-responsive'),
|
||||
links = tabs.children('a'),
|
||||
toggle = ul.append('<li class="responsive-tab" style="display:none;"><a href="javascript:void(0);" class="responsive-tab-link"><span> </span></a><ul class="responsive-tabs" style="display:none;" /></li>').find('li.responsive-tab'),
|
||||
toggleLink = toggle.find('a.responsive-tab-link'),
|
||||
menu = toggle.find('ul.responsive-tabs'),
|
||||
maxHeight = 0,
|
||||
lastWidth = false,
|
||||
responsive = false;
|
||||
|
||||
links.each(function() {
|
||||
maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
|
||||
})
|
||||
|
||||
function check() {
|
||||
var width = $body.width(),
|
||||
height = $this.height();
|
||||
|
||||
if (arguments.length == 0 && (!responsive || width <= lastWidth) && height <= maxHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
tabs.show();
|
||||
toggle.hide();
|
||||
|
||||
lastWidth = width;
|
||||
height = $this.height();
|
||||
if (height <= maxHeight) {
|
||||
responsive = false;
|
||||
return;
|
||||
}
|
||||
|
||||
responsive = true;
|
||||
toggle.show();
|
||||
menu.hide().html('');
|
||||
|
||||
var availableTabs = tabs.filter(':not(.activetab, .responsive-tab)'),
|
||||
total = availableTabs.length,
|
||||
i, tab;
|
||||
|
||||
for (i = total - 1; i >= 0; i --) {
|
||||
tab = availableTabs.eq(i);
|
||||
menu.prepend(tab.clone(true));
|
||||
tab.hide();
|
||||
if ($this.height() <= maxHeight) {
|
||||
menu.find('a').click(function() { check(true); });
|
||||
return;
|
||||
}
|
||||
}
|
||||
menu.find('a').click(function() { check(true); });
|
||||
}
|
||||
|
||||
toggleLink.click(function() {
|
||||
if (!responsive) return;
|
||||
menu.toggle();
|
||||
});
|
||||
|
||||
check(true);
|
||||
$(window).resize(check);
|
||||
});
|
||||
|
||||
// Hide responsive menu and tabs
|
||||
$('#phpbb').click(function(e) {
|
||||
var parents = $(e.target).parents();
|
||||
if (!parents.is('.responsive-menu.visible')) {
|
||||
$('.responsive-menu.visible').removeClass('visible').find('.responsive-popup').hide();
|
||||
}
|
||||
if (!parents.is('.responsive-tab')) {
|
||||
$('.responsive-tabs').hide();
|
||||
}
|
||||
});
|
||||
|
||||
// Hide *CP navigation if there is only 1 item
|
||||
$('#navigation').each(function() {
|
||||
var items = $(this).children('ol, ul').children('li');
|
||||
if (items.length == 1)
|
||||
{
|
||||
$(this).addClass('responsive-hide');
|
||||
}
|
||||
});
|
||||
|
||||
// Hide empty responsive tables
|
||||
$('table.responsive > tbody').each(function() {
|
||||
var items = $(this).children('tr');
|
||||
if (items.length == 0)
|
||||
{
|
||||
$(this).parent('table:first').addClass('responsive-hide');
|
||||
}
|
||||
});
|
||||
parse_document($('body'));
|
||||
});
|
||||
})(jQuery);
|
||||
|
|
|
@ -42,6 +42,16 @@
|
|||
<a href="{forumrow.subforum.U_SUBFORUM}" class="subforum<!-- IF forumrow.subforum.S_UNREAD --> unread<!-- ELSE --> read<!-- ENDIF -->" title="<!-- IF forumrow.subforum.UNREAD -->{L_UNREAD_POSTS}<!-- ELSE -->{L_NO_UNREAD_POSTS}<!-- ENDIF -->">{forumrow.subforum.SUBFORUM_NAME}</a><!-- IF not forumrow.subforum.S_LAST_ROW -->,<!-- ENDIF -->
|
||||
<!-- END subforum -->
|
||||
<!-- ENDIF -->
|
||||
|
||||
<!-- IF not S_IS_BOT -->
|
||||
<div class="responsive-show" style="display: none;">
|
||||
<!-- IF forumrow.CLICKS -->
|
||||
{L_REDIRECTS}{L_COLON} <strong>{forumrow.CLICKS}</strong>
|
||||
<!-- ELSEIF not forumrow.S_IS_LINK and forumrow.TOPICS -->
|
||||
{L_TOPICS}{L_COLON} <strong>{forumrow.TOPICS}</strong>
|
||||
<!-- ENDIF -->
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
</div>
|
||||
</dt>
|
||||
<!-- IF forumrow.CLICKS -->
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!-- INCLUDE overall_header.html -->
|
||||
|
||||
<p class="{S_CONTENT_FLOW_END} responsive-center<!-- IF S_USER_LOGGED_IN --> rightside<!-- ENDIF -->"><!-- IF S_USER_LOGGED_IN -->{LAST_VISIT_DATE}<!-- ELSE -->{CURRENT_TIME}<!-- ENDIF --></p>
|
||||
<!-- IF U_MCP --><p class="responsive-center">{CURRENT_TIME} <br />[ <a href="{U_MCP}">{L_MCP}</a> ]</p><!-- ELSEIF S_USER_LOGGED_IN --><p>{CURRENT_TIME}</p><!-- ENDIF -->
|
||||
<!-- IF U_MCP --><p class="responsive-center">{CURRENT_TIME} <br />[ <a href="{U_MCP}">{L_MCP}</a> ]</p><!-- ELSEIF S_USER_LOGGED_IN --><p class="responsive-center">{CURRENT_TIME}</p><!-- ENDIF -->
|
||||
|
||||
<!-- IF S_DISPLAY_SEARCH or (S_USER_LOGGED_IN and not S_IS_BOT) -->
|
||||
<ul class="linklist bulletin">
|
||||
|
@ -25,10 +25,10 @@
|
|||
<form method="post" action="{S_LOGIN_ACTION}" class="headerspace">
|
||||
<h3><a href="{U_LOGIN_LOGOUT}">{L_LOGIN_LOGOUT}</a><!-- IF S_REGISTER_ENABLED --> • <a href="{U_REGISTER}">{L_REGISTER}</a><!-- ENDIF --></h3>
|
||||
<fieldset class="quick-login">
|
||||
<label for="username">{L_USERNAME}{L_COLON}</label> <input type="text" name="username" id="username" size="10" class="inputbox" title="{L_USERNAME}" />
|
||||
<label for="password">{L_PASSWORD}{L_COLON}</label> <input type="password" name="password" id="password" size="10" class="inputbox" title="{L_PASSWORD}" />
|
||||
<label for="username"><span>{L_USERNAME}{L_COLON}</span> <input type="text" name="username" id="username" size="10" class="inputbox" title="{L_USERNAME}" /></label>
|
||||
<label for="password"><span>{L_PASSWORD}{L_COLON}</span> <input type="password" name="password" id="password" size="10" class="inputbox" title="{L_PASSWORD}" /></label>
|
||||
<!-- IF S_AUTOLOGIN_ENABLED -->
|
||||
| <label for="autologin">{L_LOG_ME_IN} <input type="checkbox" name="autologin" id="autologin" /></label>
|
||||
<span class="responsive-hide">|</span> <label for="autologin">{L_LOG_ME_IN} <input type="checkbox" name="autologin" id="autologin" /></label>
|
||||
<!-- ENDIF -->
|
||||
<input type="submit" name="login" value="{L_LOGIN}" class="button2" />
|
||||
{S_LOGIN_REDIRECT}
|
||||
|
|
|
@ -63,7 +63,15 @@
|
|||
</ul>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
|
||||
<div class="responsive-hide">
|
||||
<!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
|
||||
{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
|
||||
</div>
|
||||
<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 />
|
||||
{L_REPLIES}{L_COLON} <strong>{topicrow.REPLIES}</strong>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</dt>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="topiclist cplist missing-column">
|
||||
<ul class="topiclist cplist missing-column responsive-show-all">
|
||||
|
||||
<!-- BEGIN unapproved -->
|
||||
<li class="row<!-- IF unapproved.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
|
||||
|
@ -75,7 +75,7 @@
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="topiclist cplist two-long-columns">
|
||||
<ul class="topiclist cplist two-long-columns responsive-show-all">
|
||||
|
||||
<!-- BEGIN report -->
|
||||
<li class="row<!-- IF report.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
|
||||
|
@ -116,7 +116,7 @@
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="topiclist cplist two-long-columns">
|
||||
<ul class="topiclist cplist two-long-columns responsive-show-all">
|
||||
|
||||
<!-- BEGIN pm_report -->
|
||||
<li class="row<!-- IF pm_report.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="topiclist cplist missing-column">
|
||||
<ul class="topiclist cplist missing-column responsive-show-all">
|
||||
|
||||
<!-- BEGIN postrow -->
|
||||
|
||||
|
|
|
@ -48,6 +48,9 @@
|
|||
<a href="{postrow.U_VIEW_DETAILS}" class="topictitle">{postrow.PM_SUBJECT}</a> {postrow.ATTACH_ICON_IMG}<br />
|
||||
<span>{L_MESSAGE_BY_AUTHOR} {postrow.PM_AUTHOR_FULL} » {postrow.PM_TIME}</span><br />
|
||||
<span>{L_MESSAGE_TO} {postrow.RECIPIENTS}</span>
|
||||
<div class="responsive-show" style="display: none;">
|
||||
{L_REPORTER}{L_COLON} {postrow.REPORTER_FULL} « {postrow.REPORT_TIME}
|
||||
</div>
|
||||
</div>
|
||||
</dt>
|
||||
<dd class="moderation">
|
||||
|
@ -58,6 +61,10 @@
|
|||
<div class="list-inner">
|
||||
<a href="{postrow.U_VIEW_DETAILS}" class="topictitle">{postrow.POST_SUBJECT}</a> {postrow.ATTACH_ICON_IMG}<br />
|
||||
<span>{L_POSTED} {L_POST_BY_AUTHOR} {postrow.POST_AUTHOR_FULL} » {postrow.POST_TIME}</span>
|
||||
<div class="responsive-show" style="display: none;">
|
||||
{L_REPORTER}{L_COLON} {postrow.REPORTER_FULL} « {postrow.REPORT_TIME}<br />
|
||||
<!-- IF postrow.U_VIEWFORUM -->{L_FORUM}{L_COLON} <a href="{postrow.U_VIEWFORUM}">{postrow.FORUM_NAME}</a><!-- ELSE -->{postrow.FORUM_NAME}<!-- ENDIF -->
|
||||
</div>
|
||||
</div>
|
||||
</dt>
|
||||
<dd class="moderation">
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<div class="navbar">
|
||||
<div class="inner">
|
||||
|
||||
<ul class="linklist leftside bulletin">
|
||||
<ul class="linklist bulletin">
|
||||
<li class="icon-home breadcrumbs"><!-- IF U_SITE_HOME --><span class="crumb"><a href="{U_SITE_HOME}">{L_SITE_HOME}</a> <strong>‹</strong></span> <!-- ENDIF --><span class="crumb"><a href="{U_INDEX}" accesskey="h">{L_INDEX}</a></span>
|
||||
<!-- EVENT overall_footer_breadcrumb_append -->
|
||||
</li>
|
||||
|
@ -15,11 +15,9 @@
|
|||
<!-- IF U_BOOKMARK_TOPIC --><li class="icon-bookmark"><a href="{U_BOOKMARK_TOPIC}" title="{L_BOOKMARK_TOPIC}" data-ajax="alt_text" data-alt-text="{S_BOOKMARK_TOGGLE}">{S_BOOKMARK_TOPIC}</a></li><!-- ENDIF -->
|
||||
<!-- IF U_BUMP_TOPIC --><li class="icon-bump"><a href="{U_BUMP_TOPIC}" title="{L_BUMP_TOPIC}" data-ajax="true">{L_BUMP_TOPIC}</a></li><!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
</ul>
|
||||
<ul class="linklist rightside bulletin">
|
||||
<!-- IF U_TEAM --><li><a href="{U_TEAM}">{L_THE_TEAM}</a><!-- ENDIF -->
|
||||
<!-- IF not S_IS_BOT --><li><a href="{U_DELETE_COOKIES}" data-ajax="true" data-refresh="true">{L_DELETE_COOKIES}</a></li><!-- ENDIF -->
|
||||
<li>{S_TIMEZONE}</li>
|
||||
<li class="rightside">{S_TIMEZONE}</li>
|
||||
<!-- IF not S_IS_BOT --><li class="rightside"><a href="{U_DELETE_COOKIES}" data-ajax="true" data-refresh="true">{L_DELETE_COOKIES}</a></li><!-- ENDIF -->
|
||||
<!-- IF U_TEAM --><li class="rightside"><a href="{U_TEAM}">{L_THE_TEAM}</a><!-- ENDIF -->
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<!-- IF S_ALLOW_CDN --><link href="//fonts.googleapis.com/css?family=Open+Sans:600&subset=latin,cyrillic-ext,latin-ext,cyrillic,greek-ext,greek,vietnamese" rel="stylesheet" type="text/css" media="screen, projection" /><!-- ENDIF -->
|
||||
<link href="{T_STYLESHEET_LINK}" rel="stylesheet" type="text/css" media="screen, projection" />
|
||||
<link href="{T_STYLESHEET_LANG_LINK}" rel="stylesheet" type="text/css" media="screen, projection" />
|
||||
<link href="{T_THEME_PATH}/responsive.css" rel="stylesheet" type="text/css" media="only screen and (max-width: 700px), only screen and (max-device-width: 700px)" />
|
||||
<link href="{T_THEME_PATH}/responsive.css?assets_version={T_ASSETS_VERSION}" rel="stylesheet" type="text/css" media="only screen and (max-width: 700px), only screen and (max-device-width: 700px)" />
|
||||
|
||||
<!-- IF S_CONTENT_DIRECTION eq 'rtl' -->
|
||||
<link href="{T_THEME_PATH}/bidi.css?assets_version={T_ASSETS_VERSION}" rel="stylesheet" type="text/css" media="screen, projection" />
|
||||
|
@ -97,43 +97,45 @@
|
|||
<!-- IF S_DISPLAY_SEARCH and not S_IN_SEARCH --><li class="responsive-search rightside" style="display: none;"><a href="{U_SEARCH}" title="{L_SEARCH_ADV_EXPLAIN}">{L_SEARCH}</a></li><!-- ENDIF -->
|
||||
</ul>
|
||||
|
||||
<ul class="linklist bulletin">
|
||||
<!-- IF not S_IS_BOT and S_USER_LOGGED_IN -->
|
||||
<ul class="linklist leftside bulletin">
|
||||
<!-- IF S_NOTIFICATIONS_DISPLAY -->
|
||||
<li class="icon-notification skip-responsive">
|
||||
<li class="icon-notification" data-skip-responsive="true">
|
||||
<a href="{U_VIEW_ALL_NOTIFICATIONS}" id="notification_list_button"><span>{L_NOTIFICATIONS} [</span><strong>{NOTIFICATIONS_COUNT}</strong><span>]</span></a>
|
||||
<div id="notification_list" class="notification_list">
|
||||
<div class="pointer"><div class="pointer_inner"></div></div>
|
||||
<div class="header">
|
||||
{L_NOTIFICATIONS}
|
||||
<span class="header_settings"><a href="{U_NOTIFICATION_SETTINGS}">{L_SETTINGS}</a></span>
|
||||
</div>
|
||||
<div id="notification_list" class="dropdown notification_list">
|
||||
<div class="pointer"><div class="pointer-inner"></div></div>
|
||||
<div class="dropdown-contents">
|
||||
<div class="header">
|
||||
{L_NOTIFICATIONS}
|
||||
<span class="header_settings"><a href="{U_NOTIFICATION_SETTINGS}">{L_SETTINGS}</a></span>
|
||||
</div>
|
||||
|
||||
<ul>
|
||||
<!-- IF not .notifications -->
|
||||
<li>
|
||||
{L_NO_NOTIFICATIONS}
|
||||
</li>
|
||||
<!-- ENDIF -->
|
||||
<!-- BEGIN notifications -->
|
||||
<li class="<!-- IF notifications.UNREAD --> bg2<!-- ENDIF -->">
|
||||
<!-- IF notifications.URL --><a href="<!-- IF notifications.UNREAD -->{notifications.U_MARK_READ}<!-- ELSE -->{notifications.URL}<!-- ENDIF -->"><!-- ENDIF -->
|
||||
<!-- IF notifications.AVATAR -->{notifications.AVATAR}<!-- ELSE --><img src="{T_THEME_PATH}/images/no_avatar.gif" alt="" /><!-- ENDIF -->
|
||||
<div class="notification_text">
|
||||
<p>{notifications.FORMATTED_TITLE}</p>
|
||||
<p>» {notifications.TIME}</p>
|
||||
<ul>
|
||||
<!-- IF not .notifications -->
|
||||
<li>
|
||||
{L_NO_NOTIFICATIONS}
|
||||
</li>
|
||||
<!-- ENDIF -->
|
||||
<!-- BEGIN notifications -->
|
||||
<li class="<!-- IF notifications.UNREAD --> bg2<!-- ENDIF -->">
|
||||
<!-- IF notifications.URL --><a href="<!-- IF notifications.UNREAD -->{notifications.U_MARK_READ}<!-- ELSE -->{notifications.URL}<!-- ENDIF -->"><!-- ENDIF -->
|
||||
<!-- IF notifications.AVATAR -->{notifications.AVATAR}<!-- ELSE --><img src="{T_THEME_PATH}/images/no_avatar.gif" alt="" /><!-- ENDIF -->
|
||||
<div class="notification_text">
|
||||
<p>{notifications.FORMATTED_TITLE}</p>
|
||||
<p>» {notifications.TIME}</p>
|
||||
|
||||
<!-- IF not notifications.URL and notifications.U_MARK_READ -->
|
||||
<p><a href="{notifications.U_MARK_READ}">{L_MARK_READ}</a></p>
|
||||
<!-- ENDIF -->
|
||||
</div>
|
||||
<!-- IF notifications.URL --></a><!-- ENDIF -->
|
||||
</li>
|
||||
<!-- END notifications -->
|
||||
</ul>
|
||||
<!-- IF not notifications.URL and notifications.U_MARK_READ -->
|
||||
<p><a href="{notifications.U_MARK_READ}">{L_MARK_READ}</a></p>
|
||||
<!-- ENDIF -->
|
||||
</div>
|
||||
<!-- IF notifications.URL --></a><!-- ENDIF -->
|
||||
</li>
|
||||
<!-- END notifications -->
|
||||
</ul>
|
||||
|
||||
<div class="footer">
|
||||
<a href="{U_VIEW_ALL_NOTIFICATIONS}"><span>{L_SEE_ALL}</span></a>
|
||||
<div class="footer">
|
||||
<a href="{U_VIEW_ALL_NOTIFICATIONS}"><span>{L_SEE_ALL}</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
@ -152,18 +154,16 @@
|
|||
<!-- IF U_RESTORE_PERMISSIONS -->
|
||||
<li class="icon-restore-permissions"><a href="{U_RESTORE_PERMISSIONS}">{L_RESTORE_PERMISSIONS}</a></li>
|
||||
<!-- ENDIF -->
|
||||
</ul>
|
||||
<!-- ENDIF -->
|
||||
|
||||
<ul class="linklist rightside<!-- IF S_IS_BOT or not S_USER_LOGGED_IN --> fullwidth<!-- ENDIF -->">
|
||||
<!-- EVENT overall_header_navigation_prepend -->
|
||||
<li class="icon-faq"><a href="{U_FAQ}" title="{L_FAQ_EXPLAIN}">{L_FAQ}</a></li>
|
||||
<!-- IF not S_IS_BOT -->
|
||||
<!-- IF S_DISPLAY_MEMBERLIST --><li class="icon-members"><a href="{U_MEMBERLIST}" title="{L_MEMBERLIST_EXPLAIN}">{L_MEMBERLIST}</a></li><!-- ENDIF -->
|
||||
<!-- IF not S_USER_LOGGED_IN and S_REGISTER_ENABLED and not (S_SHOW_COPPA or S_REGISTRATION) --><li class="icon-register"><a href="{U_REGISTER}">{L_REGISTER}</a></li><!-- ENDIF -->
|
||||
<li class="icon-logout"><a href="{U_LOGIN_LOGOUT}" title="{L_LOGIN_LOGOUT}" accesskey="x">{L_LOGIN_LOGOUT}</a></li>
|
||||
<!-- ENDIF -->
|
||||
<!-- EVENT overall_header_navigation_append -->
|
||||
<!-- IF not S_IS_BOT -->
|
||||
<li class="icon-logout rightside no-bulletin"><a href="{U_LOGIN_LOGOUT}" title="{L_LOGIN_LOGOUT}" accesskey="x">{L_LOGIN_LOGOUT}</a></li>
|
||||
<!-- IF not S_USER_LOGGED_IN and S_REGISTER_ENABLED and not (S_SHOW_COPPA or S_REGISTRATION) --><li class="icon-register rightside no-bulletin"><a href="{U_REGISTER}">{L_REGISTER}</a></li><!-- ENDIF -->
|
||||
<!-- IF S_DISPLAY_MEMBERLIST --><li class="icon-members rightside no-bulletin"><a href="{U_MEMBERLIST}" title="{L_MEMBERLIST_EXPLAIN}">{L_MEMBERLIST}</a></li><!-- ENDIF -->
|
||||
<!-- ENDIF -->
|
||||
<li class="icon-faq rightside no-bulletin"><a href="{U_FAQ}" title="{L_FAQ_EXPLAIN}">{L_FAQ}</a></li>
|
||||
<!-- EVENT overall_header_navigation_prepend -->
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<!-- IF S_ALLOW_CDN --><link href="//fonts.googleapis.com/css?family=Open+Sans:600&subset=latin,cyrillic-ext,latin-ext,cyrillic,greek-ext,greek,vietnamese" rel="stylesheet" type="text/css" media="screen, projection" /><!-- ENDIF -->
|
||||
<link href="{T_STYLESHEET_LINK}" rel="stylesheet" type="text/css" media="screen, projection" />
|
||||
<link href="{T_STYLESHEET_LANG_LINK}" rel="stylesheet" type="text/css" media="screen, projection" />
|
||||
<link href="{T_THEME_PATH}/responsive.css" rel="stylesheet" type="text/css" media="only screen and (max-width: 700px), only screen and (max-device-width: 700px)" />
|
||||
<link href="{T_THEME_PATH}/responsive.css?assets_version={T_ASSETS_VERSION}" rel="stylesheet" type="text/css" media="only screen and (max-width: 700px), only screen and (max-device-width: 700px)" />
|
||||
|
||||
<!-- IF S_CONTENT_DIRECTION eq 'rtl' -->
|
||||
<link href="{T_THEME_PATH}/bidi.css?assets_version={T_ASSETS_VERSION}" rel="stylesheet" type="text/css" media="screen, projection" />
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="topiclist cplist">
|
||||
<ul class="topiclist cplist responsive-show-columns">
|
||||
|
||||
<!-- BEGIN attachrow -->
|
||||
<li class="row<!-- IF attachrow.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<dt> </dt>
|
||||
<dd><input type="submit" name="submit" tabindex="6" value="{L_UCP_AUTH_LINK_LINK}" class="button1" /></dd>
|
||||
</dl>
|
||||
<!-- ENDIF-->
|
||||
<!-- ENDIF -->
|
||||
</fieldset>
|
||||
{oauth.HIDDEN_FIELDS}
|
||||
{S_HIDDEN_FIELDS}
|
||||
|
|
|
@ -214,7 +214,7 @@
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="topiclist cplist two-long-columns">
|
||||
<ul class="topiclist cplist two-long-columns responsive-show-all">
|
||||
|
||||
<!-- BEGIN leader -->
|
||||
<li class="row<!-- IF attachrow.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
|
||||
|
|
|
@ -54,7 +54,15 @@
|
|||
</ul>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
|
||||
<div class="responsive-hide">
|
||||
<!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
|
||||
{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
|
||||
</div>
|
||||
<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} «
|
||||
<a href="{topicrow.U_LAST_POST}">{topicrow.LAST_POST_TIME}</a>
|
||||
</div>
|
||||
</div>
|
||||
</dt>
|
||||
<dd class="lastpost"><span><dfn>{L_LAST_POST} </dfn>{L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL}
|
||||
|
|
|
@ -45,6 +45,10 @@
|
|||
<!-- ELSEIF draftrow.S_LINK_FORUM -->{L_FORUM}{L_COLON} <a href="{draftrow.U_VIEW}">{draftrow.TITLE}</a>
|
||||
<!-- ELSEIF S_PRIVMSGS -->
|
||||
<!-- ELSE -->{L_NO_TOPIC_FORUM}<!-- ENDIF -->
|
||||
<div class="responsive-show" style="display: none;">
|
||||
{L_SAVE_DATE}{L_COLON} <strong>{draftrow.DATE}</strong><br />
|
||||
<!-- IF draftrow.U_INSERT --><a href="{draftrow.U_INSERT}">{L_LOAD_DRAFT}</a> • <!-- ENDIF --><a href="{draftrow.U_VIEW_EDIT}">{L_VIEW_EDIT}</a>
|
||||
</div>
|
||||
</div>
|
||||
</dt>
|
||||
<dd class="info"><span>{draftrow.DATE}<br /><!-- IF draftrow.U_INSERT --><a href="{draftrow.U_INSERT}">{L_LOAD_DRAFT}</a> • <!-- ENDIF --><a href="{draftrow.U_VIEW_EDIT}">{L_VIEW_EDIT}</a></span></dd>
|
||||
|
|
|
@ -31,7 +31,14 @@
|
|||
</ul>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
|
||||
<div class="responsive-hide">
|
||||
<!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
|
||||
{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
|
||||
</div>
|
||||
<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} « <a href="{topicrow.U_LAST_POST}">{topicrow.LAST_POST_TIME}</a>
|
||||
</div>
|
||||
</div>
|
||||
</dt>
|
||||
<dd class="lastpost"><span>{L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL}
|
||||
|
|
|
@ -23,7 +23,17 @@
|
|||
<!-- BEGIN forumrow -->
|
||||
<li class="row<!-- IF forumrow.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
|
||||
<dl class="icon {forumrow.FORUM_IMG_STYLE}">
|
||||
<dt><div class="list-inner"><a href="{forumrow.U_VIEWFORUM}" class="forumtitle">{forumrow.FORUM_NAME}</a><br />{forumrow.FORUM_DESC}</div></dt>
|
||||
<dt>
|
||||
<div class="list-inner">
|
||||
<a href="{forumrow.U_VIEWFORUM}" class="forumtitle">{forumrow.FORUM_NAME}</a><br />
|
||||
{forumrow.FORUM_DESC}
|
||||
<!-- IF forumrow.LAST_POST_TIME -->
|
||||
<div class="responsive-show" style="display: none;">
|
||||
{L_LAST_POST} {L_POST_BY_AUTHOR} {forumrow.LAST_POST_AUTHOR_FULL} « <a href="{topicrow.U_LAST_POST}">{forumrow.LAST_POST_TIME}</a>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
</div>
|
||||
</dt>
|
||||
<dd class="lastpost"><!-- IF forumrow.LAST_POST_TIME --><span><dfn>{L_LAST_POST} </dfn>{L_POST_BY_AUTHOR} {forumrow.LAST_POST_AUTHOR_FULL}
|
||||
<a href="{topicrow.U_LAST_POST}">{LAST_POST_IMG}</a> <br />{forumrow.LAST_POST_TIME}</span>
|
||||
<!-- ELSE -->{L_NO_POSTS}<br /> <!-- ENDIF -->
|
||||
|
@ -79,7 +89,14 @@
|
|||
</ul>
|
||||
</div>
|
||||
<!-- ENDIF -->
|
||||
<!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
|
||||
<div class="responsive-hide">
|
||||
<!-- IF topicrow.ATTACH_ICON_IMG -->{topicrow.ATTACH_ICON_IMG} <!-- ENDIF -->
|
||||
{L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
|
||||
</div>
|
||||
<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} « <a href="{topicrow.U_LAST_POST}">{topicrow.LAST_POST_TIME}</a>
|
||||
</div>
|
||||
</div>
|
||||
</dt>
|
||||
<dd class="lastpost"><span><dfn>{L_LAST_POST} </dfn>{L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL}
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="topiclist cplist pmlist <!-- IF S_SHOW_RECIPIENTS -->missing-column<!-- ELSE -->two-columns<!-- ENDIF -->">
|
||||
<ul class="topiclist cplist pmlist responsive-show-all <!-- IF S_SHOW_RECIPIENTS -->missing-column<!-- ELSE -->two-columns<!-- ENDIF -->">
|
||||
|
||||
<!-- BEGIN messagerow -->
|
||||
<li class="row<!-- IF messagerow.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF --><!-- IF messagerow.PM_CLASS --> {messagerow.PM_CLASS}<!-- ENDIF -->">
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue