Exemple #1
0
 /**
  * @backupGlobals enabled
  */
 public function test_actions()
 {
     \Difra\Debugger::disable();
     \Difra\Ajaxer::clean();
     $actions = [];
     \Difra\Ajaxer::notify('notification message');
     $actions[] = ['action' => 'notify', 'message' => 'notification message', 'lang' => ['close' => \Difra\Locales::get('notifications/close')]];
     \Difra\Ajaxer::display('<span>test</span>');
     $actions[] = ['action' => 'display', 'html' => '<span>test</span>'];
     \Difra\Ajaxer::error('error message <span>test</span>');
     $actions[] = ['action' => 'error', 'message' => 'error message &lt;span&gt;test&lt;/span&gt;', 'lang' => ['close' => \Difra\Locales::get('notifications/close')]];
     \Difra\Ajaxer::required('element');
     $actions[] = ['action' => 'require', 'name' => 'element'];
     \Difra\Ajaxer::invalid('inv1');
     $actions[] = ['action' => 'invalid', 'name' => 'inv1'];
     \Difra\Ajaxer::invalid('inv2');
     $actions[] = ['action' => 'invalid', 'name' => 'inv2'];
     \Difra\Ajaxer::status('field1', 'bad value', 'problem');
     $actions[] = ['action' => 'status', 'name' => 'field1', 'message' => 'bad value', 'classname' => 'problem'];
     \Difra\Ajaxer::redirect('/some/page');
     $actions[] = ['action' => 'redirect', 'url' => '/some/page'];
     $_SERVER['HTTP_REFERER'] = '/current/page';
     \Difra\Ajaxer::refresh();
     $actions[] = ['action' => 'redirect', 'url' => '/current/page'];
     \Difra\Ajaxer::reload();
     $actions[] = ['action' => 'reload'];
     \Difra\Ajaxer::load('someid', 'some <b>content</b>');
     $actions[] = ['action' => 'load', 'target' => 'someid', 'html' => 'some <b>content</b>'];
     \Difra\Ajaxer::close();
     $actions[] = ['action' => 'close'];
     \Difra\Ajaxer::reset();
     $actions[] = ['action' => 'reset'];
     \Difra\Envi::setUri('/current/page');
     \Difra\Ajaxer::confirm('Are you sure?');
     $actions[] = ['action' => 'display', 'html' => '<form action="/current/page" class="ajaxer"><input type="hidden" name="confirm" value="1"/>' . '<div>Are you sure?</div>' . '<input type="submit" value="' . \Difra\Locales::get('ajaxer/confirm-yes') . '"/>' . '<input type="button" value="' . \Difra\Locales::get('ajaxer/confirm-no') . '" onclick="ajaxer.close(this)"/>' . '</form>'];
     $this->assertEquals(\Difra\Ajaxer::getResponse(), json_encode(['actions' => $actions], \Difra\Ajaxer::getJsonFlags()));
     \Difra\Ajaxer::clean();
     $this->assertEquals(\Difra\Ajaxer::getResponse(), '[]');
     $this->assertFalse(\Difra\Ajaxer::hasProblem());
     \Difra\Ajaxer::reload();
     \Difra\Ajaxer::clean(true);
     $this->assertEquals(\Difra\Ajaxer::getResponse(), '[]');
     $this->assertTrue(\Difra\Ajaxer::hasProblem());
 }
Exemple #2
0
 /**
  * Process parameters and run action
  */
 private function callAction()
 {
     $method = $this->method;
     $actionMethod = Action::${$method};
     $actionReflection = new \ReflectionMethod($this, $actionMethod);
     $actionParameters = $actionReflection->getParameters();
     // action has no parameters? just call it.
     if (empty($actionParameters)) {
         call_user_func([$this, $actionMethod]);
         return;
     }
     // get named REQUEST_URI parameters list
     $namedParameters = [];
     foreach ($actionParameters as $parameter) {
         $class = $parameter->getClass() ? $parameter->getClass()->name : 'Difra\\Param\\NamedString';
         if (call_user_func(["{$class}", "getSource"]) == 'query' and call_user_func(["{$class}", "isNamed"])) {
             $namedParameters[] = $parameter->getName();
         }
     }
     // get parameter values
     $callParameters = [];
     foreach ($actionParameters as $parameter) {
         $name = $parameter->getName();
         $class = $parameter->getClass() ? $parameter->getClass()->name : 'Difra\\Param\\NamedString';
         switch (call_user_func(["{$class}", "getSource"])) {
             // query parameters
             case 'query':
                 if (call_user_func(["{$class}", "isNamed"])) {
                     // named parameter
                     if (sizeof(self::$parameters) >= 2 and self::$parameters[0] == $name) {
                         array_shift(self::$parameters);
                         if (!call_user_func(["{$class}", 'verify'], self::$parameters[0])) {
                             throw new View\HttpError(404);
                         }
                         $callParameters[$parameter->getName()] = new $class(array_shift(self::$parameters));
                     } elseif (call_user_func(["{$class}", 'isAuto'])) {
                         $callParameters[$name] = new $class();
                     } elseif (!$parameter->isOptional()) {
                         throw new View\HttpError(404);
                     } else {
                         $callParameters[$parameter->getName()] = null;
                     }
                     array_shift($namedParameters);
                 } else {
                     // unnamed parameter
                     if (!empty(self::$parameters) and (!$parameter->isOptional() or empty($namedParameters) or self::$parameters[0] != $namedParameters[0])) {
                         if (!call_user_func(["{$class}", 'verify'], self::$parameters[0])) {
                             throw new View\HttpError(404);
                         }
                         $callParameters[$name] = new $class(array_shift(self::$parameters));
                     } elseif (!$parameter->isOptional()) {
                         throw new View\HttpError(404);
                     } else {
                         $callParameters[$parameter->getName()] = null;
                     }
                 }
                 break;
                 // ajax parameters
             // ajax parameters
             case 'ajax':
                 $value = Request::getParam($name);
                 if (!is_null($value) and $value !== '') {
                     if (!call_user_func(["{$class}", "verify"], $value)) {
                         Ajaxer::invalid($name);
                         continue;
                     }
                     $callParameters[$name] = new $class($value);
                 } elseif (call_user_func(["{$class}", 'isAuto'])) {
                     $callParameters[$name] = new $class();
                 } elseif (!$parameter->isOptional()) {
                     Ajaxer::required($name);
                 } else {
                     $callParameters[$name] = null;
                 }
         }
     }
     if (!Ajaxer::hasProblem()) {
         call_user_func_array([$this, $actionMethod], $callParameters);
     }
 }