<commit_before><?php

/**
 * Created by Prowect
 * Author: <NAME>
 * Date: 17.10.2015 - 23:30.
 * Copyright Prowect.
 */
namespace Drips\Routing;

use Exception;
use Drips\HTTP\Request;
use Drips\HTTP\Response;
use Drips\Utils\OutputBuffer;

/**
 * Class Router.
 *
 * Diese Klasse dient als Routing-System. Es können URLs (sogenannte Route)
 * registriert werden und eine dazugehörige Funktion. Wird die entsprechende URL
 * aufgerufen, so wird die verknüpfte Funktion ausgeführt.
 */
class Router
{
    /**
     * Beinhaltet alle registrierten Routen, sowie deren Eigenschaften.
     *
     * @var array
     */
    protected $routes = array();

    /**
     * Beinhaltet die aktuelle Route, die vom Router gefunden beziehungsweise
     * ausgeführt wurde.
     *
     * @var string
     */
    protected $current_route;

    /**
     * Beinhaltet die aufgerufene URL.
     *
     * @var string
     */
    protected $request_uri;

    /**
     * Beinhaltet den aktuellen Pfad, unter dem sich dieses Script befindet.
     *
     * @var string
     */
    protected $current_path;

    /**
     * Beinhaltet den virtuellen Root von Drips welcher vom Router bestimmt wurde.
     * Dieser ist ausgehend vom Routing-Script.
     *
     * @var string
     */
    protected $drips_root;

    /**
     * Beinhaltet die aufgerufene URL.
     *
     * @var string
     */
    protected $url;

    /**
     * Beinhaltet die Parameter-Informationen zur entsprechenden Route.
     *
     * @var array
     */
    protected $params = array();

    /**
     * Beinhaltet den eingegangen Request.
     *
     * @var Request
     */
    protected $request;

    /**
     * Beinhaltet die Router-Instanz
     *
     * @var Router
     */
    private static $instance;

    /**
     * Gibt die Router-Instanz zurück (Singleton)
     *
     * @param Request $request
     *
     * @return Router
     */
    public static function getInstance(Request $request = null)
    {
        if(static::$instance === null){
            if($request === null){
                $request = new Request;
            }
            static::$instance = new Router($request);
        }

        return static::$instance;
    }

    /**
     * Erzeugt eine neue Router-Instanz.
     * Übergeben wird die "aufgerufene" Route. Diese kann optional angegeben werden.
     * Wird diese nicht angegeben, wird automatisch die REQUEST_URI des Servers
     * verwendet.
     *
     * @param Request $request
     */
    private function __construct(Request $request)
    {
        $this->request = $request;
        $request_uri = $request->server->get('REQUEST_URI');
        $this->current_path = dirname($request->server->get('SCRIPT_FILENAME'));
        $this->drips_root = substr($this->current_path, strlen($request->server->get('DOCUMENT_ROOT'))).'/';
        if(strlen($this->drips_root) < 1 || $this->drips_root[0] != "/"){
            $this->drips_root = "/".$this->drips_root;
        }
        $this->request_uri = substr($request_uri, strlen($this->drips_root));
        $parts = explode("#", $this->request_uri);
        $this->request_uri = $parts[0];
        $parts = explode("?", $this->request_uri);<commit_msg>Bugfix public-Directory<commit_after><?php

/**
 * Created by Prowect
 * Author: <NAME>
 * Date: 17.10.2015 - 23:30.
 * Copyright Prowect.
 */
namespace Drips\Routing;

use Exception;
use Drips\HTTP\Request;
use Drips\HTTP\Response;
use Drips\Utils\OutputBuffer;

/**
 * Class Router.
 *
 * Diese Klasse dient als Routing-System. Es können URLs (sogenannte Route)
 * registriert werden und eine dazugehörige Funktion. Wird die entsprechende URL
 * aufgerufen, so wird die verknüpfte Funktion ausgeführt.
 */
class Router
{
    /**
     * Beinhaltet alle registrierten Routen, sowie deren Eigenschaften.
     *
     * @var array
     */
    protected $routes = array();

    /**
     * Beinhaltet die aktuelle Route, die vom Router gefunden beziehungsweise
     * ausgeführt wurde.
     *
     * @var string
     */
    protected $current_route;

    /**
     * Beinhaltet die aufgerufene URL.
     *
     * @var string
     */
    protected $request_uri;

    /**
     * Beinhaltet den aktuellen Pfad, unter dem sich dieses Script befindet.
     *
     * @var string
     */
    protected $current_path;

    /**
     * Beinhaltet den virtuellen Root von Drips welcher vom Router bestimmt wurde.
     * Dieser ist ausgehend vom Routing-Script.
     *
     * @var string
     */
    protected $drips_root;

    /**
     * Beinhaltet die aufgerufene URL.
     *
     * @var string
     */
    protected $url;

    /**
     * Beinhaltet die Parameter-Informationen zur entsprechenden Route.
     *
     * @var array
     */
    protected $params = array();

    /**
     * Beinhaltet den eingegangen Request.
     *
     * @var Request
     */
    protected $request;

    /**
     * Beinhaltet die Router-Instanz
     *
     * @var Router
     */
    private static $instance;

    /**
     * Gibt die Router-Instanz zurück (Singleton)
     *
     * @param Request $request
     *
     * @return Router
     */
    public static function getInstance(Request $request = null)
    {
        if(static::$instance === null){
            if($request === null){
                $request = new Request;
            }
            static::$instance = new Router($request);
        }

        return static::$instance;
    }

    /**
     * Erzeugt eine neue Router-Instanz.
     * Übergeben wird die "aufgerufene" Route. Diese kann optional angegeben werden.
     * Wird diese nicht angegeben, wird automatisch die REQUEST_URI des Servers
     * verwendet.
     *
     * @param Request $request
     */
    private function __construct(Request $request)
    {
        $this->request = $request;
        $request_uri = $request->server->get('REQUEST_URI');
        $this->current_path = dirname($request->server->get('SCRIPT_FILENAME'));
        $this->drips_root = substr($this->current_path, strlen($request->server->get('DOCUMENT_ROOT'))).'/';
        if(strlen($this->drips_root) < 1 || $this->drips_root[0] != "/"){
            $this->drips_root = "/".$this->drips_root;
        }
        $this->drips_root = substr($this->drips_root, 0, strlen($this->drips_root) - strlen('/public'));
        $this->request_uri = substr($request_uri, strlen($this->drips_root));
        $parts = explode("#", $this->request_uri);
        $this->request_uri = $parts[0];
        $parts = explode("?", $this->request_uri);
{'fraction_non_alphanumeric': 0.12621509026384817, 'fraction_numerical': 0.00478321246721185, 'mean_word_length': 2.2820253164556963, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 46, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6090457', 'n_tokens_mistral': 2101, 'n_tokens_neox': 2100, 'n_words': 487}