<?php
require_once sprintf( '%s/Admin.php', __DIR__ );
require_once sprintf( '%s/DB.php', __DIR__ );
require_once sprintf( '%s/Navigation.php', __DIR__ );
require_once sprintf( '%s/User.php', __DIR__ );
class Page
{
private $footers = array();
private $headers = array();
private $nav_parent = null;
private $overrides = array(
'color' => false,
'font_color' => false,
'title' => false
);
private $show_banners = true;
public function __construct ()
{
$this->nav_parent = Navigation::getDefaultItem();
}
public function addFooter ( $footer )
{
array_push( $this->footers, $footer );
}
public function addHeader ( $header )
{
array_push( $this->headers, $header );
}
public function getColor ()
{
return $this->overrides['color'] ? $this->overrides['color'] : $this->nav_parent->getColor();
}
public function getFontColor ()
{
return $this->overrides['font_color'] ? $this->overrides['font_color'] : $this->nav_parent->getFontColor();
}
public function getTitle ()
{
return $this->overrides['title'] ? $this->overrides['title'] : $this->nav_parent->getName();
}
public function hasTitle ()
{
return $this->overrides['title'] ? true : false;
}
public function hideBanners ()
{
$this->show_banners = false;
}
public static function printBanner ( $id, $content, $created, $close_override = false )
{
if ( $close_override )
{
print <<<EOB
<div class="emergency-banner" id="emergency-banner-{$id}">{$content}</div>
EOB;
}
else
{
if ( !isset( $_COOKIE['hidden-banners'] ) || !preg_match( "/\\b{$id}\\b/", $_COOKIE['hidden-banners'] ) )
{
print <<<EOB
<div class="emergency-banner" id="emergency-banner-{$id}"><a class="emergency-banner-dismissal" href="#">☒</a>{$content}</div>
EOB;
}
}
}
public function printPage ()
{
$this->printPageHeader();
$this->printPageContent();
$this->printPageFooter();
}
public function printPageContent ()
{
print $this->content;
}
public function printPageFooter ()
{
?>
<!-- footer -->
<div id="footer_div">
<?php
for ( $i = 0; $i < Navigation::getItemCount(); ++$i )
{
$item = Navigation::getItem( $i );
?><div style="border-color:<?php print $item->getColor()->toHex(); ?>;"><a href="/<?php print $item->getURL();?>" target="_top"><?php print $item->getName();?></a></div><?php
}
// print version info?
$version_handle = fopen( sprintf( '%s/../version', __DIR__ ), 'r' );
$version = fgets( $version_handle );
fclose( $version_handle );
$version = preg_replace( '/[^\.\da-z]+/i', '', $version );
?>
<br />
<br />
<span class="copyright">
© <?php print strtolower( Page::romanDate() ); ?> kyle woodward |
<a href="/source-view.php?page=<?php print $_SERVER['PHP_SELF']; ?>" target="new"> v<?php print $version; ?> source</a>
<?php
if ( Admin::isLoggedIn() )
{
?>
| <a href="/blog-login.php?action=logout">logout</a>
<?php
}
if ( User::getUserFromSession() )
{
?>
| <a href="/user/logout">logout</a>
<?php
}
?>
</span>
<a href="http://profiles.google.com/108677732441037950707" rel="author" style="display:none;">Kyle Woodward</a>
</div>
</div>
</div>
<?php
if ( !Admin::isLoggedIn() )
{
Page::printTracking();
}
?>
<script type="text/javascript">
installBanner( <?php print preg_replace( '/[^0-9\,]+/i', '', $this->getColor()->toRGB() ); ?> );
</script>
<?php
// really, we could just use `join` here
for ( $i = 0; $i < count( $this->footers ); ++$i )
{
print $this->footers[$i];
}
?>
</body>
</html>
<?php
}
public function printPageHeader ()
{
// oof, this is going to be a bear to disentangle
require_once sprintf( '%s/../headers.php', __DIR__ );
?>
<!doctype html>
<html>
<head>
<link href="/blog.css" rel="stylesheet" type="text/css" />
<link href="/style.css" rel="stylesheet" type="text/css" />
<link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="/favicons/manifest.json">
<link rel="shortcut icon" href="/favicons/favicon.ico">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
<meta name="msapplication-config" content="/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="last-modified" content="<?php print date( 'r', filemtime( $_SERVER['SCRIPT_FILENAME'] ) ); ?>" />
<meta name="viewport" content="width=device-width, user-scalable=no" />
<script src="/v2/logo/jslogo.js" type="text/javascript"></script>
<script src="/js/banner.js" type="text/javascript"></script>
<script src="/js/stdlib.js" type="text/javascript"></script>
<link href="https://fonts.googleapis.com/css?family=Heebo:300|Heebo:500|Khula:300|Roboto:300|Source+Sans+Pro:200|Work+Sans:300|Yantramanav:300" rel="stylesheet" />
<title>kyle woodward :: <?php print $this->getTitle(); ?></title>
<style type="text/css">
div#linkbar-upper a
{
color: <?php print $this->getFontColor()->toHex(); ?>;
}
</style>
<?php
for ( $i = 0; $i < count( $this->headers ); ++$i )
{
print $this->headers[$i];
}
?>
</head>
<body>
<!-- main page content -->
<div id="content_div">
<!-- page header -->
<div id="header_div" style="background-color:<?php print $this->getColor()->toHex(); ?>;color:<?php print $this->getFontColor()->toHex(); ?>;">
<canvas id="logologo" style="height:50px;width:600px;position:relative;" height="50" width="600"></canvas>
<div id="linkbar-upper" style="background-color:<?php print $this->getColor()->toHex(); ?>;"><?php
$has_printed = false;
for ( $i = 0; $i < Navigation::getItemCount(); ++$i )
{
$nav_item = Navigation::getItem( $i );
$class_name = $this->hasTitle() ? 'standard' : ( $this->getTitle() == $nav_item->getName() ? 'active' : 'standard' );
printf( '<div class="%s"><a href="/%s" target="_top" data:bgcolor="%s">%s</a></div>', $class_name, $nav_item->getURL(), $nav_item->getColor()->toHex(), $nav_item->getName() );
}
if ( $this->hasTitle() )
{
printf( '<div class="active"><a href="%s" target="_top" data:bgcolor="%s">%s</a></div>', $_SERVER['PHP_SELF'], $this->getColor()->toHex(), $this->getTitle() );
}
?>
<div id="spacer"></div></div></div><div id="content_actual">
<?php
//
// Is there an active emergency banner?
//
if ( $this->show_banners )
{
$banner_query = DB::getDB()->query( 'SELECT emergencyBannerID, bannerText, created FROM tblEmergencyBanners WHERE active > 0 ORDER BY created DESC' );
while ( $banner_row = $banner_query->fetch_array() )
{
Page::printBanner( $banner_row[0], $banner_row[1], $banner_row[2] );
}
$banner_query->close();
}
}
public static function printTracking ()
{
?>
<script type="text/javascript">
//<!--[CDATA[
var gaJsHost = (('https:' == document.location.protocol) ? 'https://ssl.' : 'http://www.');
document.write(unescape('%3Cscript src="' + gaJsHost + 'google-analytics.com/ga.js" type="text/javascript"%3E%3C/script%3E'));
//]]-->
</script>
<script type="text/javascript">
//<!--[CDATA[
var pageTracker = _gat._getTracker('UA-1519445-4');
pageTracker._initData();
pageTracker._trackPageview();
//]]-->
</script>
<?php
}
public static function romanDate ()
{
$y = date( 'Y' );
$R = array( 'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I' );
$N = array( 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 );
$i = 0;
$r = '';
while ( $y > 0 )
{
if ( $y >= $N[$i] )
{
$r .= $R[$i];
$y -= $N[$i];
}
else
{
$i += 1;
}
}
return $r;
}
public function setContent ( $content )
{
$this->content = $content;
}
public function setParentURL ( $parent_url )
{
// temporary hack
if ( $parent_url == 'current.php' )
{
$parent_url = 'about.php';
}
$this->nav_parent = Navigation::getItemByURL( $parent_url );
if ( !$this->nav_parent )
{
throw new Exception( sprintf( 'Parent URL (%s) is invalid.', $parent_url ) );
}
}
public function setColor ( $color = false )
{
$this->overrides['color'] = $color ? $color : false;
}
public function setFontColor ( $font_color = false )
{
$this->overrides['font_color'] = $font_color ? $font_color : false;
}
public function setTitle ( $title = false )
{
$this->overrides['title'] = $title ? $title : false;
}
}
?>