%PDF- %PDF-
Direktori : /www/old2/_music/diplomka/diplomka/src/API/libs/Nette/Application/UI/ |
Current File : /www/old2/_music/diplomka/diplomka/src/API/libs/Nette/Application/UI/Control.php |
<?php /** * This file is part of the Nette Framework (http://nette.org) * * Copyright (c) 2004 David Grudl (http://davidgrudl.com) * * For the full copyright and license information, please view * the file license.txt that was distributed with this source code. */ namespace Nette\Application\UI; use Nette; /** * Control is renderable Presenter component. * * @author David Grudl * * @property-read Nette\Templating\ITemplate $template * @property-read string $snippetId */ abstract class Control extends PresenterComponent implements IRenderable { /** @var Nette\Templating\ITemplate */ private $template; /** @var array */ private $invalidSnippets = array(); /** @var bool */ public $snippetMode; /********************* template factory ****************d*g**/ /** * @return Nette\Templating\ITemplate */ final public function getTemplate() { if ($this->template === NULL) { $value = $this->createTemplate(); if (!$value instanceof Nette\Templating\ITemplate && $value !== NULL) { $class2 = get_class($value); $class = get_class($this); throw new Nette\UnexpectedValueException("Object returned by $class::createTemplate() must be instance of Nette\\Templating\\ITemplate, '$class2' given."); } $this->template = $value; } return $this->template; } /** * @param string|NULL * @return Nette\Templating\ITemplate */ protected function createTemplate($class = NULL) { $template = $class ? new $class : new Nette\Templating\FileTemplate; $presenter = $this->getPresenter(FALSE); $template->onPrepareFilters[] = $this->templatePrepareFilters; $template->registerHelperLoader('Nette\Templating\Helpers::loader'); // default parameters $template->control = $template->_control = $this; $template->presenter = $template->_presenter = $presenter; if ($presenter instanceof Presenter) { $template->setCacheStorage($presenter->getContext()->nette->templateCacheStorage); $template->user = $presenter->getUser(); $template->netteHttpResponse = $presenter->getHttpResponse(); $template->netteCacheStorage = $presenter->getContext()->getByType('Nette\Caching\IStorage'); $template->baseUri = $template->baseUrl = rtrim($presenter->getHttpRequest()->getUrl()->getBaseUrl(), '/'); $template->basePath = preg_replace('#https?://[^/]+#A', '', $template->baseUrl); // flash message if ($presenter->hasFlashSession()) { $id = $this->getParameterId('flash'); $template->flashes = $presenter->getFlashSession()->$id; } } if (!isset($template->flashes) || !is_array($template->flashes)) { $template->flashes = array(); } return $template; } /** * Descendant can override this method to customize template compile-time filters. * @param Nette\Templating\Template * @return void */ public function templatePrepareFilters($template) { $template->registerFilter($this->getPresenter()->getContext()->nette->createLatte()); } /** * Returns widget component specified by name. * @param string * @return Nette\ComponentModel\IComponent */ public function getWidget($name) { trigger_error(__METHOD__ . '() is deprecated, use getComponent() instead.', E_USER_WARNING); return $this->getComponent($name); } /** * Saves the message to template, that can be displayed after redirect. * @param string * @param string * @return \stdClass */ public function flashMessage($message, $type = 'info') { $id = $this->getParameterId('flash'); $messages = $this->getPresenter()->getFlashSession()->$id; $messages[] = $flash = (object) array( 'message' => $message, 'type' => $type, ); $this->getTemplate()->flashes = $messages; $this->getPresenter()->getFlashSession()->$id = $messages; return $flash; } /********************* rendering ****************d*g**/ /** * Forces control or its snippet to repaint. * @param string * @return void */ public function invalidateControl($snippet = NULL) { $this->invalidSnippets[$snippet] = TRUE; } /** * Allows control or its snippet to not repaint. * @param string * @return void */ public function validateControl($snippet = NULL) { if ($snippet === NULL) { $this->invalidSnippets = array(); } else { unset($this->invalidSnippets[$snippet]); } } /** * Is required to repaint the control or its snippet? * @param string snippet name * @return bool */ public function isControlInvalid($snippet = NULL) { if ($snippet === NULL) { if (count($this->invalidSnippets) > 0) { return TRUE; } else { $queue = array($this); do { foreach (array_shift($queue)->getComponents() as $component) { if ($component instanceof IRenderable) { if ($component->isControlInvalid()) { // $this->invalidSnippets['__child'] = TRUE; // as cache return TRUE; } } elseif ($component instanceof Nette\ComponentModel\IContainer) { $queue[] = $component; } } } while ($queue); return FALSE; } } else { return isset($this->invalidSnippets[NULL]) || isset($this->invalidSnippets[$snippet]); } } /** * Returns snippet HTML ID. * @param string snippet name * @return string */ public function getSnippetId($name = NULL) { // HTML 4 ID & NAME: [A-Za-z][A-Za-z0-9:_.-]* return 'snippet-' . $this->getUniqueId() . '-' . $name; } }