qam-snow-theme.php 7.48 KB
<?php
/*
	Snow Theme for Question2Answer Package
	Copyright (C) 2014  Q2A Market <http://www.q2amarket.com>

	File:           inc/qam-snow-theme.php
	Version:        Snow 1.4
	Description:    Snow theme core class

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	GNU General Public License for more details.
*/

/**
 * Snow theme loader class
 *
 * This class loads all required data for the Snow theme. This is written more
 * for future use and to keep untouched <code>qa_html_theme_base</code>
 *
 * @package Snow
 * @subpackage Loader
 * @category Theme
 * @since Snow 1.4
 * @version 1.0
 * @author Q2A Market <http://www.q2amarket.com>
 * @copyright (c) 2014, Q2A Market
 * @license http://www.gnu.org/copyleft/gpl.html
 */
class qam_snow_theme
{
	/**
	 * @var array Holds the data
	 */
	private $data;

	/**
	 * Snow instance
	 *
	 * @access public
	 * @since Snow 1.4
	 * @version 1.0
	 *
	 * @static $instance
	 *
	 * @uses qam_snow_theme::setup_globals() Setup require globals
	 * @uses qam_snow_theme::includes() Include require files
	 * @uses qam_snow_theme::heads() Setup <code><head></code> elements
	 * @uses qam_snow_theme::set_options() Setup dynamic options for Snow
	 * @uses qam_snow_theme::headers() Setup header elements
	 * @uses qam_snow_theme::footers() Setup footer elements
	 *
	 * @see qam_snow_theme()
	 * @return mixed all qam_snow_theme
	 *
	 * @author Q2A Market <http://www.q2amarket.com>
	 * @copyright (c) 2014, Q2A Market
	 * @license http://www.gnu.org/copyleft/gpl.html
	 */
	public static function instance()
	{

		// Store the instance locally to avoid private static replication
		static $instance = null;

		// Only run these methods if they haven't been run previously
		if (null === $instance) {
			$instance = new qam_snow_theme;
			$instance->setup_globals();
			$instance->includes();
			// $instance->heads();
			$instance->get_options();
			$instance->headers();
			// $instance->footers();
		}

		// Always return the instance
		return $instance;
	}

	/**
	 * Class construct
	 */
	private function __construct()
	{ /* Do nothing here */
	}

	/**
	 *
	 * @param type $key
	 * @return type
	 */
	public function __isset($key)
	{
		return isset($this->data[$key]);
	}

	/**
	 *
	 * @param type $key
	 * @return type
	 */
	public function __get($key)
	{
		return isset($this->data[$key]) ? $this->data[$key] : null;
	}

	/**
	 *
	 * @param type $key
	 * @param type $value
	 */
	public function __set($key, $value)
	{
		$this->data[$key] = $value;
	}

	/**
	 *
	 * @param type $key
	 */
	public function __unset($key)
	{
		if (isset($this->data[$key])) {
			unset($this->data[$key]);
		}
	}

	/**
	 *
	 * @param type $name
	 * @param type $args
	 * @return null
	 */
	public function __call($name = '', $args = array())
	{
		unset($name, $args);
		return null;
	}

	/**
	 * Snow theme globals
	 *
	 * @access private
	 * @since Snow 1.4
	 * @version 1.0
	 *
	 * @author Q2A Market <www.q2amarket.com>
	 * @copyright (c) 2014, Q2A Market
	 * @license http://www.gnu.org/copyleft/gpl.html
	 */
	private function setup_globals()
	{
		$this->theme        = qa_opt('site_theme');
		$this->author       = $this->qam_opt('snow_author', 'Q2A Market');
		$this->author_url   = $this->qam_opt('snow_author_url', 'http://www.q2amarket.com');
		$this->version      = $this->qam_opt('snow_version', '1.4-beta');
		$this->snow_version = strtolower($this->theme . '-' . $this->version);
		$this->opt_prefix   = 'qam_snow_';

		$this->js_dir   = 'js/';
		$this->css_dir  = 'css/';
		$this->img_url  = 'images/';
		$this->icon_url = $this->img_url . 'icons/';
	}

