public function execute()
 {
     $session = \Libs\Session::current();
     // Include debug info:
     $session->actors()->{'info'} = 'Actors\\Info';
     parent::execute();
 }
 public function execute()
 {
     $session = \Libs\Session::current();
     $session->headers()->{'content-type'} = 'application/xml';
     $session->actors()->{'create'} = 'Actors\\Create';
     parent::execute();
 }
    public function execute(\Libs\DOM\Element $element)
    {
        parent::execute($element);
        $session = \Libs\Session::current();
        $db = $session->app()->database();
        $id = trim(isset($session->parameters()->{'data'}) ? $session->parameters()->{'data'} : '');
        // Ignore null values:
        if ($id == '') {
            exit;
        }
        // Lookup the URL of the id:
        $query = '
				SELECT url
				FROM urls
				WHERE id = "%s"
				LIMIT 1
			';
        $data = $db->query($query, $id);
        // Redirect home if the URL doesn't exist:
        if ($data === false) {
            header('Location: ' . SERVER_URL);
            exit;
        }
        // Increment the number of hits for this id:
        $query = '
				UPDATE urls
				SET hits = 1 + (
						SELECT hits
						FROM urls
						WHERE id = "%1$s"
					)
				WHERE id = "%1$s"
			';
        $db->exec($query, $id);
        // Record this hit:
        $address = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
        $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
        $agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
        $query = '
				INSERT INTO hits (
					id, address, timestamp, referrer, agent
				)
				VALUES (
					"%s", "%s", "%s", "%s", "%s"
				)
			';
        $db->exec($query, $id, $address, gmdate('U'), $referrer, $agent);
        // Make sure the URL begins with a protocol:
        if (!preg_match('%^(https?|ftp)://%', $data->url)) {
            $data->url = 'http://' . $data->url;
        }
        // Redirect to the URL:
        header('Location: ' . $data->url);
    }
 public function __set($name, $value)
 {
     if (!$value instanceof \Libs\Actor) {
         // Relative to current App:
         if (strpos($value, '\\') !== 0) {
             $app = \Libs\Session::current()->app();
             $dir = $app->dir();
             $namespace = $app->namespace();
             $file = sprintf('%s/%s.php', $dir, strtr($value, '\\_', '/.'));
             $class = sprintf('\\%s\\%s', $namespace, $value);
             require_once $file;
             $value = $class::instance();
         }
     }
     $this->values[$name] = $value;
     $this->iterator = new \ArrayIterator($this->values);
 }
 public function execute()
 {
     $session = \Libs\Session::current();
     // Create sub session to render the request:
     $simulate = \Libs\Session::open();
     // Copy Apps:
     foreach ($session->apps() as $key => $app) {
         if ($app instanceof \Apps\Debug\App) {
             continue;
         }
         $simulate->registerApp($app);
         unset($session->apps()->{$key});
     }
     foreach ($session->instances() as $key => $value) {
         if ($value instanceof \Apps\Debug\App) {
             continue;
         }
         if ($value instanceof \Apps\Debug\Views\Main) {
             continue;
         }
         $simulate->instances()->{$key} = $value;
         unset($session->instances()->{$key});
     }
     // Copy parameters:
     foreach ($session->parameters() as $key => $value) {
         if ($key == 'debug') {
             continue;
         }
         $simulate->parameters()->{$key} = $value;
     }
     // Execute session:
     $simulate->execute();
     $simulate->render();
     self::$session = $simulate;
     \Libs\Session::close($simulate);
     // Continue with main session:
     parent::execute();
 }
 public function execute()
 {
     $session = \Libs\Session::current();
     $session->actors()->{'create'} = 'Actors\\Redirect';
     parent::execute();
 }
    public function execute(\Libs\DOM\Element $element)
    {
        parent::execute($element);
        $session = \Libs\Session::current();
        $document = $session->view()->document();
        $db = $session->app()->database();
        $url = trim(isset($session->parameters()->{'data'}) ? $session->parameters()->{'data'} : '');
        // Ignore null values:
        if ($url == '') {
            exit;
        }
        // Make sure the URL begins with a protocol:
        if (!preg_match('%^(https?|ftp)://%', $url)) {
            $url = 'http://' . $url;
        }
        // Lookup the id of an existing URL:
        $query = '
				SELECT id
				FROM urls
				WHERE url = "%s"
				LIMIT 1
			';
        $data = $db->query($query, $url);
        // No id found, create a new one:
        if ($data === false) {
            $generate = function () {
                return base_convert(rand(46656, 1679615), 10, 36);
            };
            // Get current timestamp in GMT:
            $timestamp = gmdate('U');
            // Create a random 4 character string:
            $id = $generate();
            $query = '
					SELECT COUNT(*) == 0 as `count`
					FROM urls
					WHERE id = "%s"
					LIMIT 1
				';
            // Make sure the ID is not in use:
            while (true) {
                $taken = $db->query($query, $id);
                if ($taken->count) {
                    break;
                }
                $id = $generate();
            }
            // Write new URL to database:
            $query = '
					INSERT INTO urls (
						id, url, timestamp, hits
					)
					VALUES (
						"%s", "%s", "%s", 0
					)
				';
            $db->exec($query, $id, $url, $timestamp);
        } else {
            $id = $data->id;
        }
        $element->setAttribute('id', $id);
    }