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