	/**
	 * Incldue require files
	 *
	 * @access private
	 * @since Snow 1.4
	 * @version 1.0
	 *
	 * @author Q2A Market <www.q2amarket.com>
	 * @copyright (c) 2014, Q2A Market
	 * @license http://www.gnu.org/copyleft/gpl.html
	 */
	private function includes()
	{ //do nothing now
	}

	/**
	 * Get theme options for customization.
	 *
	 * @access private
	 * @since Snow 1.4
	 * @version 1.0
	 * @return array|mixed theme options value
	 *
	 * @author Q2A Market <http://www.q2amarket.com>
	 * @copyright (c) 2014, Q2A Market
	 * @license http://www.gnu.org/copyleft/gpl.html
	 */
	private function get_options()
	{
		$this->data['ask_search_box_color']  = $this->qam_opt('ask_search_box_color');
		$this->data['welcome_widget_color']  = $this->qam_opt('welcome_widget_color');
		$this->data['fixed_topbar']          = (($this->qam_opt('fixed_topbar')) ? 'fixed' : null);
		$this->data['header_custom_content'] = $this->qam_opt('header_custom_content');
		$this->data['footer_custom_content'] = $this->qam_opt('above_footer_custom_content');

		return $this->data;
	}

	/**
	 * Get header items
	 *
	 * @access private
	 * @since Snow 1.4
	 * @version 1.0
	 * @return array|mixed various header items (e.g. user account, scripts)
	 *
	 * @author Q2A Market <http://www.q2amarket.com>
	 * @copyright (c) 2014, Q2A Market
	 * @license http://www.gnu.org/copyleft/gpl.html
	 */
	private function headers()
	{
		$this->data['headers'] = array(
			'user_points'         => $this->user_points(),
			'ask_button'          => $this->ask_button(),
		);

		return $this->data;
	}

	/**
	 * Get logged in user's points
	 *
	 * @access private
	 * @since Snow 1.4
	 * @version 1.0
	 * @return string|null LoggedIn user's total points, null for guest
	 *
	 * @author Q2A Market <http://www.q2amarket.com>
	 * @copyright (c) 2014, Q2A Market
	 * @license http://www.gnu.org/copyleft/gpl.html
	 */
	private function user_points()
	{
		require_once QA_INCLUDE_DIR . 'app/format.php';

		if (qa_is_logged_in()) {
			$userpoints = qa_get_logged_in_points();
			$pointshtml = ($userpoints == 1) ? qa_lang_html_sub('main/1_point', '1', '1') : qa_html(qa_format_number($userpoints));
			$points     = '<DIV CLASS="qam-logged-in-points">' . $pointshtml . '</DIV>';

			return $points;
		}

		return null;
	}

	/**
	 * Custom ask button for medium and small screen
	 *
	 * @access private
	 * @since Snow 1.4
	 * @version 1.0
	 * @return string Ask button html markup
	 *
	 * @author Q2A Market <http://www.q2amarket.com>
	 * @copyright (c) 2014, Q2A Market
	 * @license http://www.gnu.org/copyleft/gpl.html
	 */
	private function ask_button()
	{
		$html = '<div class="qam-ask-search-box">';
		$html .= '<div class="qam-ask-mobile"><a href="' . qa_path('ask', null, qa_path_to_root()) . '" class="' . $this->qam_opt('ask_search_box_color') . '">' . qa_lang_html('main/nav_ask') . '</a></div>';
		$html .= '<div class="qam-search-mobile ' . $this->qam_opt('ask_search_box_color') . '" id="qam-search-mobile"></div>';
		$html .= '</div>';

		return $html;
	}
}


/* ---------------------------------------------------------------------------- */

// create a function to instanciate the class
if (!function_exists('qam_snow_theme')) {

	/**
	 * Return <code>qam_snow_theme</code> class instance
	 *
	 * @access public
	 * @since Snow 1.4
	 * @version 1.0
	 * @return array
	 *
	 * @author Q2A Market <http://www.q2amarket.com>
	 * @copyright (c) 2014, Q2A Market
	 * @license http://www.gnu.org/copyleft/gpl.html
	 */
	function qam_snow_theme()
	{
		return qam_snow_theme::instance();
	}

}

// Declare global variable
if (class_exists('qam_snow_theme')) {
	$GLOBALS['qam_snow'] = qam_snow_theme();
}