Skip to content
wiki.fftac.org

Antichrist Content System Implementation - Source Excerpt 24

Back to Antichrist Content System Implementation

Summary

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

**Source path:** Antichrist.net/wp-content/plugins/antichrist-content-system/includes/antichrist-content-system-implementation.php

$html .= '<p>Survivor material needs special care. First-person accounts can reveal patterns that official records miss, but they can also expose vulnerable people to retaliation or unwanted publicity. The archive should summarize patterns with consent-aware language, avoid demanding public disclosure, and keep private identifying details out of public pages. Anonymous tips should guide research, not become published fact. When allegations involve minors, abuse, threats, or active danger, the correct route is professional reporting and support, not an online spectacle.</p>';
	$html .= '<p>For every case study, the site should preserve a review trail: source type, publication date, jurisdiction if relevant, named organization, claim summary, confidence level, and harm category. Pages should say when a claim is disputed, when a group is defunct, when a label comes from opponents, and when a movement&apos;s own material uses violent or dehumanizing language. That discipline protects readers and protects the archive.</p>';
	$html .= '<h3>Editorial Standard</h3>';
	$html .= '<p>The editorial standard for this section is simple: document patterns, slow down certainty, and keep people safer. Use Antichrist language as an object of study, not as a verdict. Prefer reliable public records, scholarship, reputable journalism, and direct public materials. Keep living-person claims out of speculative certainty. Give readers enough context to understand coercive dynamics without glamorizing leaders, spreading propaganda, or turning vulnerable communities into targets.</p>';
	$html .= '</section>';
	$html .= '<section class="section-directory"><h2>Review Checklist</h2><div class="section-directory-grid">';
	$html .= '<article class="section-directory-card"><strong>Claim</strong><span>What exactly is being claimed, and who is making the claim?</span></article>';
	$html .= '<article class="section-directory-card"><strong>Evidence</strong><span>Which records, public statements, survivor accounts, or research sources support it?</span></article>';
	$html .= '<article class="section-directory-card"><strong>Risk</strong><span>Could publishing the claim endanger people, encourage harassment, or amplify propaganda?</span></article>';
	$html .= '</div></section>';

	return $html;
}

/**
 * Render richer topic content.
 *
 * @param string $intro Intro text.
 * @param array  $points Heading => text pairs.
 * @param array  $sources Source filenames.
 * @return string
 */
function acn_cs_rich_topic_content( $intro, $points, $sources ) {
	$html  = '<div class="editorial-callout"><p>' . esc_html( $intro ) . '</p></div>';
	$html .= '<section class="section-directory"><h2>Core Ideas</h2><div class="section-directory-grid">';
	foreach ( $points as $heading => $text ) {
		$html .= '<article class="section-directory-card"><strong>' . esc_html( $heading ) . '</strong><span>' . esc_html( $text ) . '</span></article>';
	}
	$html .= '</div></section>';
	return $html;
}

/**
 * Build a topic page.
 *
 * @param string $intro Intro text.
 * @param array  $sources Source filenames.
 * @return string
 */
function acn_cs_topic_content( $intro, $sources ) {
	$source_titles = array();
	foreach ( (array) $sources as $source ) {
		$source_titles[] = acn_cs_source_display_title( $source );
	}

	$source_copy = empty( $source_titles )
		? 'This page is maintained as an editorial routing page and should stay tied to its parent section, source review, and moderation boundaries.'
		: 'This page draws from curated research notes including ' . implode( ', ', $source_titles ) . '.';

	$html  = '<div class="editorial-callout"><p>' . esc_html( $intro ) . '</p></div>';
	$html .= '<section class="section-directory"><h2>Research frame</h2><div class="section-directory-grid">';
	$html .= '<article class="section-directory-card"><strong>Scope</strong><span>Defines the topic, its vocabulary, and the boundary between analysis, speculation, and public claims.</span></article>';
	$html .= '<article class="section-directory-card"><strong>Source trail</strong><span>' . esc_html( $source_copy ) . '</span></article>';
	$html .= '<article class="section-directory-card"><strong>Reader posture</strong><span>Compare interpretations carefully, preserve uncertainty, and avoid turning symbolic language into accusations against living people.</span></article>';
	$html .= '</div></section>';

	if ( ! empty( $source_titles ) ) {
		$html .= '<section class="editorial-callout"><h2>How to use this page</h2><p>Read this page as a compact guide into the larger archive. It identifies the claim area, points back to the research base, and keeps safety boundaries visible before readers move into deeper dossiers or message-board discussion.</p></section>';
	}

	return $html;
}

