/**
  * 
  * @param object|array $data
  */
 public function __construct($data = null)
 {
     parent::__construct($data);
     $framework = Zo2Framework::getInstance();
     /* Init default profile root directory */
     $this->_profileDir = JPATH_ROOT . '/templates/' . $framework->template->template . '/assets/profiles';
 }
 /**
  * 
  * @return string
  */
 public function render()
 {
     if (Zo2Framework::getParam('enable_style_switcher', 1) == 1) {
         $template = new Zo2Template();
         return $template->fetch('html://utilities/styleswitcher.php');
     }
     return '';
 }
 public function render()
 {
     $html = new Zo2Html();
     $logo['standard'] = Zo2Framework::getParam('standard_logo');
     $logo['retina'] = Zo2Framework::getParam('retina_logo');
     $html->set('logo', $logo);
     $html->set('slogan', Zo2Framework::getParam('site_slogan'));
     return $html->fetch('zo2/headerlogo.php');
 }
 public function getAvaiablePositions()
 {
     $templatePositions = Zo2Framework::getInstance()->getTemplatePositions();
     $db = JFactory::getDbo();
     $query = $db->getQuery(true)->select('m.position')->from('#__modules AS m')->where('m.published = 1')->where('m.client_id = 0');
     $db->setQuery($query);
     $modulePositions = $db->loadColumn();
     $list = array_merge($templatePositions, $modulePositions);
     $list = array_unique($list);
     return $list;
 }
 public function render()
 {
     $html = new Zo2Html();
     $html->set('showLogo', Zo2Framework::getParam('footer_logo'));
     $html->set('logoUrl', JUri::root(true) . '/plugins/system/zo2/framework/assets/zo2/images/zo2_logo_32x32.png');
     $html->set('copyright', Zo2Framework::getParam('footer_copyright'));
     $html->set('title', 'Zo2 Framework');
     $html->set('link', 'http://www.zootemplate.com/zo2');
     $html->set('gototop', Zo2Framework::getParam('footer_gototop'));
     return $html->fetch('zo2/copyright.php');
 }
 /**
  * 
  * @param type $debug
  */
 public function flush($debug = null)
 {
     if ($debug === null) {
         $debug = Zo2Framework::getParam('development_mode');
     }
     if ($debug) {
         foreach ($this->_logs as $type => $messages) {
             foreach ($messages as $message) {
                 JFactory::getApplication()->enqueueMessage($message, $type);
             }
         }
     }
 }
 /**
  * 
  */
 public function onAfterRender()
 {
     if ($this->_isZo2()) {
         $app = JFactory::getApplication();
         $body = JResponse::getBody();
         $jinput = JFactory::getApplication()->input;
         $framework = Zo2Framework::getInstance();
         $assets = Zo2Assets::getInstance();
         $body = str_replace('</body>', $assets->generateAssets('js') . '</body>', $body);
         $body = str_replace('</head>', $assets->generateAssets('css') . '</head>', $body);
         /* Apply back to body */
         JResponse::setBody($body);
     }
 }
 /**
  * Admin layout builder
  * @return type
  */
 public function builder()
 {
     $assets = Zo2Assets::getInstance();
     $assets->addScript('vendor/bootbox-3.3.0.min.js');
     $assets->addScript('zo2/js/adminlayout.min.js');
     $assets->addStyleSheet('vendor/bootstrap/core/css/bootstrap.gridsystem.css');
     /**
      * @uses    Anything need prepred for display will put here. Do not put process code insite layout template file
      */
     $html = new Zo2Html();
     $params = Zo2Framework::getInstance()->template->params;
     $profile = Zo2Factory::getProfile();
     if (is_object($profile->layout)) {
         $layoutData = $profile->layout->layout;
     } else {
         $layoutData = $profile->layout;
     }
     $html->set('params', $params);
     $html->set('layoutData', $layoutData);
     return $html->fetch('admin/body/sidebar/builder/layout.php');
 }
 /**
  * 
  */
 private function _save()
 {
     $application = JFactory::getApplication();
     $jinput = JFactory::getApplication()->input;
     /* Zo2 data */
     $zo2 = $jinput->post->get('zo2', array(), 'array');
     // Joomla! form data
     $formData = $jinput->post->get('jform', array(), 'array');
     $formData['params']['layout'] = json_decode($formData['params']['layout']);
     $formData['params']['theme'] = json_decode($formData['params']['theme']);
     $formData['params']['menu_config'] = json_decode($formData['params']['menu_config']);
     /* Request profileName */
     $profileName = isset($zo2['newProfile']) ? $zo2['newProfile'] : $zo2['profiles'];
     if ($profileName != $zo2['profiles']) {
         JFactory::getApplication()->enqueueMessage('Added new profile: ' . $profileName, 'notice');
     }
     // Save Joomla! data
     $model = JModelLegacy::getInstance('Style', 'TemplatesModel');
     $model->save($formData);
     /**
      * Save profile
      */
     $profile = new Zo2Profile();
     $profile->loadArray($formData['params']);
     $profile->template = Zo2Framework::getInstance()->template->template;
     $profile->name = $profileName;
     if ($profile->save()) {
         /* Save Zo2 data */
         $zo2Data = $jinput->post->get('zo2', array(), 'array');
         $templateDir = JPATH_ROOT . '/templates/' . Zo2Framework::getInstance()->template->template;
         $customCssFile = $templateDir . '/assets/zo2/css/custom.css';
         $customCss = trim($zo2Data['custom_css']);
         JFile::write($customCssFile, $customCss);
         $customJsFile = $templateDir . '/assets/zo2/js/custom.js';
         $customJs = trim($zo2Data['custom_js']);
         JFile::write($customJsFile, $customJs);
         $application->enqueueMessage('Style successfully saved');
         if ($jinput->get('task') == 'style.apply') {
             $application->redirect(JRoute::_('index.php?option=com_templates&view=style&layout=edit&id=' . $jinput->get('id') . '&profile=' . $profileName, false));
         } else {
             $application->redirect(JRoute::_('index.php?option=com_templates&view=styles', false));
         }
     }
     JFactory::getApplication()->enqueueMessage('Style save error', 'error');
     $application->redirect(JRoute::_('index.php?option=com_templates&view=styles', false));
 }
