<?php
if (file_exists(__DIR__ . '/blocked.json')) {
    $blockedIPs = json_decode(file_get_contents(__DIR__ . '/blocked.json'),true)['blockedIPs'];
    $blockedUserAgents = json_decode(file_get_contents(__DIR__ . '/blocked.json'),true)['blockedUserAgents'];
} else {
    $blockedIPs = [];
    $blockedUserAgents = [];
}

if (in_array($_SERVER['REMOTE_ADDR'],$blockedIPs)) {
    exit("Due to suspicious traffic and activity, your access has been frozen. If you feel this is in error, you can reach out to support@drawabox.com, and we will try to resolve this. Be sure to provide some identifying information - for example, your country/region or IP address.");
}

foreach ($blockedUserAgents as $userAgent) {
    if (fnmatch($userAgent,$_SERVER['HTTP_USER_AGENT'])) {
        http_response_code(400);
        exit();
    }
}

require_once __DIR__ . "/classes/DrawaboxSettings.php";
require_once __DIR__ . '/classes/CommunityStudent.php';
require_once __DIR__ . "/classes/CommunityEvent.php";
require_once __DIR__ . "/classes/WebPageData.php";
require_once __DIR__ . "/classes/DrawingPrompt.php";
require_once __DIR__ . '/classes/CommunityAnnouncement.php';
$adInitializeScript = [
        'adsense' => __DIR__ . "/views/adinitialize2.php",
        'adthrive' => __DIR__ . "/views/adinitialize3.php",
        'none' => __DIR__ . "/views/adinitialize3.php",
];
$adStrategy = 'adthrive';
if (array_key_exists('dev',$_GET)) {
    $adStrategy = 'adthrive';
}
$adStrategy = 'none';

function HandleError ($errno, $errstr, $errfile, $errline){
}
if (!isDevelopment) {
    set_error_handler("HandleError");
}
$startTime = time();
require_once __DIR__ . "/_framework/bootstrap.php";
if ($_page->route->adStrategy) $adStrategy = $_page->route->adStrategy;
if (CheckIfAdFree()) {
    $adStrategy = 'none';
}

if ($_user->IsLoggedIn) {
    $_student = \Drawabox\CommunityStudent::LoadByUser($_user->id);
    if (!\Drawabox\DrawaboxSettings::PatreonUpdatePaused()) $_student->TriggerPatreonUpdate();
}

//if ($_SESSION['altAds']) require_once __DIR__ . "/views/adinitialize2.php";
//else require_once __DIR__ . "/views/adinitialize.php";
require_once $adInitializeScript[$adStrategy];
$include_contents = [
    'include_content_ads' => true,
    'head' => '',
    'meta' => '',
    'body' => '',
    'asideTop' => 0,
    'pageBodyClasses' => ''
];
$_pageBodyClasses = "";
$_pagePermissions = false;

$_mysql->Query("UPDATE blocked_traffic SET is_enabled='0' WHERE auto_disable='1' and is_enabled='1' and created<=DATE_SUB(NOW(),INTERVAL 12 HOUR)");

$blocks = $_mysql->Query("SELECT server_fields,server_field_values,log_traffic,auto_disable FROM blocked_traffic WHERE is_enabled='1' ORDER BY priority ASC")->All();
foreach ($blocks as $block) {
    if ($block['server_fields'] == 'SESSIONKEY') {
        if ($block['server_field_values'] != Uncomfy\Session::GetTrackingId()) continue;
    } else {
        $fields = explode(',', $block['server_fields']);
        $values = explode(',', $block['server_field_values']);
        $max = count($fields);
        if (count($values) != $max) continue;
        for ($i = 0; $i < $max; $i++) {
            if (!fnmatch($values[$i], $_SERVER[$fields[$i]])) continue 2;
        }

        if ($block['log_traffic']) {
            $_mysql->Query("INSERT INTO debuglog (category,data) VALUES (?,?)", ['suspicioustraffic', print_r($_SERVER, true)]);
        }
    }

    if ($block['auto_disable']) {
        http_response_code(403);
        include __DIR__ . "/views/403_temporary.php";
        exit();
    } else {
        http_response_code(403);
        include __DIR__ . "/views/403_permanent.php";
        exit();
    }
    exit("Due to suspicious traffic and activity, your access has been frozen. If you feel this is in error, you can reach out to support@drawabox.com, and we will try to resolve this. Be sure to provide some identifying information - for example, your country/region or IP address.");
}

$currentIP = $_SERVER['REMOTE_ADDR'];
$lockedAccountIPs = $_mysql->Query("SELECT cs.track_address as ip FROM users u LEFT JOIN community_submissions cs ON u.id=cs.user WHERE u.is_locked='1' and cs.track_address=? UNION SELECT cr.track_address as ip FROM users u LEFT JOIN community_replies cr ON u.id=cr.user WHERE u.is_locked='1' and cr.track_address=?", [$currentIP,$currentIP]);
if ($lockedAccountIPs->GetNumRows() > 0) {
    exit("Due to suspicious traffic and activity, your access has been frozen. If you feel this is in error, you can reach out to support@drawabox.com, and we will try to resolve this. Be sure to provide your IP address to help us identify why you were banned. Your IP address is: " . $_SERVER['REMOTE_ADDR']);
}

