Skip to content

Commit

Permalink
many changes to enable Asset management including adding and setting …
Browse files Browse the repository at this point in the history
…pageVars and including assets. Also add default assets (e.g. bootstrap, etc) and begins refactoring of service names to new naming convention. maintains BC and uses similar methods to past. refs #2559
  • Loading branch information
craigh committed Aug 12, 2015
1 parent 15967ba commit 46c3b5f
Show file tree
Hide file tree
Showing 15 changed files with 245 additions and 131 deletions.
2 changes: 2 additions & 0 deletions src/app/config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ framework:
twig:
debug: %kernel.debug%
strict_variables: %kernel.debug%
globals:
pagevars: "@zikula_core.common.theme.pagevars"

## Assetic Configuration
assetic:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public function load(array $configs, ContainerBuilder $container)
$loader->load('services.xml');
$loader->load('core.xml');
$loader->load('twig.xml');
$loader->load('theme.xml');
$loader->load('translation.xml');

$configuration = $this->getConfiguration($configs, $container);
Expand Down
29 changes: 0 additions & 29 deletions src/lib/Zikula/Bundle/CoreBundle/Resources/config/core.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,8 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

<parameters>
<parameter key="zikula_core.common.theme_engine.class">Zikula\Core\Theme\Engine</parameter>
<parameter key="zikula.theme_listener.class">Zikula\Bundle\CoreBundle\EventListener\ThemeListener</parameter>
<!--<parameter key="zikula.themeinit_listener.class">Zikula\Bundle\CoreBundle\EventListener\ThemeInitListener</parameter>-->
<!--<parameter key="zikula.system_listener.class">Zikula\Bundle\CoreBundle\EventListener\SystemListener</parameter>-->
<parameter key="zikula.config_template_override_listener.class">Zikula\Bundle\CoreBundle\EventListener\ConfigTemplateOverrideYamlListener</parameter>
<parameter key="zikula.theme_template_override_listener.class">Zikula\Bundle\CoreBundle\EventListener\ThemeTemplateOverrideYamlListener</parameter>

<parameter key="zikula.doctrine1_connector.class">Zikula\Bundle\CoreBundle\EventListener\Doctrine1ConnectorListener</parameter>
<parameter key="zikula.doctrine_connector.class">Zikula\Bundle\CoreBundle\EventListener\DoctrineListener</parameter>
Expand Down Expand Up @@ -105,10 +101,6 @@
<tag name="kernel.event_subscriber" />
</service>

<service id="zikula.theme_template_override_listener" class="%zikula.theme_template_override_listener.class%">
<tag name="kernel.event_subscriber" />
</service>

<service id="zikula.legacy_route_listener" class="%zikula.legacy_route_listener.class%">
<tag name="kernel.event_subscriber" />
<tag name="monolog.logger" channel="request" />
Expand All @@ -123,27 +115,6 @@
<tag name="kernel.event_subscriber" />
</service>

<service id="zikula_core.common.theme_engine" class="%zikula_core.common.theme_engine.class%">
<argument type="service" id="request_stack" strict="false" />
</service>

<service id="zikula.theme_listener" class="%zikula.theme_listener.class%">
<tag name="kernel.event_subscriber" />
<tag name="monolog.logger" channel="request" />
<argument type="service" id="zikula_core.common.theme_engine" />
</service>

<!--<service id="zikula.themeinit.subscriber" class="%zikula.themeinit_listener.class%">-->
<!--<tag name="kernel.event_subscriber" />-->
<!--<argument type="service" id="service_container" />-->
<!--</service>-->

<!--<service id="zikula.themes.subscriber" class="%zikula.theme_listener.class%">-->
<!--<tag name="kernel.event_subscriber" />-->
<!--<argument type="service" id="service_container" />-->
<!--<argument type="service" id="templating" />-->
<!--</service>-->

<service id="zikula.exception_listener" class="%zikula.exception_listener.class%">
<tag name="kernel.event_subscriber" />
<tag name="monolog.logger" channel="request" />
Expand Down
112 changes: 112 additions & 0 deletions src/lib/Zikula/Bundle/CoreBundle/Resources/config/theme.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

