diff options
| -rw-r--r-- | phpBB/adm/style/ajax.js | 130 | ||||
| -rw-r--r-- | phpBB/includes/acp/acp_permissions.php | 5 | ||||
| -rw-r--r-- | phpBB/includes/functions.php | 2 | ||||
| -rw-r--r-- | phpBB/includes/functions_download.php | 14 | ||||
| -rw-r--r-- | phpBB/includes/functions_privmsgs.php | 9 | ||||
| -rw-r--r-- | phpBB/phpbb/event/kernel_exception_subscriber.php | 2 | ||||
| -rw-r--r-- | phpBB/phpbb/log/log.php | 26 | ||||
| -rw-r--r-- | phpBB/styles/prosilver/template/jumpbox.html | 56 | ||||
| -rw-r--r-- | phpBB/styles/prosilver/template/posting_attach_body.html | 2 | ||||
| -rw-r--r-- | phpBB/styles/prosilver/theme/common.css | 4 | 
10 files changed, 215 insertions, 35 deletions
diff --git a/phpBB/adm/style/ajax.js b/phpBB/adm/style/ajax.js index 4ad6b6afa5..7ddd2d3742 100644 --- a/phpBB/adm/style/ajax.js +++ b/phpBB/adm/style/ajax.js @@ -62,7 +62,125 @@ phpbb.addAjaxCallback('row_delete', function(res) {  	}  }); +/** + * Handler for submitting permissions form in chunks + * This call will submit permissions forms in chunks of 5 fieldsets. + */ +function submitPermissions() { +	var $form = $('form#set-permissions'), +		fieldsetList = $form.find('fieldset[id^=perm]'), +		formDataSets = [], +		$submitAllButton = $form.find('input[type=submit][name^=action]')[0], +		$submitButton = $form.find('input[type=submit][data-clicked=true]')[0]; + +	// Set proper start values for handling refresh of page +	var permissionSubmitSize = 0, +		permissionRequestCount = 0, +		forumIds = [], +		permissionSubmitFailed = false; + +	if ($submitAllButton !== $submitButton) { +		fieldsetList = $form.find('fieldset#' + $submitButton.closest('fieldset.permissions').id); +	} + +	$.each(fieldsetList, function (key, value) { +		if (key % 5 === 0) { +			formDataSets[Math.floor(key / 5)] = $form.find('fieldset#' + value.id).serialize(); +		} else { +			formDataSets[Math.floor(key / 5)] += '&' + $form.find('fieldset#' + value.id).serialize(); +		} +	}); + +	permissionSubmitSize = formDataSets.length; + +	// Add each forum ID to forum ID list to preserve selected forums +	$.each($form.find('input[type=hidden][name^=forum_id]'), function (key, value) { +		if (value.name.match(/^forum_id\[([0-9]+)\]$/)) { +			forumIds.push(value.value); +		} +	}); + +	/** +	 * Handler for submitted permissions form chunk +	 * +	 * @param {object} res Object returned by AJAX call +	 */ +	function handlePermissionReturn(res) { +		permissionRequestCount++; +		var $dark = $('#darkenwrapper'); + +		if (res.S_USER_WARNING) { +			phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); +			permissionSubmitFailed = true; +		} else if (!permissionSubmitFailed && res.S_USER_NOTICE) { +			// Display success message at the end of submitting the form +			if (permissionRequestCount >= permissionSubmitSize) { +				var $alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); +				var $alertBoxLink = $alert.find('p.alert_text > a'); + +				// Create form to submit instead of normal "Back to previous page" link +				if ($alertBoxLink) { +					// Remove forum_id[] from URL +					$alertBoxLink.attr('href', $alertBoxLink.attr('href').replace(/(&forum_id\[\]=[0-9]+)/g, '')); +					var previousPageForm = '<form action="' + $alertBoxLink.attr('href') + '" method="post">'; +					$.each(forumIds, function (key, value) { +						previousPageForm += '<input type="text" name="forum_id[]" value="' + value + '" />'; +					}); +					previousPageForm += '</form>'; + +					$alertBoxLink.on('click', function (e) { +						var $previousPageForm = $(previousPageForm); +						$('body').append($previousPageForm); +						e.preventDefault(); +						$previousPageForm.submit(); +					}); +				} + +				// Do not allow closing alert +				$dark.off('click'); +				$alert.find('.alert_close').hide(); + +				if (typeof res.REFRESH_DATA !== 'undefined') { +					setTimeout(function () { +						// Create forum to submit using POST. This will prevent +						// exceeding the maximum length of URLs +						var form = '<form action="' + res.REFRESH_DATA.url.replace(/(&forum_id\[\]=[0-9]+)/g, '') + '" method="post">'; +						$.each(forumIds, function (key, value) { +							form += '<input type="text" name="forum_id[]" value="' + value + '" />'; +						}); +						form += '</form>'; +						$form = $(form); +						$('body').append($form); + +						// Hide the alert even if we refresh the page, in case the user +						// presses the back button. +						$dark.fadeOut(phpbb.alertTime, function () { +							if (typeof $alert !== 'undefined') { +								$alert.hide(); +							} +						}); + +						// Submit form +						$form.submit(); +					}, res.REFRESH_DATA.time * 1000); // Server specifies time in seconds +				} +			} +		} +	} +	// Create AJAX request for each form data set +	$.each(formDataSets, function (key, formData) { +		$.ajax({ +			url: $form.action, +			type: 'POST', +			data: formData + '&' + $submitAllButton.name + '=' + encodeURIComponent($submitAllButton.value) + +				'&creation_time=' + $form.find('input[type=hidden][name=creation_time]')[0].value + +				'&form_token=' + $form.find('input[type=hidden][name=form_token]')[0].value, +			success: handlePermissionReturn, +			error: handlePermissionReturn +		}); +	}); +}  $('[data-ajax]').each(function() {  	var $this = $(this), @@ -83,6 +201,18 @@ $('[data-ajax]').each(function() {  */  $(function() {  	phpbb.resizeTextArea($('textarea:not(.no-auto-resize)'), {minHeight: 75}); + +	var $setPermissionsForm = $('form#set-permissions'); +	if ($setPermissionsForm.length) { +		$setPermissionsForm.on('submit', function (e) { +			submitPermissions(); +			e.preventDefault(); +		}); +		$setPermissionsForm.find('input[type=submit]').click(function() { +			$('input[type=submit]', $(this).parents($('form#set-permissions'))).removeAttr('data-clicked'); +			$(this).attr('data-clicked', true); +		}); +	}  }); diff --git a/phpBB/includes/acp/acp_permissions.php b/phpBB/includes/acp/acp_permissions.php index 660afb4e93..62e75a2db7 100644 --- a/phpBB/includes/acp/acp_permissions.php +++ b/phpBB/includes/acp/acp_permissions.php @@ -755,6 +755,7 @@ class acp_permissions  		$this->log_action($mode, 'add', $permission_type, $ug_type, $ug_id, $forum_id); +		meta_refresh(5, $this->u_action);  		trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));  	} @@ -825,10 +826,12 @@ class acp_permissions  		if ($mode == 'setting_forum_local' || $mode == 'setting_mod_local')  		{ +			meta_refresh(5, $this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_ids));  			trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_ids)));  		}  		else  		{ +			meta_refresh(5, $this->u_action);  			trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));  		}  	} @@ -899,10 +902,12 @@ class acp_permissions  		if ($mode == 'setting_forum_local' || $mode == 'setting_mod_local')  		{ +			meta_refresh(5, $this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_id));  			trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action . '&forum_id[]=' . implode('&forum_id[]=', $forum_id)));  		}  		else  		{ +			meta_refresh(5, $this->u_action);  			trigger_error($user->lang['AUTH_UPDATED'] . adm_back_link($this->u_action));  		}  	} diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index a152d9b620..ba448f3125 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -2776,7 +2776,7 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo  	$u_action .= ((strpos($u_action, '?') === false) ? '?' : '&') . 'confirm_key=' . $confirm_key;  	$template->assign_vars(array( -		'MESSAGE_TITLE'		=> (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title], +		'MESSAGE_TITLE'		=> (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang($title, 1),  		'MESSAGE_TEXT'		=> (!isset($user->lang[$title . '_CONFIRM'])) ? $title : $user->lang[$title . '_CONFIRM'],  		'YES_VALUE'			=> $user->lang['YES'], diff --git a/phpBB/includes/functions_download.php b/phpBB/includes/functions_download.php index c571de579e..86c60c31ff 100644 --- a/phpBB/includes/functions_download.php +++ b/phpBB/includes/functions_download.php @@ -677,6 +677,8 @@ function phpbb_download_handle_forum_auth($db, $auth, $topic_id)  */  function phpbb_download_handle_pm_auth($db, $auth, $user_id, $msg_id)  { +	global $phpbb_dispatcher; +  	if (!$auth->acl_get('u_pm_download'))  	{  		send_status_line(403, 'Forbidden'); @@ -685,6 +687,18 @@ function phpbb_download_handle_pm_auth($db, $auth, $user_id, $msg_id)  	$allowed = phpbb_download_check_pm_auth($db, $user_id, $msg_id); +	/** +	* Event to modify PM attachments download auth +	* +	* @event core.modify_pm_attach_download_auth +	* @var	bool	allowed		Whether the user is allowed to download from that PM or not +	* @var	int		msg_id		The id of the PM to download from +	* @var	int		user_id		The user id for auth check +	* @since 3.1.11-RC1 +	*/ +	$vars = array('allowed', 'msg_id', 'user_id'); +	extract($phpbb_dispatcher->trigger_event('core.modify_pm_attach_download_auth', compact($vars))); +  	if (!$allowed)  	{  		send_status_line(403, 'Forbidden'); diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index 1639eb1a4c..4aad1746d5 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -889,9 +889,16 @@ function update_unread_status($unread, $msg_id, $user_id, $folder_id)  		SET pm_unread = 0  		WHERE msg_id = $msg_id  			AND user_id = $user_id -			AND folder_id = $folder_id"; +			AND folder_id = $folder_id +			AND pm_unread = 1";  	$db->sql_query($sql); +	// If the message is already marked as read, we just skip the rest to avoid negative PM count +	if (!$db->sql_affectedrows()) +	{ +		return; +	} +  	$sql = 'UPDATE ' . USERS_TABLE . "  		SET user_unread_privmsg = user_unread_privmsg - 1  		WHERE user_id = $user_id"; diff --git a/phpBB/phpbb/event/kernel_exception_subscriber.php b/phpBB/phpbb/event/kernel_exception_subscriber.php index 9d15f9370e..1ee771cfe7 100644 --- a/phpBB/phpbb/event/kernel_exception_subscriber.php +++ b/phpBB/phpbb/event/kernel_exception_subscriber.php @@ -61,7 +61,7 @@ class kernel_exception_subscriber implements EventSubscriberInterface  		$exception = $event->getException();  		$message = $exception->getMessage(); -		$this->type_caster->set_var($message, $message, 'string', false, false); +		$this->type_caster->set_var($message, $message, 'string', true, false);  		if ($exception instanceof \phpbb\exception\exception_interface)  		{ diff --git a/phpBB/phpbb/log/log.php b/phpBB/phpbb/log/log.php index 094ff78abe..8f199cd931 100644 --- a/phpBB/phpbb/log/log.php +++ b/phpBB/phpbb/log/log.php @@ -893,9 +893,29 @@ class log implements \phpbb\log\log_interface  		$forum_auth = array('f_read' => array(), 'm_' => array());  		$topic_ids = array_unique($topic_ids); -		$sql = 'SELECT topic_id, forum_id -			FROM ' . TOPICS_TABLE . ' -			WHERE ' . $this->db->sql_in_set('topic_id', array_map('intval', $topic_ids)); +		$sql_ary = array( +			'SELECT'	=> 'topic_id, forum_id', +			'FROM'		=> array( +				TOPICS_TABLE	=> 't', +			), +			'WHERE'		=> $this->db->sql_in_set('topic_id', array_map('intval', $topic_ids)), +		); + +		/** +		* Allow modifying SQL query before topic data is retrieved. +		* +		* @event core.phpbb_log_get_topic_auth_sql_before +		* @var	array	topic_ids	Array with unique topic IDs +		* @var	array	sql_ary		SQL array +		* @since 3.1.11-RC1 +		*/ +		$vars = array( +			'topic_ids', +			'sql_ary', +		); +		extract($this->dispatcher->trigger_event('core.phpbb_log_get_topic_auth_sql_before', compact($vars))); + +		$sql = $this->db->sql_build_query('SELECT', $sql_ary);  		$result = $this->db->sql_query($sql);  		while ($row = $this->db->sql_fetchrow($result)) diff --git a/phpBB/styles/prosilver/template/jumpbox.html b/phpBB/styles/prosilver/template/jumpbox.html index 3096d08318..fcd8ddbc1e 100644 --- a/phpBB/styles/prosilver/template/jumpbox.html +++ b/phpBB/styles/prosilver/template/jumpbox.html @@ -1,32 +1,34 @@ -<!-- IF S_VIEWTOPIC --> -	<p class="jumpbox-return"><a href="{U_VIEW_FORUM}" class="left-box arrow-{S_CONTENT_FLOW_BEGIN}" accesskey="r">{L_RETURN_TO_FORUM}</a></p> -<!-- ELSEIF S_VIEWFORUM --> -	<p class="jumpbox-return"><a href="{U_INDEX}" class="left-box arrow-{S_CONTENT_FLOW_BEGIN}" accesskey="r">{L_RETURN_TO_INDEX}</a></p> -<!-- ELSEIF SEARCH_TOPIC --> -	<p class="jumpbox-return"><a class="left-box arrow-{S_CONTENT_FLOW_BEGIN}" href="{U_SEARCH_TOPIC}" accesskey="r">{L_RETURN_TO_TOPIC}</a></p> -<!-- ELSEIF S_SEARCH_ACTION --> -	<p class="jumpbox-return"><a class="left-box arrow-{S_CONTENT_FLOW_BEGIN}" href="{U_SEARCH}" title="{L_SEARCH_ADV}" accesskey="r">{L_GO_TO_SEARCH_ADV}</a></p> -<!-- ENDIF --> +<div class="action-bar actions-jump"> +	<!-- IF S_VIEWTOPIC --> +		<p class="jumpbox-return"><a href="{U_VIEW_FORUM}" class="left-box arrow-{S_CONTENT_FLOW_BEGIN}" accesskey="r">{L_RETURN_TO_FORUM}</a></p> +	<!-- ELSEIF S_VIEWFORUM --> +		<p class="jumpbox-return"><a href="{U_INDEX}" class="left-box arrow-{S_CONTENT_FLOW_BEGIN}" accesskey="r">{L_RETURN_TO_INDEX}</a></p> +	<!-- ELSEIF SEARCH_TOPIC --> +		<p class="jumpbox-return"><a class="left-box arrow-{S_CONTENT_FLOW_BEGIN}" href="{U_SEARCH_TOPIC}" accesskey="r">{L_RETURN_TO_TOPIC}</a></p> +	<!-- ELSEIF S_SEARCH_ACTION --> +		<p class="jumpbox-return"><a class="left-box arrow-{S_CONTENT_FLOW_BEGIN}" href="{U_SEARCH}" title="{L_SEARCH_ADV}" accesskey="r">{L_GO_TO_SEARCH_ADV}</a></p> +	<!-- ENDIF --> -<!-- IF S_DISPLAY_JUMPBOX --> +	<!-- IF S_DISPLAY_JUMPBOX --> -	<div class="dropdown-container dropdown-container-{S_CONTENT_FLOW_END}<!-- IF not S_IN_MCP --> dropdown-up<!-- ENDIF --> dropdown-{S_CONTENT_FLOW_BEGIN} dropdown-button-control" id="jumpbox"> -		<span title="<!-- IF S_IN_MCP and S_MERGE_SELECT -->{L_SELECT_TOPICS_FROM}<!-- ELSEIF S_IN_MCP -->{L_MODERATE_FORUM}<!-- ELSE -->{L_JUMP_TO}<!-- ENDIF -->" class="dropdown-trigger button dropdown-select"> -			<!-- IF S_IN_MCP and S_MERGE_SELECT -->{L_SELECT_TOPICS_FROM}<!-- ELSEIF S_IN_MCP -->{L_MODERATE_FORUM}<!-- ELSE -->{L_JUMP_TO}<!-- ENDIF --> -		</span> -		<div class="dropdown hidden"> -			<div class="pointer"><div class="pointer-inner"></div></div> -			<ul class="dropdown-contents"> -			<!-- BEGIN jumpbox_forums --> -				<!-- IF jumpbox_forums.FORUM_ID neq -1 --> -					<li><!-- BEGIN level -->   <!-- END level --><a href="{jumpbox_forums.LINK}">{jumpbox_forums.FORUM_NAME}</a></li> -				<!-- ENDIF --> -			<!-- END jumpbox_forums --> -			</ul> +		<div class="dropdown-container dropdown-container-{S_CONTENT_FLOW_END}<!-- IF not S_IN_MCP --> dropdown-up<!-- ENDIF --> dropdown-{S_CONTENT_FLOW_BEGIN} dropdown-button-control" id="jumpbox"> +			<span title="<!-- IF S_IN_MCP and S_MERGE_SELECT -->{L_SELECT_TOPICS_FROM}<!-- ELSEIF S_IN_MCP -->{L_MODERATE_FORUM}<!-- ELSE -->{L_JUMP_TO}<!-- ENDIF -->" class="dropdown-trigger button dropdown-select"> +				<!-- IF S_IN_MCP and S_MERGE_SELECT -->{L_SELECT_TOPICS_FROM}<!-- ELSEIF S_IN_MCP -->{L_MODERATE_FORUM}<!-- ELSE -->{L_JUMP_TO}<!-- ENDIF --> +			</span> +			<div class="dropdown hidden"> +				<div class="pointer"><div class="pointer-inner"></div></div> +				<ul class="dropdown-contents"> +				<!-- BEGIN jumpbox_forums --> +					<!-- IF jumpbox_forums.FORUM_ID neq -1 --> +						<li><!-- BEGIN level -->   <!-- END level --><a href="{jumpbox_forums.LINK}">{jumpbox_forums.FORUM_NAME}</a></li> +					<!-- ENDIF --> +				<!-- END jumpbox_forums --> +				</ul> +			</div>  		</div> -	</div> -<!-- ELSE --> -	<br /><br /> -<!-- ENDIF --> +	<!-- ELSE --> +	</br></br> +	<!-- ENDIF --> +</div> diff --git a/phpBB/styles/prosilver/template/posting_attach_body.html b/phpBB/styles/prosilver/template/posting_attach_body.html index 81b2c2bf41..d7922297a7 100644 --- a/phpBB/styles/prosilver/template/posting_attach_body.html +++ b/phpBB/styles/prosilver/template/posting_attach_body.html @@ -7,7 +7,7 @@  	<dl>  		<dt><label for="fileupload">{L_FILENAME}{L_COLON}</label></dt>  		<dd> -			<input type="file" name="fileupload" id="fileupload" maxlength="{FILESIZE}" value="" class="inputbox autowidth" />  +			<input type="file" name="fileupload" id="fileupload" class="inputbox autowidth" />  			<input type="submit" name="add_file" value="{L_ADD_FILE}" class="button2" onclick="upload = true;" />  		</dd>  	</dl> diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 9c2f33f7a9..cf6d14e6ab 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -137,7 +137,9 @@ p.right {  }  p.jumpbox-return { -	margin-top: 1em; +	margin-top: 10px; +	margin-bottom: 0; +	float: left;  }  b, strong {  | 