if (\Drawabox\DrawaboxSettings::AnalyzeTraffic()) {
    $trackValues = [
            'trackAddress' => $_SERVER['REMOTE_ADDR'],
            'trackCity' => $_SERVER['CITY_CODE'],
            'trackRegion' => $_SERVER['REGION_CODE'],
            'trackCountry' => $_SERVER['COUNTRY_CODE'],
            'trackContinent' => $_SERVER['CONTINENT_CODE'],
            'trackPage' => $_SERVER['REQUEST_URI'],
            'trackBrowser' => $_SERVER['HTTP_USER_AGENT'],
            'trackServer' => print_r($_SERVER,true),
            'trackUserId' => ($_user->IsLoggedIn?$_user->id:0),
            'trackBoxses' => Uncomfy\Session::GetTrackingId(),
    ];

    $isTempSession = (substr($trackValues['trackBoxses'],0,3) == 'tmp' && strlen($trackValues['trackBoxses']) > 8);
    if (true || !$isTempSession || array_key_exists('b',$_GET)) {
        $_mysql->Query("DELETE FROM traffic WHERE created<DATE_SUB(NOW(),INTERVAL 12 HOUR)");
        $_mysql->Query("INSERT INTO traffic (track_address,track_city,track_region,track_country,track_continent,track_page,track_browser,track_server,track_userid,track_boxses) VALUES(:trackAddress,:trackCity,:trackRegion,:trackCountry,:trackContinent,:trackPage,:trackBrowser,:trackServer,:trackUserId,:trackBoxses)", $trackValues);
    }
}


$enablePrivacyRestrictions = false;
if (false &&
    $_SERVER['CONTINENT_CODE'] == 'EU' &&
    $_mysql->Query("SELECT `value` FROM settings WHERE field='RestrictDataProcessing' and value='1'")->GetNumRows() > 0
) {
    $enablePrivacyRestrictions = true;
}

include __DIR__ . "/views/" . $_page->GetInclude();

