Skip to content
wiki.fftac.org

Virtual Pages - Source Excerpt 41

Back to Virtual Pages

Summary

This source excerpt preserves a bounded section of 2IA.org/wp-content/themes/twoia-intelligence/inc/virtual-pages.php so readers can inspect the evidence without opening the full source file.

**Source path:** 2IA.org/wp-content/themes/twoia-intelligence/inc/virtual-pages.php

switch ( $slug ) {
		case 'start-here':
			twoia_render_start_here_portal();
			return true;
		case 'topic-hubs':
			twoia_render_topic_hubs_portal();
			return true;
		case 'issues':
			twoia_render_issues_portal();
			return true;
		case 'research':
			twoia_render_research_portal();
			return true;
		case 'resources':
			twoia_render_resources_portal();
			return true;
		case 'organizations':
			twoia_render_organizations_portal();
			return true;
		case 'methodology':
			twoia_render_methodology_portal();
			return true;
		case 'about':
			twoia_render_about_portal();
			return true;
		case 'support':
			twoia_render_support_portal();
			return true;
		case 'lexicon':
			twoia_render_lexicon_portal();
			return true;
	}

	return false;
}

/**
 * Render the canonical topic hub index.
 */
function twoia_render_topic_hubs_portal() {
	?>
	<section class="section section--compact twoia-ia-section" aria-labelledby="twoia-topic-hubs-title">
		<header class="section-header">
			<p class="eyebrow"><?php esc_html_e( 'Canonical hubs', 'two-identities-anonymous' ); ?></p>
			<h2 id="twoia-topic-hubs-title"><?php esc_html_e( 'Start with complete public topic pages', 'two-identities-anonymous' ); ?></h2>
			<p><?php esc_html_e( 'These hubs replace thin category archives. Each destination is a source-controlled public page with definitions, why-it-matters context, practical first steps, related methods, and correction paths.', 'two-identities-anonymous' ); ?></p>
		</header>
		<?php
		twoia_render_ia_cards(
			array(
				array( 'label' => __( 'Identity graph', 'two-identities-anonymous' ), 'title' => __( 'Metadata and Identity', 'two-identities-anonymous' ), 'body' => __( 'Records around content can reveal relationships, location, beliefs, movement, and vulnerability. Start here for metadata, retention, and correction questions.', 'two-identities-anonymous' ), 'url' => home_url( '/metadata-and-identity/' ) ),
				array( 'label' => __( 'Context collapse', 'two-identities-anonymous' ), 'title' => __( 'Keyword Monitoring', 'two-identities-anonymous' ), 'body' => __( 'Static words and sentiment labels can misread research, journalism, fiction, satire, translation, and protest when review ignores context.', 'two-identities-anonymous' ), 'url' => home_url( '/keyword-monitoring/' ) ),
				array( 'label' => __( 'Algorithmic accountability', 'two-identities-anonymous' ), 'title' => __( 'AI Surveillance', 'two-identities-anonymous' ), 'body' => __( 'Model scores and flags need documentation, explainability, human review, appeal, deletion, bias testing, and accountable ownership.', 'two-identities-anonymous' ), 'url' => home_url( '/ai-surveillance/' ) ),
				array( 'label' => __( 'Records leverage', 'two-identities-anonymous' ), 'title' => __( 'Public Records and FOIA', 'two-identities-anonymous' ), 'body' => __( 'Use requests, deadline tracking, exemption challenges, fee challenges, rolling releases, and surveillance/vendor record templates.', 'two-identities-anonymous' ), 'url' => home_url( '/public-records-and-foia/' ) ),
				array( 'label' => __( 'Surveillance literacy', 'two-identities-anonymous' ), 'title' => __( 'What They Look For', 'two-identities-anonymous' ), 'body' => __( 'Understand selectors, keywords, metadata, social graphs, sentiment, anomalies, false positives, and the records to request.', 'two-identities-anonymous' ), 'url' => home_url( '/what-they-look-for/' ) ),
				array( 'label' => __( 'Identity framework', 'two-identities-anonymous' ), 'title' => __( 'Two Identities', 'two-identities-anonymous' ), 'body' => __( 'Given identity, chosen identity, pseudonymity, identity compartmentalization, and the anonymous space between exposure and accountability.', 'two-identities-anonymous' ), 'url' => home_url( '/two-identities/' ) ),
				array( 'label' => __( 'Verification', 'two-identities-anonymous' ), 'title' => __( 'Open-Source Intelligence', 'two-identities-anonymous' ), 'body' => __( 'How 2IA verifies public claims with source context, corroboration, redaction, minimization, confidence labels, and correction paths.', 'two-identities-anonymous' ), 'url' => home_url( '/open-source-intelligence/' ) ),
				array( 'label' => __( 'Public-interest boundaries', 'two-identities-anonymous' ), 'title' => __( 'Anonymous Hacktivist Collective', 'two-identities-anonymous' ), 'body' => __( 'Study anonymity, attribution, civic analysis, legal risk, and public-interest limits without romanticizing illegal activity.', 'two-identities-anonymous' ), 'url' => home_url( '/anonymous-hacktivist-collective/' ) ),
				array( 'label' => __( 'Influence literacy', 'two-identities-anonymous' ), 'title' => __( 'Influence Operations and Media Literacy', 'two-identities-anonymous' ), 'body' => __( 'A speech-preserving taxonomy of propaganda, misinformation, disinformation, synthetic media, amplification, and proxy networks.', 'two-identities-anonymous' ), 'url' => home_url( '/psychological-warfare/' ) ),
				array( 'label' => __( 'Research ethics', 'two-identities-anonymous' ), 'title' => __( 'Ethics and Civil Liberties', 'two-identities-anonymous' ), 'body' => __( 'Operational principles for proportionality, minimization, correction, consent, truthfulness, evidence care, and no needless exposure.', 'two-identities-anonymous' ), 'url' => home_url( '/ethics-and-civil-liberties/' ) ),
			),
			'twoia-topic-hub-grid'
		);
		?>
	</section>
	<?php
}

/**
 * Render compact link cards.
 *
 * @param array  $cards Card definitions.
 * @param string $class Extra class.
 */
function twoia_render_ia_cards( $cards, $class = '' ) {
	$classes = 'twoia-dossier-grid twoia-ia-grid';
	if ( $class ) {
		$classes .= ' ' . sanitize_html_class( $class );
	}
	?>
	<div class="<?php echo esc_attr( $classes ); ?>">
		<?php foreach ( $cards as $card ) : ?>
			<?php $tag = ! empty( $card['url'] ) ? 'a' : 'article'; ?>
			<<?php echo esc_html( $tag ); ?> class="briefing-panel briefing-panel--compact twoia-dossier-card<?php echo ! empty( $card['url'] ) ? ' twoia-dossier-card--link' : ''; ?>"<?php echo ! empty( $card['url'] ) ? ' href="' . esc_url( $card['url'] ) . '"' : ''; ?>>
				<?php if ( ! empty( $card['label'] ) ) : ?>
					<span class="metadata-label"><?php echo esc_html( $card['label'] ); ?></span>
				<?php endif; ?>
				<h3><?php echo esc_html( $card['title'] ); ?></h3>
				<p><?php echo esc_html( $card['body'] ); ?></p>
				<?php if ( ! empty( $card['meta'] ) ) : ?>
					<p><strong><?php echo esc_html( $card['meta'] ); ?></strong></p>
				<?php endif; ?>
			</<?php echo esc_html( $tag ); ?>>
		<?php endforeach; ?>
	</div>
	<?php
}