Virtual Pages - Source Excerpt 07
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
'body' => 'Donation privacy turns on provider choice, required fields, retention, receipts, access controls, deletion, tax requirements, and whether donor identity is exposed beyond necessity.',
),
array(
'title' => 'No Tracker-Heavy Growth',
'body' => 'A civil-liberties site loses the plot when it funds itself by turning readers into profiles. Growth tools have to respect the privacy promise.',
),
array(
'title' => 'No Fake Urgency',
'body' => 'Ask directly: if the work helps readers understand and challenge power lawfully, help keep it useful. No panic funnels, dark patterns, or manipulative countdowns.',
),
),
),
'newsletter' => array(
'summary' => 'The newsletter makes readers more capable, not more tracked: records lessons, issue updates, corrections, and practical civic moves.',
'sections' => array(
array(
'title' => 'What Readers Get',
'body' => 'Send concise updates: new dossiers, records lessons, public-comment windows, procurement notes, AI accountability developments, correction notices, and practical source links.',
),
array(
'title' => 'Privacy Before List Growth',
'body' => 'Collect the minimum needed to send updates, disclose the provider, avoid hidden tracking where possible, and make unsubscribe and deletion easy to understand.',
),
array(
'title' => 'Cadence Beats Noise',
'body' => 'A predictable rhythm is better than panic blasts. Reserve urgent notes for genuine public deadlines, major corrections, or time-sensitive civic action.',
),
array(
'title' => 'Corrections Travel',
'body' => 'When a meaningful page changes, the update channel should say what changed and why. Public memory is accountable only when repair is visible.',
),
),
),
'volunteer' => array(
'summary' => 'Volunteer work can help the archive if it is bounded: research, editing, accessibility, translation, records tracking, and careful review.',
'sections' => array(
array(
'title' => 'Useful Roles',
'body' => 'Editors, researchers, accessibility reviewers, translators, designers, public-records trackers, legal reviewers, and technical maintainers can strengthen the publication.',
),
array(
'title' => 'Review Before Publication',
'body' => 'A lead is not a finding. Volunteer material needs source notes, context, confidence labels, minimization, and editorial review before publication.',
),
array(
'title' => 'No Vigilante Work',
'body' => 'Do not target private people, impersonate, bypass access controls, scrape recklessly, gather secrets, provoke systems, or perform unauthorized investigations.',
),
array(
'title' => 'Contributor Privacy',
'body' => 'Volunteer intake should collect only what coordination requires, limit access, define retention, and avoid turning helpers into unnecessary records.',
),
),
),
'corrections-and-right-of-reply' => array(
'summary' => 'Corrections are part of credibility. A public-intelligence archive should be strong enough to repair itself in public.',
'sections' => array(
array(
'title' => 'Request A Correction',
'body' => 'Name the page, sentence, date, source issue, proposed correction, and public reason the change matters. Include links or records when available.',
),
array(
'title' => 'Correction Or Update',
'body' => 'A correction fixes factual error, missing context, overbroad implication, bad attribution, or privacy exposure. An update adds new information without necessarily changing the original finding.',
),
array(
'title' => 'Right Of Reply',
'body' => 'Named people or organizations in material findings should have a practical route to respond when feasible. The response can confirm, dispute, narrow, or complicate the record.',
),
array(
'title' => 'Privacy Repair',
'body' => 'If a page exposes unnecessary private detail, remove the detail, document the repair at an appropriate level, and consider downstream copies or summaries.',
),
),
),
'organizations' => array(
'summary' => 'Use the directory as a decision aid: what help is needed, which organization type fits, how to verify it, and what boundary keeps the listing honest.',
'sections' => array(
array(
'title' => 'Start With The Problem',
'body' => 'Do not start with a famous name. Start with the problem: records denial, arrest support, surveillance procurement, AI scoring, tenant screening, censorship pressure, protest rights, or privacy harm.',
),
array(
'title' => 'Match The Role',
'body' => 'Separate litigators, policy groups, records platforms, local coalitions, public defenders, digital-rights labs, investigative networks, standards bodies, and historical explainers.',
),
array(
'title' => 'Verify Before Relying',
'body' => 'Check official site, current program page, jurisdiction, intake limits, contact route, last reviewed date, correction path, and whether the organization actually handles the reader need.',
),
array(
'title' => 'High-Risk Names Need Context',
'body' => 'Leaderless banners, leak brands, historical hacker groups, and contested organizations need source notes, legal history, harm boundaries, and attribution labels, not simple promotion.',
),
),
),
);
foreach ( $updates as $slug => $update ) {
if ( empty( $pages[ $slug ] ) ) {
continue;
}
if ( isset( $update['summary'] ) ) {
$pages[ $slug ]['summary'] = __( $update['summary'], 'two-identities-anonymous' );
}
if ( isset( $update['eyebrow'] ) ) {
$pages[ $slug ]['eyebrow'] = __( $update['eyebrow'], 'two-identities-anonymous' );
}
if ( isset( $update['sections'] ) ) {
$pages[ $slug ]['sections'] = twoia_powerpack_translate_sections( $update['sections'] );
}
if ( isset( $update['overview_sections'] ) ) {
$pages[ $slug ]['overview_sections'] = twoia_powerpack_translate_overview_sections( $update['overview_sections'] );
}
}
return $pages;
}
/**
* Translate concise section definitions.
*
* @param array $sections Raw section definitions.
* @return array
*/
function twoia_powerpack_translate_sections( $sections ) {
$translated = array();
foreach ( $sections as $section ) {
$translated[] = array(
'title' => __( $section['title'], 'two-identities-anonymous' ),
'body' => __( $section['body'], 'two-identities-anonymous' ),
);
}
return $translated;
}
/**
* Translate concise overview definitions.
*
* @param array $sections Raw overview definitions.
* @return array
*/
function twoia_powerpack_translate_overview_sections( $sections ) {
$translated = array();
foreach ( $sections as $section ) {
$body = array();
foreach ( (array) ( $section['body'] ?? array() ) as $item ) {
$body[] = __( $item, 'two-identities-anonymous' );
}
$translated[] = array(
'title' => __( $section['title'], 'two-identities-anonymous' ),
'body' => $body,
);
}
return $translated;
}