Commit 34268c722b4510054c371830319afcea085728ca

Authored by Eriksen Costa
1 parent e72fa263
Exists in master

Adicionados novos métodos para {{{Core_Controller_Page_Abtract}}}:

 * {{{append|prependOutput()}}}: permitem adicionar ou prefixar o conteúdo HTML a ser gerado por um {{{Core_Controller_Page_Abtract}}}, dando mais flexibilidade para a inclusão de JavaScript ou outros elementos HTML;
 * Algumas classes subclassificam {{{clsConfig}}}, ao qual não está na árvore de herança de {{{Core_Controller_Page_Abstract}}}. As outras classes ({{{clsCadastro}}}, {{{clsDetalhe}}} e {{{clsListagem}}} além dos page controllers específicos) podem usar os métodos sem problemas;
 * O conteúdo adicionado via estes métodos não são incluídos quando a página usa {{{$renderMenu = FALSE}}}. Isso ocorre em poucos casos no i-Educar, então verifique antes se o arquivo em que está trabalhando desabilita o menu (geralmente em arquivos que abram janelas modais ou pop-ups).
ieducar/intranet/include/clsBase.inc.php
... ... @@ -474,11 +474,26 @@ class clsBase extends clsConfig
474 474 return $retorno;
475 475 }
476 476  
  477 + /**
  478 + * @see Core_Page_Controller_Abstract#getAppendedOutput()
  479 + * @see Core_Page_Controller_Abstract#getPrependedOutput()
  480 + */
477 481 function MakeBody()
478 482 {
479 483 $corpo = '';
480 484 foreach ($this->clsForm as $form) {
481 485 $corpo .= $form->RenderHTML();
  486 +
  487 + // Prepend output.
  488 + if (method_exists($form, 'getPrependedOutput')) {
  489 + $corpo = $form->getPrependedOutput() . $corpo;
  490 + }
  491 +
  492 + // Append output.
  493 + if (method_exists($form, 'getAppendedOutput')) {
  494 + $corpo = $corpo . $form->getAppendedOutput();
  495 + }
  496 +
482 497 if (is_string($form->prog_alert) && $form->prog_alert) {
483 498 $this->prog_alert .= $form->prog_alert;
484 499 }
... ... @@ -733,7 +748,7 @@ class clsBase extends clsConfig
733 748 $saida_geral = $this->MakeHeadHtml();
734 749  
735 750 // @todo else ruim, colocar abre e fecha colchetes ao redor de foreach.
736   - if($this->renderMenu) {
  751 + if ($this->renderMenu) {
737 752 $saida_geral .= $this->MakeBody();
738 753 }
739 754 else {
... ...
ieducar/lib/Core/Controller/Page/Abstract.php
... ... @@ -130,6 +130,11 @@ abstract class Core_Controller_Page_Abstract
130 130 public $url_cancelar = NULL;
131 131  
132 132 /**
  133 + * @var array
  134 + */
  135 + private $_output = array();
  136 +
  137 + /**
133 138 * Construtor.
134 139 */
135 140 public function __construct()
... ... @@ -384,6 +389,70 @@ abstract class Core_Controller_Page_Abstract
384 389 }
385 390  
386 391 /**
  392 + * Adiciona conteúdo HTML após o conteúdo gerado por um
  393 + * Core_Controller_Page_Abstract.
  394 + *
  395 + * @param string $data A string HTML a ser adiciona após o conteúdo.
  396 + * @return Core_Controller_Page_Abstract Provê interface fluída
  397 + */
  398 + public function appendOutput($data)
  399 + {
  400 + if (!empty($data) && is_string($data)) {
  401 + $this->_output['append'][] = $data;
  402 + }
  403 + return $this;
  404 + }
  405 +
  406 + /**
  407 + * Retorna todo o conteúdo acrescentado como uma string.
  408 + * @return string O conteúdo a ser acrescentado separado com uma quebra de linha.
  409 + * @see clsBase#MakeBody()
  410 + */
  411 + public function getAppendedOutput()
  412 + {
  413 + return $this->_getOutput('append');
  414 + }
  415 +
  416 + /**
  417 + * Adiciona conteúdo HTML antes do conteúdo HTML gerado por um
  418 + * Core_Controller_Page_Abstract.
  419 + *
  420 + * @param string $data A string HTML a ser adiciona após o conteúdo.
  421 + * @return Core_Controller_Page_Abstract Provê interface fluída
  422 + */
  423 + public function prependOutput($data)
  424 + {
  425 + if (!empty($data) && is_string($data)) {
  426 + $this->_output['prepend'][] = $data;
  427 + }
  428 + return $this;
  429 + }
  430 +
  431 + /**
  432 + * Retorna todo o conteúdo prefixado como uma string.
  433 + * @return string O conteúdo a ser prefixado separado com uma quebra de linha.
  434 + * @see clsBase#MakeBody()
  435 + */
  436 + public function getPrependedOutput()
  437 + {
  438 + return $this->_getOutput('prepend');
  439 + }
  440 +
  441 + /**
  442 + * Retorna o conteúdo a ser adicionado a saída de acordo com a região.
  443 + * @param string $pos Região para retornar o conteúdo a ser adicionado na saída.
  444 + * @return string|NULL Conteúdo da região separado por uma quebra de linha ou
  445 + * NULL caso a região não exista.
  446 + */
  447 + private function _getOutput($pos = 'prepend')
  448 + {
  449 + if (isset($this->_output[$pos])) {
  450 + return implode(PHP_EOL, $this->_output[$pos]);
  451 + }
  452 + return NULL;
  453 + }
  454 +
  455 + /**
387 456 * @see CoreExt_Controller_Interface#dispatch()
388 457 */
389 458 public function dispatch()
... ...
ieducar/tests/unit/Core/Controller/Page/AbstractTest.php
... ... @@ -163,4 +163,38 @@ class Core_Controller_Page_AbstractTest extends UnitBaseTest
163 163 {
164 164 $this->_pageController->getBaseTitulo();
165 165 }
166   -}
167 166 \ No newline at end of file
  167 +
  168 + public function testAppendOutput()
  169 + {
  170 + $this->_pageController->appendOutput('string 1')
  171 + ->appendOutput('string 2');
  172 +
  173 + $this->assertEquals(
  174 + 'string 1' . PHP_EOL . 'string 2',
  175 + $this->_pageController->getAppendedOutput(),
  176 + '->getAppendedOutput() retorna o conteúdo a ser adicionado como uma string separada por quebra de linha'
  177 + );
  178 + }
  179 +
  180 + public function testGetApendedOutputRetornaNullQuandoNaoExisteConteudoASerAdicionado()
  181 + {
  182 + $this->assertNull($this->_pageController->getAppendedOutput());
  183 + }
  184 +
  185 + public function testPrependOutput()
  186 + {
  187 + $this->_pageController->prependOutput('string 1')
  188 + ->prependOutput('string 2');
  189 +
  190 + $this->assertEquals(
  191 + 'string 1' . PHP_EOL . 'string 2',
  192 + $this->_pageController->getPrependedOutput(),
  193 + '->getPrependedOutput() retorna o conteúdo a ser adicionado como uma string separada por quebra de linha'
  194 + );
  195 + }
  196 +
  197 + public function testGetPrependedOutputRetornaNullQuandoNaoExisteConteudoASerAdicionado()
  198 + {
  199 + $this->assertNull($this->_pageController->getPrependedOutput());
  200 + }
  201 +}
... ...