/**
  * getNewInstanceAction
  *
  * @return Response
  */
 public function getNewInstanceAction()
 {
     $routeMatch = $this->getEvent()->getRouteMatch();
     $pluginType = $routeMatch->getParam('pluginType');
     $instanceId = $routeMatch->getParam('instanceId');
     $pluginManager = $this->getServiceLocator()->get('Rcm\\Service\\PluginManager');
     if ($instanceId < 0) {
         $instanceConfig = $pluginManager->getDefaultInstanceConfig($pluginType);
     } else {
         $instanceConfig = $pluginManager->getInstanceConfig($instanceId);
     }
     //Allow plugins to preview with an unsaved instance configuration
     $instanceConfigPreview = $this->params()->fromPost('previewInstanceConfig');
     if ($instanceConfigPreview) {
         $instanceConfig = array_merge($instanceConfig, $instanceConfigPreview);
     }
     $viewData = $pluginManager->getPluginViewData($pluginType, $instanceId, $instanceConfig);
     $html = $viewData['html'];
     $headLink = new HeadLink();
     foreach ($viewData['css'] as $css) {
         $cssInfo = unserialize($css);
         $headLink->append($cssInfo);
     }
     $headScript = new HeadScript();
     foreach ($viewData['js'] as $js) {
         $jsInfo = unserialize($js);
         $headScript->append($jsInfo);
     }
     $html = $headLink->toString() . $headScript->toString() . $html;
     $response = new Response();
     $response->setContent($html);
     return $response;
 }
Beispiel #2
0
 /**
  * Render link elements as string
  *
  * @param  string|int $indent
  * @return string
  */
 public function toString($indent = null)
 {
     $this->preToString();
     return parent::toString($indent);
 }
Beispiel #3
0
 /**
  * Combine all files and retrieve minified file
  *
  * @param string|int $indent
  *            Amount of whitespaces or string to use for indention
  * @return string
  */
 public function toString($indent = null)
 {
     try {
         if ($this->minifyEnabled === false) {
             return parent::toString($indent);
         }
         $indent = null !== $indent ? $this->getWhitespace($indent) : $this->getIndent();
         $filesToMinify = array();
         $lastModifiedTime = 0;
         $items = [];
         $this->getContainer()->ksort();
         foreach ($this as $item) {
             if (!$this->isValid($item)) {
                 continue;
             }
             $itemSrcPath = !empty($item->href) ? $this->minifyDocRootPath . trim($item->href, '/\\ ') : null;
             if ($item->type === 'text/css' && $itemSrcPath && file_exists($itemSrcPath) && empty($item->conditionalStylesheet) && (!isset($item->attributes['minify']) || $item->attributes['minify'] !== false)) {
                 $filesToMinify[$item->media][] = $itemSrcPath;
                 $lastModifiedTime = max(filemtime($itemSrcPath), $lastModifiedTime);
             } else {
                 $items[] = $this->itemToString($item);
             }
         }
         if (count($filesToMinify, COUNT_RECURSIVE) > 0) {
             foreach ($filesToMinify as $media => $filePaths) {
                 $minifiedFileName = md5(implode('|', $filePaths)) . '.min.css';
                 $minifiedFileBasePath = $this->view->basePath($this->minifyCacheDir . '/' . $minifiedFileName);
                 $minifiedFilePath = $this->minifyDocRootPath . trim($minifiedFileBasePath, '\\/ ');
                 $lockFilePath = sys_get_temp_dir() . '/' . $minifiedFileName . '.lock';
                 $isMinifiedFileBuildRequired = !file_exists($minifiedFilePath) || filemtime($minifiedFilePath) < $lastModifiedTime;
                 $isMinifiedFileBuildLocked = file_exists($lockFilePath);
                 if ($isMinifiedFileBuildRequired && !$isMinifiedFileBuildLocked) {
                     file_put_contents($lockFilePath, 'locked', LOCK_EX);
                     try {
                         $pieces = array();
                         foreach ($filePaths as $filePath) {
                             $pieces[] = $this->minifyService->minify(file_get_contents($filePath), array('docRoot' => $this->minifyDocRootPath, 'currentDir' => dirname($filePath)));
                         }
                         $content = implode($this->getSeparator(), $pieces);
                         file_put_contents($minifiedFilePath, $content, LOCK_EX);
                     } catch (\Exception $e) {
                         unlink($lockFilePath);
                         throw new \Exception($e->getMessage());
                     }
                     unlink($lockFilePath);
                     //clean out old files
                     $flattened = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->minifyCachePath));
                     $files = new \RegexIterator($flattened, '/^[a-f0-9]{32}\\.min\\.css$/i');
                     foreach ($files as $file) {
                         if (filemtime($file) < time() - 86400 * 7) {
                             unlink($file);
                         }
                     }
                 }
                 $item = $this->createData(array('type' => 'text/css', 'rel' => 'stylesheet', 'media' => $media, 'href' => $minifiedFileBasePath, 'conditionalStylesheet' => false));
                 array_unshift($items, $this->itemToString($item));
             }
         }
         return $indent . implode($this->escape($this->getSeparator()) . $indent, $items);
     } catch (\Exception $e) {
         die("Fatal VcoZfMinify Error: " . $e->getMessage());
     }
 }
Beispiel #4
0
 /**
  * @issue ZF-10345
  */
 public function testIdAttributeIsSupported()
 {
     $this->helper->appendStylesheet(array('href' => '/bar/baz', 'id' => 'foo'));
     $this->assertContains('id="foo"', $this->helper->toString());
 }