1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12: namespace Nette\Bridges\ApplicationLatte;
13:
14: use Nette;
15: use Nette\Application\UI;
16:
17:
18: 19: 20:
21: class TemplateFactory extends Nette\Object implements UI\ITemplateFactory
22: {
23:
24: private $latteFactory;
25:
26:
27: private $httpRequest;
28:
29:
30: private $httpResponse;
31:
32:
33: private $user;
34:
35:
36: private $cacheStorage;
37:
38:
39: public function __construct(ILatteFactory $latteFactory, Nette\Http\IRequest $httpRequest = NULL,
40: Nette\Http\IResponse $httpResponse = NULL, Nette\Security\User $user = NULL, Nette\Caching\IStorage $cacheStorage = NULL)
41: {
42: $this->latteFactory = $latteFactory;
43: $this->httpRequest = $httpRequest;
44: $this->httpResponse = $httpResponse;
45: $this->user = $user;
46: $this->cacheStorage = $cacheStorage;
47: }
48:
49:
50: 51: 52:
53: public function createTemplate(UI\Control $control = NULL)
54: {
55: $latte = $this->latteFactory->create();
56: $template = new Template($latte);
57: $presenter = $control ? $control->getPresenter(FALSE) : NULL;
58:
59: if ($control instanceof UI\Presenter) {
60: $latte->setLoader(new Loader($control));
61: }
62:
63: if ($latte->onCompile instanceof \Traversable) {
64: $latte->onCompile = iterator_to_array($latte->onCompile);
65: }
66:
67: array_unshift($latte->onCompile, function ($latte) use ($control, $template) {
68: $latte->getParser()->shortNoEscape = TRUE;
69: $latte->getCompiler()->addMacro('cache', new Nette\Bridges\CacheLatte\CacheMacro($latte->getCompiler()));
70: UIMacros::install($latte->getCompiler());
71: if (class_exists('Nette\Bridges\FormsLatte\FormMacros')) {
72: Nette\Bridges\FormsLatte\FormMacros::install($latte->getCompiler());
73: }
74: if ($control) {
75: $control->templatePrepareFilters($template);
76: }
77: });
78:
79: $latte->addFilter('url', 'rawurlencode');
80: foreach (array('normalize', 'toAscii', 'webalize', 'padLeft', 'padRight', 'reverse') as $name) {
81: $latte->addFilter($name, 'Nette\Utils\Strings::' . $name);
82: }
83: $latte->addFilter('null', function () {});
84: $latte->addFilter('length', function ($var) {
85: return is_string($var) ? Nette\Utils\Strings::length($var) : count($var);
86: });
87: $latte->addFilter('modifyDate', function ($time, $delta, $unit = NULL) {
88: return $time == NULL ? NULL : Nette\Utils\DateTime::from($time)->modify($delta . $unit);
89: });
90:
91:
92: $template->control = $template->_control = $control;
93: $template->presenter = $template->_presenter = $presenter;
94: $template->user = $this->user;
95: $template->netteHttpResponse = $this->httpResponse;
96: $template->netteCacheStorage = $this->cacheStorage;
97: $template->baseUri = $template->baseUrl = $this->httpRequest ? rtrim($this->httpRequest->getUrl()->getBaseUrl(), '/') : NULL;
98: $template->basePath = preg_replace('#https?://[^/]+#A', '', $template->baseUrl);
99: $template->flashes = array();
100:
101: if ($presenter instanceof UI\Presenter && $presenter->hasFlashSession()) {
102: $id = $control->getParameterId('flash');
103: $template->flashes = (array) $presenter->getFlashSession()->$id;
104: }
105:
106: return $template;
107: }
108:
109: }
110: