Skip to content
wiki.fftac.org

Antichrist Message Board - Source Excerpt 08

Back to Antichrist Message Board

Summary

This source excerpt preserves a bounded section of Antichrist.net/wp-content/plugins/antichrist-message-board/antichrist-message-board.php so readers can inspect the evidence without opening the full source file.

**Source path:** Antichrist.net/wp-content/plugins/antichrist-message-board/antichrist-message-board.php

/**
 * Count approved board replies.
 *
 * @param int $topic_id Topic ID.
 * @return int
 */
function acnmb_reply_count( $topic_id ) {
	return count( acnmb_get_replies( $topic_id ) );
}

/**
 * Get board URL.
 *
 * @return string
 */
function acnmb_board_url() {
	$page = get_page_by_path( 'message-board' );
	if ( $page instanceof WP_Post ) {
		return get_permalink( $page );
	}
	return home_url( '/message-board/' );
}

/**
 * Current URL helper.
 *
 * @return string
 */
function acnmb_current_url() {
	$path  = isset( $_SERVER['REQUEST_URI'] ) ? wp_unslash( $_SERVER['REQUEST_URI'] ) : '/message-board/';
	$parts = wp_parse_url( home_url( '/' ) );
	$host  = isset( $parts['host'] ) ? $parts['host'] : '';
	$scheme = isset( $parts['scheme'] ) ? $parts['scheme'] : 'http';
	return esc_url_raw( $scheme . '://' . $host . $path );
}

/**
 * Safe submission redirect target.
 *
 * @return string
 */
function acnmb_submission_redirect() {
	$redirect = isset( $_POST['redirect_to'] ) ? esc_url_raw( wp_unslash( $_POST['redirect_to'] ) ) : acnmb_board_url();
	return wp_validate_redirect( $redirect, acnmb_board_url() );
}

/**
 * Render status notices.
 *
 * @return string
 */
function acnmb_status_notice() {
	$status = isset( $_GET['acnmb_status'] ) ? sanitize_key( wp_unslash( $_GET['acnmb_status'] ) ) : '';
	if ( '' === $status ) {
		return '';
	}

	$messages = array(
		'login_required'    => acnmb_t( 'acnmb.status.login_required', 'Please log in before posting.' ),
		'title_required'    => acnmb_t( 'acnmb.status.title_required', 'Add a clearer title.' ),
		'message_required'  => acnmb_t( 'acnmb.status.message_required', 'Add a message before posting.' ),
		'category_required' => acnmb_t( 'acnmb.status.category_required', 'Choose a board category.' ),
		'rate_limited'      => acnmb_t( 'acnmb.status.rate_limited', 'Please wait a moment before posting again.' ),
		'reply_created'     => acnmb_t( 'acnmb.status.reply_created', 'Reply published.' ),
		'topic_locked'      => acnmb_t( 'acnmb.status.topic_locked', 'This topic is locked.' ),
		'locale_mismatch'   => acnmb_t( 'acnmb.status.locale_mismatch', 'This discussion belongs to another language board.' ),
	);

	if ( empty( $messages[ $status ] ) ) {
		return '';
	}

	return '<div class="acnmb-notice">' . esc_html( $messages[ $status ] ) . '</div>';
}

/**
 * Add admin meta box.
 */
function acnmb_add_topic_meta_box() {
	add_meta_box(
		'acnmb-topic-controls',
		acnmb_t( 'acnmb.admin.controls', 'Board Controls' ),
		'acnmb_render_topic_meta_box',
		ACNMB_TOPIC_POST_TYPE,
		'side',
		'default'
	);
}

/**
 * Render admin meta box.
 *
 * @param WP_Post $post Topic.
 */
function acnmb_render_topic_meta_box( WP_Post $post ) {
	wp_nonce_field( 'acnmb_save_topic_meta', 'acnmb_meta_nonce' );
	?>
	<p><label><input type="checkbox" name="acnmb_pinned" value="1" <?php checked( get_post_meta( $post->ID, '_acnmb_pinned', true ) ); ?> /> <?php echo esc_html( acnmb_t( 'acnmb.admin.pin_topic', 'Pin topic' ) ); ?></label></p>
	<p><label><input type="checkbox" name="acnmb_locked" value="1" <?php checked( get_post_meta( $post->ID, '_acnmb_locked', true ) ); ?> /> <?php echo esc_html( acnmb_t( 'acnmb.admin.lock_topic', 'Lock replies' ) ); ?></label></p>
	<?php
}

/**
 * Save admin meta.
 *
 * @param int     $post_id Post ID.
 * @param WP_Post $post Post object.
 */
