public function action_404()
 {
     // Lets see if theres a URL to redirect
     // $url = trim($_SERVER['REQUEST_URI'],'/');
     $url = str_replace(Uri::Base(), '', Uri::Create($_SERVER['REQUEST_URI']));
     $parts = preg_split('/\\//', $url);
     // var_dump($parts);
     if (count($parts) == 1) {
         $url = str_replace('%20', ' ', $url);
         static::$url_found = Model_Url::query()->where('short_url', $url)->get_one();
         if (empty(static::$url_found) === false) {
             return Controller_Url::action_view(static::$url_found);
         }
     } else {
         if (count($parts) == 2) {
             // $url = str_replace('%20',' ',$url[1]);
             $url = explode('/', $url);
             $url = $url[1];
             static::$url_found = Model_Url::query()->where('short_url', $url)->get_one();
             if (empty(static::$url_found) === false) {
                 return Controller_Url::action_view(static::$url_found);
             }
         }
     }
     $data = new stdClass();
     $this->template->content = View::forge('core/404');
 }
 public function before()
 {
     parent::before();
     if (Auth::Check() === false) {
         Response::Redirect(Uri::Base());
     }
 }
 public function action_recover($hash = null)
 {
     if (Input::Method() === "POST") {
         if ($user = \Model\Auth_User::find_by_email(Input::POST('email'))) {
             // generate a recovery hash
             $hash = \Auth::instance()->hash_password(\Str::random()) . $user->id;
             // and store it in the user profile
             \Auth::update_user(array('lostpassword_hash' => $hash, 'lostpassword_created' => time()), $user->username);
             // send an email out with a reset link
             \Package::load('email');
             $email = \Email::forge();
             $html = 'Your password recovery link <a href="' . Uri::Create('login/recover/' . $hash) . '">Recover My Password!</a>';
             // use a view file to generate the email message
             $email->html_body($html);
             // give it a subject
             $email->subject(\Settings::Get('site_name') . ' Password Recovery');
             // GET ADMIN EMAIL FROM SETTINGS?
             $admin_email = Settings::get('admin_email');
             if (empty($admin_email) === false) {
                 $from = $admin_email;
             } else {
                 $from = 'support@' . str_replace('http:', '', str_replace('/', '', Uri::Base(false)));
             }
             $email->from($from);
             $email->to($user->email, $user->fullname);
             // and off it goes (if all goes well)!
             try {
                 // send the email
                 $email->send();
                 Session::set('success', 'Email has been sent to ' . $user->email . '! Please check your spam folder!');
             } catch (\Exception $e) {
                 Session::Set('error', 'We failed to send the eamil , contact ' . $admin_email);
                 \Response::redirect_back();
             }
         } else {
             Session::Set('error', 'Sorry there is not a matching email!');
         }
     } elseif (empty($hash) === false) {
         $hash = str_replace(Uri::Create('login/recover/'), '', Uri::current());
         $user = substr($hash, 44);
         if ($user = \Model\Auth_User::find_by_id($user)) {
             // do we have this hash for this user, and hasn't it expired yet , must be within 24 hours
             if (isset($user->lostpassword_hash) and $user->lostpassword_hash == $hash and time() - $user->lostpassword_created < 86400) {
                 // invalidate the hash
                 \Auth::update_user(array('lostpassword_hash' => null, 'lostpassword_created' => null), $user->username);
                 // log the user in and go to the profile to change the password
                 if (\Auth::instance()->force_login($user->id)) {
                     Session::Set('current_password', Auth::reset_password($user->username));
                     Response::Redirect(Uri::Create('user/settings'));
                 }
             }
         }
         Session::Set('error', 'Invalid Hash!');
     }
     $this->template->content = View::forge('login/recover');
 }
 public function before()
 {
     parent::before();
     if (\Settings::Get('api') !== true) {
         echo 'API DISABLED';
         Session::Set('error', 'API Disabled');
         Response::redirect(Uri::Base());
         die;
     }
 }
 public function before()
 {
     // Lets render the template
     parent::before();
     // Check to see if the config exsists
     if (file_exists(APPPATH . 'config/production/db.php') === false) {
         Response::Redirect('install');
     }
     if (DBUtil::field_exists('urls', array('cached_preview')) === false && file_exists(APPPATH . 'classes/controller/upgrade.php')) {
         Response::Redirect(Uri::Create('upgrade'));
     }
     $real_base_url = Config::get('base_url');
     Config::set('base_url', str_replace('public/', '', $real_base_url));
     $base_url = Settings::get('different_short_url');
     if (empty($base_url) === false) {
         View::set_global(array('base_url' => $base_url), false, false);
     }
     if (trim(Uri::Base(), '/') == Settings::get('different_short_url')) {
         if (count(Uri::Segments()) == 2) {
             $route = Uri::to_assoc();
             if (isset($route) === true && $route['core'] == '404') {
                 // We are good!
             } else {
                 Response::Redirect(Settings::Get('base_url'));
             }
         } else {
             Response::Redirect(Settings::Get('base_url'));
         }
     }
     $data = null;
     if (Auth::Check()) {
         $user_id = Auth::get_user_id();
         static::$user_id = $user_id[1];
         $data['api_key'] = Auth::get('api_key');
         if (empty($data['api_key']) === true) {
             if (empty($data['api_key']) === true) {
                 $data['api_key'] = preg_replace('/\\+|\\/|\\=|\\?/', '', \Auth::instance()->hash_password(\Str::random()) . static::$user_id);
                 // invalidate the hash
                 \Auth::update_user(array('api_key' => $data['api_key']), Auth::get('username'));
             }
         }
     }
     // Lets set the default title , you can change it when calling the view
     $this->template->title = ucwords(str_replace('controller_', '', strtolower($this->request->route->controller)));
     try {
         Module::load('image');
         $this->template->image_js = true;
     } catch (Exception $e) {
     }
     // Lets get the header and footer and set a variable to use within the template
     $this->template->footer = View::forge('core/footer', $data);
     $this->template->header = View::forge('core/header');
 }
        echo isset($base_url) === true ? $base_url . '/' . $url->short_url : Uri::Create($url->short_url);
        ?>
"><?php 
        echo $url->short_url;
        ?>
</a></td>
                                                                            <td><?php 
        echo number_format($url->hits);
        ?>
</td>
                                                                            <td><?php 
        echo Settings::time_ago($url->updated_at);
        ?>
</td>
                                                                            <td><a href="<?php 
        echo \Uri::Base() . 'stats/' . $url->short_url;
        ?>
">View Stats</a></td>
                                                                    </tr>
								<?php 
    }
}
?>
					</tbody>
					
				</table>
		</div>


</div>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
           text_input.focus ();
           text_input.select ();
        }
        
        var max_file_size = <?php 
echo min($max_upload, $max_post);
?>
;
        
        $(document).ready(function()
        {
            $('.colorbox').colorbox({photo:true, maxWidth:'95%', maxHeight:'95%'}).resize();
            
            $("#content-short-url .btn").zclip({
                path:'<?php 
echo Uri::Base();
?>
assets/swf/ZeroClipboard.swf',
                copy:function(){return $('#appendedInputButton').val();},
                afterCopy:function(){
                    $('#show_copy').slideDown();
                }
            });
            
            $(".confirm").on("click", function(e) {
                    e.preventDefault();
                    var targetUrl = $(this).attr("href");
                    
                    $("#dialog").html($(this).attr('data-text'));
                    $("#dialog").dialog({
                            buttons : {
            $.get('<?php 
    echo Uri::Create('url/make_image?url_id=' . $url_object->id . '');
    ?>
', function(data_url)
            {
                $('#preview_text').hide();
                $('#preview').attr('src',data_url);
            });
        });
        
        
    </script>
<?php 
}
if (isset($base_url) === false) {
    $base_url = Uri::Base();
} else {
    $base_url = $base_url . '/';
}
?>

<div class="row">
<div class="col-lg-8 col-lg-offset-2">
	<h2>Your new URL has been created!</h2> 

<div class="row">
    <div class="col-lg-8 col-lg-offset-2" id="content-short-url">
            <hr>
            <div style="display: none;" id="show_copy" class="alert alert-info">Copied</div>
            <div class="input-group margin-bottom-10">
                    <input id="appendedInputButton" class="form-control input-lg" type="text" value="<?php 
 public function action_stats($short_url)
 {
     $data['url'] = Model_Url::query()->where('short_url', $short_url)->get_one();
     if (empty($data['url']) === false) {
         $data['unqiue_hits'] = DB::select('ip')->distinct()->from('url_stats')->where('url_id', $data['url']->id)->execute();
         $data['unqiue_hits'] = count($data['unqiue_hits']);
         $data['unqiue_hits_today'] = DB::select('ip')->distinct()->from('url_stats')->where('url_id', $data['url']->id)->where('created_at', '>=', strtotime('today 12:01'))->where('created_at', '<=', strtotime('today 12:01 + 1 day'))->execute();
         $data['unqiue_hits_today'] = count($data['unqiue_hits_today']);
         $data['hits_today'] = DB::select('id')->from('url_stats')->where('url_id', $data['url']->id)->where('created_at', '>=', strtotime('today 12:01'))->where('created_at', '<=', strtotime('today 12:01 + 1 day'))->execute();
         $data['hits_today'] = count($data['hits_today']);
         $new_results = '';
         // Get countries Stats
         $countries = DB::select('country')->from('url_stats')->distinct(true)->where('url_id', $data['url']->id)->execute()->as_array();
         if (empty($countries) === false) {
             foreach ($countries as $country) {
                 $hit_count = Model_Url_Stat::query()->related('url')->where('country', $country)->where('url_id', $data['url']->id)->count();
                 $new_results .= "['" . $country['country'] . "', " . $hit_count . "], ";
             }
             $data['stats'] = $new_results;
         } else {
             $data['stats'] = null;
         }
         $this->template->content = View::forge('url/stats', $data);
     } else {
         Session::Set('error', 'No URL was found');
         Response::Redirect(Uri::Base());
     }
 }
 public static function Create_User($opauth, $user_id = null)
 {
     if (empty($user_id) === true) {
         $user_id = static::$user_id;
     }
     if ($user_id != 0 && empty($user_id) === false) {
         // call Opauth to link the provider login with the local user
         $insert_id = $opauth->link_provider(array('parent_id' => $user_id, 'user_id' => 0, 'provider' => $opauth->get('auth.provider'), 'uid' => $opauth->get('auth.uid'), 'access_token' => $opauth->get('credentials.token', null), 'secret' => $opauth->get('credentials.secret', null), 'refresh_token' => $opauth->get('credentials.refresh_token', null), 'expires' => $opauth->get('credentials.expires', null), 'created_at' => time()));
     } else {
         Response::Redirect(Uri::Base());
     }
 }