In our ongoing effort to ensure that your digital content remains compliant with state regulations, we have created a ready-to-use solution designed to simplify compliance. This solution ensures that your websites with adult content can verify viewer ages seamlessly and without disrupting user experience.
This initial AVS feature release includes support for Free Speech Coalition recommended provider VerifyMy and knewly added added BlueCheck, plus any API allowing other AVS services to integrate easily with the Elevated X CMS. This means that clients can opt to use their AVS service of choice via the API. Our integration is verify-on-payment, meaning only people who purchase or join your site need to verify. For people from states that require AVS, unverified people will get a safe-for-work (SFW) version of your tour or members area. We can either automatically blur images or you can opt to upload SFW images of your choice. This system ensures that your content is accessed only by those legally allowed, providing a secure environment for your business and your audience. See more below.
Why is AVS important?
Given the varying age consent laws across states, it's essential that your website incorporates a robust age verification system. We urge you to make your selection as soon as possible. The implementation of age verification is not just about regulatory compliance; it's about protecting your business and your audience. Delaying this decision could expose your business to unnecessary risks and liabilities.
You Can Also Choose To Display SFW Only Content
Along with this integration, the Elevated X CMS software has been modified to allow site operators to choose to only display safe for work (SFW), content compliant with all US state laws that require age verification. Users can choose to upload SFW images and trailer videos, or let the system automatically hide trailers and blur images to block adult content from viewing until someone has verified their age.
NEXT STEPS
- Evaluate Your Needs & Requirements: Consider your business's specific requirements, including the volume of visitors and the nature of your content. A current version of the CMS (April 2024) is required.
- Review the Provider: Visit VerifyMy and BlueCheck to review their offerings. Since we have secured special pricing and account management for Elevated X clients, you'll be able to move through the set-up process with ease.
- Set Up Your Account: Once you've reviewed both offers please reach out to the provider of your choice. Please note that you and the provider will manage all service agreements and payments directly.
VerifyMy: You can click here to schedule a call with Gavin Worrall, VP of Global Strategic Partnership.
BlueCheck: You can reach merchant support for BlueCheck by emailing them at merchant@bluecheck.me - Integration & Enabling AVS: Once your account is set up with the provider of your choice, we will help you integrate the age verification service with your current system through our API. Please be sure to submit a help desk ticket when you're ready to get started. Assistance with integration for established AVS service providers will be evaluated on case by case basis for those who contact us directly.
PLEASE NOTE: This integration may require our tech staff to help answer questions and inquiries, and it will happen on a case-by-case basis. To help manage expectations, please keep in mind that help desk tickets will be responded to on a first-come, first-served basis.
Enabling AVS
Under Setup (The ⚙️ icon), choose Global Settings.
Then under the AVS tab, enable AVS.
Please Note: You will either need to have an account with a provider listed above, or have custom API integration (see our Custom AVS API guide for more information)
If using VerifyMy or BlueCheck, you'll want to enter in details from your account for this page.
VerifyMy Specific Setup
After you have signed up for the VerifyMyAge Service, you'll want go to the developers tab.
Here, you'll want to make note of the API key and API secret provided by VerifyMyAge:
This will be entered in the CMS admin panel under AVS options as detailed above.
Under allowed Redirection URLs, you'll want to add a link to your members area + the file avs_confirm.php. This is where endusers will be sent after verification is done. If you are unsure of what this URL is, Elevated X support can clarify this for you.
BlueCheck Specific Setup
You'll need to register for an API key, add a payment method, and then plug that key into Elevated X. See screenshot below for an example:
Updating Thumbnails
The way the system works is that it will present a thumbnail position that is +100 over what the NSFW version is. For example, if you're using a P10 thumbnail, the SFW version of this thumbnail will be P110.
Within the plugins system, it's possible to create a blurred version of your existing thumbnails by going into the Preview Thumb plugin and having it create thumbnails from your existing thumbnails. You'll want to set the Gaussian Blur to at least 30.
Updating Files
Here's a list of templates that need to be updated in order to add support for this functionality:
settings.xml
You'll want to add the following category:
<category name="AVS">
<item name="txtavscontentwarning">Your location requires AVS verification to view adult content. Join today!</item>
<item name="signupavswarning">Your location requires age verification once your account is created.</item>
</category>
functions/standard.tpl
You'll want to add the following function:
function use_avs($set = [])
{
return
((!empty($GLOBALS["avs_required"]) && empty($set["SFW"]) && empty($GLOBALS["userinfo"]["AVS_Verified"])) || !empty($GLOBALS["userinfo"]["AVS_Unverified"])) ? 1 : 0;
}
then, on the top of the StdImage() function, you'll want to change to:
function StdImage($arr)
{
$usep = explode(",", $arr["usepriority"]);
$done = 0;
$pexists = 0;
$useretina = 1;
$use_avs = use_avs($arr["set"]);
if ($use_avs)
{
foreach($usep as &$useppp)
$useppp += $GLOBALS["sfw_thumb_offset"] ?? 100;
}
Then you'll want to change:
$usep = [10];
to
$usep = ($use_avs) ? [$GLOBALS["sfw_thumb_offset"] + 10] : [10];
Finally, you'll want to change the top of the StdCatImage() function as well:
function StdCatImage($arr)
{
$usep = explode(",", $arr["usepriority"]);
$done = 0;
$pexists = 0;
$cdir = $GLOBALS["contentdir"];
if (isset($arr["category"]["info"]["thumbs"][$usep[0]]))
{
$pexists = 1;
$pelement = $arr["category"]["info"]["thumbs"][$usep[0]];
}
$use_avs = use_avs();
if ($use_avs)
{
foreach($usep as &$useppp)
$useppp += $GLOBALS["sfw_thumb_offset"] ?? 100;
}
It's easier to replace standard.tpl entirely, but here are the necessary changes if this is not a possibility.
elxc/elxc_join_header.tpl
elxc/elxc_reg_header.tpl
At the top of these files you'll be adding this piece of code:
<?php if (use_avs()) { ?>
<div class="avs_warningtext"><?php echo $templatefields["signupavswarning"]; ?></div>
<?php } ?>
This is a warning on the top of the page for people in AVS-related areas that they'll get verification on sign-up.
elxc/elxc_register.tpl
elxc/elxc_join.tpl
You will want to replace the path to images/joinrt.jpg with this code:
images/<?= (use_avs()) ? "avs_" : "" ?>joinrt.jpg
People in AVS-required areas will have avs_joinrt.jpg load for them instead of the regular joinrt.jpg image. You will need to upload a AVS-compliant version of this image if you're using ELX complete's join page.
gallery.tpl
At the very top of this file, you'll want to add:
if ( use_avs($set) ) $GLOBALS["variablelist"]["mediatypes"] = $mediatypes = [];
This will make sure that no trailers or media shows for people who require verification and aren't verified.
globals/stddvdimage.tpl
globals/stdmodelimage.tpl
At the top of these templates, under the $usep declaration, you'll want to add:
$use_avs = use_avs();
if ($use_avs)
{
foreach($usep as &$useppp)
$useppp += $GLOBALS["sfw_thumb_offset"] ?? 100;
}
header.tpl
1. If your templates have a header image, you'll want to replace the code with something that has an alternate banner for AVS areas. In this case, you can replace this:
<?php if ($area["EnableOD"] == 1) { ?>
<a href="<?= Index_URL() ?>"><img class="header_image" src="<?= $GLOBALS["imagedir"] ?>/header/<?= (use_avs()) ? "avs_" : "" ?>ondemand_header.jpg" border="0" alt=""/></a>
<?php } else { ?>
<a href="<?= Index_URL() ?>"><img class="header_image" src="<?= $GLOBALS["imagedir"] ?>/header/<?= (use_avs()) ? "avs_" : "" ?>members_header.jpg" border="0" alt=""/></a>
<?php } ?>
with:
<?php if ($area["EnableOD"] == 1) { ?>
<a href="<?= Index_URL() ?>"><img class="header_image" src="<?= $GLOBALS["imagedir"] ?>/header/<?= (use_avs()) ? "avs_" : "" ?>ondemand_header.jpg" border="0" alt=""/></a>
<?php } else { ?>
<a href="<?= Index_URL() ?>"><img class="header_image" src="<?= $GLOBALS["imagedir"] ?>/header/<?= (use_avs()) ? "avs_" : "" ?>members_header.jpg" border="0" alt=""/></a>
<?php } ?><?php } ?>
The following snippit:
<?= (use_avs()) ? "avs_" : "" ?>
conditionally adds avs_ to the header path, serving endusers with a different header image. You'll need to upload a new SFW header for endusers in AVS areas if your templates have a header image.
2. At the very bottom of this file, add this:
<?php if ($avs_debug) { ?>
<br clear="all" />
<div class="buy_full_links">
AVS Test Mode Enabled.<br />
<?php if ($avs_required) { ?>
<small>This is the version of the website someone sees if they’re in a location that require AVS.</small>
<?php } else { ?>
<small>This is the version of the website someone sees if they’re in a location that does not require AVS.</small>
<?php } ?>
<?php
$pathInfo = parse_url($_SERVER['REQUEST_URI']);
$queryString = $pathInfo['query'] ?? "";
parse_str($queryString, $queryArray);
$queryArray['avs'] = "";
$newQueryStr = http_build_query($queryArray);
if ($newQueryStr)
$newQueryStr = "?" . $newQueryStr;
?>
<br />
<a href="<?= $pathInfo['path'] . $newQueryStr ?>">Click to turn test mode off</a>
</div>
<?php } ?>
<?php if (use_avs()) { ?>
<style>
.avs_warning {background:#FFF;border:1px solid #FF0000;color:#FF0000;font-weight:bold;padding:16px;text-align:center;}
</style>
<?php } ?>
<?php if (use_avs() && (!empty($userinfo["ManagedMember"]) || !empty($purchaseshistory)) ) { ?>
<br clear="all" />
<div class="buy_full_links avs_warning">
<a href="avs_redirect.php">Please verify your account to get full access to content</a>
</div>
<?php } elseif(use_avs()) { ?>
<br clear="all" />
<div class="buy_full_links avs_warning"><?php echo $templatefields["txtavscontentwarning"]; ?></div>
<?php } ?>
tour/header.tpl
1. If your templates have a header image, you'll want to replace the code with something that has an alternate banner for AVS areas. In this case, you can replace this:
<a href="<?= Index_URL() ?>"><img src="custom_assets/images/banner.jpg" alt="" class="tour_header_image"></a>
with:
<a href="<?= Index_URL() ?>"><img src="custom_assets/images/<?= (use_avs()) ? "avs_" : "" ?>banner.jpg" alt="" class="tour_header_image"></a>
OR
<a href="<?= Index_URL() ?>"><img class="tour_header_image" src="images/header/header.jpg" alt=""/></a>
with
<a href="<?= Index_URL() ?>"><img class="tour_header_image" src="images/header/<?= (use_avs()) ? "avs_" : "" ?>header.jpg" alt=""/></a>
The following snippit:
<?= (use_avs()) ? "avs_" : "" ?>
conditionally adds avs_ to the header path, serving endusers with a different header image. You'll need to upload a new SFW header for endusers in AVS areas if your templates have a header image.
Note: If your tour section has code for rotating banners, you'll need to make multiple avs banners to match what you do on your tour for non-AVS endusers.
2. At the very bottom of this file, add this:
<?php if ($avs_debug) { ?>
<br clear="all" />
<div class="buy_full_links">
AVS Test Mode Enabled.<br />
<?php if ($avs_required) { ?>
<small>This is the version of the website someone sees if they’re in a location that require AVS.</small>
<?php } else { ?>
<small>This is the version of the website someone sees if they’re in a location that does not require AVS.</small>
<?php } ?>
<?php
$pathInfo = parse_url($_SERVER['REQUEST_URI']);
$queryString = $pathInfo['query'] ?? "";
parse_str($queryString, $queryArray);
$queryArray['avs'] = "";
$newQueryStr = http_build_query($queryArray);
if ($newQueryStr)
$newQueryStr = "?" . $newQueryStr;
?>
<br />
<a href="<?= $pathInfo['path'] . $newQueryStr ?>">Click to turn test mode off</a>
</div>
<?php } ?>
<?php if(use_avs()) { ?>
<style>
.avs_warning {background:#FFF;border:1px solid #FF0000;color:#FF0000;font-weight:bold;padding:16px;text-align:center;}
</style>
<br clear="all" />
<div class="buy_full_links avs_warning">- <?php echo $templatefields["splashtxtwarning"]; ?><br /><?php echo $templatefields["txtavscontentwarning"]; ?></div>
<?php } ?>
template_sections/update_table_no_trailer.tpl
Please replace this file entirely.
tour/template_sections/update_table_preview.tpl
At the top of this file, add:
if ($use_avs = use_avs($set))
{
$set["trailer_url"] = $set["trailer_url_sfw"] ?? "";
}
and then change the fnthumb declaration to:
$fnthumb = function($num) use ($tour, $set) {
$diskpath = $tour["Path"] . "/" . $set["Directory"] . "/";
$httppath = "content/" . $set["Directory"] . "/";
if (use_avs($set)) return $tour["JoinUrl"];
if ($tour["NewImages_Use"])
{
if ($set['tourinfo']['thumbs'][$num]['webp_large_filename'])
return "content/contentthumbs/" . $set['tourinfo']['thumbs'][$num]['webp_large_filename'];
else
return "content/contentthumbs/" . $set['tourinfo']['thumbs'][$num]['large_filename'];
}
else
{
$diskpath = $tour["Path"] . "/" . $set["Directory"] . "/";
$httppath = "content/" . $set["Directory"] . "/";
$files = [$num . "-large.jpg", $num . "-full.jpg", $num . ".jpg"];
foreach($files as $f)
{
if (file_exists($diskpath . $f)) return $httppath . $f;
}
}
return;
};
style.css
Add the following classes:
.avscontentwarning {margin-bottom:10px; color:#FF0000;}
.avs_warningtext {background:#FFF;padding:12px;with:100%;text-align:center;color:#FF0000;font-size:16px;}
Adding Files
You'll want to add the following files to your image directories (both tour and members folders)
- images/p110.jpg
- images/p116.jpg
- images/tour-p100.jpg
- images/tour-p101.jpg
- images/tour-p102.jpg
- images/tour-p103.jpg
- images/tour-p104.jpg
- images/tour-p105.jpg
- images/tour-p106.jpg
- images/tour-p107.jpg
- images/tour-p108.jpg
And then you'll want to copy these files into your members area / vod / access folders:
- avs_confirm.php
- avs_redirect.php
Our default templates can be found here: https://cs.elevatedx.com/newest_templates.php
Creating Files / Banners
Additionally, you'll want to create your own AVS headers. Depending on your design, you'll want to create the following files:
- images/avs_joinrt.jpg
- images/header/avs_ondemand_header.jpg
- images/header/avs_members_header.jpg
- images/header/avs_header.jpg
- custom_assets/images/avs_banner.jpg