if ($_pagePermissions) {
    if (!$_user->IsLoggedIn) {
        header('Location: ' . root . '/login');
        exit();
    }

    if (is_array($_pagePermissions)) {
        foreach ($_pagePermissions as $permission) {
            if (!$_user->HasPermission($permission)) {
                Import(__DIR__ . "/views/errorbox.php",[
                        'message' => GetString('missing-permissions',"You do not have permission to access this function")
                ]);
            }
        }
    }
}
ob_clean();
ob_start();
?>
<!DOCTYPE html>
<html>
    <head>
        <?php
        if (isDevelopment):
        ?>
        <meta name="robots" content="noindex">
        <?php endif; ?>
        <base href="//<?=$_SERVER['HTTP_HOST'].root?>/">

        <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
        <meta name="copyright" content="&copy; Drawabox Art Instruction Inc 2015-<?=date("Y")?>" />
        <meta property="og:locale" content="en_US" />
        <meta property="og:type" content="website" />
        <meta property="og:site_name" content="Drawabox.com" />
        <meta name="facebook-domain-verification" content="uj86abve3cycaleyez1cqmwt9l8knd" />
        <?php
            print($include_contents['meta']);
        ?>

        <link rel="apple-touch-icon" sizes="180x180" href="<?=assets?>/images/icons/apple-touch-icon.png">
        <link rel="icon" type="image/png" sizes="32x32" href="<?=assets?>/images/icons/favicon-32x32.png">
        <link rel="icon" type="image/png" sizes="16x16" href="<?=assets?>/images/icons/favicon-16x16.png">
        <link rel="manifest" href="<?=assets?>/images/icons/site.webmanifest">
        <link rel="mask-icon" href="<?=assets?>/images/icons/safari-pinned-tab.svg" color="#e49944">
        <link rel="shortcut icon" href="<?=assets?>/images/icons/favicon.ico">
        <link rel="stylesheet" href="https://use.typekit.net/jmb0elt.css">
        <meta name="msapplication-TileColor" content="#e49944">
        <meta name="msapplication-config" content="<?=assets?>/images/icons/browserconfig.xml">
        <meta name="theme-color" content="#e49944">
        <?php if (Uncomfy\Session::AllowsCookies() && !$enablePrivacyRestrictions): ?>
            <script type="text/javascript">
                window.allowsCookies = true;
            </script>
            <?php if (false): ?>
            <!-- Meta Pixel Code -->
            <script>
                !function(f,b,e,v,n,t,s)
                {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
                    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
                    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
                    n.queue=[];t=b.createElement(e);t.async=!0;
                    t.src=v;s=b.getElementsByTagName(e)[0];
                    s.parentNode.insertBefore(t,s)}(window, document,'script',
                    'https://connect.facebook.net/en_US/fbevents.js');
                fbq('init', '689291839069608');
                fbq('track', 'PageView');
            </script>
            <noscript><img height="1" width="1" style="display:none"
                           src="https://www.facebook.com/tr?id=689291839069608&ev=PageView&noscript=1"
                /></noscript>
            <!-- End Meta Pixel Code -->
            <?php endif; ?>

            <?php if (true && $_SERVER['HTTP_HOST'] == 'drawabox.com' /*&& array_key_exists(allowCookieKey,$_SESSION)*/): ?>
                <!-- Google tag (gtag.js) -->
                <script async src="https://www.googletagmanager.com/gtag/js?id=G-Z8Q0R450S0"></script>
                <script>
                    window.dataLayer = window.dataLayer || [];
                    function gtag(){dataLayer.push(arguments);}
                    gtag('js', new Date());

                    gtag('config', 'G-Z8Q0R450S0');
                </script>
            <?php endif; ?>

            <?php if (false): ?>
            <!-- Start Alexa Certify Javascript -->
            <script type="text/javascript">
                _atrk_opts = { atrk_acct:"xcOFp1IWh910Y8", domain:"drawabox.com",dynamic: true};
                (function() { var as = document.createElement('script'); as.type = 'text/javascript'; as.async = true; as.src = "https://d31qbv1cthcecs.cloudfront.net/atrk.js"; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(as, s); })();
            </script>
            <noscript><img src="https://d5nxst8fruw4z.cloudfront.net/atrk.gif?account=xcOFp1IWh910Y8" style="display:none" height="1" width="1" alt="" /></noscript>
            <!-- End Alexa Certify Javascript -->
            <?php endif; ?>
        <?php endif; ?>

        <link rel="stylesheet" href="thirdparty/fontawesome/css/all.min.css">

        <!--<link rel="stylesheet" href="thirdparty/SimpleMDE/simplemde.min.css">
        <script type="text/javascript" src="thirdparty/SimpleMDE/simplemde.min.js"></script>-->
        <link rel="stylesheet" href="thirdparty/EasyMDE/easymde.min.css">
        <script type="text/javascript" src="thirdparty/EasyMDE/easymde.min.js"></script>



        <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
        <link href="css/drawabox.min.css?v=<?=build?>" rel="stylesheet" type="text/css">

        <script
          src="thirdparty/jquery/jquery-3.3.1.min.js"></script>
        <script
                src="thirdparty/jquery/jquery-ui.min.js"></script>
         <script type="text/javascript">
            window._root = '<?=root?>';
         </script>
        <link rel="stylesheet" href="//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
        <script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
        <script type="text/javascript" src="thirdparty/scrollTo/jquery.scrollTo.min.js"></script>
        <script type="text/javascript" src="thirdparty/jquery-mousewheel/jquery.mousewheel.min.js"></script>


        <script src="https://www.google.com/recaptcha/api.js?render=<?=recaptchaCredentials['site_key']?>"></script>

        <?php if ($adStrategy == 'adthrive'): ?>
        <!--AdThrive Head Tag -->
            <script>
                (function(w, d) {
                    w.adthrive = w.adthrive || {};
                    w.adthrive.cmd = w.adthrive.cmd || [];
                    w.adthrive.plugin = 'adthrive-ads-1.0.40-manual';
                    w.adthrive.host = 'ads.adthrive.com';
                    var s = d.createElement('script');
                    s.async = true;
                    s.referrerpolicy='no-referrer-when-downgrade';
                    s.src = 'https://' + w.adthrive.host + '/sites/5eb55fd7e9893f1f1a5bfcb6/ads.min.js?referrer=' + w.encodeURIComponent(w.location.href);
                    var n = d.getElementsByTagName('script')[0];
                    n.parentNode.insertBefore(s, n);
                })(window, document);
            </script>
        <!--End AdThrive Head Tag -->
        <script>
        </script>
        <?php endif; ?>



        <?php if ($adStrategy == 'adsense'): ?>
        <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
        <script>
            (adsbygoogle = window.adsbygoogle || []).push({
                google_ad_client: "ca-pub-6349838342526952",
                enable_page_level_ads: true
            });
        </script>


        <script data-ad-client="ca-pub-4792305595038984" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
        <?php endif; ?>

        <script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>


         <script type="text/javascript" src="js/core.js?v=<?=build?>"></script>
        <script type="text/javascript" src="js/ads.js?v=<?=build?>"></script>
        <?php if ($adStrategy == 'adsense'): ?>
        <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
        <script>
            if (!window.blocked) {
                window.googletag = window.googletag || {cmd: []};
                <?php

                if ($enablePrivacyRestrictions):
                    echo <<<JS
                    googletag.cmd.push(function(){
                        //FOR GDPR, GPT AND OTHER PRIVACY LAWS
                        if (!window.allowsCookies) {
                            console.log('restrict adsense data processing');
                            googletag.pubads().setRequestNonPersonalizedAds(1);
                            googletag.pubads().setPrivacySettings({
                                'restrictDataProcessing': true
                            });
                        }
                    });
JS;
                endif;
                ?>

                var adSlots = [
                    {
                        id: 'div-gpt-ad-1565576448268-0',
                        name: '/30644503/Drawabox2_WideSkyscraper1',
                        size: [160, 600]
                    },
                    {
                        id: 'div-gpt-ad-1565577025235-0',
                        name: '/30644503/Drawabox2_WideSkyscraper2',
                        size: [160, 600]
                    },
                    {
                        id: 'div-gpt-ad-1565577137933-0',
                        name: '/30644503/Drawabox2_WideSkyscraper3',
                        size: [160, 600]
                    },
                    {
                        id: 'div-gpt-ad-1565577512688-0',
                        name: '/30644503/Drawabox2_WideSkyscraper4',
                        size: [160, 600]
                    },
                    {
                        id: 'div-gpt-ad-1580504268445-0',
                        name: '/30644503/Drawabox2_HorizontalDesktop1',
                        size: [728, 90]
                    },
                    {
                        id: 'div-gpt-ad-1580504309335-0',
                        name: '/30644503/Drawabox2_HorizontalDesktop2',
                        size: [1,1]//[728, 90]
                    },
                    {
                        id: 'div-gpt-ad-1580504330099-0',
                        name: '/30644503/Drawabox2_HorizontalDesktop3',
                        size: [728, 90]
                    },
                    {
                        id: 'div-gpt-ad-1580504345979-0',
                        name: '/30644503/Drawabox2_HorizontalBanner1',
                        size: [1,1]//[468, 60]
                    },
                    {
                        id: 'div-gpt-ad-1580504361656-0',
                        name: '/30644503/Drawabox2_HorizontalBanner2',
                        size: [1,1]//[468, 60]
                    },
                    {
                        id: 'div-gpt-ad-1580504377343-0',
                        name: '/30644503/Drawabox2_HorizontalBanner3',
                        size: [1,1]//[468, 60]
                    },
                    {
                        id: 'div-gpt-ad-1581020154813-0',
                        name: '/30644503/Drawabox2_HorizontalMobile1',
                        size: [320, 50]
                    },
                    {
                        id: 'div-gpt-ad-1580504412075-0',
                        name: '/30644503/Drawabox2_HorizontalMobile2',
                        size: [1,1]//[300, 75]
                    },
                    {
                        id: 'div-gpt-ad-1580504431037-0',
                        name: '/30644503/Drawabox2_HorizontalMobile3',
                        size: [1,1]//[300, 75]
                    }
                ];

                $(function(){
                    googletag.cmd.push(function(){
                        var adsRequested = [];
                        for (var i in adSlots) {
                            var id = adSlots[i].id;
                            var name = adSlots[i].name;
                            var size = adSlots[i].size;
                            var $slot = $('#' + id);
                            if ($slot.is(':visible')) {
                                adsRequested.push((name.split('/'))[2]);
                                googletag.defineSlot(name, size, id).addService(googletag.pubads());;
                            } else {

                            }
                        }

                        googletag.pubads().disableInitialLoad();
                        googletag.pubads().enableSingleRequest();
                        googletag.pubads().collapseEmptyDivs();

                        googletag.pubads().addEventListener('impressionViewable', function(event) {
                            if (window.gtag) {
                                var adSlotName = event.slot.getAdUnitPath().split('/')[2];
                                gtag('event','adviewable',{
                                    'event_category': 'adviewability',
                                    'event_label': adSlotName,
                                    'value': 1,
                                    'event_callback': function(){
                                    }
                                });
                            }
                            //console.log(event.slot.getAdUnitPath() + ' is now viewable');
                            //console.log('send', 'event', 'adslot', event.slot.getAdUnitPath() + ':impressionViewable', adsRequested.join(','), '')
                        });

                        googletag.pubads().addEventListener('slotResponseReceived',function(event){
                            if (event.isEmpty) {
                                var id = event.slot.getId();
                                var slot = $('#' + id).parents('.slot');
                                slot.find('.external').hide();
                                slot.find('.internal').fadeIn();
                            } else {
                                if (window.gtag) {
                                    var adSlotName = event.slot.getAdUnitPath().split('/')[2];
                                    gtag('event','adrender',{
                                        'event_category': 'adviewability',
                                        'event_label': adSlotName,
                                        'value': 0,
                                        'event_callback': function(){
                                        }
                                    });
                                }
                            }
                        });

                        googletag.pubads().addEventListener('slotRenderEnded',function(event){
                            //console.log('rendered ' + event.slot.getAdUnitPath() + ' --> ' + event.isEmpty);
                            if (event.isEmpty) {
                                var id = event.slot.getSlotElementId();
                                var slot = $('#' + id).parents('.slot');
                                slot.find('.external').hide();
                                slot.find('.internal').fadeIn();
                            }
                        });
                        googletag.enableServices();
                        googletag.pubads().refresh();
                    });
                });
            }
        </script>
        <?php endif; ?>
         <script type="text/javascript" src="js/utilities.js?v=<?=build?>"></script>
        <script type="text/javascript" src="js/ui/formelements.js?v=<?=build?>"></script>
        <?php if ($_user->HasPermission('SubmissionManagement') || $_user->HasPermission('ReplyManagement')): ?>
        <script type="text/javascript" src="js/admin/moderatortools.js?v=<?=build?>"></script>
        <?php endif; ?>

        <?php /*if (!Uncomfy\Session::Get('timezone')): ?>
            <script type="text/javascript">
                var timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
                if (!timezone) timezone = 'UTC';
                console.log(timezone);
                <?php if (!array_key_exists('tz',$_GET) && (!array_key_exists('b',$_GET))) : ?>
                $.ajax({
                    type: "GET",
                    url: "<?=root?>/backend/settimezone.php",
                    data: 'timezone='+ timezone,
                    success: function(){
                        //location.reload();
                        window.location.href = window.location.href.split('?')[0] + '?tz=1'
                    }
                });
                <?php endif; ?>
            </script>
        <?php endif; */?>

         <?php
            print($include_contents['head']);
         ?>

        <?php if (array_key_exists('dev',$_GET)): ?>
        <script type="text/javascript">
            $(function(){
                $('a').each(function(){
                    var href = $(this).attr('href');
                    if (!href) return;
                    if (href.substr(0,10) === 'javascript') return;
                    if (href.indexOf('?') !== -1) href += '&dev';
                    else href += '?dev';
                    $(this).attr('href',href);
                });
            });
        </script>
        <?php endif; ?>
    </head>
    <body class="at-custom-layout <?php if (!$include_contents['include_content_ads']) echo 'no-content-ads ';?>">
    <?php
        $showNMABanner = false;
        if ($_page->Params('hideAnnouncement')) {
            $showNMABanner = true;
        } elseif (array_key_exists('closedAnnouncements',$_COOKIE)) {
            $closedAnnouncements = explode(',',$_COOKIE['closedAnnouncements']);
            if (in_array("'NMA'",$closedAnnouncements)) $showNMABanner = true;
        }
        $nmaAnnouncement = \Drawabox\CommunityAnnouncement::CreateNMAAnnouncement();
        $announcementDate = date("Ymd");
        $result = $_mysql->Query("SELECT announcement FROM announcements WHERE publishDate=? ORDER BY id LIMIT 1",$announcementDate);
        if ($result->GetNumRows() == 1):
            $row = $result->First();
    ?>
        <div class="announcement" style="width:100%;background-color:#000;color:#e49944;text-align:center;padding:5px;">
            <?=$row['announcement']?>
        </div>
    <?php endif; ?>
    <?php
    if (!$_page->Params('hideAnnouncement')) {
        $closedAnnouncements = [];
        if (array_key_exists('closedAnnouncements', $_COOKIE)) {
            $closedAnnouncements = explode(',', $_COOKIE['closedAnnouncements']);
        }
        $excludeAnnouncements = false;
        if (count($closedAnnouncements) > 0) $excludeAnnouncements = implode(',', $closedAnnouncements);
        $announcements = \Drawabox\CommunityAnnouncement::GetAnnouncements($excludeAnnouncements);
        if (isset($_student) && $_student->patreonId && rand(0,10) > 5) {
            $announcements = array_reverse($announcements);
        }
        if (count($announcements) == 0 || $announcements[0]->id !== "NMA") $showNMABanner = true;
    }
    ?>
    <?php
    if ($_user->IsLoggedIn):
        $message = $_mysql->Query("SELECT message FROM user_messages WHERE user=? and is_read='0'",[$_user->id])->Get('message');
        if ($message):
            ?>
            <div class="user-message">
                <div class="user-message-explanation">If you're seeing this, it's because Uncomfortable is trying to contact you and has no other way of doing so.</div>
                <div class="user-message-bubble">
                    <div class="user-message-message"><?=$_parsedown->parse($message)?></div>
                    <div class="user-message-button-group">
                        <button>Close Message</button>
                    </div>
                </div>
            </div>
        <?php
        endif;
    endif;
    ?>
        <main class="wrapper">
            <div class="nma-banner" style="background-image:url('<?=assets?>/images/nma/background.jpg');<?php if (!$showNMABanner) echo 'display:none;'?>">
                <div class="row" style="padding:3rem;padding-top:1rem;padding-bottom:0;align-items:center;">
                    <div class="column column-50" style="text-align:center;display:flex;">
                        <a href="https://drawabox.com/nma" style="margin:auto;"><img src="<?=$nmaAnnouncement->bannerAssetsArray['nma_logo_sponsor']?>" /></a>
                    </div>
                    <div class="column column-50 hide-xs">
                        <a href="https://drawabox.com/nma"><img src="<?=$nmaAnnouncement->bannerAssetsArray['nma_offer_banner']?>" style="position:relative;top:1rem;" /></a>
                    </div>
                </div>
            </div>
            <?php
            $asideTop = $include_contents['asideTop'];
            $asideTop += 80; //header nav
            if (!$_page->Params('hideAnnouncement')):
                if (count($announcements) > 0):
                    ?>
                <div class="announcement-outerwrapper">
                    <div class="announcement-before">
                        <a class="announcement-control announcement-control-previous" href="javascript:ShowNextAnnouncement(false,'previous')"><span class="fa fa-angle-left"></span></a>
                    </div>
                    <div class="announcement-wrapper">
                    <?php foreach ($announcements as $i => $announcement): ?>
                        <?php
                        $bannerBlur = '';
                        if ($announcement->blurBanner) {
                            $bannerBlur = " announcement-banner-background-blurred";
                        }
                        ?>
                        <div class="announcement<?php if ($i === 0) echo ' current-announcement';?><?php if ($announcement->id == "NMA") echo ' nma-announcement';?>" data-announcement-id="<?=$announcement->id?>" data-closeable="true" style="min-height:<?=$announcement->height?>px;background-size:cover;background-repeat:no-repeat;background-position:center">
                            <div class="announcement-banner-background<?=$bannerBlur?>" style="background-image:url('<?=$announcement->bannerImage?>');min-height:<?=$announcement->height?>px;"></div>
                            <?=$announcement->GetBannerHTML()?>
                        </div>
                        <?php endforeach; ?>
                        <div class="announcement-footer">
                            <div class="announcement-controls">
                                <a class="announcement-control announcement-control-previous" href="javascript:ShowNextAnnouncement(false,'previous')"><span class="fa fa-chevron-circle-left"></span></a>
                                <a class="announcement-control announcement-control-close" href="javascript:CloseAnnouncement()"><span class="fa fa-times-circle"></span></a>
                                <a class="announcement-control announcement-control-next" href="javascript:ShowNextAnnouncement(false,'next')"><span class="fa fa-chevron-circle-right"></span></a>
                            </div>
                        </div>
                    </div>
                    <div class="announcement-after">
                        <a class="announcement-control announcement-control-next" href="javascript:ShowNextAnnouncement(false,'next')"><span class="fa fa-angle-right pulse"></span></a>
                    </div>
                </div>
                <?php
                $asideTop += $announcements[0]->height;
                endif;
                ?>
            <?php endif;
            if ($showNMABanner) $asideTop += 150;
            ?>
            <?php
                $ads = \Drawabox\Recommendation::GetAdsForSlot('tall',4);
            ?>
            <aside class="vertical vertical-left support-message" style="top:<?=$asideTop?>px">
                <?php
                echo $ads[0]->GetTallAd();
                ?>
                <?php
                echo $ads[1]->GetTallAd();
                ?>
            </aside>
            <aside class="vertical vertical-right support-message" style="top:<?=$asideTop?>px">
                <?php
                echo $ads[2]->GetTallAd();
                ?>
                <?php
                echo $ads[3]->GetTallAd();
                ?>
            </aside>
            <header>
                <a class="logo-link" href="<?=root?>"><img class="logo" src="<?=assets?>/images/drawabox-logo.png" alt="Drawabox" title="Drawabox" /></a>
                <nav class="navigation-desktop">
                    <ul class="nav-main hide-xs">
