<?php
/**
 * Part of Showkase web site management package
 *
 * @package Showkase
 * @author Jack Hardie {@link http://www.jhardie.com}
 * @copyright Copyright (c) 2012, SimpleViewer Inc.
 */
defined('SK_ACCESS')||die('<h1>403: Forbidden</h1>');
/**
 * Prepares variables for all images screens
 *
 * @access public
 * @package Showkase
 */
Class CustomizeScreenHelper
{
    /**
     * @var object page
     */
    private $page;
    
    /**
     * @var array
     */
    private $pagesData = array();
    
    /**
     * @var array of field objects
     */
    private $layerFields = array();
    
    /**
     * @var boolean page is parent
     */
    private $pageIsParent = false;
    
    /**
     * @var array page fields arranged by section
     */
    private $sectionFields;
  
    /**
     * Constructor
     *
     * @access public
     * @param string gallery type
     * @return object screen object
     */
    public function __construct(Layer $page, PageSet $pageSet)
    {
        $this->page = $page;
        $this->pagesData = $pageSet->getPagesData();
        $this->layerFields = $this->page->getLayerFields();
        $this->pageIsParent = $this->setParentOptions();
        $this->sectionFields = $this->getSectionFields();
    }
    
   /**
    * Get Header html
    *
    * @param array screen context variables
    * @return string
    */
    public function getHeaderHtml($context)
    {
      
    }
    
    /**
     * Get custom head html
     *
     * @return string
     */
    public function getCustomHeadHtml()
    {
        return '
         <link href="colorjack/plugin.css" rel="stylesheet" type="text/css" />
         <script src="colorjack/plugin.js"></script>
         <script src="scripts/jcustomize.js"></script>
         <script src="scripts/formchange.js"></script>
         <script>
             var CKEDITOR_BASEPATH = "ckeditor/";
         </script>
         <script src="ckeditor/ckeditor.js"></script>
         <script src="settings/ckeditordialogue.js"></script>
';
    }
    
    /**
     * Get all fields arranged by section
     *
     * @return array of field objects
     */
    public function getAllFields()
    {
        return $this->sectionFields;
    }
    
    /**
     * Get lite fields arranged by section
     *
     * @return array of field objects
     */
    public function getLiteFields()
    {
        $liteFields = array();
        foreach ($this->sectionFields as $section=>$fields) {
            foreach ($fields as $name=>$field) {
                if (stripos($field->getClass(), 'pro') === false) $liteFields[$section][$name] = $field;
            }
        }
        return $liteFields;
    }
    
    /**
     * Get pro fields arranged by section
     *
     * @return array of field objects
     */
    public function getProFields()
    {
        $proFields = array();
        foreach ($this->sectionFields as $section=>$fields) {
            foreach ($fields as $name=>$field) {
                if (stripos($field->getClass(), 'pro') !== false) $proFields[$section][$name] = $field;
            }
        }
        return $proFields;
    }
    
    
    /**
     * Get html for submit and cancel buttons
     *
     * @return string
     * @param array context
     */
    public function getFormButtonHtml(array $context)
    {
        return <<<EOD
          <ul class="buttons">
              <li><button type="button" onclick="window.location='index.php';" class="btn btn-danger">Cancel</button></li>
              <li>
                <input type="hidden" name="token" value="{$context['token']}" >
                <input type="hidden" name="customizesubmitted" value="true" />
                <button type="submit" class="btn btn-success formbutton" >Update</button>
              </li>
          </ul>
EOD;
    }
      
    /**
     * Get fields arranged by section
     *
     * @return array of field objects
     */
    private function getSectionFields()
    {
        $exposed = 0;
        $sections = array();
        foreach ($this->layerFields as $name=>$field) {
            $sections[] = $field->getSection();
            if ($field->exposed()) {
                $exposed ++;
            }
        }
        if ($exposed == 0) return array();
        unset ($name, $field);
        $sections = array_unique($sections);
        // reorganize fields by section
        $sectionFields = array();
        $pageType = $this->page->getPageType();
        foreach ($sections as $section) {
            foreach ($this->layerFields as $name=>$field) {
                // skip hidden or irrelevant fields
                if (!$field->exposed()) continue;
                if (!$this->page->isGallery()         && $name == 'ss_indexShow')  continue;
                if ($pageType == 'galleryindex'       && $name == 'ss_parentPage') continue;
                if ($this->pageIsParent               && $name == 'ss_parentPage') continue;
                if ($section != $field->getSection()) continue;
                $sectionFields[$section][$name] = $field;
            }
        }
        return $sectionFields;
    }
    
    /**
     * Set options and values for 'Group under' field
     *
     * @return boolean page is parent
     */
    private function setParentOptions()
    {
        $fields = array();
        $tab = 1;
        $sections = array();
        $pageIsParent = false;
        if (isset($this->layerFields['ss_parentPage'])) {
            $values = array("0");
            $options = array("none");
            $parents = array();
            foreach ($this->pagesData as $pageData) {
                $parents[$pageData['pageRef']] = isset($pageData['parentPage'])
                    ? $pageData['parentPage']
                    : 0;
            }
            unset($pageData);
            $pageIsParent = in_array($this->page->getRef(), $parents);
            if (!$pageIsParent) {
                foreach ($this->pagesData as $key=>$pageData) {
                    if ($pageData['pageRef'] == $this->page->getRef()) continue;
                    if (isset($pageData['parentPage']) && $pageData['parentPage'] != 0) continue;
                    $values[] = $pageData['pageRef'];
                    $options[] = Helpers::stringLimitOnWord($pageData['navName'], 40);
                }
                unset ($key, $pageData);
            }
            $this->layerFields['ss_parentPage']->setValues($values);
            $this->layerFields['ss_parentPage']->setOptions($options);
        }
        return $pageIsParent;
    }
}