<?php 

/****************************************************************

 A URL shortener. It is a fork of ur1.ca (which uses lilURL) that 
I downloaded from http://ur1.ca/. I've simplified it further; most, 
if not all of the lilURL (http://lilurl.sourceforge.net/) and ur1.ca
php code has changed, only the HTML remains largely untouched. It's 
also now 100% MySQL free (I much prefer PostgreSQL).

The db schema can be viewed here: http://xfr.to/db_schema.sql.txt
 
I might add more features later (like URL blacklist checks, etc.),
but this serves my own purposes quite well as it is for now.

© 2012 Christopher Murtagh http://christopher.murtagh.name/about/

Released under the GPL - see http://xfr.to/COPYING for license.

****************************************************************/

if ($_GET['ShowMe'] == 'source'){
    
show_source('index.php');
    exit;
}

require_once 
'functions.php'// to view the source of this, http://xfr.to/functions.php?ShowMe=source 
require_once 'config.inc'// all this does is set $config['thepassword'] this allows me to show source 

$msg '';

// if the form has been submitted
if (isset($_POST['long_url'])){
 

    if (
$_POST['password'] == $config['thepassword']){
    
        
$shortURL shortenURL($_POST['long_url']);
        
$url 'http://'.$_SERVER['SERVER_NAME'].'/'.$shortURL;
        
$msg '<p class="success">Your url is: <a href="'.$url.'">'.$url.'</a></p>';

    }
    else {
        
$msg '<p class="error">Sorry, you need a password to create shortened URLs here</p>';
    }
}
else{ 
// if the form hasn't been submitted, look for a shortURL to redirect to


    
$exploded explode('/'$_SERVER['REQUEST_URI']);
    
$shortURL $exploded[count($exploded)-1];
    
/**************************************************
    The code above works because I'm using mod_redirect
    to redirect all URLs to this index.php file. Here
    is the contents of the .htaccess file that does this

    RewriteEngine On
    RewriteRule ^images($|/) - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule (.*) index.php

    The %{REQUEST_FILENAME} RewriteCond allows me to
    pass on files that exist instead of treating them
    as shortURLs. However, they do collide with the
    shortURL namespace, so I should deal with them elegantly
    eventually.

    **************************************************/

    
    // if the shortURL isn't empty and it's not this file (index.php), redirect to it's url
    
if ($shortURL != '' && $shortURL != basename($_SERVER['PHP_SELF'])){

        
$longURL getLongURL($shortURL);
        
        if (
$longURL !== -1){
            
logClick($shortURL);
            
header('Location: '.$longURL,TRUE,301);
            exit;
        }
        else {
            
$msg '<p class="error">Sorry, but that url ('.$shortURL.') isn\'t in our database.</p>';
        }
    }
}

// print the form

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

    <head>
        <title>Where do you want to xfr.to?</title>
        
        <style type="text/css">
        body {
            font: .8em, "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
            text-align: center;
            color: #333;
            background-color: #fff;
            margin-top: 5em;
        }
        
        h1 {
            font-size: 2em;
            padding: 0;
            margin: 0;
        }

        form {
            width: 28em;
            background-color: #eee;
            border: 1px solid #ccc;
            margin-left: auto;
            margin-right: auto;
            padding: 1em;
        }

        fieldset {
            border: 0;
            margin: 0;
            padding: 0;
        }
    
        label {
            float: left;
            text-align: right;
            margin-right: 15px;
            width: 200px;
        }
    
        a, a:visited {
            color: #740107;
            text-decoration: none;
            font-weight: bold;
        }

        a:hover {
            color: #4D4D4D;
        }

        .error, .success {
            font-size: 1.2em;
            font-weight: bold;
        }
        
        .error {
            color: #ff0000;
        }
        
        .success {
            color: #000;
        }
        
        </style>

    </head>
    
    <body onload="document.getElementById('long_url').focus()">
        
        <div align="center">
        <img src="/images/xopher_logo.png" height="134" width="100" alt="Xopher" title="Xopher" /> 
        </div>

        <?php echo $msg?>
        
        <form action="/" method="post">
        
            <fieldset>
                <br />
                <label for="long_url">Enter a long URL:</label>
                <input type="text" name="long_url" id="long_url" />
                <br clear="all" />
                <label for="password">Password:</label>
                <input type="password" name="password" id="password" />
                <br clear="all" />
                <br />
                <input type="submit" name="submit" id="submit" value="Xfr it!" />
            </fieldset>
        
        </form>

        <p>You can also <a href="/?ShowMe=source">view the source code</a> for this little URL shortener.</p>
    </body>

</html>