diff options
Diffstat (limited to 'phpBB/includes/mcp/mcp_queue.php')
| -rw-r--r-- | phpBB/includes/mcp/mcp_queue.php | 261 | 
1 files changed, 136 insertions, 125 deletions
| diff --git a/phpBB/includes/mcp/mcp_queue.php b/phpBB/includes/mcp/mcp_queue.php index 764461fa53..24afa1f210 100644 --- a/phpBB/includes/mcp/mcp_queue.php +++ b/phpBB/includes/mcp/mcp_queue.php @@ -2,9 +2,8 @@  /**  *  * @package mcp -* @version $Id$  * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2  *  */ @@ -34,7 +33,7 @@ class mcp_queue  	function main($id, $mode)  	{  		global $auth, $db, $user, $template, $cache; -		global $config, $phpbb_root_path, $phpEx, $action; +		global $config, $phpbb_root_path, $phpEx, $action, $phpbb_container;  		include_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx); @@ -79,12 +78,16 @@ class mcp_queue  				$post_id = request_var('p', 0);  				$topic_id = request_var('t', 0); +				$phpbb_notifications = $phpbb_container->get('notification_manager'); +  				if ($topic_id)  				{  					$topic_info = get_topic_data(array($topic_id), 'm_approve');  					if (isset($topic_info[$topic_id]['topic_first_post_id']))  					{  						$post_id = (int) $topic_info[$topic_id]['topic_first_post_id']; + +						$phpbb_notifications->mark_notifications_read('topic_in_queue', $topic_id, $user->data['user_id']);  					}  					else  					{ @@ -92,6 +95,8 @@ class mcp_queue  					}  				} +				$phpbb_notifications->mark_notifications_read('post_in_queue', $post_id, $user->data['user_id']); +  				$post_info = get_post_data(array($post_id), 'm_approve', true);  				if (!sizeof($post_info)) @@ -269,13 +274,9 @@ class mcp_queue  						trigger_error('NOT_MODERATOR');  					} -					$global_id = $forum_list[0]; - -					$forum_list = implode(', ', $forum_list); -  					$sql = 'SELECT SUM(forum_topics) as sum_forum_topics -						FROM ' . FORUMS_TABLE . " -						WHERE forum_id IN (0, $forum_list)"; +						FROM ' . FORUMS_TABLE . ' +						WHERE ' . $db->sql_in_set('forum_id', $forum_list);  					$result = $db->sql_query($sql);  					$forum_info['forum_topics'] = (int) $db->sql_fetchfield('sum_forum_topics');  					$db->sql_freeresult($result); @@ -291,7 +292,6 @@ class mcp_queue  					$forum_info = $forum_info[$forum_id];  					$forum_list = $forum_id; -					$global_id = $forum_id;  				}  				$forum_options = '<option value="0"' . (($forum_id == 0) ? ' selected="selected"' : '') . '>' . $user->lang['ALL_FORUMS'] . '</option>'; @@ -313,10 +313,10 @@ class mcp_queue  				if ($mode == 'unapproved_posts')  				{  					$sql = 'SELECT p.post_id -						FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t' . (($sort_order_sql[0] == 'u') ? ', ' . USERS_TABLE . ' u' : '') . " -						WHERE p.forum_id IN (0, $forum_list) +						FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t' . (($sort_order_sql[0] == 'u') ? ', ' . USERS_TABLE . ' u' : '') . ' +						WHERE ' . $db->sql_in_set('p.forum_id', $forum_list) . '  							AND p.post_approved = 0 -							" . (($sort_order_sql[0] == 'u') ? 'AND u.user_id = p.poster_id' : '') . ' +							' . (($sort_order_sql[0] == 'u') ? 'AND u.user_id = p.poster_id' : '') . '  							' . (($topic_id) ? 'AND p.topic_id = ' . $topic_id : '') . "  							AND t.topic_id = p.topic_id  							AND t.topic_first_post_id <> p.post_id @@ -335,7 +335,7 @@ class mcp_queue  					if (sizeof($post_ids))  					{ -						$sql = 'SELECT t.topic_id, t.topic_title, t.forum_id, p.post_id, p.post_subject, p.post_username, p.poster_id, p.post_time, u.username, u.username_clean, u.user_colour +						$sql = 'SELECT t.topic_id, t.topic_title, t.forum_id, p.post_id, p.post_subject, p.post_username, p.poster_id, p.post_time, p.post_attachment, u.username, u.username_clean, u.user_colour  							FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . USERS_TABLE . ' u  							WHERE ' . $db->sql_in_set('p.post_id', $post_ids) . '  								AND t.topic_id = p.topic_id @@ -346,10 +346,7 @@ class mcp_queue  						$post_data = $rowset = array();  						while ($row = $db->sql_fetchrow($result))  						{ -							if ($row['forum_id']) -							{ -								$forum_names[] = $row['forum_id']; -							} +							$forum_names[] = $row['forum_id'];  							$post_data[$row['post_id']] = $row;  						}  						$db->sql_freeresult($result); @@ -367,9 +364,9 @@ class mcp_queue  				}  				else  				{ -					$sql = 'SELECT t.forum_id, t.topic_id, t.topic_title, t.topic_title AS post_subject, t.topic_time AS post_time, t.topic_poster AS poster_id, t.topic_first_post_id AS post_id, t.topic_first_poster_name AS username, t.topic_first_poster_colour AS user_colour +					$sql = 'SELECT t.forum_id, t.topic_id, t.topic_title, t.topic_title AS post_subject, t.topic_time AS post_time, t.topic_poster AS poster_id, t.topic_first_post_id AS post_id, t.topic_attachment AS post_attachment, t.topic_first_poster_name AS username, t.topic_first_poster_colour AS user_colour  						FROM ' . TOPICS_TABLE . " t -						WHERE forum_id IN (0, $forum_list) +						WHERE " . $db->sql_in_set('forum_id', $forum_list) . "  							AND topic_approved = 0  							$limit_time_sql  						ORDER BY $sort_order_sql"; @@ -378,10 +375,7 @@ class mcp_queue  					$rowset = array();  					while ($row = $db->sql_fetchrow($result))  					{ -						if ($row['forum_id']) -						{ -							$forum_names[] = $row['forum_id']; -						} +						$forum_names[] = $row['forum_id'];  						$rowset[] = $row;  					}  					$db->sql_freeresult($result); @@ -405,12 +399,6 @@ class mcp_queue  				foreach ($rowset as $row)  				{ -					$global_topic = ($row['forum_id']) ? false : true; -					if ($global_topic) -					{ -						$row['forum_id'] = $global_id; -					} -  					if (empty($row['post_username']))  					{  						$row['post_username'] = $user->lang['GUEST']; @@ -418,7 +406,7 @@ class mcp_queue  					$template->assign_block_vars('postrow', array(  						'U_TOPIC'			=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . '&t=' . $row['topic_id']), -						'U_VIEWFORUM'		=> (!$global_topic) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']) : '', +						'U_VIEWFORUM'		=> append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']),  						'U_VIEWPOST'		=> append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . '&p=' . $row['post_id']) . (($mode == 'unapproved_posts') ? '#p' . $row['post_id'] : ''),  						'U_VIEW_DETAILS'	=> append_sid("{$phpbb_root_path}mcp.$phpEx", "i=queue&start=$start&mode=approve_details&f={$row['forum_id']}&p={$row['post_id']}" . (($mode == 'unapproved_topics') ? "&t={$row['topic_id']}" : '')), @@ -428,14 +416,18 @@ class mcp_queue  						'U_POST_AUTHOR'			=> get_username_string('profile', $row['poster_id'], $row['username'], $row['user_colour'], $row['post_username']),  						'POST_ID'		=> $row['post_id'], -						'FORUM_NAME'	=> (!$global_topic) ? $forum_names[$row['forum_id']] : $user->lang['GLOBAL_ANNOUNCEMENT'], +						'FORUM_NAME'	=> $forum_names[$row['forum_id']],  						'POST_SUBJECT'	=> ($row['post_subject'] != '') ? $row['post_subject'] : $user->lang['NO_SUBJECT'],  						'TOPIC_TITLE'	=> $row['topic_title'], -						'POST_TIME'		=> $user->format_date($row['post_time'])) -					); +						'POST_TIME'		=> $user->format_date($row['post_time']), +						'ATTACH_ICON_IMG'	=> ($auth->acl_get('u_download') && $auth->acl_get('f_download', $row['forum_id']) && $row['post_attachment']) ? $user->img('icon_topic_attach', $user->lang['TOTAL_ATTACHMENTS']) : '', +					));  				}  				unset($rowset, $forum_names); +				$base_url = $this->u_action . "&f=$forum_id&st=$sort_days&sk=$sort_key&sd=$sort_dir"; +				phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $total, $config['topics_per_page'], $start); +  				// Now display the page  				$template->assign_vars(array(  					'L_DISPLAY_ITEMS'		=> ($mode == 'unapproved_posts') ? $user->lang['DISPLAY_POSTS'] : $user->lang['DISPLAY_TOPICS'], @@ -447,10 +439,9 @@ class mcp_queue  					'S_MCP_ACTION'			=> build_url(array('t', 'f', 'sd', 'st', 'sk')),  					'S_TOPICS'				=> ($mode == 'unapproved_posts') ? false : true, -					'PAGINATION'			=> generate_pagination($this->u_action . "&f=$forum_id&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total, $config['topics_per_page'], $start), -					'PAGE_NUMBER'			=> on_page($total, $config['topics_per_page'], $start), +					'PAGE_NUMBER'			=> phpbb_on_page($template, $user, $base_url, $total, $config['topics_per_page'], $start),  					'TOPIC_ID'				=> $topic_id, -					'TOTAL'					=> ($total == 1) ? (($mode == 'unapproved_posts') ? $user->lang['VIEW_TOPIC_POST'] : $user->lang['VIEW_FORUM_TOPIC']) : sprintf((($mode == 'unapproved_posts') ? $user->lang['VIEW_TOPIC_POSTS'] : $user->lang['VIEW_FORUM_TOPICS']), $total), +					'TOTAL'					=> $user->lang((($mode == 'unapproved_posts') ? 'VIEW_TOPIC_POSTS' : 'VIEW_FORUM_TOPICS'), (int) $total),  				));  				$this->tpl_name = 'mcp_queue'; @@ -466,6 +457,7 @@ function approve_post($post_id_list, $id, $mode)  {  	global $db, $template, $user, $config;  	global $phpEx, $phpbb_root_path; +	global $request, $phpbb_container;  	if (!check_ids($post_id_list, POSTS_TABLE, 'post_id', array('m_approve')))  	{ @@ -505,11 +497,7 @@ function approve_post($post_id_list, $id, $mode)  			}  			$topic_id_list[$post_data['topic_id']] = 1; - -			if ($post_data['forum_id']) -			{ -				$forum_id_list[$post_data['forum_id']] = 1; -			} +			$forum_id_list[$post_data['forum_id']] = 1;  			// User post update (we do not care about topic or post, since user posts are strictly connected to posts)  			// But we care about forums where post counts get not increased. ;) @@ -521,10 +509,7 @@ function approve_post($post_id_list, $id, $mode)  			// Topic or Post. ;)  			if ($post_data['topic_first_post_id'] == $post_id)  			{ -				if ($post_data['forum_id']) -				{ -					$total_topics++; -				} +				$total_topics++;  				$topic_approve_sql[] = $post_data['topic_id'];  				$approve_log[] = array( @@ -544,16 +529,13 @@ function approve_post($post_id_list, $id, $mode)  				);  			} -			if ($post_data['forum_id']) -			{ -				$total_posts++; +			$total_posts++; -				// Increment by topic_replies if we approve a topic... -				// This works because we do not adjust the topic_replies when re-approving a topic after an edit. -				if ($post_data['topic_first_post_id'] == $post_id && $post_data['topic_replies']) -				{ -					$total_posts += $post_data['topic_replies']; -				} +			// Increment by topic_replies if we approve a topic... +			// This works because we do not adjust the topic_replies when re-approving a topic after an edit. +			if ($post_data['topic_first_post_id'] == $post_id && $post_data['topic_replies']) +			{ +				$total_posts += $post_data['topic_replies'];  			}  			$post_approve_sql[] = $post_id; @@ -621,54 +603,51 @@ function approve_post($post_id_list, $id, $mode)  		sync('forum', 'forum_id', array_keys($forum_id_list), true, true);  		unset($topic_id_list, $forum_id_list); -		$messenger = new messenger(); - -		// Notify Poster? -		if ($notify_poster) -		{ -			foreach ($post_info as $post_id => $post_data) -			{ -				if ($post_data['poster_id'] == ANONYMOUS) -				{ -					continue; -				} - -				$email_template = ($post_data['post_id'] == $post_data['topic_first_post_id'] && $post_data['post_id'] == $post_data['topic_last_post_id']) ? 'topic_approved' : 'post_approved'; - -				$messenger->template($email_template, $post_data['user_lang']); - -				$messenger->to($post_data['user_email'], $post_data['username']); -				$messenger->im($post_data['user_jabber'], $post_data['username']); - -				$messenger->assign_vars(array( -					'USERNAME'		=> htmlspecialchars_decode($post_data['username']), -					'POST_SUBJECT'	=> htmlspecialchars_decode(censor_text($post_data['post_subject'])), -					'TOPIC_TITLE'	=> htmlspecialchars_decode(censor_text($post_data['topic_title'])), - -					'U_VIEW_TOPIC'	=> generate_board_url() . "/viewtopic.$phpEx?f={$post_data['forum_id']}&t={$post_data['topic_id']}&e=0", -					'U_VIEW_POST'	=> generate_board_url() . "/viewtopic.$phpEx?f={$post_data['forum_id']}&t={$post_data['topic_id']}&p=$post_id&e=$post_id") -				); - -				$messenger->send($post_data['user_notify_type']); -			} -		} - -		$messenger->save_queue(); -  		// Send out normal user notifications  		$email_sig = str_replace('<br />', "\n", "-- \n" . $config['board_email_sig']); +		$phpbb_notifications = $phpbb_container->get('notification_manager'); + +		// Handle notifications  		foreach ($post_info as $post_id => $post_data)  		{  			if ($post_id == $post_data['topic_first_post_id'] && $post_id == $post_data['topic_last_post_id'])  			{ -				// Forum Notifications -				user_notification('post', $post_data['topic_title'], $post_data['topic_title'], $post_data['forum_name'], $post_data['forum_id'], $post_data['topic_id'], $post_id); +				$phpbb_notifications->delete_notifications('topic_in_queue', $post_data['topic_id']); + +				$phpbb_notifications->add_notifications(array( +					'quote', +					'topic', +				), $post_data); + +				$phpbb_notifications->mark_notifications_read('quote', $post_data['post_id'], $user->data['user_id']); +				$phpbb_notifications->mark_notifications_read('topic', $post_data['topic_id'], $user->data['user_id']); + +				if ($notify_poster) +				{ +					$phpbb_notifications->add_notifications('approve_topic', $post_data); +				}  			}  			else  			{ -				// Topic Notifications -				user_notification('reply', $post_data['post_subject'], $post_data['topic_title'], $post_data['forum_name'], $post_data['forum_id'], $post_data['topic_id'], $post_id); +				$phpbb_notifications->delete_notifications('post_in_queue', $post_id); + +				$phpbb_notifications->add_notifications(array( +					'quote', +					'bookmark', +					'post', +				), $post_data); +				 +				$phpbb_notifications->mark_notifications_read(array( +					'quote', +					'bookmark', +					'post', +				),$post_data['post_id'], $user->data['user_id']); + +				if ($notify_poster) +				{ +					$phpbb_notifications->add_notifications('approve_post', $post_data); +				}  			}  		} @@ -734,7 +713,20 @@ function approve_post($post_id_list, $id, $mode)  			$add_message = '<br /><br />' . sprintf($user->lang['RETURN_POST'], '<a href="' . $post_url . '">', '</a>');  		} -		trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], "<a href=\"$redirect\">", '</a>') . $add_message); +		$message = $user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], "<a href=\"$redirect\">", '</a>') . $add_message; + +		if ($request->is_ajax()) +		{ +			$json_response = new phpbb_json_response; +			$json_response->send(array( +				'MESSAGE_TITLE'		=> $user->lang['INFORMATION'], +				'MESSAGE_TEXT'		=> $message, +				'REFRESH_DATA'		=> null, +				'approved'				=> true +			)); +		} + +		trigger_error($message);  	}  } @@ -745,6 +737,7 @@ function disapprove_post($post_id_list, $id, $mode)  {  	global $db, $template, $user, $config;  	global $phpEx, $phpbb_root_path; +	global $request, $phpbb_container;  	if (!check_ids($post_id_list, POSTS_TABLE, 'post_id', array('m_approve')))  	{ @@ -779,9 +772,10 @@ function disapprove_post($post_id_list, $id, $mode)  		if (!$row || (!$reason && strtolower($row['reason_title']) == 'other'))  		{  			$additional_msg = $user->lang['NO_REASON_DISAPPROVAL']; -			unset($_REQUEST['confirm_key']); -			unset($_POST['confirm_key']); -			unset($_POST['confirm']); + +			$request->overwrite('confirm', null, phpbb_request_interface::POST); +			$request->overwrite('confirm_key', null, phpbb_request_interface::POST); +			$request->overwrite('confirm_key', null, phpbb_request_interface::REQUEST);  		}  		else  		{ @@ -876,20 +870,29 @@ function disapprove_post($post_id_list, $id, $mode)  			}  		} -		$messenger = new messenger(); +		$phpbb_notifications = $phpbb_container->get('notification_manager'); + +		foreach ($post_info as $post_id => $post_data) +		{ +			if ($post_id == $post_data['topic_first_post_id'] && $post_id == $post_data['topic_last_post_id']) +			{ +				$phpbb_notifications->delete_notifications('topic_in_queue', $post_data['topic_id']); +			} +			else +			{ +				$phpbb_notifications->delete_notifications('post_in_queue', $post_id); +			} +		}  		// Notify Poster?  		if ($notify_poster)  		{  			$lang_reasons = array(); +			// Handle notifications  			foreach ($post_info as $post_id => $post_data)  			{ -				if ($post_data['poster_id'] == ANONYMOUS) -				{ -					continue; -				} - +				$post_data['disapprove_reason'] = '';  				if (isset($disapprove_reason_lang))  				{  					// Okay we need to get the reason from the posters language @@ -915,33 +918,30 @@ function disapprove_post($post_id_list, $id, $mode)  						}  					} -					$email_disapprove_reason = $lang_reasons[$post_data['user_lang']]; -					$email_disapprove_reason .= ($reason) ? "\n\n" . $reason : ''; +					$post_data['disapprove_reason'] = $lang_reasons[$post_data['user_lang']]; +					$post_data['disapprove_reason'] .= ($reason) ? "\n\n" . $reason : '';  				} -				$email_template = ($post_data['post_id'] == $post_data['topic_first_post_id'] && $post_data['post_id'] == $post_data['topic_last_post_id']) ? 'topic_disapproved' : 'post_disapproved'; - -				$messenger->template($email_template, $post_data['user_lang']); - -				$messenger->to($post_data['user_email'], $post_data['username']); -				$messenger->im($post_data['user_jabber'], $post_data['username']); - -				$messenger->assign_vars(array( -					'USERNAME'		=> htmlspecialchars_decode($post_data['username']), -					'REASON'		=> htmlspecialchars_decode($email_disapprove_reason), -					'POST_SUBJECT'	=> htmlspecialchars_decode(censor_text($post_data['post_subject'])), -					'TOPIC_TITLE'	=> htmlspecialchars_decode(censor_text($post_data['topic_title']))) -				); - -				$messenger->send($post_data['user_notify_type']); +				if ($post_id == $post_data['topic_first_post_id'] && $post_id == $post_data['topic_last_post_id']) +				{ +					if ($notify_poster) +					{ +						$phpbb_notifications->add_notifications('disapprove_topic', $post_data); +					} +				} +				else +				{ +					if ($notify_poster) +					{ +						$phpbb_notifications->add_notifications('disapprove_post', $post_data); +					} +				}  			}  			unset($lang_reasons);  		}  		unset($post_info, $disapprove_reason, $email_disapprove_reason, $disapprove_reason_lang); -		$messenger->save_queue(); -  		if ($num_disapproved_topics)  		{  			$success_msg = ($num_disapproved_topics == 1) ? 'TOPIC_DISAPPROVED_SUCCESS' : 'TOPICS_DISAPPROVED_SUCCESS'; @@ -991,9 +991,20 @@ function disapprove_post($post_id_list, $id, $mode)  	}  	else  	{ +		$message = $user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], "<a href=\"$redirect\">", '</a>'); + +		if ($request->is_ajax()) +		{ +			$json_response = new phpbb_json_response; +			$json_response->send(array( +				'MESSAGE_TITLE'		=> $user->lang['INFORMATION'], +				'MESSAGE_TEXT'		=> $message, +				'REFRESH_DATA'		=> null, +				'approved'				=> false +			)); +		} +  		meta_refresh(3, $redirect); -		trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], "<a href=\"$redirect\">", '</a>')); +		trigger_error($message);  	}  } - -?>
\ No newline at end of file | 