<?php include "views/components/navigation.php"; ?>

                        <!--<li class="etc">
                            <a
                                href="javascript:ShowNextNavGroup()"
                                class="nav nav-etc"
                                ></a>
                        </li>-->
                    </ul>
                </nav>
                <div class="community-nav hide-xs">

<?php if (!$_user->IsLoggedIn): ?>
                    <div class="social-media-row">
                        <a href="https://patreon.com/uncomfortable"><img src="<?=assets?>/images/icon-patreon.png" alt="Support Drawabox on Patreon" title="Support Drawabox on Patreon" /></a>
                        <a href="https://youtube.com/uncomfortable"><img src="<?=assets?>/images/icon-youtube.png" alt="Subscribe to our YouTube Channel" title="Subscribe to our YouTube Channel" /></a>
                        <a class="wide-button" href="https://discord.gg/drawabox"><img src="<?=assets?>/images/icon-discord.png" alt="Chat with us on Discord" title="Chat with us on Discord" /><span class="text">Chat with Us</span></span></a>
                    </div>

                    <div class="social-media-row">
                        <a class="wide-button" href="<?=root?>/login"><span class="fa fa-sign-in"></span><span class="text">Login</span></a>

                    </div>
<?php else: ?>
                    <div class="social-media-row">
                        <a href="https://patreon.com/uncomfortable"><img src="<?=assets?>/images/icon-patreon.png" alt="Support Drawabox on Patreon" title="Support Drawabox on Patreon" /></a>
                        <a href="https://youtube.com/uncomfortable"><img src="<?=assets?>/images/icon-youtube.png" alt="Subscribe to our YouTube Channel" title="Subscribe to our YouTube Channel" /></a>
                        <a class="wide-button" href="https://discord.gg/drawabox"><img src="<?=assets?>/images/icon-discord.png" alt="Chat with us on Discord" title="Chat with us on Discord" /><span class="text">Chat with Us</span></span></a>
                    </div>

                    <div class="social-media-row">
