diff options
| author | rxu <rxu@mail.ru> | 2015-08-06 05:06:58 +0700 | 
|---|---|---|
| committer | rxu <rxu@mail.ru> | 2015-10-08 20:53:54 +0700 | 
| commit | 3469cdce767c0a482fd26378ad00382ba2d04f6c (patch) | |
| tree | 65a7a8459c0678138a1eae00ad62c18af290c31b | |
| parent | cf62b303a639df4e6d5f3af3b262a757752bab36 (diff) | |
| download | forums-3469cdce767c0a482fd26378ad00382ba2d04f6c.tar forums-3469cdce767c0a482fd26378ad00382ba2d04f6c.tar.gz forums-3469cdce767c0a482fd26378ad00382ba2d04f6c.tar.bz2 forums-3469cdce767c0a482fd26378ad00382ba2d04f6c.tar.xz forums-3469cdce767c0a482fd26378ad00382ba2d04f6c.zip | |
[ticket/14073] Add several core events to the functions_admin.php
Add core events to the functions move_posts(), delete_posts(),
delete_attachments().
PHPBB3-14073
| -rw-r--r-- | phpBB/includes/functions_admin.php | 178 | 
1 files changed, 176 insertions, 2 deletions
| diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index afd3dce730..ad0bccf115 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -576,7 +576,7 @@ function move_topics($topic_ids, $forum_id, $auto_sync = true)  */  function move_posts($post_ids, $topic_id, $auto_sync = true)  { -	global $db; +	global $db, $phpbb_dispatcher;  	if (!is_array($post_ids))  	{ @@ -610,6 +610,28 @@ function move_posts($post_ids, $topic_id, $auto_sync = true)  		trigger_error('NO_TOPIC');  	} +	/** +	 * Perform additional actions before moving posts  +	 * +	 * @event core.move_posts_before +	 * @var	array	post_ids	Array of post ids to move +	 * @var	string	topic_id	The topic id the posts are moved to +	 * @var bool	auto_sync	Whether or not to perform auto sync +	 * @var	array	forum_ids	Array of the forum ids the posts are moved from +	 * @var	array	topic_ids	Array of the topic ids the posts are moved from +	 * @var	array	forum_row	Array with the forum id of the topic the posts are moved to +	 * @since 3.1.7-RC1 +	 */ +	$vars = array( +			'post_ids', +			'topic_id', +			'auto_sync', +			'forum_ids', +			'topic_ids', +			'forum_row', +	); +	extract($phpbb_dispatcher->trigger_event('core.move_posts_before', compact($vars))); +  	$sql = 'UPDATE ' . POSTS_TABLE . '  		SET forum_id = ' . (int) $forum_row['forum_id'] . ", topic_id = $topic_id  		WHERE " . $db->sql_in_set('post_id', $post_ids); @@ -620,6 +642,28 @@ function move_posts($post_ids, $topic_id, $auto_sync = true)  		WHERE " . $db->sql_in_set('post_msg_id', $post_ids);  	$db->sql_query($sql); +	/** +	 * Perform additional actions after moving posts  +	 * +	 * @event core.move_posts_after +	 * @var	array	post_ids	Array of the moved post ids +	 * @var	string	topic_id	The topic id the posts are moved to +	 * @var bool	auto_sync	Whether or not to perform auto sync +	 * @var	array	forum_ids	Array of the forum ids the posts are moved from +	 * @var	array	topic_ids	Array of the topic ids the posts are moved from +	 * @var	array	forum_row	Array with the forum id of the topic the posts are moved to +	 * @since 3.1.7-RC1 +	 */ +	$vars = array( +			'post_ids', +			'topic_id', +			'auto_sync', +			'forum_ids', +			'topic_ids', +			'forum_row', +	); +	extract($phpbb_dispatcher->trigger_event('core.move_posts_after', compact($vars))); +  	if ($auto_sync)  	{  		$forum_ids[] = (int) $forum_row['forum_id']; @@ -886,6 +930,32 @@ function delete_posts($where_type, $where_ids, $auto_sync = true, $posted_sync =  	$table_ary = array(POSTS_TABLE, REPORTS_TABLE); +	/** +	* Perform additional actions during post(s) deletion before running the queries +	* +	* @event core.delete_posts_in_transaction_before +	* @var	array	post_ids					Array with deleted posts' ids +	* @var	array	poster_ids					Array with deleted posts' author ids +	* @var	array	topic_ids					Array with deleted posts' topic ids +	* @var	array	forum_ids					Array with deleted posts' forum ids +	* @var	string	where_type					Variable containing posts deletion mode +	* @var	mixed	where_ids					Array or comma separated list of post ids to delete +	* @var	array	delete_notifications_types	Array with notifications types to delete +	* @var	array	table_ary					Array with table names to delete data from +	* @since 3.1.7-RC1 +	*/ +	$vars = array( +		'post_ids', +		'poster_ids', +		'topic_ids', +		'forum_ids', +		'where_type', +		'where_ids', +		'delete_notifications_types', +		'table_ary', +	); +	extract($phpbb_dispatcher->trigger_event('core.delete_posts_in_transaction_before', compact($vars))); +  	foreach ($table_ary as $table)  	{  		$sql = "DELETE FROM $table @@ -1042,7 +1112,7 @@ function delete_posts($where_type, $where_ids, $auto_sync = true, $posted_sync =  */  function delete_attachments($mode, $ids, $resync = true)  { -	global $db, $config; +	global $db, $config, $phpbb_dispatcher;  	// 0 is as bad as an empty array  	if (empty($ids)) @@ -1087,6 +1157,24 @@ function delete_attachments($mode, $ids, $resync = true)  	$post_ids = $message_ids = $topic_ids = $physical = array(); +	/** +	* Perform additional actions before collecting data for attachment(s) deletion +	* +	* @event core.delete_attachments_collect_data_before +	* @var	string	mode			Variable containing attachments deletion mode, can be: post|message|topic|attach|user +	* @var	mixed	ids				Array or comma separated list of ids corresponding to the mode +	* @var	bool	resync			Flag indicating if posts/messages/topics should be synchronized +	* @var	string	sql_id			The field name to collect/delete data for depending on the mode +	* @since 3.1.7-RC1 +	*/ +	$vars = array( +		'mode', +		'ids', +		'resync', +		'sql_id', +	); +	extract($phpbb_dispatcher->trigger_event('core.delete_attachments_collect_data_before', compact($vars))); +  	// Collect post and topic ids for later use if we need to touch remaining entries (if resync is enabled)  	$sql = 'SELECT post_msg_id, topic_id, in_message, physical_filename, thumbnail, filesize, is_orphan  			FROM ' . ATTACHMENTS_TABLE . ' @@ -1116,6 +1204,32 @@ function delete_attachments($mode, $ids, $resync = true)  	}  	$db->sql_freeresult($result); +	/** +	* Perform additional actions before attachment(s) deletion +	* +	* @event core.delete_attachments_before +	* @var	string	mode			Variable containing attachments deletion mode, can be: post|message|topic|attach|user +	* @var	mixed	ids				Array or comma separated list of ids corresponding to the mode +	* @var	bool	resync			Flag indicating if posts/messages/topics should be synchronized +	* @var	string	sql_id			The field name to collect/delete data for depending on the mode +	* @var	array	post_ids		Array with post ids for deleted attachment(s) +	* @var	array	topic_ids		Array with topic ids for deleted attachment(s) +	* @var	array	message_ids		Array with private message ids for deleted attachment(s) +	* @var	array	physical		Array with deleted attachment(s) physical file(s) data +	* @since 3.1.7-RC1 +	*/ +	$vars = array( +		'mode', +		'ids', +		'resync', +		'sql_id', +		'post_ids', +		'topic_ids', +		'message_ids', +		'physical', +	); +	extract($phpbb_dispatcher->trigger_event('core.delete_attachments_before', compact($vars))); +  	// Delete attachments  	$sql = 'DELETE FROM ' . ATTACHMENTS_TABLE . '  		WHERE ' . $db->sql_in_set($sql_id, $ids); @@ -1125,6 +1239,34 @@ function delete_attachments($mode, $ids, $resync = true)  	$db->sql_query($sql);  	$num_deleted = $db->sql_affectedrows(); +	/** +	* Perform additional actions after attachment(s) deletion from the database +	* +	* @event core.delete_attachments_from_database_after +	* @var	string	mode			Variable containing attachments deletion mode, can be: post|message|topic|attach|user +	* @var	mixed	ids				Array or comma separated list of ids corresponding to the mode +	* @var	bool	resync			Flag indicating if posts/messages/topics should be synchronized +	* @var	string	sql_id			The field name to collect/delete data for depending on the mode +	* @var	array	post_ids		Array with post ids for deleted attachment(s) +	* @var	array	topic_ids		Array with topic ids for deleted attachment(s) +	* @var	array	message_ids		Array with private message ids for deleted attachment(s) +	* @var	array	physical		Array with deleted attachment(s) physical file(s) data +	* @var	int		num_deleted		The number of deleted attachment(s) from the database +	* @since 3.1.7-RC1 +	*/ +	$vars = array( +		'mode', +		'ids', +		'resync', +		'sql_id', +		'post_ids', +		'topic_ids', +		'message_ids', +		'physical', +		'num_deleted', +	); +	extract($phpbb_dispatcher->trigger_event('core.delete_attachments_from_database_after', compact($vars))); +  	if (!$num_deleted)  	{  		return 0; @@ -1147,6 +1289,38 @@ function delete_attachments($mode, $ids, $resync = true)  		}  	} +	/** +	* Perform additional actions after attachment(s) deletion from the filesystem +	* +	* @event core.delete_attachments_from_filesystem_after +	* @var	string	mode			Variable containing attachments deletion mode, can be: post|message|topic|attach|user +	* @var	mixed	ids				Array or comma separated list of ids corresponding to the mode +	* @var	bool	resync			Flag indicating if posts/messages/topics should be synchronized +	* @var	string	sql_id			The field name to collect/delete data for depending on the mode +	* @var	array	post_ids		Array with post ids for deleted attachment(s) +	* @var	array	topic_ids		Array with topic ids for deleted attachment(s) +	* @var	array	message_ids		Array with private message ids for deleted attachment(s) +	* @var	array	physical		Array with deleted attachment(s) physical file(s) data +	* @var	int		num_deleted		The number of deleted attachment(s) from the database +	* @var	int		space_removed	The size of deleted files(s) from the filesystem +	* @var	int		files_removed	The number of deleted file(s) from the filesystem +	* @since 3.1.7-RC1 +	*/ +	$vars = array( +		'mode', +		'ids', +		'resync', +		'sql_id', +		'post_ids', +		'topic_ids', +		'message_ids', +		'physical', +		'num_deleted', +		'space_removed', +		'files_removed', +	); +	extract($phpbb_dispatcher->trigger_event('core.delete_attachments_from_filesystem_after', compact($vars))); +  	if ($space_removed || $files_removed)  	{  		set_config_count('upload_dir_size', $space_removed * (-1), true); | 
