93 lines
2.4 KiB
PHP
93 lines
2.4 KiB
PHP
<?php
|
|
|
|
require_once 'core/functions.php';
|
|
// Ïåðåìåñòèòü â ôèëüòðû!!
|
|
|
|
/**
|
|
* Âûáîð ìàêåòà ñòðàíèöû.
|
|
* Âûáîð îôîðìëåíèÿ ñòðàíèöû îñóùåñòâëÿåòñÿ åñëè áûëî ñîâïàäåíèå ñ êàêèì ëèáî óñëîâèåì
|
|
*/
|
|
class LayoutManager extends Filter
|
|
{
|
|
// Ìàññèâ óñëîâèé ñ èõ ìàêåòàìè
|
|
protected $condition = array();
|
|
|
|
/**
|
|
* Ôóíêöèÿ êîòîðàÿ äîáàâëÿåò óñëîâèå äëÿ ïðîâåðêè ïàðàìåòðîâ $_GET
|
|
* @param $get array() | true Àññîöèàòèâíûé ìàññèâ êëþ÷åé è çíà÷åíèé äëÿ $_GET
|
|
*
|
|
* @example
|
|
* addConditionGet(array('module' => 'personal'), 'personal')
|
|
* addConditionGet(array('module' => 'login'), 'login')
|
|
*/
|
|
public function addConditionGet($get, Filter $layout)
|
|
{
|
|
$this->addCondition(rcurry(array($this, 'checkGet'), $get), $layout);
|
|
}
|
|
|
|
/**
|
|
* Óñëîâèå äëÿ àÿêñ çàïðîñîâ. Òîæå ñàìîå ÷òî è addConditionGet íî åùå ïðîâåðÿåòñÿ ÿâëÿåòñÿ ëè çàïðîñ ajax
|
|
*/
|
|
public function addConditionXHR($get, Filter $layout)
|
|
{
|
|
$this->addCondition(rcurry(array($this, 'checkXHR'), $get), $layout);
|
|
}
|
|
|
|
public function checkGet($request, $get)
|
|
{
|
|
if (is_array($get)) {
|
|
foreach ($get as $key => $value) {
|
|
if ($request->get($key) != $value) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function checkXHR($request, $get)
|
|
{
|
|
return $request->isAjax() && $this->checkGet($request, $get);
|
|
}
|
|
|
|
/**
|
|
* Äîáàâëÿåò åñëîâèå â îáùåì âèäå
|
|
* @parma $get function(HttpRequest) Ôóíêöèÿ
|
|
* @parma $layout Layout Ìàêåò
|
|
*/
|
|
public function addCondition($get, Filter $layout)
|
|
{
|
|
$this->condition [] = array($get, $layout);
|
|
}
|
|
|
|
/**
|
|
* Âûáèðàåò è ïðèìåíÿåò ìàêåò äëÿ ñòðàíèöû
|
|
*/
|
|
public function execute(Collection $request)
|
|
{
|
|
foreach ($this->condition as $condition) {
|
|
if (call_user_func($condition[0], $request)) {
|
|
$layout = $condition[1];
|
|
$view = $layout->execute($request);
|
|
|
|
if ($view instanceof View_Composite) {
|
|
echo $view->render();
|
|
} else {
|
|
echo $view;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ñàìûé ïðîñòîé ìàêåò
|
|
*/
|
|
class LayoutNone extends Filter
|
|
{
|
|
function execute(Collection $request)
|
|
{
|
|
return $this->processor->execute($request);
|
|
}
|
|
}
|