fulldecent/cameralife

View on GitHub
sources/Controllers/HtmlController.php

Summary

Maintainability
C
7 hrs
Test Coverage
<?php
namespace CameraLife\Controllers;

use CameraLife\Views as Views;
use CameraLife\Models as Models;

abstract class HtmlController extends Controller
{
    public $footerJavascript;

    /**
     * htmlHeader function.
     *
     * @access protected
     * @param  array $cookies (default: array())
     * @return void
     */
    protected function htmlHeader($cookies = array())
    {
        $this->htmlBareHeader($cookies);
        $this->renderNavbar($cookies);
        $this->renderOpenContainer();
    }

    protected function htmlBareHeader($cookies = array())
    {
        $view = new Views\HeaderView;
        $view->openGraphObject = $this;
        $view->currentUser = Models\User::currentUser($cookies);
        $view->searchUrl = SearchController::getUrl();
        $view->adminUrl = AdminController::getUrl();
        $view->logoutUrl = LogoutController::getUrl();
        $view->favoritesUrl = FavoritesController::getUrl();
        $view->loginUrl = LoginController::getUrl();
        $view->numFavorites = Models\Favorites::favoritesForCurrentUser($cookies)->getPhotoCount();
        $view->ownerEmail = Models\Preferences::valueForModuleWithKey('CameraLife', 'owner_email');
        $view->render();
    }

    //TODO: should probably pass a user
    protected function renderNavbar($cookies = array())
    {
        $navbarView = new Views\NavbarView;
        $navbarView->openGraphObject = $this;
        $navbarView->currentUser = Models\User::currentUser($cookies);
        $navbarView->searchUrl = SearchController::getUrl();
        $navbarView->adminUrl = AdminController::getUrl();
        $navbarView->logoutUrl = LogoutController::getUrl();
        $navbarView->favoritesUrl = FavoritesController::getUrl();
        $navbarView->loginUrl = LoginController::getUrl();
        $navbarView->numFavorites = Models\Favorites::favoritesForCurrentUser($cookies)->getPhotoCount();
        $navbarView->ownerEmail = Models\Preferences::valueForModuleWithKey('CameraLife', 'owner_email');
        $navbarView->render();        
    }
    
    protected function renderBottomNavbar()
    {
        $view = new Views\BottomNavView;
        $view->statsUrl = StatisticsController::getUrl();
        $view->analyticsId = Models\Preferences::valueForModuleWithKey('BootstrapTheme', 'analytics');
        $view->ownerEmail = Models\Preferences::valueForModuleWithKey('CameraLife', 'owner_email');
        $view->mainPageOpenGraph = $this;
        $view->render();        
    }
    
    protected function renderOpenContainer()
    {
                echo '        <div class="container">';
    }

    protected function renderCloseContainer()
    {
                echo '        </div>';
    }

    /**
     * htmlFooter function.
     *
     * @access protected
     * @return void
     */
    protected function htmlFooter()
    {
        $this->renderCloseContainer();
        $this->htmlBareFooter();
    }

    protected function htmlBareFooter()
    {
        $view = new Views\FooterView;
        $view->statsUrl = StatisticsController::getUrl();
        $view->analyticsId = Models\Preferences::valueForModuleWithKey('BootstrapTheme', 'analytics');
        $view->ownerEmail = Models\Preferences::valueForModuleWithKey('CameraLife', 'owner_email');
        $view->extraJavascript = $this->footerJavascript;
        $view->mainPageOpenGraph = $this;
        $view->render();
    }

    /**
     * Utility function to render the HTML meta tags for this open graph entity
     *
     * @access public
     * @param  string $prefix To print before each line (default: '')
     * @return void
     */
    public function htmlRenderMetaTags($prefix = '')
    {
        $map = [
          'title' => 'og:title',
          'type' => 'og:type',
          'url' => 'og:url',
          'image' => 'og:image',
          'description' => 'og:description',
          'determiner' => 'og:determiner',
          'siteName' => 'og:site_name',
          'imageSecureUrl' => 'og:image:secure_url',
          'imageType' => 'og:image:type',
          'imageWidth' => 'og:image:width',
          'imageHeight' => 'og:image:height'
        ];
        foreach ($map as $var => $property) {
            if (!empty($this->$var)) {
                echo $prefix;
                echo "<meta property=\"{$property}\" content=\"".htmlspecialchars($this->$var)."\">\n";
            }
        }
    }
}