Wrap text
Report abuse
|
|
array(),
'only' => array(),
'except' => array(),
'if' => array(),
'unless' => array()
);
$ifs = $unlesses = $methods = array();
foreach ($callbacks as $array) {
$array = am($defaults, $array);
foreach ($array as $key => $value) {
if (!is_array($value)) {
$array[$key] = array($value);
}
}
$ok = true;
foreach ($array['if'] as $if) {
if (!array_key_exists($if, $ifs)) {
$ifs[$if] = $this->dispatchMethod("_$if");
}
$ok = $ok && $ifs[$if];
if (!$ok) {
break;
}
}
foreach ($array['unless'] as $unless) {
if (!array_key_exists($unless, $unlesses)) {
$unlesses[$unless] = $this->dispatchMethod("_$unless");
}
$ok = $ok && !$unlesses[$unless];
if (!$ok) {
break;
}
}
if ($ok) {
if (!empty($array['only'])) {
if (!in_array($this->action, $array['only'])) {
$ok = false;
}
} elseif (!empty($array['except'])) {
if (in_array($this->action, $array['except'])) {
$ok = false;
}
}
}
if ($ok) {
$methods = am($methods, $array['methods']);
}
}
foreach (array_unique($methods) as $method) {
$this->dispatchMethod("_$method");
}
}
function __mergeVars() {
$pluginName = Inflector::camelize($this->plugin);
$pluginController = $pluginName . 'AppController';
if (is_subclass_of($this, 'AppController') || is_subclass_of($this, $pluginController)) {
$appVars = get_class_vars('AppController');
$uses = $appVars['uses'];
$merge = array('beforeFilter', 'afterFilter', 'beforeRender');
$plugin = null;
if (!empty($this->plugin)) {
$plugin = $pluginName . '.';
if (!is_subclass_of($this, $pluginController)) {
$pluginController = null;
}
} else {
$pluginController = null;
}
if ($pluginController) {
$pluginVars = get_class_vars($pluginController);
}
foreach ($merge as $var) {
$appVar = (isset($appVars[$var]) && !empty($appVars[$var]) && is_array($appVars[$var])) ? $appVars[$var] : array();
$pluginVar = (isset($pluginVars[$var]) && !empty($pluginVars[$var]) && is_array($pluginVars[$var])) ? $pluginVars[$var] : array();
$thisVar = (isset($this->{$var}) && !empty($this->{$var}) && is_array($this->{$var})) ? $this->{$var} : array();
$this->{$var} = am($appVar, $pluginVar, $thisVar);
}
}
parent::__mergeVars();
}
function beforeFilter() {
if (!empty($this->beforeFilter)) {
$this->_callbacks($this->beforeFilter);
}
}
function afterFilter() {
if (!empty($this->afterFilter)) {
$this->_callbacks($this->afterFilter);
}
}
function beforeRender() {
if (!empty($this->beforeRender)) {
$this->_callbacks($this->beforeRender);
}
}
}
?>
|