<?php

/**
 * Zo2 (http://www.zootemplate.com/zo2)
 * A powerful Joomla template framework
 *
 * @version     1.4.4
 * @link        http://www.zootemplate.com/zo2
 * @link        https://github.com/cleversoft/zo2
 * @author      ZooTemplate <http://zootemplate.com>
 * @copyright   Copyright (c) 2015 CleverSoft (http://cleversoft.co/)
 * @license     GPL v2
 */
defined('_JEXEC') or die('Restricted Access');
/**
 * This file will use to init / register current template with ZO2 framework
 */
if (!class_exists('Zo2Framework')) {
    die('Zo2Framework not found');
}
$framework = Zo2Framework::getInstance();
$framework->init();
$this->zo2 = new JRegistry();
$this->zo2->framework = $framework;
$this->zo2->template = new Zo2Template();
$this->zo2->layout = $framework->layout;
$this->zo2->utilities = Zo2Utilities::getInstance();
$framework->getTemplateLayouts();
echo JText::_('ZO2_USE_PROFILE');
?>
</label>
                            <select id="zo2-profile" class="form-control pull-left" name="jform[params][profile]" >
                                <!-- Display list of profiles -->
                                <?php 
$profiles = Zo2Framework::getInstance()->getProfiles();
?>
                                <?php 