<parameters>
<parameter key="zikula.theme_template_override_listener.class">Zikula\Bundle\CoreBundle\EventListener\ThemeTemplateOverrideYamlListener</parameter>
<parameter key="zikula_core.common.theme_engine.class">Zikula\Core\Theme\Engine</parameter>
<parameter key="zikula.theme_listener.class">Zikula\Bundle\CoreBundle\EventListener\ThemeListener</parameter>
<!--<parameter key="zikula.themeinit_listener.class">Zikula\Bundle\CoreBundle\EventListener\ThemeInitListener</parameter>-->
<parameter key="zikula_core.common.theme.assets.js.class">Zikula\Core\Theme\AssetBag</parameter>
<parameter key="zikula_core.common.theme.assets.css.class">Zikula\Core\Theme\AssetBag</parameter>
<parameter key="zikula_core.common.theme.pagevars.class">Zikula\Core\Theme\ParameterBag</parameter>
<parameter key="zikula_core.common.theme_filter.class">Zikula\Core\Theme\Filter</parameter>
<parameter key="theme.themevars.class">Zikula\Core\Theme\ParameterBag</parameter>
<!--<parameter key="theme.metatags.class">Zikula\Core\Theme\ParameterBag</parameter>-->
<parameter key="zikula_core.common.theme.asset_helper.class">Zikula\Core\Theme\Asset</parameter>
<parameter key="theme.asset.packagepath.class">Zikula\Core\Theme\Asset\PackagePath</parameter>
<parameter key="zikula_core.common.theme.js_resolver.class">Zikula\Core\Theme\Asset\JsResolver</parameter>
<parameter key="zikula_core.common.theme.css_resolver.class">Zikula\Core\Theme\Asset\CssResolver</parameter>
</parameters>

<services>
<service id="zikula.theme_template_override_listener" class="%zikula.theme_template_override_listener.class%">
<tag name="kernel.event_subscriber" />
</service>

<service id="zikula_core.common.theme_engine" class="%zikula_core.common.theme_engine.class%">
<argument type="service" id="request_stack" strict="false" />
<argument type="service" id="zikula_core.common.theme_filter" />
</service>

<service id="zikula.theme_listener" class="%zikula.theme_listener.class%">
<tag name="kernel.event_subscriber" />
<tag name="monolog.logger" channel="request" />
<argument type="service" id="zikula_core.common.theme_engine" />
</service>

<!--<service id="zikula.themeinit.subscriber" class="%zikula.themeinit_listener.class%">-->
<!--<tag name="kernel.event_subscriber" />-->
<!--<argument type="service" id="service_container" />-->
<!--</service>-->

<!--<service id="zikula.themes.subscriber" class="%zikula.theme_listener.class%">-->
<!--<tag name="kernel.event_subscriber" />-->
<!--<argument type="service" id="service_container" />-->
<!--<argument type="service" id="templating" />-->
<!--</service>-->

<service id="zikula_core.common.theme.assets_js" class="%zikula_core.common.theme.assets.js.class%">
<argument type="collection">
<!-- @todo possibly convert this to extended AssetBag that can resolve relative paths -->
<argument>%router.request_context.base_url%/web/jquery/jquery.min.js</argument>
<argument>%router.request_context.base_url%/web/bootstrap/js/bootstrap.min.js</argument>
<argument>%router.request_context.base_url%/javascript/helpers/bootstrap-zikula.js</argument>
<argument>%router.request_context.base_url%/web/bundles/fosjsrouting/js/router.js</argument>
<argument>%router.request_context.base_url%/web/js/fos_js_routes.js</argument>
</argument>
</service>

<service id="zikula_core.common.theme.assets_css" class="%zikula_core.common.theme.assets.css.class%">
<argument type="collection">
<!-- @todo possibly convert this to extended AssetBag that can resolve relative paths -->
<argument>%router.request_context.base_url%/web/bootstrap-font-awesome.css</argument>
</argument>
</service>

<service id="zikula_core.common.theme.pagevars" class="%zikula_core.common.theme.pagevars.class%">
</service>

<service id="zikula_core.common.theme_filter" class="%zikula_core.common.theme_filter.class%">
<argument type="service" id="zikula_core.common.theme.pagevars" />
<argument type="service" id="zikula_core.common.theme.js_resolver" />
<argument type="service" id="zikula_core.common.theme.css_resolver" />
</service>

<service id="theme.themevars" class="%theme.themevars.class%">
</service>

<!--<service id="theme.metatags" class="%theme.metatags.class%">-->
<!--</service>-->

<service id="zikula_core.common.theme.js_resolver" class="%zikula_core.common.theme.js_resolver.class%">
<argument type="service" id="zikula_core.common.theme.assets_js" />
</service>

<service id="zikula_core.common.theme.css_resolver" class="%zikula_core.common.theme.css_resolver.class%">
<argument type="service" id="zikula_core.common.theme.assets_css" />
</service>

