Пример #1
0
 /**
  * Set Json File
  *
  * @param string|array $a_json
  * @return string
  */
 public function set_json_file($a_json)
 {
     $options = 0;
     $get = Request::get();
     if (isset($get['json_pretty'])) {
         $options |= JSON_PRETTY_PRINT;
     }
     if (is_string($a_json)) {
         // Verify if valid json array
         //$result = json_decode($a_json);
         json_decode($a_json);
         if (json_last_error() === JSON_ERROR_NONE) {
             $this->_json_file = $a_json;
             $return = $a_json;
         } else {
             $return = null;
         }
     } else {
         if (is_object($a_json)) {
             $this->_json_file = json_encode($a_json, $options);
             $return = $this->_json_file;
         } else {
             if (is_array($a_json)) {
                 $this->_json_file = json_encode($a_json, $options);
                 $return = $this->_json_file;
             } else {
                 $return = null;
             }
         }
     }
     return $return;
 }
Пример #2
0
/**
 * Redirect to another end point of the application
 * using a full query string
 * 
 * @param string $a_request
 * @param integer $a_protocol
 * @return Apine\MVC\RedirectionView
 */
function apine_internal_redirect($a_request, $a_protocol = APINE_PROTOCOL_DEFAULT)
{
    $new_view = new RedirectionView();
    $protocol = isset(Request::server()['SERVER_PROTOCOL']) ? Request::server()['SERVER_PROTOCOL'] : 'HTTP/1.0';
    if (!empty(Request::get()['request']) && $a_request == Request::get()['request']) {
        $new_view->set_header_rule($protocol . ' 302 Moved Temporarily');
    }
    // Remove Trailing slash
    $request = trim($a_request, '/');
    $new_view->set_header_rule('Location: ' . URLHelper::path($request, $a_protocol));
    return $new_view;
}
Пример #3
0
 /**
  * Append a path to the current absolute path
  * 
  * @param string $base
  * 			Base url
  * @param string $path
  *        String to append
  * @param integer $protocol
  *        Protocol to append to the path
  * @return string
  */
 private static function write_url($base, $path, $protocol)
 {
     if (isset(Request::get()['language'])) {
         if (Request::get()['language'] == Translator::language()->code || Request::get()['language'] == Translator::language()->code_short) {
             $language = Request::get()['language'];
         } else {
             $language = Translator::language()->code_short;
         }
         return self::protocol($protocol) . $base . '/' . $language . '/' . $path;
     } else {
         return self::protocol($protocol) . $base . '/' . $path;
     }
 }
Пример #4
0
 /**
  * Detect the best language according to language parameter in request
  *
  * @return Translation
  */
 private static function request_best()
 {
     $request_get = Request::get();
     $return = null;
     if (isset($request_get['language'])) {
         $directory = new TranslationDirectory();
         $return = $directory->is_exist_language($request_get['language']);
     }
     return $return;
 }
Пример #5
0
 /**
  * Error view generation
  *
  * @param string|integer $a_code
  * @param string $a_message
  * @param Exception $a_exception
  * @return MVC\View
  */
 public function custom($a_code, $a_message, Exception $a_exception = null)
 {
     $this->_view->set_param('code', $a_code);
     $this->_view->set_param('message', $a_message);
     if (Core\Request::is_api_call() || Core\Request::is_ajax()) {
         $this->_view->set_param('request', Core\Request::get()['request']);
     } else {
         $this->_view->set_title($a_message);
         $this->_view->set_view('error');
     }
     if ($a_exception !== null && !is_array($a_exception)) {
         $this->_view->set_param('file', $a_exception->getFile());
         $this->_view->set_param('line', $a_exception->getLine());
         if (Application\Application::get_instance()->get_mode() === APINE_MODE_DEVELOPMENT) {
             $this->_view->set_param('trace', $a_exception->getTraceAsString());
         }
     }
     if ($this->is_http_code($a_code)) {
         $this->_view->set_response_code($a_code);
     } else {
         $this->_view->set_response_code(500);
     }
     return $this->_view;
 }