foreach ($profiles as $profile) {
    ?>
                                    <option value="<?php 
    echo trim($profile->name);
    ?>
" <?php 
    echo $profile->name == Zo2Framework::getInstance()->template->params->get('profile') ? 'selected="selected"' : '';
    ?>
 ><?php 
    echo trim($profile->name);
    ?>
</option>
                                <?php 
}
?>
                            </select>
                        </div>

                    </div>
                </div>
                <div class="pull-right">
                    <button type="button" class="btn btn-default" onclick="zo2.admin.clearCache();
 * @copyright   Copyright (c) 2014 CleverSoft (http://cleversoft.co/)
 * @license     GPL v2
 */
defined('_JEXEC') or die('Restricted access');
?>

<!-- Select profile -->                
<select id="zo2-profiles" class="form-control pull-left" onchange="zo2.admin.profile.load(this.value);
        return false;" name="zo2[profiles]" >
    <!-- Display list of profiles -->
    <?php 
foreach ($this->data['profiles'] as $profile) {
    ?>
        <option value="<?php 
    echo trim($profile->name);
    ?>
" <?php 
    echo $profile->name == $this->data['profile']->name ? 'selected="selected"' : '';
    ?>
 ><?php 
    echo trim($profile->name);
    ?>
</option>
    <?php 
}
?>
</select>
<input type="hidden" name="profile-id" value="<?php 
echo Zo2Framework::getParam('id');
?>
">
                            <?php 
echo JText::_('ZO2_ADMIN_MEGA_MENU_ANIMATION_ZOOM');
?>
</option>                        
                        <option value="elastic"
                                <?php 
echo $menuAnimation == 'elastic' ? 'selected="selected"' : '';
?>
 >
                            <?php 
echo JText::_('ZO2_ADMIN_MEGA_MENU_ANIMATION_ELASTIC');
?>
</option>
                    </select>
                </div>
            </div>

            <!-- Duration -->
            <?php 
echo Zo2Html::field('text', array('label' => JText::_('ZO2_ADMIN_MEGA_MENU_DURATION'), 'description' => JText::_('ZO2_ADMIN_MEGA_MENU_DURATION_DESC')), array('name' => 'jform[params][menu_duration]', 'value' => Zo2Framework::getParam('menu_duration', 300), 'default' => 300));
?>

            <!-- Menu type -->           
            <?php 
$model = new Zo2ModelJoomla();
echo Zo2Html::field('megamenu', array(), array('id' => 'jform_params_menu_type', 'name' => 'jform[params][menu_type]', 'value' => Zo2Framework::getParam('menu_type', 'mainmenu'), 'modules' => $model->getModules()));
?>

        </div>
    </div>
</div>
?>
        <span>Paste your Google Analytics (or other) tracking code here.<br /> This will be added before the closing body tag in the template. <br/> This should be something like<br /> &#60;script&#62;<br />....<br />&#60;/script&#62;</span>
    </div>
    <!-- Optmization Option -->
    <div class="zo2-divider"></div>
    <h2><?php 
echo JText::_('ZO2_ADMIN_OPTIMIZATION_OPTION');
?>
</h2>
    <div class="zo2-divider"></div>    
    <p>Enable compress CSS/JS. These options only available when Development Mode is off</p>
    <!-- Combine css -->
    <?php 
echo Zo2Html::field('radio', array('label' => JText::_('ZO2_ADMIN_COMBINE_CSS'), 'description' => JText::_('ZO2_ADMIN_COMBINE_CSS_DESC')), array('name' => 'jform[params][combine_css]', 'value' => Zo2Framework::getParam('combine_css'), 'options' => array(array('label' => JText::_('ZO2_YES')), array('label' => JText::_('ZO2_NO')))));
?>
    <!-- Combine js -->
    <?php 
echo Zo2Html::field('radio', array('label' => JText::_('ZO2_ADMIN_COMBINE_JS'), 'description' => JText::_('ZO2_ADMIN_COMBINE_JS_DESC')), array('value' => Zo2Framework::getParam('combine_js'), 'name' => 'jform[params][combine_js]', 'options' => array(array('label' => JText::_('ZO2_YES')), array('label' => JText::_('ZO2_NO')))));
?>
   
    <!-- Development mode -->
    <div class="zo2-divider"></div>  
 	<h2><?php 
echo JText::_('ZO2_ADMIN_DEVELOPMENT_OPTION');
?>
</h2>    
 	<div class="zo2-divider"></div>   
    <?php 
echo Zo2Html::field('radio', array('label' => JText::_('ZO2_ADMIN_ADVANCED_LABEL_DEVELOPMENT_MODE'), 'description' => JText::_('ZO2_ADMIN_ADVANCED_DESC_DEVELOPMENT_MODE')), array('name' => 'jform[params][development_mode]', 'value' => Zo2Framework::getParam('development_mode')));
?>
</div>
echo Zo2Html::field('text', array('label' => JText::_('ZO2_ADMIN_GENERAL_LABEL_SLOGAN'), 'description' => JText::_('ZO2_ADMIN_GENERAL_DESC_SLOGAN')), array('name' => 'jform[params][site_slogan]', 'value' => Zo2Framework::getParam('site_slogan'), 'placeholder' => 'Zo2 Framework'));
?>
        <!-- Copyright -->        
        <?php 
/**
 * @todo Use JEditor
 */
echo Zo2Html::field('textarea', array('label' => JText::_('ZO2_ADMIN_GENERAL_LABEL_COPYRIGHT'), 'description' => JText::_('ZO2_ADMIN_GENERAL_DESC_COPYRIGHT')), array('name' => 'jform[params][footer_copyright]', 'rows' => 10, 'cols' => 20, 'value' => Zo2Framework::getParam('footer_copyright')));
?>
                        
        <!-- Standard logo -->        
        <?php 
echo Zo2Html::field('image', array('label' => JText::_('ZO2_ADMIN_GENERAL_LABEL_STANDARD_LOGO'), 'description' => JText::_('ZO2_ADMIN_GENERAL_DESC_STANDARD_LOGO'), 'class_wrap' => 'logo-image', 'class' => 'logo-path'), array('id' => 'jform_params_standard_logo', 'name' => 'jform[params][standard_logo]', 'value' => Zo2Framework::getParam('standard_logo')));
?>
  
        <!-- Retina logo -->       
        <?php 
echo Zo2Html::field('image', array('label' => JText::_('ZO2_ADMIN_GENERAL_LABEL_RETINA_LOGO'), 'description' => JText::_('ZO2_ADMIN_GENERAL_DESC_RETINA_LOGO'), 'class_wrap' => 'logo-retina-image', 'class' => 'logo-path'), array('id' => 'jform_params_retina_logo', 'name' => 'jform[params][retina_logo]', 'value' => Zo2Framework::getParam('retina_logo')));
?>
               
        <div class="zo2-divider"></div>     
        <!-- Show "Go to top" -->
        <?php 
echo Zo2Html::field('radio', array('label' => JText::_('ZO2_ADMIN_GENERAL_LABEL_ENABLE_GOTOTOP'), 'description' => JText::_('ZO2_ADMIN_GENERAL_DESC_ENABLE_GOTOTOP')), array('name' => 'jform[params][footer_gototop]', 'value' => Zo2Framework::getParam('footer_gototop')));
?>
        <!-- Show footer logo -->
        <?php 
echo Zo2Html::field('radio', array('label' => JText::_('ZO2_ADMIN_GENERAL_LABEL_ENABLE_FOOTER_LOGO'), 'description' => JText::_('ZO2_ADMIN_GENERAL_DESC_ENABLE_FOOTER_LOGO')), array('name' => 'jform[params][footer_logo]', 'value' => Zo2Framework::getParam('footer_logo')));
?>
    </div>
</div>
                                    <option value="12"><?php 
echo JText::_('ZO2_ADMIN_FORMFIELD_LAYOUT_OFFSET_LB');
?>
12</option>
                                </select>
                            </div>
                        </div>
                        <div class="control-group">
                            <label class="control-label" for="ddlColStyle"><?php 
echo JText::_('ZO2_ADMIN_STYLEEDIT_STYLE');
?>
</label>
                            <div class="controls">
                                <select id="ddlColStyle">
                                    <?php 
require_once JPATH_ROOT . '/templates/' . Zo2Framework::getInstance()->template->template . '/html/modules.php';
?>
                                    
                                    <?php 
foreach ($modChromes as $chrome) {
    ?>
                                        <option value="<?php 
    echo $chrome;
    ?>
"><?php 
    echo $chrome;
    ?>
</option>
                                    <?php 
}
?>
 /**
  * 
  * @return string
  */
 private function _generateJavascripts()
 {
     $combineJs = Zo2Framework::getParam('combine_js', 0);
     $developmentMode = Zo2Framework::getParam('development_mode', 0);
     $jsHtml = array();
     /**
      * Only do combine when asked and not in development mode
      */
     if ($combineJs == 1 && $developmentMode == 0) {
         $jsFile = 'cache/zo2_' . md5(serialize($this->_javascripts)) . '.js';
         $jsFilePath = JPATH_ROOT . '/' . $jsFile;
         $jsContent = array();
         /**
          * @todo Cache combined file instead generate it everytimes
          */
         foreach ($this->_javascripts as $javascript => $path) {
             /* Optimize output javascripts content */
             if (Zo2Framework::getParam('optimzie_js', 0) == 1) {
                 $jsContent[] = Zo2HelperCompiler::javascript(file_get_contents($path));
             } else {
                 $jsContent[] = file_get_contents($path);
             }
         }
         /* Save to combined file */
         file_put_contents($jsFilePath, implode(PHP_EOL, $jsContent));
         /* Generate HTML to load it */
         $jsHtml[] = '<script type="text/javascript" src="' . rtrim(JUri::root(true), '/') . '/' . $jsFile . '"></script>';
     } else {
         /* Just load js files without touching */
         foreach ($this->_javascripts as $javascript => $path) {
             $jsHtml[] = '<script type="text/javascript" src="' . Zo2Path::getInstance()->toUrl($javascript) . '"></script>';
         }
     }
     /* Custom javascripts code */
     $jsDeclarationHtml[] = '<script>jQuery(document).ready( function () {';
     foreach ($this->_javascriptDeclarations as $javascriptDeclaration) {
         /* Optimize output javascripts content */
         if (Zo2Framework::getParam('optimzie_js', 0) == 1) {
             $jsDeclarationHtml[] = Zo2HelperCompiler::javascript($javascriptDeclaration);
         } else {
             $jsDeclarationHtml[] = $javascriptDeclaration;
         }
     }
     $jsDeclarationHtml[] = ' }); </script>';
     return trim(implode(PHP_EOL, $jsHtml) . PHP_EOL . implode(PHP_EOL, $jsDeclarationHtml));
 }
        <div class="span12">
            <div class="row-fluid">
                <div class="span12">
                    <h2>Information Zo2 Framework</h2>
                    <div class="zo2-divider"></div>
                    <p>Zo2 Framework is a Joomla template framework, built from scratch, and heavily support Bootstrap framework and LESS.</p>
                    <p>Zo2 Framework comes with Drag & drop layout builder which allows you to create any number of stunning and unique layouts up to 5x faster than traditional way.</p>
                    <p><a class="btn btn-primary btn-large" href="http://www.zootemplate.com/zo2" target="_blank">Learn more Zo2Framework</a></p>
                    <div class="zo2-divider"></div>
                    <h3>Version</h3>
                    <p>Current version: <?php 
echo Zo2Framework::getInstance()->getManifest()->version;
?>
</p>
                    <?php 
$version = Zo2Framework::getInstance()->checkVersion();
switch ($version['compare']) {
    case '-1':
        echo '<span class="label label-important">Your Zo2 version is out of date.</span><br />';
        break;
    case '0':
        echo '<span class="label label-success">Your Zo2 version is up to date.</span><br />';
        break;
    case '1':
        echo '<span class="label label-info">Your Zo2 version newer than us.</span><br />';
        break;
}
?>
                    <p><strong>Latest version: <?php 
echo $version['latestVersion'];
?>
 /**
  * Hide component from frontpage
  * @return bool
  */
 private static function hideComponent()
 {
     $framework = Zo2Framework::getInstance();
     $params = Zo2Factory::getTemplate()->params;
     if ((int) $params->get('component_area', 0) && $framework->isFrontPage()) {
         return true;
     } else {
         return false;
     }
 }
    <!-- Heading line H1 font-->
    <?php 
echo Zo2Html::field('font', array('label' => JText::_('ZO2_ADMIN_FONT_H1')), array('name' => 'h1_font', 'id' => 'h1_font', 'value' => Zo2Framework::getParam('h1_font')));
?>

    <!-- Heading line H2 font-->
    <?php 
echo Zo2Html::field('font', array('label' => JText::_('ZO2_ADMIN_FONT_H2')), array('name' => 'h2_font', 'id' => 'h2_font', 'value' => Zo2Framework::getParam('h2_font')));
?>

    <!-- Heading line H3 font-->
    <?php 
echo Zo2Html::field('font', array('label' => JText::_('ZO2_ADMIN_FONT_H3')), array('name' => 'h3_font', 'id' => 'h3_font', 'value' => Zo2Framework::getParam('h3_font')));
?>

    <!-- Heading line H4 font-->
    <?php 
echo Zo2Html::field('font', array('label' => JText::_('ZO2_ADMIN_FONT_H4')), array('name' => 'h4_font', 'id' => 'h4_font', 'value' => Zo2Framework::getParam('h4_font')));
?>

    <!-- Heading line H5 font-->
    <?php 
echo Zo2Html::field('font', array('label' => JText::_('ZO2_ADMIN_FONT_H5')), array('name' => 'h5_font', 'id' => 'h5_font', 'value' => Zo2Framework::getParam('h5_font')));
?>

    <!-- Heading line H6 font-->
    <?php 
echo Zo2Html::field('font', array('label' => JText::_('ZO2_ADMIN_FONT_H6')), array('name' => 'h6_font', 'id' => 'h6_font', 'value' => Zo2Framework::getParam('h6_font')));
?>
</div>
 public static function isRTL()
 {
     return JFactory::getLanguage()->isRTL() && Zo2Framework::getParam('enable_rtl') == 1;
 }
<?php

/**
 * Zo2 (http://www.zootemplate.com/zo2)
 * A powerful Joomla template framework
 *
 * @link        http://www.zootemplate.com/zo2
 * @link        https://github.com/cleversoft/zo2
 * @author      ZooTemplate <http://zootemplate.com>
 * @copyright   Copyright (c) 2014 CleverSoft (http://cleversoft.co/)
 * @license     GPL v2
 */
//Script for Sticky menu
if (Zo2Framework::getParam('enable_sticky_menu', 1) == 1) {
    ?>
    jQuery(document).ready(function() {
    jQuery(".zo2-sticky").sticky({topSpacing:0});
    });
    <?php 
}
//Google analytics code
$ga_code = Zo2Framework::getParam('tracking_code', null);
if (!empty($ga_code)) {
    // Remove dummies code
    $ga_code = str_replace('<script>', '', $ga_code);
    $ga_code = str_replace('</script>', '', $ga_code);
    echo $ga_code;
}
 * @copyright   Copyright (c) 2014 CleverSoft (http://cleversoft.co/)
 * @license     GPL v2
 */
defined('_JEXEC') or die('Restricted access');
$profile = Zo2Factory::getProfile();
?>
<!-- Main layout for backend -->
<!-- It's using Twitter Bootstrap 2 default. Provided by Joomla! -->
<!-- Begin Content -->
<div id="zo2-profile" 
     data-zo2-template="<?php 
echo Zo2Framework::getInstance()->template->template;
?>
" 
     data-zo2-templateid="<?php 
echo Zo2Framework::getInstance()->template->id;
?>
"
     data-zo2-profile="<?php 
echo $profile->get('name');
?>
">
    <div class="row-fluid">
        <div class="span12">
            <?php 
$this->load('admin/top/default.php');
?>
            <?php 
$this->load('admin/body/default.php');
?>
        </div>