Premium URL Shortener

Premium URL Shortener is a PHP script that allows you to run your own URL shortening website.

Documentation on how to set up and use Premium URL Shortener. This guide also cover all of its major features. If you stumble upon an issue or if you need help, please contact us.

License

Two types of license are available: Regular or Extended. If you are using this script for multiple websites, you must buy a license for each of them.

Items purchased under a Regular or Extended License may NOT be redistributed or resold "as-is" or as part of any other collection of image resources or files. You do not own the software but simply own a license to operate it therefore the author of this item has full rights on this item.

Regular License Examples (from Envato)

Use, by you or one client, in a single end product which end users are not charged for. The total price includes the item price and a buyer fee. The Regular License could be used for the following:

  • Single website (commercial, personal, or non-profit).
  • Single website for a client (commercial, personal, or non-profit).
  • Single intranet site project.

Extended License Examples (from Envato)

Use, by you or one client, in a single end product which end users can be charged for. The total price includes the item price and a buyer fee. The Extended License could be used for any of the following:

  • An online service where the file can be displayed on multiple users' pages.
  • Part of a software package for sale such as SaaS.

Installation

This script comes with a quick installer. All you have to do is to follow these simple instructions. It has been reported that the web installer may not successfully run on some servers. If that happens to you, please follow the manual installation instructions below.

Using the Web Installer

  1. Upload and extract "main.zip" to your server
  2. Point your browser to http://yoursite.com/install.php
  3. Follow the step by step instructions
  4. The script will delete the install.php after installation: Just make sure that it has been deleted.
  5. Login as admin using the credentials you set at step 3
  6. Click on "Admin" button at the top and go to settings to configure the application.

The automated installer will set up the mySQL database, create your configuration file and set up your administrator account. After this, all you have to do is to either go through this documentation to get yourself familiar with the script or you can go ahead and experiment everything on your own and come back here if you have any issues. Also don't forget that if you have any problems, you can always contact us.

Upgrading

All upgrading instructions are detailed in "upgrade.html" located in the Documentation folder. Simply open that and follow the instructions according to the version of the script. Please note that some update may require you to replace all files while others only a couple of files. In both cases it is strongly recommended that you first backup all your existing files and download it to your computer.

Using the AutoUpdater (v5.4+)

  1. Find your purchase code in the "Downloads" section of CodeCanyon.
  2. Go to the admin panel and in the left menu click on Upgrade.
  3. If you are eligible to autoupdate, the checks will be green
  4. Enter your purchase code and proceed on upgrading.

It is strongly recommended to backup your files regularly as in rare occasion an update might not work with your server configuration and you need to roll back.

Migration

To migrate from one server to another, you need to proceed with care to not lose any data or functionality. Please follow the instruction below to letter without skipping anything to prevent loss of data.

  1. Enabled maintenance mode in the admin panel > settings.
  2. First backup and download all your files (compress and download)
  3. Go to phpmyadmin > your database > export the shortener database
  4. On your new server, go to phpmyadmin > new database > import the SQL file
  5. If you are changing your domain name, go to the settings table then change it under "url".
  6. Then on your new server, upload and extract the compressed files
  7. Open the file includes/config.php and change your database info manually.
  8. Finally, login as admin and disable maintenance mode.

In-App Translation

You can easily translate almost every text in this application without the hassle of editing PHP files. Just login as admin, go to settings then click on "Languages" and follow the instructions. Please note that this feature may not work on some hosts due to memory limits. In this case you will need to follow the manual instructions below.

Manual Translation

Now you can easily translate most of the text in this script. Language files are located (and have to be located) in includes/languages/<YOUR 2-LETTER LANGUAGE CODE>.php. Please note that some texts are too long to be translated this way, however you can do it another way (explained below). Once a user changes the language of the website, a cookie that includes the user's language preference will be set. If the user revisits the website, the script will automatically read the cookie and switches the language.

How Translation Works

The process of the translation is pretty easy. All texts are stored in an array and then a function is used to read and assign the proper translation of the text. If you open one of the PHP files, you will notice a lot of echo e('TEXT'). The function e is the function that reads and assigns everything. The name of the translation file is the language code of your language e.g. fr.php the code is fr for French. To use it simply, add to any link ?lang=LANGUAGECODE in this case ?lang=fr

Translating Texts

If you go in the includes/languages/ you will notice two files "fr.php" and "lang_sample.php". "fr.php" is an example of language file while lang_sample.php is a translation-ready file. If you want to understand how translation work, open "fr.php" and have a look at it. You will notice the following format (only the blue part must be changed):

