/home/coolpkct/www/websites/cake3.cool.rocks/admin/classes/layerwriter.php
<?php
/**
 * Part of SimpleViewer.net portfolio web site package.
 *
 * @package Showkaseexit();
 * @author Jack Hardie {@link http://www.jhardie.com}
 * @copyright Copyright (c) 2013, SimpleViewer Inc.
 */
defined('SK_ACCESS')||die('<h1>403: Forbidden</h1>');
require_once 'classes'.DIRECTORY_SEPARATOR.'filer.php';

/**
 * Writes page vars to page.xml file
 *
 * @package Showkase
 */
Class LayerWriter
{
  /**
   * write layer variables
   * Incoming layer vars are always passed through even if not present in fields
   *
   * @param object layer
   * @return boolean
   */
  public static function writeLayerVars(Layer $layer)
  {
      $path = $layer->getSettingsPath();
      $dirName = dirname($path);
      if (
          !is_dir($dirName)
          && !Filer::skMkdir($dirName, NEW_DIR_MODE, true)
      ) {
          throw New Exception('Cannot create data folder '.$dirName.', changes will not be saved.');
      }
      $layerVars   = array();
      $layerFields = $layer->getLayerFields();
      $incomingFields = $layer->getIncomingFields();
      foreach ($layerFields as $name => $field) {
          $value = $field->getValue();
          if (
              !isset($incomingFields[$name])
              || $incomingFields[$name]->getValue() != $value
          ) {
              $layerVars[$name] = $value;
          }
      }
      $layerVars = array('ss_pageRef'=>$layer->getRef(), 'ss_pageType'=>$layer->getPageType()) + $layerVars;
      $pageXml = new DOMDocument('1.0', 'utf-8');
      $pageXml->formatOutput=true;
      $pageXml->appendChild($pageRoot = $pageXml->createElement('page'));
      $pageRoot->appendChild($pageSettings = $pageXml->createElement('settings'));
      foreach ($layerVars as $name=>$value) {
          $pageElement = $pageXml->createElement($name);
          $pageSettings->appendChild($pageElement);
          $content = $pageXml->createCDATASection($value);
          $pageElement->appendChild($content);
      }
      $xml = $pageXml->saveXml();
      if (false === Filer::skPutContents($path, $xml, LOCK_EX)) {
          throw new Exception('Unable to write xml to file '.basename($path));
      } 
      return true;
    }
}