<service id="theme.asset.packagepath" class="%theme.asset.packagepath.class%">
<argument type="service" id="request_stack" strict="false" />
</service>

<service id="zikula_core.common.theme.asset_helper" scope="request" class="%zikula_core.common.theme.asset_helper.class%">
<argument type="service" id="kernel" strict="false" />
<argument type="service" id="theme.asset.packagepath" />
<argument type="service" id="zikula_core.common.theme_engine" />
<!--<argument>%framework.assets.base_path%</argument>-->
</service>

<!-- Alias for services. These service names are deprecated and will be removed in Core-2.0 -->
<service id="theme.asset_helper" alias="zikula_core.common.theme.asset_helper" />
<service id="theme.pagevars" alias="zikula_core.common.theme.pagevars" />
<service id="theme.assets_js" alias="zikula_core.common.theme.assets_js" />
<service id="theme.assets_css" alias="zikula_core.common.theme.assets_css" />
<service id="theme.js_resolver" alias="zikula_core.common.theme.js_resolver" />
<service id="theme.css_resolver" alias="zikula_core.common.theme.css_resolver" />
<!-- end alias definitions -->
</services>
</container>
42 changes: 0 additions & 42 deletions src/lib/Zikula/Bundle/CoreBundle/Resources/config/twig.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,6 @@
<parameter key="twig.extension.zikula_core.class">Zikula\Bundle\CoreBundle\Twig\Extension\CoreExtension</parameter>
<parameter key="twig.extension.zikula_hook.class">Zikula\Bundle\CoreBundle\Twig\Extension\HookExtension</parameter>
<parameter key="twig.extension.zikula_pager.class">Zikula\Bundle\CoreBundle\Twig\Extension\PagerExtension</parameter>
<parameter key="theme.assets.js.class">Zikula\Core\Theme\AssetBag</parameter>
<parameter key="theme.assets.css.class">Zikula\Core\Theme\AssetBag</parameter>
<parameter key="theme.pagevars.class">Zikula\Core\Theme\ParameterBag</parameter>
<parameter key="theme.themevars.class">Zikula\Core\Theme\ParameterBag</parameter>
<parameter key="theme.metatags.class">Zikula\Core\Theme\ParameterBag</parameter>
<parameter key="theme.asset_helper.class">Zikula\Core\Theme\Asset</parameter>
<parameter key="theme.asset.packagepath.class">Zikula\Core\Theme\Asset\PackagePath</parameter>
<parameter key="theme.asset.js_resolver.class">Zikula\Core\Theme\Asset\JsResolver</parameter>
<parameter key="theme.asset.css_resolver.class">Zikula\Core\Theme\Asset\CssResolver</parameter>
</parameters>

<services>
Expand All @@ -40,38 +31,5 @@
<tag name="twig.extension" />
<argument type="service" id="service_container" />
</service>

<service id="theme.assets_js" class="%theme.assets.js.class%">
</service>

<service id="theme.assets_css" class="%theme.assets.css.class%">
</service>

<service id="theme.pagevars" class="%theme.pagevars.class%">
</service>

<service id="theme.themevars" class="%theme.themevars.class%">
</service>

<service id="theme.metatags" class="%theme.metatags.class%">
</service>

<service id="theme.js_resolver" class="%theme.asset.js_resolver.class%">
<argument type="service" id="theme.assets_js" />
</service>

<service id="theme.css_resolver" class="%theme.asset.css_resolver.class%">
<argument type="service" id="theme.assets_css" />
</service>

<service id="theme.asset.packagepath" class="%theme.asset.packagepath.class%">
<argument type="service" id="request_stack" strict="false" />
<argument type="service" id="zikula_core.common.theme_engine" />
</service>

<service id="theme.asset_helper" scope="request" class="%theme.asset_helper.class%">
<argument type="service" id="kernel" strict="false" />
<argument type="service" id="theme.asset.packagepath" />
</service>
</services>
</container>
29 changes: 22 additions & 7 deletions src/lib/Zikula/Bundle/CoreBundle/Twig/Extension/CoreExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public function getFilters()

public function getAssetPath($path)
{
return $this->container->get('theme.asset_helper')->resolve($path);
return $this->container->get('zikula_core.common.theme.asset_helper')->resolve($path);
}

public function showBlockPosition($name, $implode = true)
Expand Down Expand Up @@ -244,29 +244,44 @@ public function pageSetVar($name, $value)
throw new \InvalidArgumentException(__('Empty argument at') . ':' . __FILE__ . '::' . __LINE__);
}

\PageUtil::setVar($name, $value);
$this->container->get('zikula_core.common.theme.pagevars')->set($name, $value);
}