<?php
    include __DIR__ . "/views/components/usermenu.php";
?>

<?php endif; ?>
                    </div>
                </div>


                <div class="mobile-navigation-expander show-xs">
                    <a href="javascript:ToggleMobileNav()"<span class="fa fa-bars<?=$_user->IsLoggedIn&&$hasNotifications?' blip':''?>"></span></a>
                </div>
            </header>
            <nav class="navigation-mobile show-xs">
                <ul>
<?php include __DIR__ . "/views/components/navigation.php"; ?>

                        <li class="community-nav">
                            <div>
                                <?php if ($_user->IsLoggedIn): ?>
                                <div class="social-media-row user-menu-row">
                                    <div class="user-header"><span class="fa fa-user"></span><span class="text"><?=Truncate($_user->username?$_user->username:". . . . .",13,"...")?></span></div>
                                    <div class="wide-button user-menu-wrapper">
                                    <div class="user-menu">

                                    <?php include __DIR__ . "/views/components/usermenulinks.php"; ?>
                                    </div>
                                    </div>
                                </div>
                                <?php else: ?>
                                <div class="social-media-row">
                                    <a class="wide-button" href="<?=root?>/login"><span class="fa fa-sign-in"></span><span class="text">Login</span></a>
                                </div>
                                <?php endif; ?>

                                <div class="social-media-row">

                                    <a href="https://patreon.com/uncomfortable"><img src="<?=assets?>/images/social-icon-patreon.png" alt="Support Drawabox on Patreon" title="Support Drawabox on Patreon" /></a>
                                    <a href="https://youtube.com/uncomfortable"><img src="<?=assets?>/images/social-icon-youtube.png" alt="Subscribe to our YouTube Channel" title="Subscribe to our YouTube Channel" /></a>
                                    <a class="wide-button wide-button-discord" href="https://discord.gg/drawabox"><img src="<?=assets?>/images/icon-discord.png" alt="Chat with us on Discord" title="Chat with us on Discord" /><span class="text">Chat with Us</span></span></a>
                                </div>
                            </div>
                        </li>
                </ul>
            </nav>
            <?php
            if ($_mysql->Query("SELECT error_state FROM community_campaigns WHERE user=? and error_state='1'",$_user->id)->GetNumRows() > 0):
                ?>
                <div class="error-alert">Community Campaign is in an error state. Double check the refresh token in the community_campaigns table.</div>
            <?php endif; ?>


            <?php
            $activeEvent = \Drawabox\CommunityEvent::GetCurrent();
            $isEventActive = $activeEvent->IsValid();
            $todaysPrompt = \Drawabox\DrawingPrompt::LoadTodays();
            $eventbanner = \Drawabox\WebPageData::Load('event-banner','home');
            if (isset($include_contents['showEventBanner']) && $include_contents['body'] && $isEventActive): ?>
                <div class="event-banner-wrapper">
                <div class="banner header-banner banner-event">
                    <div class="banner-inner" style="background-image:url('<?=$eventbanner->data?>');">
                    </div>
                    <div class="promptathon">
                        <div class="promptathon-left">
                            <a href="<?=$activeEvent->info?>"><img src="<?=assets?>/images/promptathon/promptathon.png" alt="Put your homework aside. The Promptathon is on! Click here for more info" /></a>
                            <div class="promptathon-today">
                                <div class="promptathon-today-left">
                                    <img src="<?=assets?>/images/promptathon/todaysprompt.png" alt="Today's Prompt" />
                                    <h1><?=$todaysPrompt->title?></h1>
                                    <h3><?=$todaysPrompt->GetCountdown()?> left</h3>
                                    <div class="prompt-text">
                                        Submit work for this prompt before the countdown above is over to earn a unique avatar, and work towards your achievement!
                                    </div>
                                    <a href="<?=root?>/drawingprompts/<?=$todaysPrompt->id?>"><h2>Check out the prompt &gt;&gt;</h2></a>
                                </div>
                                <div class="promptathon-today-right">
                                    <a href="<?=root?>/drawingprompts/<?=$todaysPrompt->id?>"><img src="<?=$todaysPrompt->image?>" alt="<?=$todaysPrompt->title?>" /></a>
                                </div>
                            </div>
                        </div>
                        <div class="promptathon-right">
                            <?php
                            $day = 0;
                            $prompts = $activeEvent->GetEventPrompts();
                            foreach ($prompts as $prompt):
                                $day++;
                                if ($prompt->id == $todaysPrompt->id) continue;
                                ?>

                                <div class="promptathon-prompt">
                                    <?php if ($prompt->IsRevealed()): ?>
                                        <a href="<?=root?>/drawingprompts/<?=$prompt->id?>">
                                            <img src="<?=$prompt->GetImage()?>" />
                                            <h3>Day <?=$day?></h3>
                                        </a>
                                    <?php else: ?>
                                        <img src="<?=$prompt->GetImage()?>" />
                                        <h3>Day <?=$day?></h3>
                                    <?php endif; ?>
                                </div>

                            <?php
                            endforeach;
                            ?>
                        </div>
                    </div>
                </div>
                </div>
            <?php endif; ?>


            <div class="page-body<?=$_pageBodyClasses?> <?=$include_contents['pageBodyClasses']?>">


            <?php
                print($include_contents['body']);
            ?>
            </div>
            <footer>
                <div class="row">
                    <ul class="column column-50">
                        <li class="title">Site Map</li>
                        <li><a href="<?=root?>/lessons">Our Drawing Lessons</a></li>
                        <li><a href="<?=root?>/articles">Thoughts and Articles on Various Topics</a></li>
                        <li><a href="<?=root?>/comic">Uncomfortable's Unsolicited Advice</a></li>
                        <li><a href="<?=root?>/FAQ">Frequently Asked Questions</a></li>
                        <li><a href="<?=root?>/about">About Drawabox</a></li>
                        <li><a href="<?=root?>/recommendations">Recommended Books and Materials</a></li>
                        <li><a href="<?=root?>/giveback">How to Help Support Drawabox</a></li>
                        <li><a href="<?=root?>/privacy">Our Privacy Policy</a></li>
                        <?php if (Uncomfy\Session::AllowsCookies()): ?><li><a href="javascript:RevokeCookieConsent()">Revoke Analytics Cookie Consent</a></li><?php endif; ?>
                    </ul>
                    <ul class="column">
                        <li>Drawabox is sponsored by</li>
                        <li><a href="https://nma.art/learn">New Masters Academy</a></li>
                        <li>You can get as much as 25% off your first</li>
                        <li>billing cycle using the code <strong>DRAWABOX</strong></li>
                        <li><small style="font-size:0.7em">applicable to Library and Library+ plans</small></li>
                    </ul>
                    <ul class="column column-20">
                        <li class="title">Social Media</li>
                        <li><a href="https://patreon.com/uncomfortable">Patreon</a></li>
                        <li><a href="https://discord.gg/FtSS4hhqSu">Discord Chat</a></li>
                        <li><a href="https://youtube.com/uncomfortable">YouTube</a></li>
                    </ul>

                    <!--
                    <div class="column column-66">
                        <p>A great way to help keep drawabox.com alive is to spread the word. Feel free to like our <a href="https://www.facebook.com/drawabox?_rdr=p">Facebook Page</a>, subscribe to our <a href="https://youtube.com/uncomfortable">Youtube Channel</a>, and share our website with your friends.</p>
                        <p>Of course, contributing to our <a href="https://patreon.com/uncomfortable">Patreon Campaign</a> also helps keep these resources freely available to everyone.</p>
                    </div>

                    -->
                </div>
                <div class="row copyright">
                    <p>&copy; <a href="https://drawabox.com">Drawabox Art Instruction Inc</a> 2015-<?=date("Y")?>. Any inquiries can be made to <a href="mailto:hello@drawabox.com">hello@drawabox.com</a><br/>
                        <?php if (isDevelopment): ?>
                        <?=(time()-$startTime)?> seconds. <?=$_mysql->GetQueryCount()?> database queries.</p>
                        <?php endif;?>
                </div>
            </footer>
            <div class="dropdown-nav dropdown-nav-lessons hide-xs">
                <?php
                unset($lesson_list_ids);
                include "views/lessons_list.php";
                ?>
            </div>

            <div class="dropdown-nav dropdown-nav-articles hide-xs">
                <?php
                include "views/articles_list.php";
                ?>
            </div>
        </main>


        <?php if (!$enablePrivacyRestrictions): ?>
        <div class="notification">
            <div class="character"></div>
            <div class="speech-bubble">
                <div class="arrow"><div></div></div>
                <div class="speech-bubble-inside">
                    <div class="content">

                        <p>We use cookies in conjunction with Google Analytics to <em>anonymously</em> track how our website is used.</p>
                        <p>This data is <strong><em>not</em> shared with any other parties or sold to anyone</strong>. They are also disabled until consent is provided by clicking the button below, and this consent can be revoked at any time by clicking the "Revoke Analytics Cookie Consent" link in our website footer.</p>
                        <p>Note that we also use cookies internally to help reduce abuse by bots - these cannot be disabled, but are not used in any way that violate users' privacy and are not shared with any others - they are simply used to confirm that you are indeed a human user.</p>
                        <p>You can read more about what we do with them, <a href="<?=root?>/privacy">read our privacy policy</a>.</p>
                        <button class="agree-c">That's Fine</button>
                    </div>
                </div>
            </div>
        </div>
        <?php endif; ?>
    <?php if (false):?>
        <div id="amzn-assoc-ad-37d3a975-d0d2-455e-b369-69acbe90cf3f"></div><script async src="//z-na.amazon-adsystem.com/widgets/onejs?MarketPlace=US&adInstanceId=37d3a975-d0d2-455e-b369-69acbe90cf3f"></script>
    <?php endif; ?>
    </body>
    <script>
        window.getRecaptchaToken = function(callback) {
            $('#grecaptcha').remove();
            grecaptcha.execute('<?=recaptchaCredentials['site_key']?>', {action: 'homepage'}).then(function(token) {
                $('body').append('<input type="hidden" id="grecaptcha" value="' + token + '" />');
                if (callback) {
                    callback(token);
                }
            });
            setTimeout(window.getRecaptchaToken,90000);
        };
        grecaptcha.ready(window.getRecaptchaToken);
    </script>
</html>

<?php
$output = ob_get_contents();
ob_end_clean();

if (\Drawabox\DrawaboxSettings::UseTempTracking() && !$boxTrap->CheckIfAgentExcepted()) $output = Uncomfy\Session::ApplyTempSessionId($output);

echo $output;
$_mysql->Close();
?>