public function execute(\Libs\View $view, \Libs\DOM\Element $element)
 {
     parent::execute($view, $element);
     $message = sprintf('Hello, %s!', $_SERVER['REMOTE_ADDR']);
     $document = $view->document();
     $element->appendChild($document->createElement('message', $message));
 }
    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 execute(\Libs\DOM\Element $element)
 {
     parent::execute($element);
     $session = \Apps\Debug\App::$session;
     $document = \Libs\Session::view()->document();
     $input = $document->createElement('input', $session->view()->document()->saveXML());
     $output = $document->createElement('output', $session->view()->output());
     $element->appendChild($input);
     $element->appendChild($output);
     //echo '<pre>', htmlentities($element->saveXML()); exit;
 }
    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);
    }