controller/waterfalls/LogController.class.inc.php
<?
Loader::load('collector', array(
'image/AlbumCollector',
'waterfall/LogCollector'));
Loader::load('controller', 'waterfalls/DefaultPageController');
final class LogController extends DefaultPageController
{
private static $AUTHOR = 'Jacob Emerick';
private static $AUTHOR_URL = 'https://home.jacobemerick.com/';
private static $JOURNAL_DIRECTORY = 'journal';
private static $FULL_IMAGE_LINK = '/photo/%s/%s-size-standard.jpg';
private static $THUMB_IMAGE_NODE = '<img src="/photo/%s/%s-size-thumb.jpg" alt="%s" height="%s" width="%s" />';
private static $MEDIUM_IMAGE_NODE = '<img src="/photo/%s/%s-size-small.jpg" alt="%s" height="375" width="500" />';
private $log;
public function __construct()
{
parent::__construct();
$log_path = URLDecode::getPiece(2);
$this->log = LogCollector::getByAlias($log_path);
if(!$this->log)
$this->eject();
$this->parent_navigation_item = 'journal';
$this->handle_comment_submit(
self::$WATERFALL_SITE_ID,
$this->log->alias,
Loader::getRootUrl('waterfalls') . self::$JOURNAL_DIRECTORY . '/' . $this->log->alias . '/',
$this->log->title);
$this->add_waterfall_js();
}
protected function set_head_data()
{
parent::set_head_data();
$this->set_title("{$this->log->title} | " . self::$WEBSITE_TITLE);
$this->set_description($this->log->introduction);
$keyword_array = array();
$tag_result = LogCollector::getTagListForLog($this->log->id);
foreach($tag_result as $tag)
{
$keyword_array[] = $tag->name;
}
$this->set_keywords($keyword_array);
}
protected function set_body_data($page_type = 'normal')
{
parent::set_body_data($page_type);
$this->set_body('view', 'Log');
$body_data = array_merge(
$this->get_formatted_log(),
[
'comment_array' => $this->get_comment_array(
'waterfallsofthekeweenaw.com',
"journal/{$this->log->alias}"
),
'sidebar' => $this->get_sidebar(),
'series' => $this->get_series(),
'album' => $this->get_album(),
]
);
$this->set_body('data', $body_data);
}
private function get_formatted_log()
{
$formatted_log = array();
$formatted_log['introduction'] = $this->get_log_introduction($this->log);
$formatted_log['title'] = $this->log->title;
$formatted_log['url'] = Loader::getRootURL('waterfalls') . self::$JOURNAL_DIRECTORY . '/' . $this->log->alias . '/';
$formatted_log['body'] = $this->get_formatted_log_body();
return $formatted_log;
}
private function get_log_introduction($log)
{
return array(
'title' => $log->title,
'url' => Loader::getRootURL('waterfalls') . self::$JOURNAL_DIRECTORY . '/' . $log->alias . '/',
'date' => $this->get_parsed_date($log->date),
'publish_date' => $this->get_parsed_date($log->publish_date),
'introduction' => $log->introduction,
'image' => sprintf(
self::$MEDIUM_IMAGE_NODE,
$log->image_category,
$log->image_name,
$log->image_description),
'author' => self::$AUTHOR,
'author_url' => self::$AUTHOR_URL,
);
}
// @todo - link things up
private function get_formatted_log_body()
{
$body = $this->log->body;
$body = Content::instance('FixPhoto', $body)->activate(false, 'standard');
$body = Content::instance('FixInternalLink', $body)->activate();
return $body;
}
private function get_series()
{
$series = array(
'previous' => array(),
'next' => array());
$previous_log = LogCollector::getPreviousLog($this->log->id);
if($previous_log != false)
{
$series['previous'] = (object) array(
'path' => '/' . self::$JOURNAL_DIRECTORY . '/' . $previous_log->alias . '/',
'title' => $previous_log->title,
'date' => $previous_log->date);
}
$next_log = LogCollector::getNextLog($this->log->id);
if($next_log != false)
{
$series['next'] = (object) array(
'path' => '/' . self::$JOURNAL_DIRECTORY . '/' . $next_log->alias . '/',
'title' => $next_log->title,
'date' => $next_log->date);
}
return $series;
}
private function get_sidebar()
{
$sidebar = array();
$sidebar['companion_list'] = array();
$companions = LogCollector::getCompanionListForLog($this->log->id);
foreach($companions as $companion)
{
$sidebar['companion_list'][] = (object) array(
'title' => $companion->name,
'path' => "/companion/{$companion->alias}/");
}
$sidebar['tag_list'] = array();
$tags = LogCollector::getTagListForLog($this->log->id);
foreach($tags as $tag)
{
$sidebar['tag_list'][] = (object) array(
'title' => $tag->name,
'path' => "/journal/tag/{$tag->alias}/");
}
$sidebar['waterfall_list'] = array();
$waterfalls = LogCollector::getWaterfallListForLog($this->log->id);
foreach($waterfalls as $waterfall)
{
$sidebar['waterfall_list'][] = (object) array(
'title' => $waterfall->name,
'path' => "/{$waterfall->watercourse_alias}/{$waterfall->alias}/");
}
return $sidebar;
}
private function get_album()
{
$album = array();
if($this->log->album == 0)
return $album;
$photo_list = AlbumCollector::getPhotoListForAlbum($this->log->album);
foreach($photo_list as $photo)
{
$photo_array = array();
$photo_array['full_link'] = sprintf(self::$FULL_IMAGE_LINK, $photo->category, $photo->name);
$photo_array['description'] = $photo->description;
if($photo->height < $photo->width)
list($height, $width) = array(75, 100);
else
list($height, $width) = array(100, 75);
$photo_array['image_node'] = sprintf(
self::$THUMB_IMAGE_NODE,
$photo->category,
$photo->name,
$photo->description,
$height,
$width);
$album[] = (object) $photo_array;
}
return $album;
}
}