/** * 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; }
/** * Render link elements as string * * @param string|int $indent * @return string */ public function toString($indent = null) { $this->preToString(); return parent::toString($indent); }
/** * 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()); } }
/** * @issue ZF-10345 */ public function testIdAttributeIsSupported() { $this->helper->appendStylesheet(array('href' => '/bar/baz', 'id' => 'foo')); $this->assertContains('id="foo"', $this->helper->toString()); }