| Server IP : 3.147.158.171 / Your IP : 216.73.216.216 Web Server : Apache/2.4.67 (Amazon Linux) OpenSSL/3.5.5 System : Linux ip-172-31-2-178.us-east-2.compute.internal 6.1.172-216.329.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Wed May 20 06:31:34 UTC 2026 x86_64 User : ec2-user ( 1000) PHP Version : 8.4.21 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /tsai/repo/plugins/tsai-compliance/includes/ |
Upload File : |
<?php
/**
* Front-end consent banner: enqueues assets and renders the markup.
*/
if (!defined('ABSPATH')) {
exit;
}
class TSAI_Compliance_Banner {
public static function init() {
add_action('wp_enqueue_scripts', array(__CLASS__, 'enqueue'));
add_action('wp_footer', array(__CLASS__, 'render'), 1);
}
public static function enqueue() {
wp_enqueue_style(
'tsai-compliance',
TSAI_COMPLIANCE_URL . 'assets/banner.css',
array(),
TSAI_COMPLIANCE_VERSION
);
wp_enqueue_script(
'tsai-compliance',
TSAI_COMPLIANCE_URL . 'assets/banner.js',
array(),
TSAI_COMPLIANCE_VERSION,
true
);
$s = TSAI_Compliance_Consent::settings();
// Admin preview: append ?tsai_consent_preview=1 as a logged-in admin to
// force the banner to show regardless of GPC or an existing cookie, and
// without recording consent. For testing only.
$preview = (current_user_can('manage_options') && !empty($_GET['tsai_consent_preview'])) ? 1 : 0;
wp_localize_script('tsai-compliance', 'TSAI_CONSENT', array(
'mode' => $s['mode'],
'cookie' => TSAI_Compliance_Consent::COOKIE,
'cookieDays' => intval($s['cookie_days']),
'version' => intval($s['consent_version']),
'gpc' => TSAI_Compliance_Consent::is_gpc() ? 1 : 0,
'preview' => $preview,
'categories' => array_keys($s['categories']),
'logUrl' => !empty($s['enable_logging']) ? esc_url_raw(rest_url('tsai-compliance/v1/consent')) : '',
));
}
public static function render() {
$s = TSAI_Compliance_Consent::settings();
if ($s['mode'] === 'notice') {
self::render_notice($s);
return;
}
?>
<div id="tsai-consent" class="tsai-consent" role="dialog" aria-modal="false"
aria-label="Privacy consent" hidden>
<div class="tsai-consent__inner">
<div class="tsai-consent__body">
<h2 class="tsai-consent__heading"><?php echo esc_html($s['banner_heading']); ?></h2>
<p class="tsai-consent__text">
<?php echo wp_kses_post($s['banner_text']); ?>
<?php if (!empty($s['privacy_policy_url'])) : ?>
<a href="<?php echo esc_url($s['privacy_policy_url']); ?>" target="_blank" rel="noopener">Privacy Policy</a>.
<?php endif; ?>
</p>
<div class="tsai-consent__categories">
<label class="tsai-consent__cat tsai-consent__cat--locked">
<input type="checkbox" checked disabled>
<span><strong>Necessary</strong> — required for the site to function. Always on.</span>
</label>
<?php foreach ($s['categories'] as $key => $cat) : ?>
<label class="tsai-consent__cat">
<input type="checkbox" data-tsai-category="<?php echo esc_attr($key); ?>">
<span><strong><?php echo esc_html($cat['label']); ?></strong> — <?php echo esc_html($cat['description']); ?></span>
</label>
<?php endforeach; ?>
</div>
</div>
<div class="tsai-consent__actions">
<button type="button" class="tsai-consent__btn tsai-consent__btn--ghost" data-tsai-action="reject">Reject non-essential</button>
<button type="button" class="tsai-consent__btn tsai-consent__btn--ghost" data-tsai-action="save">Save preferences</button>
<button type="button" class="tsai-consent__btn tsai-consent__btn--primary" data-tsai-action="accept">Accept all</button>
</div>
</div>
</div>
<?php
}
/**
* Slim, dismissible privacy notice. No categories, no script gating — used
* when the site sets only functional cookies.
*/
private static function render_notice($s) {
?>
<div id="tsai-consent" class="tsai-consent tsai-consent--notice" role="region"
aria-label="Privacy notice" hidden>
<div class="tsai-consent__inner">
<p class="tsai-consent__text">
<?php echo wp_kses_post($s['notice_text']); ?>
<?php if (!empty($s['privacy_policy_url'])) : ?>
<a href="<?php echo esc_url($s['privacy_policy_url']); ?>" target="_blank" rel="noopener">Privacy Policy</a>.
<?php endif; ?>
</p>
<div class="tsai-consent__actions">
<button type="button" class="tsai-consent__btn tsai-consent__btn--primary" data-tsai-action="dismiss">Got it</button>
</div>
</div>
</div>
<?php
}
}