/**
* @param string $name
* @param string $value
*
* Zikula does not impose any restriction on the page variable's name except for duplicate
* and reserved names. As of this writing, the list of reserved names consists of
* <ul>
* <li>title</li>
* <li>stylesheet</li>
* <li>javascript</li>
* <li>header</li>
* <li>footer</li>
* </ul>
*/
public function pageAddVar($name, $value)
{
if (empty($name) || empty($value)) {
throw new \InvalidArgumentException(__('Empty argument at') . ':' . __FILE__ . '::' . __LINE__);
}

// @todo handle this polyfill feature issue
if ($value == 'polyfill') {
$features = isset($params['features']) ? $params['features'] : 'forms';
} else {
$features = null;
}
// @todo temp?
// @todo this won't work if theme is not a bundle or not set
// $themeIsTwigBased = $this->container->get('zikula_core.common.theme_engine')->getTheme()->isTwigBased();

\PageUtil::addVar($name, $value, $features);
if ('stylesheet' == $name) {
$this->container->get('zikula_core.common.theme.assets_css')->add($value);
} elseif ('javascript' == $name) {
$this->container->get('zikula_core.common.theme.assets_js')->add($value);
} else {
// @todo using 'set' but should be 'add'...
$this->container->get('zikula_core.common.theme.pagevars')->set($name, $value);
}
}

/**
Expand All @@ -280,7 +295,7 @@ public function pageGetVar($name, $default = null)
throw new \InvalidArgumentException(__('Empty argument at') . ':' . __FILE__ . '::' . __LINE__);
}

return \PageUtil::getVar($name, $default);
return $this->container->get('zikula_core.common.theme.pagevars')->get($name, $default);
}

/**
Expand Down
12 changes: 6 additions & 6 deletions src/lib/Zikula/Core/Theme/Asset.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ class Asset
private $kernel;
private $package;
private $webDir;
private $themeBundle;

public function __construct(KernelInterface $kernel, PackagePath $package, $webDir = 'web')
public function __construct(KernelInterface $kernel, PackagePath $package, Engine $engine, $webDir = 'web')
{
$this->kernel = $kernel;
$this->package = $package;
$this->themeBundle = $engine->getTheme();
$this->webDir = $webDir;
}

Expand Down Expand Up @@ -75,7 +77,7 @@ public function resolvePath($path)
);

// theme
$themeName = strtolower($this->package->getThemeName());
$themeName = strtolower($this->themeBundle->getName());
$array[] = array(
// @todo needs to convert /bundles/bundlename/css/... to /bundles/themename/css/bundlename/...
'asset_path' => $path2 = $this->package->getUrl($this->webDir . '/' . preg_replace('#bundles/([\w\d_-]+)/(.*)$#', 'bundles/'.$themeName.'/$2', $path)),
Expand Down Expand Up @@ -119,11 +121,9 @@ private function getSearchPath(array $parameters)

// customized in theme
// themes/$themeName/$assetType/$bundleName/$assetPath
$themeName = $this->package->getThemeName();
$themeName = $this->themeBundle->getName();
if (false === empty($themeName) && $parameters['bundle_name'] !== $themeName) {
// $assetPath = substr_replace($parameters['asset_path'], '/' . $parameters['bundle_name'], strpos($parameters['asset_path'], '/'), 0);
// $paths[] = $this->getAssetPath($this->package->getThemeName(), $assetPath);
$paths[] = $this->getAssetPath($this->package->getThemeName(), $this->customizedAssetPath($parameters['bundle_name'], $parameters['asset_path']));
$paths[] = $this->getAssetPath($themeName, $this->customizedAssetPath($parameters['bundle_name'], $parameters['asset_path']));
}

// web
Expand Down
7 changes: 6 additions & 1 deletion src/lib/Zikula/Core/Theme/Asset/CssResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use Zikula\Core\Theme\AssetBag;

class CssResolver
class CssResolver implements ResolverInterface
{
private $bag;

Expand All @@ -22,4 +22,9 @@ public function compile()

return $headers;
}

public function getBag()
{
return $this->bag;
}
}
7 changes: 6 additions & 1 deletion src/lib/Zikula/Core/Theme/Asset/JsResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use Zikula\Core\Theme\AssetBag;

class JsResolver
class JsResolver implements ResolverInterface
{
private $bag;

Expand All @@ -22,4 +22,9 @@ public function compile()

return $headers;
}

public function getBag()
{
return $this->bag;
}
}
Loading

0 comments on commit 46c3b5f

Please sign in to comment.