Example #1
0
 public function handle_request()
 {
     $request = new Request();
     $request_path = $request->request_path();
     $controller = null;
     if ($initial_path = $request_path[0]) {
         foreach ($this->api_paths as $url_component => $class_name) {
             if ($url_component === $initial_path) {
                 $controller = new $class_name();
                 break;
             }
         }
     }
     $request_result = null;
     $output_handler = new JSONOutputHandler();
     if ($controller) {
         $request_result = $controller->handle_request($request);
         if ($request_result) {
             if (is_array($request_result)) {
                 $output_handler->return_data($request_result);
             } else {
                 $output_handler->server_return_success();
             }
         } else {
             $output_handler->server_return_not_found();
         }
     } else {
         $output_handler->server_return_not_found();
     }
 }
 public static function parse()
 {
     if (!self::$parsed) {
         // Request String speichern
         self::$request_uri = $_SERVER['REQUEST_URI'];
         // Prüfen, ob HTTPs verwendet wird
         self::$request_secure = false;
         if (isset($_SERVER['HTTPS'])) {
             if ($_SERVER['HTTPS'] != '') {
                 self::$request_secure = true;
             }
         }
         // Den Teil, der von interesse ist, extrahieren
         // Wenn die baseUrl z.B. http://www.pixelproduction.de/cms/ lautet,
         // und der entsprechende Request-URI /cms/admin/bla/,
         // dann schneiden wir das /cms am Anfang heraus, da uns ja nur das /admin/bla/ interessiert...
         // So kann man das CMS in einem beliebigen Unter-Verzeichnis auf dem Server installieren
         // und alles funktioniert trotzdem :-)
         $base_request_string = self::extractRequestUri(Config::get()->baseUrl);
         if (UTF8String::substr(self::$request_uri, 0, UTF8String::strlen($base_request_string)) != $base_request_string) {
             die('Fehlerhafter REQUEST_URI oder fehlerhafte Konfiguration. Bitte wenden Sie sich an den Administrator dieser Website.');
         } else {
             self::$request_uri = UTF8String::substr(self::$request_uri, UTF8String::strlen($base_request_string), UTF8String::strlen(self::$request_uri));
         }
         // Die URI in ihre bestandteile (Pfad, Parameter, Anker) zerlegen
         // Laut PHP Doku muss es eine absolute, vollständige URL sein, ist aber egal, weil wir Protokoll und Server sowieso ignorieren,
         // also nehmen wir einfach irgeneinen Server an...
         $url = parse_url('http://www.pixelproduction.de/' . self::$request_uri);
         // Den Pfad auslesen und in seine Teile zerlegen und in Array ablegen
         self::$request_path = array();
         if (isset($url['path'])) {
             $url_path = trim($url['path'], '/');
             if ($url_path != '') {
                 self::$request_path = explode('/', $url_path);
             }
         }
         // ggf. die GET-Parameter in Array ablegen
         self::$request_parameters = array();
         if (isset($url['query'])) {
             $query = explode('&', $url['query']);
             if (is_array($query)) {
                 foreach ($query as $parameter) {
                     $key_value_pair = explode('=', $parameter);
                     if (is_array($key_value_pair)) {
                         if (isset($key_value_pair[0])) {
                             self::$request_parameters[$key_value_pair[0]] = '';
                             if (isset($key_value_pair[1])) {
                                 self::$request_parameters[$key_value_pair[0]] = $key_value_pair[1];
                             }
                         }
                     }
                 }
             }
         }
         // Herausfinden, ob das Frontend oder das Backend angefordert wird
         self::$front_end = true;
         if (count(self::$request_path) > 0) {
             // Wenn der erste Teil nach der Basis-URL "admin" ist, dann geht's zum Back-End, ansonsten zum Front-End
             $firstPathSegment = strtolower(self::$request_path[0]);
             self::$front_end = !in_array($firstPathSegment, array('admin', 'pm:api'));
             if ($firstPathSegment == 'admin') {
                 // Das "admin" braucht man nicht als ersten Teil, da man ja dann sowieso weiß, dass man sich im Backend befindet...
                 array_splice(self::$request_path, 0, 1);
             }
             if ($firstPathSegment == 'pm:api') {
                 self::$request_path[0] = 'api';
             }
         }
         self::$parsed = true;
     }
 }