Example #1
0
 /**
  * Copies files or folders to the Artifact location.
  *
  * @throws Exception
  *
  * @return void
  */
 public function executeQueryCopy(DocBlox_Transformer_Transformation $transformation)
 {
     $path = $transformation->getSourceAsPath();
     if (!is_readable($path)) {
         throw new Exception('Unable to read the source file: ' . $path);
     }
     if (!is_writable($transformation->getTransformer()->getTarget())) {
         throw new Exception('Unable to write to: ' . dirname($transformation->getArtifact()));
     }
     $transformation->getTransformer()->copyRecursive($path, $transformation->getArtifact());
 }
Example #2
0
 /**
  * This method combines the structure.xml and the given target template
  * and creates a static html page at the artifact location.
  *
  * @param DOMDocument                        $structure      XML source.
  * @param DocBlox_Transformer_Transformation $transformation Transformation.
  *
  * @throws Exception
  *
  * @return void
  */
 public function transform(DOMDocument $structure, DocBlox_Transformer_Transformation $transformation)
 {
     if (!class_exists('XSLTProcessor')) {
         throw new Exception('The XSL writer was unable to find your XSLTProcessor; ' . 'please check if you have installed the PHP XSL extension');
     }
     $artifact = $transformation->getTransformer()->getTarget() . DIRECTORY_SEPARATOR . $transformation->getArtifact();
     $xsl = new DOMDocument();
     $xsl->load($transformation->getSourceAsPath());
     $proc = new XSLTProcessor();
     $proc->importStyleSheet($xsl);
     $proc->setParameter('', 'title', $structure->documentElement->getAttribute('title'));
     $proc->setParameter('', 'root', str_repeat('../', substr_count($transformation->getArtifact(), '/')));
     $proc->setParameter('', 'search_template', $transformation->getParameter('search', 'none'));
     $proc->setParameter('', 'version', DocBlox_Core_Abstract::VERSION);
     // check parameters for variables and add them when found
     $this->setProcessorParameters($transformation, $proc);
     // if a query is given, then apply a transformation to the artifact
     // location by replacing ($<var>} with the sluggified node-value of the
     // search result
     if ($transformation->getQuery() !== '') {
         $xpath = new DOMXPath($transformation->getTransformer()->getSource());
         $qry = $xpath->query($transformation->getQuery());
         foreach ($qry as $element) {
             $proc->setParameter('', $element->nodeName, $element->nodeValue);
             $filename = str_replace('{$' . $element->nodeName . '}', $transformation->getTransformer()->generateFilename($element->nodeValue), $artifact);
             $this->log('Processing the file: ' . $element->nodeValue . ' as ' . $filename);
             $proc->transformToURI($structure, 'file://' . $filename);
         }
     } else {
         if (substr($transformation->getArtifact(), 0, 1) == '$') {
             // not a file, it must become a variable!
             if (!isset($this->getConfig()->transformations->{'xsl.variables'})) {
                 $this->getConfig()->transformations->{'xsl-variables'} = new Zend_Config(array(), true);
             }
             $variable_name = substr($transformation->getArtifact(), 1);
             $this->getConfig()->transformations->{'xsl-variables'}->{$variable_name} = $proc->transformToXml($structure);
         } else {
             $proc->transformToURI($structure, 'file://' . $artifact);
         }
     }
 }