/**
  * Returns an ezcsseStyle object for given XML string
  * 
  * @param string $source
  * @return ezcsseStyle
  */
 static function createFromXML($source)
 {
     $newObj = new ezcsseStyle();
     if ($source) {
         $dom = new DOMDOcument();
         $success = $dom->loadXML($source);
         $root = $dom->documentElement;
         if ($root->hasAttributes()) {
             foreach ($root->attributes as $attr) {
                 $newObj->setAttribute($attr->name, $attr->value);
             }
         }
         foreach ($root->childNodes as $node) {
             if ($node->nodeType == XML_ELEMENT_NODE && $node->nodeName == 'rule') {
                 $newObj->addRule(ezcsseRule::createFromXML($node));
             } elseif ($node->nodeType == XML_ELEMENT_NODE) {
                 $newObj->setAttribute($node->nodeName, $node->nodeValue);
             }
         }
     }
     return $newObj;
 }
 /**
  * Returns current object as a CSS string
  * 
  * @return string A CSS string 
  */
 public function toCSS()
 {
     $property = '';
     if ($this->attribute('value') != "") {
         $property = ezcsseStyle::tabIndent() . $this->attribute('name') . ": " . $this->attribute('value') . ";";
     }
     return $property;
 }
 /**
  * Returns a ezcsseStyle object for current style definition
  * 
  * @return ezcsseStyle 
  */
 public function fetchStyleObject()
 {
     $style = ezcsseStyle::createFromXML($this->attribute('style'));
     return $style;
 }
 /**
  * Returns a current rule object as CSS string
  * 
  * @return string A CSS string 
  */
 public function toCSS()
 {
     $rule = $this->attribute('selector');
     $rule .= ezcsseStyle::newLine();
     $rule .= ezcsseStyle::lDelim();
     $rule .= ezcsseStyle::newLine();
     foreach ($this->attribute('properties') as $property) {
         $rule .= $property->toCSS();
         $rule .= ezcsseStyle::newLine();
     }
     $rule .= ezcsseStyle::rDelim();
     $rule .= ezcsseStyle::newLine();
     return $rule;
 }
 /**
  * Restore site style to given version
  *
  * @static
  */
 public static function restoreSiteStyle()
 {
     $params = self::getPostParams();
     $siteStyleVerParam = isset($params['sitestyle_version']) ? $params['sitestyle_version'] : array();
     $siteStyleVerID = isset($siteStyleVerParam['id']) ? $siteStyleVerParam['id'] : null;
     $objectID = isset($params['object_id']) ? $params['object_id'] : null;
     $siteStyleVersion = ezcsseSiteStyleVersion::fetchObject(ezcsseSiteStyleVersion::definition(), null, array('id' => $siteStyleVerID));
     $siteStyle = ezcsseSiteStyle::fetchObject(ezcsseSiteStyle::definition(), null, array('id' => $siteStyleVersion->attribute('sitestyle_id')));
     $currentVersion = $siteStyle->attribute('current_version');
     $siteStyleDef = ezcsseSiteStyleDefinition::fetchObject(ezcsseSiteStyleDefinition::definition(), null, array('sitestyle_id' => $siteStyleVersion->attribute('sitestyle_id'), 'version' => $siteStyleVersion->attribute('version')));
     $style = $siteStyleDef->attribute('style');
     $newSiteStyleVersion = new ezcsseSiteStyleVersion();
     $newSiteStyleVersion->setAttribute('sitestyle_id', $siteStyle->attribute('id'));
     $newSiteStyleVersion->setAttribute('version', $currentVersion + 1);
     $newSiteStyleVersion->setAttribute('created', time());
     $newSiteStyleVersion->setAttribute('modified', time());
     $newSiteStyleVersion->store();
     $newSiteStyleDef = new ezcsseSiteStyleDefinition();
     $newSiteStyleDef->setAttribute('sitestyle_id', $siteStyle->attribute('id'));
     $newSiteStyleDef->setAttribute('version', $currentVersion + 1);
     $newSiteStyleDef->setAttribute('style', $style);
     $newSiteStyleDef->store();
     $siteStyle->setAttribute('current_version', $currentVersion + 1);
     $siteStyle->store();
     $style = ezcsseStyle::createFromXML($style);
     if ($objectID) {
         eZContentCacheManager::clearTemplateBlockCache($objectID);
     }
     return $style->toJSON();
 }