Пример #6
0
 /**
  * Run the application
  *
  * @param int $a_runtime Runtime mode
  */
 public function run($a_runtime = APINE_RUNTIME_HYBRID)
 {
     if ($a_runtime !== APINE_RUNTIME_HYBRID && $a_runtime !== APINE_RUNTIME_API && $a_runtime !== APINE_RUNTIME_APP) {
         $a_runtime = APINE_RUNTIME_HYBRID;
     }
     if ($this->use_composer && !strstr($this->apine_folder, 'vendor/youmy001')) {
         require_once 'vendor/autoload.php';
     }
     /**
      * Main Execution
      */
     try {
         // Make sure application runs with a valid execution mode
         if ($this->mode !== APINE_MODE_DEVELOPMENT && $this->mode !== APINE_MODE_PRODUCTION) {
             throw new GenericException('Invalid Execution Mode \\"' . $this->mode . '"', 418);
         }
         if (!file_exists('.htaccess') || !file_exists('config.ini')) {
             $protocol = isset(Request::server()['SERVER_PROTOCOL']) ? Request::server()['SERVER_PROTOCOL'] : 'HTTP/1.0';
             header($protocol . ' 503 Service Unavailable');
             die("Critical Error : Framework Installation Not Completed");
         }
         if (!Request::is_api_call() && (!empty(Request::get()['request']) && Request::get()['request'] != '/')) {
             $request = Request::get()['request'];
         } else {
             if (!Request::is_api_call()) {
                 $request = '/index';
             } else {
                 $request = Request::get()['request'];
             }
         }
         // Verify is the protocol is allowed
         if (Request::is_https() && !$this->use_https) {
             apine_internal_redirect($request, APINE_PROTOCOL_HTTP);
         }
         if (is_null($this->config)) {
             $this->config = new Config('config.ini');
         }
         // Find a timezone for the user
         // using geoip library and its local database
         if (function_exists('geoip_open')) {
             $gi = geoip_open($this->apine_folder . "/GeoLiteCity.dat", GEOIP_STANDARD);
             $record = GeoIP_record_by_addr($gi, $_SERVER['REMOTE_ADDR']);
             //$record = geoip_record_by_addr($gi, "24.230.215.89");
             //var_dump($record);
             if (isset($record)) {
                 $timezone = get_time_zone($record->country_code, $record->region != '' ? $record->region : 0);
             } else {
                 if (!is_null($this->config->get('dateformat', 'timezone'))) {
                     $timezone = $this->config->get('dateformat', 'timezone');
                 } else {
                     $timezone = 'America/New_York';
                 }
             }
             date_default_timezone_set($timezone);
         } else {
             if (!is_null($this->config->get('dateformat', 'timezone'))) {
                 date_default_timezone_set($this->config->get('dateformat', 'timezone'));
             }
         }
         // If a user is logged in; redirect to the allowed protocol
         // Secure session only work when Use HTTPS is set to "yes"
         if (SessionManager::is_logged_in()) {
             if ($this->secure_session) {
                 if (!Request::is_https() && $this->use_https) {
                     die(apine_internal_redirect($request, APINE_PROTOCOL_HTTPS)->draw());
                 } else {
                     if (Request::is_https() && !$this->use_https) {
                         die(apine_internal_redirect($request, APINE_PROTOCOL_HTTP)->draw());
                     }
                 }
             } else {
                 if (Request::is_https()) {
                     die(apine_internal_redirect($request, APINE_PROTOCOL_HTTP)->draw());
                 }
             }
         }
         unset($request);
         if (!Request::is_api_call()) {
             if ($a_runtime == APINE_RUNTIME_API) {
                 throw new GenericException('Web Application calls are not implemented', 501);
             }
             Engine::instance()->add_rule(new Rule('apine_data_loop', 'loopdata', '<?php foreach ($this->data as $element): $this->wrap($element); ?>'));
             Engine::instance()->add_rule(new Rule('apine_config', 'apine_config:(\\w+),(\\w+)', '<?php echo \\Apine\\Application\\Application::get_instance()->get_config()->get(\'$1\',\'$2\');?>'));
             Engine::instance()->add_rule(new Rule('apine_translate', 'apine_translate:(\\w+),(\\w+)', '<?php echo \\Apine\\Application\\Translator::get_instance()->translate(\'$1\',\'$2\');?>'));
             Engine::instance()->add_rule(new Rule('apine_format_date', 'apine_format_date:(\\w+),(\\w+)', '<?php echo \\Apine\\Application\\Translator::get_instance()->translation()->get_locale()->format_date("$1", Apine\\Application\\Translator::get_instance()->translation()->get_locale()->$2());?>'));
             Engine::instance()->add_rule(new Rule('apine_format_date_array', 'apine_format_date:(\\w+)\\[(\\w+)\\],(\\w+)', '<?php echo \\Apine\\Application\\Translator::get_instance()->translation()->get_locale()->format_date($this->data[\'$1\'][\'$2\'], Apine\\Application\\Translator::get_instance()->translation()->get_locale()->$3());?>'));
             Engine::instance()->add_rule(new Rule('apine_language', 'apine_language:(code|short|name)', '<?php switch("$1"){case "code": echo Apine\\Application\\Translator::get_instance()->translation()->get("language","code");break;case "short": echo Apine\\Application\\Translator::get_instance()->translation()->get("language","shortcode");break;case "name": echo Apine\\Application\\Translator::get_instance()->translation()->get("language","name");break;}?>'));
             Engine::instance()->add_rule(new Rule('apine_execution', 'apine_execution_time', '<?php echo apine_execution_time();?>'));
             Engine::instance()->add_rule(new Rule('apine_version', 'apine_version:(framework|application)', '<?php echo \\Apine\\Application\\Application::get_instance()->get_version()->$1();?>'));
             Engine::instance()->add_rule(new Rule('apine_url', 'apine_url_(path|resource):(([^\\/\\s]+\\/)?([^\\{\\}]*))', '<?php echo \\Apine\\MVC\\URLHelper::get_instance()->$1("$2");?>'));
             Engine::instance()->add_rule(new Rule('apine_url_secure', 'apine_url_(path|resource)_secure:(([^\\/\\s]+\\/)?([^\\{\\}]*))', '<?php echo Apine\\MVC\\URLHelper::get_instance()->$1("$2", APINE_PROTOCOL_HTTPS);?>'));
             Engine::instance()->add_rule(new Rule('apine_view_apply_meta', 'apine_apply_meta', '<?php echo Apine\\MVC\\HTMLView::apply_meta($data["apine_view_metatags"]);?>'));
             Engine::instance()->add_rule(new Rule('apine_view_apply_scripts', 'apine_apply_scripts', '<?php echo Apine\\MVC\\HTMLView::apply_scripts($data["apine_view_scripts"]);?>'));
             Engine::instance()->add_rule(new Rule('apine_view_apply_stylesheets', 'apine_apply_stylesheets', '<?php echo Apine\\MVC\\HTMLView::apply_stylesheets($data["apine_view_stylesheets"]);?>'));
             Engine::instance()->add_rule(new Rule('apine_user_has_group', 'if:apine_user\\[groups\\]==([0-9]+)', '<?php if (\\Apine\\Session\\SessionManager::get_user()->has_group($1)) : ?>'));
             Engine::instance()->add_rule(new Rule('apine_user_group', 'apine_user\\[groups\\]\\[([0-9]+)\\]', '<?php echo (\\Apine\\Session\\SessionManager::get_user()->has_group($1)) : \\Apine\\Session\\SessionManager::get_user()->get_group()->get_item($1)->get_name() : ""; ?>'));
             if (!empty(Request::get()['request']) && Request::get()['request'] != '/') {
                 $request = Request::get()['request'];
             } else {
                 $request = '/index';
             }
             $router = new WebRouter($this->routes_path, $this->routes_type);
         } else {
             if ($a_runtime == APINE_RUNTIME_APP) {
                 throw new GenericException('RESTful API calls are not implemented', 501);
             }
             $request = Request::get()['request'];
             $router = new APIRouter();
         }
         // Fetch and execute the route
         $route = $router->route($request);
         $view = $router->execute($route->controller, $route->action, $route->args);
         // Draw the output is a view is returned
         if (!is_null($view) && is_a($view, 'Apine\\MVC\\View')) {
             $view->draw();
         } else {
             throw new GenericException('Empty Apine View', 488);
         }
     } catch (GenericException $e) {
         // Handle application errors
         try {
             $error = new Controllers\ErrorController();
             if ($this->mode == APINE_MODE_PRODUCTION) {
                 if ($error_name = $error->method_for_code($e->getCode())) {
                     $view = $error->{$error_name}();
                 } else {
                     $view = $error->server();
                 }
             } else {
                 $view = $error->custom($e->getCode(), $e->getMessage(), $e);
             }
             $view->draw();
         } catch (Exception $e2) {
             var_dump($e2->getTraceAsString());
             $protocol = isset(Request::server()['SERVER_PROTOCOL']) ? Request::server()['SERVER_PROTOCOL'] : 'HTTP/1.0';
             header($protocol . ' 500 Internal Server Error');
             die("Critical Error : " . $e->getMessage());
         }
     } catch (Exception $e) {
         // Handle PHP exceptions
         try {
             $error = new Controllers\ErrorController();
             $view = $error->custom(500, $e->getMessage(), $e);
             $view->draw();
         } catch (Exception $e2) {
             $protocol = isset(Request::server()['SERVER_PROTOCOL']) ? Request::server()['SERVER_PROTOCOL'] : 'HTTP/1.0';
             header($protocol . ' 500 Internal Server Error');
             die("Critical Error : " . $e->getMessage());
         }
     }
 }
Пример #7
0
require_once $apine_folder . '/Autoloader.php';
$loader = new Apine\Autoloader();
$loader->add_module('Apine', $apine_folder);
$loader->add_module('Apine\\Controllers\\System', $apine_folder . '/Controllers');
$loader->register();
use Apine\Core\Request;
use Apine\Exception\GenericException;
use Apine\Controllers\System as Controllers;
$apine = new Apine\Application\Application();
$apine->set_mode(APINE_MODE_DEVELOPMENT);
try {
    if (count(Request::get()) === 0) {
        $controller = new Controllers\InstallController();
        $view = $controller->index();
    } else {
        $args = explode("/", Request::get()['request']);
        array_shift($args);
        if (count($args) > 1) {
            $controller = $args[0];
            array_shift($args);
            $action = $args[0];
            array_shift($args);
        } else {
            $controller = $args[0];
            array_shift($args);
            $action = "index";
        }
        // Add post arguments to args array
        if (Request::get_request_type() != "GET") {
            $args = array_merge($args, Request::post());
        }