function acnmb_save_topic_meta( $post_id, WP_Post $post ) {
	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
		return;
	}
	if ( ! isset( $_POST['acnmb_meta_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['acnmb_meta_nonce'] ) ), 'acnmb_save_topic_meta' ) ) {
		return;
	}
	if ( ! current_user_can( 'edit_post', $post_id ) ) {
		return;
	}

	update_post_meta( $post_id, '_acnmb_pinned', isset( $_POST['acnmb_pinned'] ) ? 1 : 0 );
	update_post_meta( $post_id, '_acnmb_locked', isset( $_POST['acnmb_locked'] ) ? 1 : 0 );
}

/**
 * Admin columns.
 *
 * @param array $columns Columns.
 * @return array
 */
function acnmb_topic_admin_columns( $columns ) {
	$columns['acnmb_replies'] = acnmb_t( 'acnmb.admin.replies', 'Replies' );
	$columns['acnmb_state']   = acnmb_t( 'acnmb.admin.state', 'State' );
	return $columns;
}

/**
 * Render admin columns.
 *
 * @param string $column Column.
 * @param int    $post_id Post ID.
 */
function acnmb_render_topic_admin_column( $column, $post_id ) {
	if ( 'acnmb_replies' === $column ) {
		echo esc_html( acnmb_reply_count( $post_id ) );
	}
	if ( 'acnmb_state' === $column ) {
		$states = array();
		if ( get_post_meta( $post_id, '_acnmb_pinned', true ) ) {
			$states[] = acnmb_t( 'acnmb.board.pinned', 'Pinned' );
		}
		if ( get_post_meta( $post_id, '_acnmb_locked', true ) ) {
			$states[] = acnmb_t( 'acnmb.board.locked', 'Locked' );
		}
		echo esc_html( $states ? implode( ', ', $states ) : acnmb_t( 'acnmb.admin.open', 'Open' ) );
	}
}

/**
 * Translation strings for the board and locale-router dictionaries.
 *
 * @return array
 */
function acnmb_translation_strings() {
	$strings = array(
		'acnmb.admin.topics'             => array( 'en' => 'Message Board Topics', 'es' => 'Temas del foro' ),
		'acnmb.admin.topic'              => array( 'en' => 'Message Board Topic', 'es' => 'Tema del foro' ),
		'acnmb.admin.add_topic'          => array( 'en' => 'Add New Topic', 'es' => 'Agregar tema' ),
		'acnmb.admin.edit_topic'         => array( 'en' => 'Edit Topic', 'es' => 'Editar tema' ),
		'acnmb.admin.new_topic'          => array( 'en' => 'New Topic', 'es' => 'Nuevo tema' ),
		'acnmb.admin.view_topic'         => array( 'en' => 'View Topic', 'es' => 'Ver tema' ),
		'acnmb.admin.search_topics'      => array( 'en' => 'Search Topics', 'es' => 'Buscar temas' ),
		'acnmb.admin.no_topics'          => array( 'en' => 'No topics found', 'es' => 'No se encontraron temas' ),
		'acnmb.admin.menu'               => array( 'en' => 'Message Board', 'es' => 'Foro' ),
		'acnmb.admin.no_topics_trash'    => array( 'en' => 'No topics found in Trash', 'es' => 'No hay temas en la papelera' ),
		'acnmb.admin.categories'         => array( 'en' => 'Board Categories', 'es' => 'Categorias del foro' ),
		'acnmb.admin.category'           => array( 'en' => 'Board Category', 'es' => 'Categoria del foro' ),
		'acnmb.admin.search_categories'  => array( 'en' => 'Search Board Categories', 'es' => 'Buscar categorias del foro' ),
		'acnmb.admin.all_categories'     => array( 'en' => 'All Board Categories', 'es' => 'Todas las categorias del foro' ),
		'acnmb.admin.parent_category'    => array( 'en' => 'Parent Board Category', 'es' => 'Categoria superior del foro' ),
		'acnmb.admin.edit_category'      => array( 'en' => 'Edit Board Category', 'es' => 'Editar categoria del foro' ),
		'acnmb.admin.update_category'    => array( 'en' => 'Update Board Category', 'es' => 'Actualizar categoria del foro' ),
		'acnmb.admin.add_category'       => array( 'en' => 'Add Board Category', 'es' => 'Agregar categoria del foro' ),
		'acnmb.admin.new_category'       => array( 'en' => 'New Board Category', 'es' => 'Nueva categoria del foro' ),
		'acnmb.admin.categories_menu'    => array( 'en' => 'Board Categories', 'es' => 'Categorias del foro' ),
		'acnmb.admin.controls'           => array( 'en' => 'Board Controls', 'es' => 'Controles del foro' ),
		'acnmb.admin.pin_topic'          => array( 'en' => 'Pin topic', 'es' => 'Fijar tema' ),
		'acnmb.admin.lock_topic'         => array( 'en' => 'Lock replies', 'es' => 'Bloquear respuestas' ),
		'acnmb.admin.replies'            => array( 'en' => 'Replies', 'es' => 'Respuestas' ),
		'acnmb.admin.state'              => array( 'en' => 'State', 'es' => 'Estado' ),
		'acnmb.admin.open'               => array( 'en' => 'Open', 'es' => 'Abierto' ),
		'acnmb.board.kicker'             => array( 'en' => 'Community Research', 'es' => 'Investigacion comunitaria' ),
		'acnmb.board.title'              => array( 'en' => 'Message Board', 'es' => 'Foro' ),
		'acnmb.board.intro'              => array( 'en' => 'Read the board publicly. Log in to start topics or reply to ongoing discussions.', 'es' => 'Lee el foro publicamente. Inicia sesion para crear temas o responder.' ),
		'acnmb.board.categories_label'   => array( 'en' => 'Board categories', 'es' => 'Categorias del foro' ),
		'acnmb.board.categories'         => array( 'en' => 'Categories', 'es' => 'Categorias' ),
		'acnmb.board.all_topics'         => array( 'en' => 'All topics', 'es' => 'Todos los temas' ),
		'acnmb.board.search_label'       => array( 'en' => 'Search topics', 'es' => 'Buscar temas' ),
		'acnmb.board.search_placeholder' => array( 'en' => 'Search the board', 'es' => 'Buscar en el foro' ),
		'acnmb.board.search_button'      => array( 'en' => 'Search', 'es' => 'Buscar' ),
		'acnmb.board.no_topics_title'    => array( 'en' => 'No topics yet', 'es' => 'Aun no hay temas' ),
		'acnmb.board.no_topics_copy'     => array( 'en' => 'Start a logged-in discussion to open this category.', 'es' => 'Inicia una conversacion con sesion iniciada para abrir esta categoria.' ),