/**
 * Convert a source filename into a public display title.
 *
 * @param string $file Source filename.
 * @return string
 */
function acn_cs_source_display_title( $file ) {
	$file    = (string) $file;
	$sources = function_exists( 'acn_cs_source_files' ) ? acn_cs_source_files() : array();

	foreach ( $sources as $source ) {
		if ( isset( $source['file'], $source['title'] ) && $source['file'] === $file ) {
			return (string) $source['title'];
		}
	}

	$title = preg_replace( '/\.[^.]+$/', '', basename( $file ) );
	$title = str_replace( array( '_', '-' ), ' ', $title );
	return trim( preg_replace( '/\s+/', ' ', $title ) );
}

/**
 * Shortcode that lists child pages for the current section hub.
 *
 * @return string
 */
function acn_cs_child_pages_shortcode() {
	$post = get_post();
	if ( ! $post instanceof WP_Post ) {
		return '';
	}

	$children = get_pages(
		array(
			'parent'      => $post->ID,
			'post_status' => 'publish',
			'sort_column' => 'menu_order,post_title',
			'sort_order'  => 'ASC',
		)
	);

	if ( empty( $children ) ) {
		return '<p class="source-note">Use the reading paths above for the current public guide to this section.</p>';
	}

	$html = '<div class="topic-tree">';
	foreach ( $children as $child ) {
		$excerpt = wp_trim_words( wp_strip_all_tags( strip_shortcodes( $child->post_content ) ), 28 );
		$html   .= sprintf(
			'<a href="%1$s"><strong>%2$s</strong><span>%3$s</span></a>',
			esc_url( get_permalink( $child ) ),
			esc_html( get_the_title( $child ) ),
			esc_html( $excerpt )
		);
	}
	$html .= '</div>';

	return $html;
}

/**
 * Render the member dashboard shortcode used by the membership template.
 *
 * @return string
 */
function acn_cs_member_dashboard_shortcode() {
	$is_logged_in       = is_user_logged_in();
	$user               = $is_logged_in ? wp_get_current_user() : null;
	$participants_ready = shortcode_exists( 'pdb_signup' ) || class_exists( 'Participants_Db', false );

	$board_url     = home_url( '/message-board/' );
	$members_url   = home_url( '/members/' );
	$join_url      = get_option( 'users_can_register' ) ? wp_registration_url() : home_url( '/members/join/' );
	$profile_url   = home_url( '/members/profile/' );
	$directory_url = home_url( '/members/directory/' );
	$login_url     = wp_login_url( $members_url );
	$logout_url    = wp_logout_url( $members_url );

	$copy = $is_logged_in
		? acn_cs_t( 'acn.member.logged_in_copy', 'You are signed in. Use the board, profile tools, and member directory from here.' )
		: acn_cs_t( 'acn.member.logged_out_copy', 'Create an account or log in before posting on the message board. Public reading remains open.' );

	if ( $is_logged_in && $user instanceof WP_User ) {
		$display = $user->display_name ? $user->display_name : $user->user_login;
		$copy    = sprintf( '%s: %s', $display, $copy );
	}

	$actions = array(
		array(
			'url'   => $board_url,
			'label' => acn_cs_t( 'acn.member.board', 'Open message board' ),
		),
		array(
			'url'   => $directory_url,
			'label' => acn_cs_t( 'acn.member.directory', 'Member directory' ),
		),
		array(
			'url'   => $profile_url,
			'label' => acn_cs_t( 'acn.member.profile', 'Edit profile' ),
		),
	);

	if ( $is_logged_in ) {
		$actions[] = array(
			'url'   => $logout_url,
			'label' => acn_cs_t( 'acn.member.logout', 'Log out' ),
		);
	} else {
		array_unshift(
			$actions,
			array(
				'url'   => $login_url,
				'label' => acn_cs_t( 'acn.member.login', 'Log in' ),
			),
			array(
				'url'   => $join_url,
				'label' => acn_cs_t( 'acn.member.register', 'Register' ),
			)
		);
	}

	$status = $participants_ready
		? acn_cs_t( 'acn.member.participants_ready', 'Participants Database is available for profile intake and directory records.' )
		: acn_cs_t( 'acn.member.participants_missing', 'Profile tools are temporarily unavailable. Public reading and board links remain available.' );