The most important things to remember are the following:

  1. DON'T DELETE $lang = array( and ); at the end.
  2. DON'T EDIT THE LEFT SIDE, if you edit it then translation will not work anymore
  3. DON'T FORGET DOUBLE-QUOTES BEFORE AND AFTER, if you do, you see will an error
  4. DON'T FORGET THIS "=>", if you do you will see an error
  5. And finally, DON'T FORGET THE COMMA AT THE END

Translating other Parts

If you want to translate some parts that are yet to translate, do as following.

  1. Open the file that contains the text
  2. Wrap the text with this: <?php echo e('TEXT')?>
  3. Open your language file and then add anywhere "TEXT" => "TRANSLATED TEXT",
For pages, if for example your page name is "About", open your language file then add:

"About" => "TRANSLATION OF ABOUT",

Translating Custom Pages

If you wish to translate one of the custom pages, please follow these instructions.

  1. Create the original page in English (says the name is My page where the permalink will be http://yoursite.com/page/my-page)
  2. Create another page and put the translated name of the original one which in our example will be Ma page. If you choose to leave the slug field empty the system will create the following sluge: ma-page. DON'T leave that empty! Instead type-in manually my-page_LANGUAGECODE. So if you create a page with the following slug my-page_fr if a user decides to switch the language to French the system will attempt to get the content of that page first. If it doesn't exist, it will use the original one.
  3. Also make sure to not show the translated page in the menu but do show the original one. The system will take care of that.
<?php echo e('Consequat aliquip do tempor velit esse in proident anim culpa sed nulla.') ?>
"Consequat aliquip do tempor velit esse in proident anim culpa sed nulla." => "Translated string in any language you wish",
$lang = array(
  "Consequat aliquip do tempor velit esse in proident anim culpa sed nulla." => "Translated string in any language you wish",
  "Dolore occaecat nisi tempor cillum dolore in mollit excepteur in aliqua culpa sunt enim pariatur dolore ullamco consequat culpa." => "Translated string in any language you wish",
);             

Themes

The theming system has been greatly simplified to allow easy customization. It is now using bootstrap 3.1. All themes are located in the folder themes. If you open the default theme file you will see many files in that folder. Those are all the theme files you can modify. The folder named shared includes some important files that you should not modify unless you know what you are doing.

Using the editor

The script has a powerful theme editor built-in. The theme editor includes a code editor that you can use to easily change things. The code editor (ACE) is set to format only HTML and CSS. It will NOT format PHP. All php codes will be treated as text. You should not touch any PHP code unless you have the knowledge. There are some codes you can edit and these are explained below. You also have the ability to clone a theme by clicking on the clone button. You cannot however delete a theme from the script. You will need to do this by deleting the folder manually. This feature was not implemented because the deletion process is very sensitive and differs from server to server.

Theme API

The new theming system offers an easy to use API that you can use to custom things like widgets and features.

Shortener Form

You can invoke the shortener form anywhere by using the following code: $this->shortener($options = array());. This function will output the shortener form in any of the theme files. You can also customize by adding some options.

In the code example to the right, autohide will autohide the advanced features, advanced will either show or remove advanced features and multiple will show or remove the multiple URLs option.

$options = array('autohide' => Boolean (TRUE or FALSE), 'advanced' => Boolean (TRUE or FALSE), 'multiple' => Boolean (TRUE or FALSE));
 $this->shortener(array('autohide' =>TRUE, 'advanced' => TRUE, 'multiple' => TRUE))

Theme Widgets

The theming system include some widgets you can use via the theme editor. To call a widget, use $this->widgets('Widget_Name', $options = array()). The list of widgets available is described below along with the options you can configure.

  • Name: activities - Options: limit (the number items to list), refresh (Refresh time in milliseconds)
  • Name: countries - Options: None
  • Name: top_urls - Options: limit 
  • Name: tools - Options: None
  • Name: social_count - Options: None
  • Name: news - Options: None
 $this->widgets('activities', array('limit'=>10, 'refresh' => 10000))​;

Theme Menus

Menus are now built-in to the core however you can still customize them. Two menus are available: menu($options = array()) which controls the header menu and user_menu($options = array()) which controls the sidebar menu of the dashboard. Both menus are added in the file header.php in the theme folder.

Both menu accepts custom links send as an array(). See the example to understand how to add custom links via the theme API.

$links = array(
    array('href' => 'http://google.com', 'text' => 'Google'),
    array('href' => 'http://apple.com', 'text' => 'Apple')
  );
                
// Main Menu
$this->menu($links);
// Sidebar Menu
$this->user_menu($links);

Tracking

The script offers two methods of tracking (and you can disable this): System and Google Analytics. When choosing the system method, the script will tracking users on its own and log data in the database. On the other hand, when choosing Google Analytics, the script will inject a Google Analytics code during the redirection. Please note that some features are not available when using Google Analytics.

System analytics, when receiving high traffic, can be very resource intensive however there are tools built-in to relieve the database of old or inactive links. We recommend using a VPS. We offer managed hosting starting at $20 per month where we take care of everything.

Caching

The script nows offers caching of data. Caching is turned off by default and can be turned on via the file includes/config.php. Data is cached using phpFastCache and is stored in the tmp folder (where cookies are stored) or in the includes/library/ depending on your server configuration. It is recommended that you turn Caching off while your site is still new to provide accurate data. However once your site reaches the 100, 000 click, you should turn it On. The caching is set to 15 minutes so the same information will be displayed for users for 15 minutes. For this reason it is not recommended to use caching while your site still new and does not have to deal with a huge dataset.

Security

This script uses some of the most advanced algorithms to keep the user account safe and your URLs phish-free. Passwords are hashed using the phpPass library which is currently one of the best solutions. All URLs go through a series of validation as stated below:

  1. URL Format
  2. CAPTCHA Check
  3. Bot Check
  4. Keyword Blacklisting
  5. Domain Blacklisting
  6. Google Safe Check (API required: https://developers.google.com/safe-browsing/ )
  7. Phish-Tank Check (API not required but recommended because requests will limited: http://www.phishtank.com/developer_info.php)

Note: The password will be upgraded automatically at your first login from the old hashing algorithm. Please make sure that you use the same security key.

Social Login

The script includes authentication methods from 3 major social networks such as Google, Twitter and Facebook. Before you can use any of these, they will need to be setup. Follow the instructions below to the letter otherwise it might not work.

oAuth logins are very strict with the Callback URL. Make sure to respect the oAuth callback mentioned under each of the social network below.

Facebook Connect Video Tutorial

Users can login with their Facebook and bookmark their favorite sites. To set up your app, first go to https://developers.facebook.com and set up a new app by clicking "Apps". Then click "Create New App"; Facebook will ask you to configure your app. The most important fields you must fill out are App Domains and Site URL. For the oAuth Callback, add https://yoursite.com/user/login/facebook. Following that Facebook will generate two keys for you. Go to the admin settings and paste those keys. That's it. If you did everything correctly Facebook connect should work.

Twitter Connect Video Tutorial

Users can login using twitter the same way they use facebook. You must enable twitter connect for it to appear and function. You can do that on the admin panel. You must register your website on Twitter.com

  1. Go to https://dev.twitter.com/apps and login.
  2. Then click "Create a new application" on top right
  3. Fill the required fields, add this to the callback field: https://yoursite.com/user/login/twitter, accept the terms and conditions and click "Create your Twitter application".
  4. You will then be redirected to a page with your OAuth Settings
  5. Search & Find two keys: Consumer Key and Consumer Secret. Copy these keys and paste them in the admin settings
  6. Finally, under "settings" of your application on twitter you will see "Allow this application to be used to Sign in with Twitter". Check that and click "Update this twitter application's settings".

If you did everything correctly, Twitter OAuth should work. If it doesn't, send us an email and we will help you.

Google Connect Video Tutorial

Google connect protocol has been changed due to restrictions from Google. For this reason you will need to set up Google connect again. Simply follow the instructions below and it should be fairly simple.

  1. Go https://code.google.com/apis/console and login using your Google Account
  2. On the left side click "Credentials"
  3. Then click "Create new Client ID" to open the popup
  4. Select "Web Application"
  5. Add your domain name as "https://yoursite.com" under Authorized Javascript Origins
  6. Add the URI to Google Connect under Authorized Redirect URI as https://yoursite.com/user/login/google
  7. Generate a public key and client secret and add those in the admin panel

Membership

This script now offers a membership system where users can upgrade their account for a fee to use some pro features such as the custom splash page. The features that are only available to pro users are custom splash page, ability to choose the redirection type, ability to use premium aliases (set by admin), no advertisement side-wide. The fees are set via the admin panel and discounts are calculated manually. You will need to activate IPN in your PayPal account and use the following URL as the IPN receiver: http://yoursite.com.com/ipn (if you have SSL enabled make sure to use https).

For Stripe, please check below for instructions on how to set it up.

Once the user clicks upgrade on top, the system will redirect to the upgrade page and will offer the plans set in the admin panel in either monthly and yearly. They will then be redirect to PayPal where they can login to pay or be able to checkout directly on the site when Stripe is enabled. Once the payment has been made, the user will be redirected back and the changes will be made to the account.

Expiration

The system will automatically switch the user from Pro to Free if the account has not been renewed. This will also temporarily disable all custom splash pages. Since a subscription system is currently unavailable, the user will need to renew the account every month or opt-in for the yearly plan.

Plans

Version 5.3 adds custom plans where you can choose the different options for each plan. You can even add a free plan which will be associated to free users upon registration. You can choose the plan title, description, prices (monthly and yearly), and add different restrictions such as limited splash pages or custom domain names.

If you don't plan to offer a free plan, you will need to create a free plan and then set the "Status" to Inactive.

If you are using Stripe, you need to add your API keys before creating plans otherwise the script will not create plans on Stripe.

Stripe

Version 5.0 has Stripe built-in. This will allow to painlessly subscribe customers and charge them automatically. Everything will be managed by the script. This means payments, subscriptions, cancellation and refunds are managed so you don't have to worry. A video will be online soon to explain on how to activate Stripe. Meanwhile you can use the instructions below.

Please note that subscription requires an Extended License.

Activating Subscription

  1. Login to the admin
  2. Go to the subscription tab
  3. Enter your extended purchase code to activate it

Setting up Stripe

  1. Create a free stripe account
  2. Activate your stripe account
  3. Go to the API tab
  4. Generate a Publishable key
  5. Generate a Secret key
  6. Then go to Webhooks
  7. Click on Add endpoint
  8. In the "URL to be called section", add https://yoursite.com/webhook
  9. Selected all event types
  10. Once your webhook is created, click on that
  11. Then at the bottom you will see a "Signing secret" block. It starts with whsec_
  12. Add your Keys and your Signing secret key in the admin panel to activate subscription.
  13. If you already have plans created, you will have to delete them and create new plans so it can sync with Stripe.

Domain Name Management

This script supports addition of multiple domain names. Addon domains can either be added by the owner of the site via the admin (via Multiple Domains feature) or by the customer if the customer wishes to use their own domain name (via Custom Domain feature). Getting domain names to work is somewhat tricky might not work on all type of server (especially shared servers) without some changes to the virtual host file.

Multiple Domains

You can enable the multiple domains feature if you have more than one domain name. You will allow your users to choose or set a domain name by default. To add your domain names, simply fill the box in the admin section and add one domain name per line including http:// or https://. To set up your domain name, add your domain name to your server and forward all requests to your main using the following code.

Shared Server/cPanel

If you are on a shared server, you will have to add the domain name via the "Addon Domain" tool located in cPanel. It is very important that the Root Directory of the domain be the same as the primary domain or where the script has been installed.

VPS/Dedicated Server

If you are on a dedicated server, you will need to do a small modification to the default apache conf file usually located in /etc/apache2/sites-enabled/ and named 000-default.conf. Open that file and you will see the content showed on the right. You will need to replace the path /var/www/html/ in DocumentRoot and Directory to the path where the script is installed and restart Apache.

To check if the domain name is working, after visiting the domain you should get a page with a message that says Yes. Your domain name is working. Add it to your account now. If you get any other page, that means the server is handling the domain name and is pointing it to another page.

 <VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/html

        <Directory /var/www/html/>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

</VirtualHost>
                

Custom Domains Video Tutorial

Customers can add their own domain name and use it to shorten URLs. This will require some setup. First, as admin, you need to enable Multiple Domain Names in the admin panel > settings > advanced settings. Once that is done, your customers can add their own domain name via the Custom Domain page. They will need to either add an A record or a CNAME record. On your side, you will require some changes before your server can accept their domains.

Shared Server/cPanel

If you are on a shared server, you will have to add the domain name via the "Addon Domain" tool located in cPanel. It is very important that the Root Directory of the domain be the same as the primary domain or where the script has been installed.

VPS/Dedicated Server

If you are on a dedicated server, you will need to do a small modification to the default apache conf file usually located in /etc/apache2/sites-enabled/ and named 000-default.conf. Open that file and you will see the content showed on the right. You will need to replace the path /var/www/html/ in DocumentRoot and Directory to the path where the script is installed and restart Apache.

To check if the domain name is working, after visiting the domain you should get a page with a message that says Yes. Your domain name is working. Add it to your account now. If you get any other page, that means the server is handling the domain name and is pointing it to another page.

 <VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/html

        <Directory /var/www/html/>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

</VirtualHost>