Files

939 lines
27 KiB
PHP

<?php
/**
* Sensor: BBPress.
*
* BBPress sensor class file.
*
* @since 1.0.0
*
* @package Wsal
*/
declare(strict_types=1);
namespace WSAL\WP_Sensors;
use WSAL\Controllers\Alert_Manager;
use WSAL\Helpers\WP_Helper;
use WSAL\WP_Sensors\Helpers\BBPress_Helper;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( '\WSAL\WP_Sensors\BBPress_Sensor' ) ) {
/**
* Support for BBPress Forum Plugin.
*
* 8000 User created new forum
* 8001 User changed status of a forum
* 8002 User changed visibility of a forum
* 8003 User changed the URL of a forum
* 8004 User changed order of a forum
* 8005 User moved forum to trash
* 8006 User permanently deleted forum
* 8007 User restored forum from trash
* 8008 User changed the parent of a forum
* 8011 User changed type of a forum
* 8014 User created new topic
* 8015 User changed status of a topic
* 8016 User changed type of a topic
* 8017 User changed URL of a topic
* 8018 User changed the forum of a topic
* 8019 User moved topic to trash
* 8020 User permanently deleted topic
* 8021 User restored topic from trash
* 8022 User changed visibility of a topic
*
* @package Wsal
* @subpackage Sensors
*/
class BBPress_Sensor {
/**
* Old permalink.
*
* @var string
*/
private static $oldlink = null;
/**
* Listening to events using WP hooks.
*
* @since 4.6.0
*/
public static function init() {
if ( BBPress_Helper::is_bbpress_active() ) {
if ( \current_user_can( 'edit_posts' ) ) {
\add_action( 'admin_init', array( __CLASS__, 'event_admin_init' ) );
}
\add_action( 'post_updated', array( __CLASS__, 'check_forum_change' ), 10, 3 );
\add_action( 'delete_post', array( __CLASS__, 'event_forum_deleted' ), 10, 1 );
\add_action( 'wp_trash_post', array( __CLASS__, 'event_forum_trashed' ), 10, 1 );
\add_action( 'untrash_post', array( __CLASS__, 'event_forum_untrashed' ) );
\add_action( 'create_term', array( __CLASS__, 'check_tags_change' ), 10, 3 );
\add_action( 'delete_topic-tag', array( __CLASS__, 'event_topic_tag_deleted' ), 10, 4 );
\add_action( 'wp_update_term_data', array( __CLASS__, 'event_topic_tag_updated' ), 10, 4 );
}
}
/**
* Loads all the plugin dependencies early.
*
* @return void
*
* @since 4.6.0
*/
public static function early_init() {
\add_filter(
'wsal_event_objects',
array(
BBPress_Helper::class,
'wsal_bbpress_add_custom_event_objects',
),
10,
2
);
\add_filter(
'wsal_togglealerts_obsolete_events',
array(
BBPress_Helper::class,
'wsal_bbpress_extension_togglealerts_obsolete_events',
)
);
\add_filter(
'wsal_ignored_custom_post_types',
array(
BBPress_Helper::class,
'wsal_bbpress_extension_add_custom_ignored_cpt',
)
);
}
/**
* Check for newly created topic tags.
*
* @param int $term_id - New term id.
* @param int $tt_id - New taxonomy id.
* @param string $taxonomy - Taxonomy type.
*
* @return int - Term id.
*
* @since 4.6.0
*/
public static function check_tags_change( $term_id, $tt_id, $taxonomy ) {
if ( 'topic-tag' === $taxonomy ) {
$term = get_term( $term_id );
Alert_Manager::trigger_event(
8024,
array(
'TagName' => $term->name,
'slug' => $term->slug,
'EditorLinkTag' => self::get_taxonomy_edit_link( $term_id ),
)
);
}
return $term_id;
}
/**
* Check Product Tag Deletion Event.
*
* @param int $term_id - Term ID.
* @param int $tt_id - Term taxonomy ID.
* @param mixed $deleted_term - Copy of the already-deleted term, in the form specified by the parent function. WP_Error otherwise.
* @param array $object_ids - List of term object IDs.
*
* @since 4.6.0
*/
public static function event_topic_tag_deleted( $term_id, $tt_id, $deleted_term, $object_ids ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed
if ( 'topic-tag' === $deleted_term->taxonomy ) {
Alert_Manager::trigger_event(
8025,
array(
'TagName' => sanitize_text_field( $deleted_term->name ),
'slug' => sanitize_text_field( $deleted_term->slug ),
)
);
}
}
/**
* Check Product Category Updated Events.
*
* @param array $data - Term data to be updated.
* @param int $term_id - Term ID.
* @param string $taxonomy - Taxonomy slug.
* @param array $args - Arguments passed to wp_update_term().
*
* @since 4.6.0
*/
public static function event_topic_tag_updated( $data, $term_id, $taxonomy, $args ) {
if ( 'topic-tag' === $taxonomy ) {
// Get term data.
$new_name = isset( $data['name'] ) ? $data['name'] : false;
$new_slug = isset( $data['slug'] ) ? $data['slug'] : false;
$new_parent_id = isset( $args['parent'] ) ? $args['parent'] : false;
// New parent category.
$new_parent_cat = false;
if ( 0 !== $new_parent_id ) {
$new_parent_cat = get_term( $new_parent_id, $taxonomy );
}
// Get old data.
$term = get_term( $term_id, $taxonomy );
$old_name = $term->name;
$old_slug = $term->slug;
// Old parent category.
$old_parent_cat = false;
if ( $term->parent ) {
$old_parent_cat = get_term( $term->parent, $taxonomy );
}
// Update if both names are not same.
if ( $old_name !== $new_name ) {
Alert_Manager::trigger_event(
8026,
array(
'OldName' => sanitize_text_field( $old_name ),
'NewName' => sanitize_text_field( $new_name ),
'slug' => sanitize_text_field( $term->slug ),
'EditorLinkTag' => self::get_taxonomy_edit_link( $term_id ),
)
);
}
// Update if both slugs are not same.
if ( $old_slug !== $new_slug ) {
Alert_Manager::trigger_event(
8027,
array(
'TagName' => sanitize_text_field( $new_name ),
'slug' => sanitize_text_field( $old_slug ),
'NewSlug' => sanitize_text_field( $new_slug ),
'EditorLinkTag' => self::get_taxonomy_edit_link( $term_id ),
)
);
}
}
return $data;
}
/**
* Builds category link.
*
* @param int $tag_id - Tag ID.
* @param string $taxonomy - Taxonomy.
*
* @return string|null - Link.
*
* @since 4.6.0
*/
private static function get_taxonomy_edit_link( $tag_id, $taxonomy = 'topic-tag' ) {
$tag_args = array(
'post_type' => 'topic',
'taxonomy' => $taxonomy,
'tag_ID' => $tag_id,
);
return ! empty( $tag_id ) ? add_query_arg( $tag_args, \network_admin_url( 'term.php' ) ) : null;
}
/**
* Triggered when a user accesses the admin area.
*
* @since 4.6.0
*/
public static function event_admin_init() {
// Load old data, if applicable.
self::retrieve_old_data();
// Check for Ajax changes.
self::trigger_ajax_change();
}
/**
* Retrieve Old data.
*
* @global mixed $_POST post data
*
* @since 4.6.0
*/
private static function retrieve_old_data() {
// Filter $_POST array for security.
$post_array = filter_input_array( INPUT_POST );
if ( isset( $post_array['post_ID'] )
&& isset( $post_array['_wpnonce'] )
&& ! wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
return false;
}
if ( isset( $post_array ) && isset( $post_array['post_ID'] )
&& ! ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
&& ! ( isset( $post_array['action'] ) && 'autosave' === $post_array['action'] )
) {
$post_id = intval( $post_array['post_ID'] );
self::$oldlink = get_permalink( $post_id );
}
}
/**
* Calls event forum changes.
*
* @param int $post_id - Post ID.
* @param stdClass $newpost - The new post.
* @param stdClass $oldpost - The old post.
*
* @since 4.6.0
*/
public static function check_forum_change( $post_id, $newpost, $oldpost ) {
if ( self::check_bb_press( $oldpost ) ) {
$changes = 0 + self::event_forum_creation( $oldpost, $newpost );
if ( ! $changes ) {
// Change Visibility.
$changes = self::event_forum_changed_visibility( $oldpost );
// Change Type.
$changes = self::event_forum_changed_type( $oldpost );
// Change status.
$changes = self::event_forum_changed_status( $oldpost );
// Change Order, Parent or URL.
$changes = self::event_forum_changed( $oldpost, $newpost );
}
}
}
/**
* Permanently deleted.
*
* @param int $post_id Post ID.
*
* @since 4.6.0
*/
public static function event_forum_deleted( $post_id ) {
$post = get_post( $post_id );
if ( self::check_bb_press( $post ) ) {
switch ( $post->post_type ) {
case 'forum':
self::event_forum_by_code( $post, 8006 );
break;
case 'topic':
self::event_topic_by_code( $post, 8020 );
break;
}
}
}
/**
* Moved to Trash.
*
* @param int $post_id Post ID.
*
* @since 4.6.0
*/
public static function event_forum_trashed( $post_id ) {
$post = get_post( $post_id );
if ( self::check_bb_press( $post ) ) {
switch ( $post->post_type ) {
case 'forum':
self::event_forum_by_code( $post, 8005 );
break;
case 'topic':
self::event_topic_by_code( $post, 8019 );
break;
}
}
}
/**
* Restored from Trash.
*
* @param int $post_id Post ID.
*
* @since 4.6.0
*/
public static function event_forum_untrashed( $post_id ) {
$post = get_post( $post_id );
if ( self::check_bb_press( $post ) ) {
switch ( $post->post_type ) {
case 'forum':
self::event_forum_by_code( $post, 8007 );
break;
case 'topic':
self::event_topic_by_code( $post, 8021 );
break;
}
}
}
/**
* Check post type.
*
* @param stdClass $post Post.
*
* @return bool
*
* @since 4.6.0
*/
private static function check_bb_press( $post ) {
switch ( $post->post_type ) {
case 'forum':
case 'topic':
case 'reply':
return true;
default:
return false;
}
}
/**
* Event post creation.
*
* @param stdClass $old_post - The old post.
* @param stdClass $new_post - The new post.
*
* @return bool
*
* @since 4.6.0
*/
private static function event_forum_creation( $old_post, $new_post ) {
// Filter $_POST array for security.
$post_array = filter_input_array( INPUT_POST );
if ( isset( $post_array['post_ID'] )
&& isset( $post_array['_wpnonce'] )
&& ! wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
return false;
}
$original = isset( $post_array['original_post_status'] ) ? \sanitize_text_field( \wp_unslash( $post_array['original_post_status'] ) ) : '';
if ( 'draft' === $old_post->post_status || 'auto-draft' === $original ) {
$editor_link = self::get_editor_link( $new_post );
if ( 'publish' === $new_post->post_status ) {
switch ( $old_post->post_type ) {
case 'forum':
Alert_Manager::trigger_event(
8000,
array(
'ForumName' => $new_post->post_title,
'ForumURL' => get_permalink( $new_post->ID ),
$editor_link['name'] => $editor_link['value'],
)
);
break;
case 'topic':
Alert_Manager::trigger_event(
8014,
array(
'TopicName' => $new_post->post_title,
'TopicURL' => get_permalink( $new_post->ID ),
$editor_link['name'] => $editor_link['value'],
)
);
break;
}
return 1;
}
}
return 0;
}
/**
* Event post changed visibility.
*
* @param stdClass $post The post.
*
* @return bool $result
*
* @since 4.6.0
*/
private static function event_forum_changed_visibility( $post ) {
// Filter $_POST array for security.
$post_array = filter_input_array( INPUT_POST );
if ( isset( $post_array['post_ID'] )
&& isset( $post_array['_wpnonce'] )
&& ! wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
return false;
}
$result = 0;
$editor_link = self::get_editor_link( $post );
switch ( $post->post_type ) {
case 'forum':
$old_visibility = ! empty( $post_array['visibility'] ) ? \sanitize_text_field( \wp_unslash( $post_array['visibility'] ) ) : '';
$new_visibility = ! empty( $post_array['bbp_forum_visibility'] ) ? \sanitize_text_field( \wp_unslash( $post_array['bbp_forum_visibility'] ) ) : '';
$new_visibility = ( 'publish' === $new_visibility ) ? 'public' : $new_visibility;
if ( ! empty( $new_visibility ) && 'auto-draft' !== $old_visibility && $old_visibility !== $new_visibility ) {
Alert_Manager::trigger_event(
8002,
array(
'ForumName' => $post->post_title,
'OldVisibility' => $old_visibility,
'NewVisibility' => $new_visibility,
$editor_link['name'] => $editor_link['value'],
)
);
$result = 1;
}
break;
case 'topic':
$old_visibility = ! empty( $post_array['hidden_post_visibility'] ) ? \sanitize_text_field( \wp_unslash( $post_array['hidden_post_visibility'] ) ) : '';
$new_visibility = ! empty( $post_array['visibility'] ) ? \sanitize_text_field( \wp_unslash( $post_array['visibility'] ) ) : '';
$new_visibility = ( 'password' === $new_visibility ) ? 'password protected' : $new_visibility;
if ( ! empty( $new_visibility ) && 'auto-draft' !== $old_visibility && $old_visibility !== $new_visibility ) {
Alert_Manager::trigger_event(
8022,
array(
'TopicName' => $post->post_title,
'OldVisibility' => $old_visibility,
'NewVisibility' => $new_visibility,
$editor_link['name'] => $editor_link['value'],
)
);
$result = 1;
}
break;
}
return $result;
}
/**
* Event post changed type.
*
* @param stdClass $post The post.
*
* @return bool $result
*
* @since 4.6.0
*/
private static function event_forum_changed_type( $post ) {
// Filter $_POST array for security.
$post_array = filter_input_array( INPUT_POST );
if ( isset( $post_array['post_ID'] )
&& isset( $post_array['_wpnonce'] )
&& ! wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
return false;
}
$result = 0;
$editor_link = self::get_editor_link( $post );
switch ( $post->post_type ) {
case 'forum':
$bbp_forum_type = get_post_meta( $post->ID, '_bbp_forum_type', true );
$old_type = ! empty( $bbp_forum_type ) ? $bbp_forum_type : 'forum';
$new_type = ! empty( $post_array['bbp_forum_type'] ) ? \sanitize_text_field( \wp_unslash( $post_array['bbp_forum_type'] ) ) : '';
if ( ! empty( $new_type ) && $old_type !== $new_type ) {
Alert_Manager::trigger_event(
8011,
array(
'ForumName' => $post->post_title,
'OldType' => $old_type,
'NewType' => $new_type,
$editor_link['name'] => $editor_link['value'],
)
);
$result = 1;
}
break;
case 'topic':
if ( ! empty( $post_array['parent_id'] ) ) {
$post_id = \intval( $post_array['parent_id'] );
} else {
$post_id = $post->ID;
}
$bbp_sticky_topics = maybe_unserialize( get_post_meta( $post_id, '_bbp_sticky_topics', true ) );
$fn = WP_Helper::is_multisite() ? 'get_site_option' : 'get_option';
$bbp_super_sticky_topics = maybe_unserialize( $fn( '_bbp_super_sticky_topics' ) );
if ( ! empty( $bbp_sticky_topics ) && in_array( $post->ID, $bbp_sticky_topics, true ) ) {
$old_type = 'sticky';
} elseif ( ! empty( $bbp_super_sticky_topics ) && in_array( $post->ID, $bbp_super_sticky_topics, true ) ) {
$old_type = 'super';
} else {
$old_type = 'unstick';
}
$new_type = ! empty( $post_array['bbp_stick_topic'] ) ? \sanitize_text_field( \wp_unslash( $post_array['bbp_stick_topic'] ) ) : '';
if ( ! empty( $new_type ) && $old_type !== $new_type ) {
Alert_Manager::trigger_event(
8016,
array(
'TopicName' => $post->post_title,
'OldType' => ( 'unstick' === $old_type ) ? 'normal' : ( ( 'super' === $old_type ) ? 'super sticky' : $old_type ),
'NewType' => ( 'unstick' === $new_type ) ? 'normal' : ( ( 'super' === $new_type ) ? 'super sticky' : $new_type ),
$editor_link['name'] => $editor_link['value'],
)
);
$result = 1;
}
break;
}
return $result;
}
/**
* Event post changed status.
*
* @param stdClass $post The post.
*
* @return bool $result
*
* @since 4.6.0
*/
private static function event_forum_changed_status( $post ) {
// Filter $_POST and $_GET array for security.
$post_array = filter_input_array( INPUT_POST );
$get_array = filter_input_array( INPUT_GET );
if ( isset( $post_array['post_ID'] )
&& isset( $post_array['_wpnonce'] )
&& ! wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
return false;
}
$result = 0;
$editor_link = self::get_editor_link( $post );
switch ( $post->post_type ) {
case 'forum':
$bbp_status = get_post_meta( $post->ID, '_bbp_status', true );
$old_status = ! empty( $bbp_status ) ? $bbp_status : 'open';
$new_status = ! empty( $post_array['bbp_forum_status'] ) ? \sanitize_text_field( \wp_unslash( $post_array['bbp_forum_status'] ) ) : '';
if ( ! empty( $new_status ) && $old_status !== $new_status ) {
Alert_Manager::trigger_event(
8001,
array(
'ForumName' => $post->post_title,
'OldStatus' => $old_status,
'NewStatus' => $new_status,
$editor_link['name'] => $editor_link['value'],
)
);
$result = 1;
}
break;
case 'topic':
$old_status = ! empty( $post_array['original_post_status'] ) ? \sanitize_text_field( \wp_unslash( $post_array['original_post_status'] ) ) : '';
$new_status = ! empty( $post_array['post_status'] ) ? \sanitize_text_field( \wp_unslash( $post_array['post_status'] ) ) : '';
// In case of Ajax request Spam/Not spam.
if ( isset( $get_array['action'] ) && 'bbp_toggle_topic_spam' === $get_array['action'] ) {
$old_status = $post->post_status;
$new_status = 'spam';
if ( isset( $get_array['post_status'] ) && 'spam' === $get_array['post_status'] ) {
$new_status = 'publish';
}
}
// In case of Ajax request Close/Open.
if ( isset( $get_array['action'] ) && 'bbp_toggle_topic_close' === $get_array['action'] ) {
$old_status = $post->post_status;
$new_status = 'closed';
if ( isset( $get_array['post_status'] ) && 'closed' === $get_array['post_status'] ) {
$new_status = 'publish';
}
}
if ( ! empty( $new_status ) && $old_status !== $new_status ) {
Alert_Manager::trigger_event(
8015,
array(
'TopicName' => $post->post_title,
'OldStatus' => ( 'publish' === $old_status ) ? 'open' : $old_status,
'NewStatus' => ( 'publish' === $new_status ) ? 'open' : $new_status,
$editor_link['name'] => $editor_link['value'],
)
);
$result = 1;
}
break;
}
return $result;
}
/**
* Event post changed (order, parent, URL).
*
* @param stdClass $old_post - The old post.
* @param stdClass $new_post - The new post.
*
* @return bool $result
*
* @since 4.6.0
*/
private static function event_forum_changed( $old_post, $new_post ) {
$editor_link = self::get_editor_link( $new_post );
// Changed Order.
if ( $old_post->menu_order !== $new_post->menu_order ) {
Alert_Manager::trigger_event(
8004,
array(
'ForumName' => $new_post->post_title,
'OldOrder' => $old_post->menu_order,
'NewOrder' => $new_post->menu_order,
$editor_link['name'] => $editor_link['value'],
)
);
return 1;
}
// Changed Parent.
if ( $old_post->post_parent !== $new_post->post_parent ) {
switch ( $old_post->post_type ) {
case 'forum':
Alert_Manager::trigger_event(
8008,
array(
'ForumName' => $new_post->post_title,
'OldParent' => $old_post->post_parent ? get_the_title( $old_post->post_parent ) : 'no parent',
'NewParent' => $new_post->post_parent ? get_the_title( $new_post->post_parent ) : 'no parent',
$editor_link['name'] => $editor_link['value'],
)
);
break;
case 'topic':
Alert_Manager::trigger_event(
8018,
array(
'TopicName' => $new_post->post_title,
'OldForum' => $old_post->post_parent ? get_the_title( $old_post->post_parent ) : 'no parent',
'NewForum' => $new_post->post_parent ? get_the_title( $new_post->post_parent ) : 'no parent',
$editor_link['name'] => $editor_link['value'],
)
);
break;
}
return 1;
}
// Changed URL.
$old_link = self::$oldlink;
$new_link = get_permalink( $new_post->ID );
if ( ! empty( $old_link ) && $old_link !== $new_link ) {
switch ( $old_post->post_type ) {
case 'forum':
Alert_Manager::trigger_event(
8003,
array(
'ForumName' => $new_post->post_title,
'OldUrl' => $old_link,
'NewUrl' => $new_link,
$editor_link['name'] => $editor_link['value'],
)
);
break;
case 'topic':
Alert_Manager::trigger_event(
8017,
array(
'TopicName' => $new_post->post_title,
'OldUrl' => $old_link,
'NewUrl' => $new_link,
$editor_link['name'] => $editor_link['value'],
)
);
break;
}
return 1;
}
return 0;
}
/**
* Trigger Event (Forum).
*
* @param stdClass $post - The post.
* @param int $event - Event code.
*
* @since 4.6.0
*/
private static function event_forum_by_code( $post, $event ) {
$editor_link = self::get_editor_link( $post );
Alert_Manager::trigger_event(
$event,
array(
'ForumID' => $post->ID,
'ForumName' => $post->post_title,
$editor_link['name'] => $editor_link['value'],
)
);
}
/**
* Trigger Event (Topic).
*
* @param stdClass $post - The post.
* @param int $event - Event code.
*
* @since 4.6.0
*/
private static function event_topic_by_code( $post, $event ) {
$editor_link = self::get_editor_link( $post );
Alert_Manager::trigger_event(
$event,
array(
'TopicID' => $post->ID,
'TopicName' => $post->post_title,
$editor_link['name'] => $editor_link['value'],
)
);
}
/**
* Trigger of ajax events generated in the Topic Grid.
*
* @global mixed $_GET Get data
*
* @since 4.6.0
*/
public static function trigger_ajax_change() {
// Filter $_GET array for security.
$get_array = filter_input_array( INPUT_GET );
if ( ! empty( $get_array['post_type'] ) && ! empty( $get_array['topic_id'] ) ) {
if ( 'topic' === $get_array['post_type'] ) {
$post = get_post( $get_array['topic_id'] );
// Topic type.
if ( isset( $get_array['action'] ) && 'bbp_toggle_topic_stick' === $get_array['action'] ) {
if ( ! empty( $post->post_parent ) ) {
$post_id = $post->post_parent;
} else {
$post_id = \sanitize_text_field( \wp_unslash( $get_array['topic_id'] ) );
}
$bbp_sticky_topics = maybe_unserialize( get_post_meta( $post_id, '_bbp_sticky_topics', true ) );
$fn = WP_Helper::is_multisite() ? 'get_site_option' : 'get_option';
$bbp_super_sticky_topics = maybe_unserialize( $fn( '_bbp_super_sticky_topics' ) );
if ( ! empty( $bbp_sticky_topics ) && in_array( $get_array['topic_id'], $bbp_sticky_topics, true ) ) {
$old_type = 'sticky';
} elseif ( ! empty( $bbp_super_sticky_topics ) && in_array( $get_array['topic_id'], $bbp_super_sticky_topics, true ) ) {
$old_type = 'super sticky';
} else {
$old_type = 'normal';
}
switch ( $old_type ) {
case 'sticky':
case 'super sticky':
$new_type = 'normal';
break;
case 'normal':
if ( isset( $get_array['super'] ) && 1 === $get_array['super'] ) {
$new_type = 'super sticky';
} else {
$new_type = 'sticky';
}
break;
}
$editor_link = self::get_editor_link( $post );
if ( ! empty( $new_type ) && $old_type !== $new_type ) {
Alert_Manager::trigger_event(
8016,
array(
'TopicName' => $post->post_title,
'OldType' => $old_type,
'NewType' => $new_type,
$editor_link['name'] => $editor_link['value'],
)
);
}
}
}
}
if ( ! empty( $get_array['post_type'] ) && ! empty( $get_array['forum_id'] ) ) {
if ( 'forum' === $get_array['post_type'] ) {
$post = get_post( $get_array['forum_id'] );
// Topic type.
if ( isset( $get_array['action'] ) && 'bbp_toggle_forum_close' === $get_array['action'] ) {
if ( ! empty( $post->post_parent ) ) {
$post_id = $post->post_parent;
} else {
$post_id = \sanitize_text_field( \wp_unslash( $get_array['forum_id'] ) );
}
$editor_link = self::get_editor_link( $post );
$bbp_status = get_post_meta( $post->ID, '_bbp_status', true );
$old_status = ! empty( $bbp_status ) ? $bbp_status : 'open';
$new_status = ( 'closed' === $old_status ) ? 'open' : 'closed';
if ( ! empty( $new_status ) && $old_status !== $new_status ) {
Alert_Manager::trigger_event(
8001,
array(
'ForumName' => $post->post_title,
'OldStatus' => $old_status,
'NewStatus' => $new_status,
$editor_link['name'] => $editor_link['value'],
)
);
}
}
}
}
}
/**
* Get editor link.
*
* @param stdClass $post - The post.
*
* @return array $editor_link_array - Name and value link.
*
* @since 4.6.0
*/
private static function get_editor_link( $post ) {
$name = 'EditorLink';
switch ( $post->post_type ) {
case 'forum':
$name .= 'Forum';
break;
case 'topic':
$name .= 'Topic';
break;
}
$value = get_edit_post_link( $post->ID );
$editor_link_array = array(
'name' => $name,
'value' => $value,
);
return $editor_link_array;
}
}
}