Вход Регистрация
Файл: includes/Main.class.php
Строк: 2042
<?php 
/**
 * ====================================================================================
 *                           PremiumMediaScript (c) KBRmedia
 * ----------------------------------------------------------------------------------
 * @copyright This software is exclusively sold at CodeCanyon.net. If you have downloaded this
 *  from another site or received it from someone else than me, then you are engaged
 *  in an illegal activity. You must delete this software immediately or buy a proper
 *  license from http://gempixel.com/buy/short.
 *
 *  Thank you for your cooperation and don't hesitate to contact me if anything :)
 * ====================================================================================
 *
 * @author KBRmedia (http://gempixel.com)
 * @link http://gempixel.com 
 * @package PremiumMediaScript
 * @subpackage ApplicationHelper
 */
class Main{
    protected static 
$title "";
    protected static 
$description "";
    protected static 
$url "";
    protected static 
$image "";
    protected static 
$type "website";    
    protected static 
$video "";
    protected static 
$body_class "";
    protected static 
$lang "";
    private static 
$plugin = array();    
    private static 
$shortcode = array();    
    private static 
$config = array();
    private static 
$enqueue = array("footer" => """header" => "");
    private static 
$admin_enqueue = array("footer" => """header" => "");
  
/**
  * Generate meta title
  * @param string Separator
  * @return title
  * @since v1.0
  */
    
public static function title($separator="-"){      
      if(empty(
self::$title)){
        return 
self::$config["title"];
      }else{
        return 
self::$title.$separator ".self::$config["title"];
      }
    }
  
/**
  * Generate meta description
  * @param none
  * @return description
  * @since v1.0
  */
    
public static function description(){      
      if(empty(
self::$description)){
        return 
self::$config["description"];
      }else{
        return 
self::$description;
      }
    }
  
/**
  * Generate URL
  * @param none
  * @return description
  * @since v1.0
  */
    
public static function url(){      
      if(empty(
self::$url)){
        return 
self::$config["url"];
      }else{
        return 
self::$url;
      }
    } 
  
/**
  * Body Class inject
  * @param none
  * @return message
  * @since v1.0
  */     
    
public static function body_class($prefix ""){
      if(!empty(
self::$body_class)) return " class='$prefix".self::$body_class."'";
    }    
  
/**
  * Generate URL
  * @param none
  * @return description
  * @since v1.0
  */
    
public static function image(){      
      return 
self::$image;
    }   
  
/**
  * Set meta info
  * @param none
  * @return Formatted array
  * @since v1.0
  */
    
public static function set($meta,$value){
      if(!empty(
$value)){
        
self::$$meta=$value;
      }
    }  
  
/**
  * Generate Open-graph tags
  * @param none
  * @return string
  * @since v1.5.1
  */  
    
public static function ogp(){
      
$meta="<meta property='og:type' content='".self::$type."' />nt";      
      
$meta.="<meta property='og:url' content='".self::url()."' />nt"
      
$meta.="<meta property='og:title' content='".self::title()."' />nt";
      
$meta.="<meta property='og:description' content='".self::description()."' />nt";  
      
$meta.="<meta property='og:image' content='".self::image()."' />n"
      
$meta.="<meta name='twitter:card' content='summary_large_image'>nt"
      
$meta.="<meta name='twitter:site' content='@".str_replace("https://twitter.com/","",str_replace("http://www.twitter.com/"""self::$config["twitter"]))."'>nt"
      
$meta.="<meta name='twitter:title' content='".self::title()."'>nt"
      
$meta.="<meta name='twitter:description' content='".self::description()."'>nt"
      
$meta.="<meta name='twitter:creator' content='@".str_replace("https://twitter.com/","",str_replace("http://www.twitter.com/"""self::$config["twitter"]))."'>nt"
      
$meta.="<meta name='twitter:image:src' content='".self::image()."'>nt"
      
$meta.="<meta name='twitter:domain' content='".str_replace("http://"""self::$config["url"])."'>nt";  

      if(!empty(
self::$video)){
        
$meta.=self::$video
      }
      echo 
$meta
    } 

  
/**
  * Generate Open-graph video tag
  * @param none
  * @return string
  * @since v2.0
  */  
  
public static function video($url,$embed=FALSE){
    if(
preg_match('%(?:youtube(?:-nocookie)?.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu.be/)([^"&?/ ]{11})%i'$url$match)) {                     
       
Main::set("image","http://i1.ytimg.com/vi/{$match[1]}/maxresdefault.jpg?feature=og");
       
Main::set("video",'<meta property="og:video" content="http://www.youtube.com/v/'.$match[1].'?version=3&amp;autohide=1">
      <meta property="og:video:type" content="application/x-shockwave-flash">
      <meta property="og:video:width" content="1920">
      <meta property="og:video:height" content="1080">'
);
     }  
     if(
$embed) return '<iframe id="ytplayer" type="text/html" width="640" height="390" src="http://www.youtube.com/v/'.$match[1].'?version=3&amp;autohide=1" frameborder="0"/>';
  }       
  
/**
  * Clean a string
  * @param string, cleaning level (1=lowest,2,3=highest)
  * @return cleaned string
  */

    
public static function clean($string,$level='1',$chars=FALSE,$leave=""){        
        if(
is_array($string)) return array_map("Main::clean",$string);

        
$string=preg_replace('/<script[^>]*>([sS]*?)</script[^>]*>/i'''$string);      
        switch (
$level) {
          case 
'4':
            if(empty(
$leave)){
              
$search = array('@<script[^>]*?>.*?</script>@si',
                             
'@<style[^>]*?>.*?</style>@siU'
              
); 
              
$string preg_replace($search''$string);              
            }   
            if(
$chars) {
              if(
phpversion() >= 5.4){
                
$string=htmlspecialchars($string);
              }else{
                
$string=htmlspecialchars($string);
              }
            }
            break;          
          case 
'3':
            if(empty(
$leave)){
              
$search = array('@<script[^>]*?>.*?</script>@si',
                             
'@<[/!]*?[^<>]*?>@si',
                             
'@<style[^>]*?>.*?</style>@siU',
                             
'@<![sS]*?--[ tnr]*>@'
              
); 
              
$string preg_replace($search''$string);              
            }
            
$string=strip_tags($string,$leave);      
            if(
$chars) {
              if(
phpversion() >= 5.4){
                
$string=htmlspecialchars($string);
              }else{
                
$string=htmlspecialchars($string);  
              }
            }
            break;
          case 
'2':
            
$string=strip_tags($string,'<b><i><s><p><u><strong><span>');
            break;
          case 
'1':
            
$string=strip_tags($string,'<b><i><s><u><strong><a><pre><code><p><div><span>');
            break;

        }   
        if(!
preg_match('!nofollow!'$string)) $string=str_replace('href=','rel="nofollow" href='$string);   
        return 
$string
    }
  
/**
   * Extract @user
   * @author KBRmedia
   * @since  1.0
   */
  
public static function at($text$url NULL){
    
preg_match_all("/(@w+)/"$text$at);
    if(!isset(
$at[0][0])) return $text;
    if(!
is_null($url)){
      foreach (
$at[0] as $ats) {
        
$text str_replace($ats"<a href='$url".str_replace("@","",strtolower($ats))."' class='user-at'>$ats</a>"$text);
      }
      return 
$text;
    }
    return 
$at;
  }
  
/**
   * Extract @hash
   * @author KBRmedia
   * @since  1.0
   */
  
public static function hash($text$url NULL){
    
preg_match_all("/(#w+)/"$text$at);
    if(!isset(
$at[0][0])) return $text;
    if(!
is_null($url)){
      foreach (
$at[0] as $ats) {
         
$text =  str_replace($ats"<a href='$url".str_replace("#","",strtolower($ats))."' class='hash'>$ats</a>"$text);
      }
      return 
$text;      
    }
    return 
$at;
  }  
  
/**
  * Is Set and Equal to
  * @param key, value
  * @return boolean
  */ 
   
public static function is_set($key,$value=NULL,$method="GET"){
      if(!
in_array($method, array("GET","POST"))) return FALSE;
      if(
$method=="GET") {
        
$method=$_GET;
      }elseif(
$method=="POST"){
        
$method=$_POST;
      }
      if(!isset(
$method[$key])) return FALSE;
      if(!
is_null($value) && $method[$key]!==$value) return FALSE;      
      return 
self::clean($method[$key],3,TRUE);
   }
  
/**
  * Validate and sanitize email
  * @param string
  * @return email
  */  
    
public static function email($email){
        
$email=trim($email);
        if (
preg_match('/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]{2,})+$/i'$email) && strlen($email)<=50 && filter_var($emailFILTER_SANITIZE_EMAIL)){
            return 
filter_var($emailFILTER_SANITIZE_EMAIL);
        }
        return 
FALSE;
    }

  
/**
  * Validate and sanitize username
  * @param string
  * @return username
  */  

    
public static function username($user){
      if(
preg_match('/^w{4,}$/'$user) && strlen($user)<=20 && filter_var($user,FILTER_SANITIZE_STRING)) {
        return 
filter_var(trim($user),FILTER_SANITIZE_STRING);
      }
      return 
false;    
    }
  
/**
  * Validate Date
  * @param string
  */  
    
public static function validatedate($date$format 'Y-m-d H:i:s'){
      if(!
class_exists("DateTime")){
        if(!
preg_match("!(.*)-(.*)-(.*)!",$date)) return false;
        return 
true;
      }
      
$d DateTime::createFromFormat($format$date);
      return 
$d && $d->format($format) == $date;
    }
  
/**
   * Get IP
   * @since 1.0 
   **/
  
public static function ip(){
     
$ipaddress '';
      if(isset(
$_SERVER['HTTP_CF_CONNECTING_IP'])) {
          
$ipaddress =  $_SERVER['HTTP_CF_CONNECTING_IP'];
      } else if (isset(
$_SERVER['HTTP_X_REAL_IP'])) {
          
$ipaddress $_SERVER['HTTP_X_REAL_IP'];
      }
      else if (isset(
$_SERVER['HTTP_CLIENT_IP']))
          
$ipaddress $_SERVER['HTTP_CLIENT_IP'];
      else if(isset(
$_SERVER['HTTP_X_FORWARDED_FOR']))
          
$ipaddress $_SERVER['HTTP_X_FORWARDED_FOR'];
      else if(isset(
$_SERVER['HTTP_X_FORWARDED']))
          
$ipaddress $_SERVER['HTTP_X_FORWARDED'];
      else if(isset(
$_SERVER['HTTP_FORWARDED_FOR']))
          
$ipaddress $_SERVER['HTTP_FORWARDED_FOR'];
      else if(isset(
$_SERVER['HTTP_FORWARDED']))
          
$ipaddress $_SERVER['HTTP_FORWARDED'];
      else if(isset(
$_SERVER['REMOTE_ADDR']))
          
$ipaddress $_SERVER['REMOTE_ADDR'];
      else
          
$ipaddress 'UNKNOWN';
      return 
$ipaddress;
  }
  
/**
   * Validate URLs
   * @since 1.0
   **/
  
public static function is_url($url){
    if (
preg_match("/b(?:(?:https?|ftp)://|www.)[-a-z0-9+&@#/%?=~_|!:,.;]*[-a-z0-9+&@#/%=~_|]/i",$url) && filter_var($urlFILTER_VALIDATE_URL)){
      return 
true;
    }    
    return 
false;     
  }

  
/**
  * Encode string
  * @param string, encode= MD5, SHA1 or SHA256 
  * @return hash
  */   
    
public static function encode($string,$encoding="phppass"){      
      if(
$encoding=="phppass"){
        if(!
class_exists("PasswordHash")) require_once(ROOT."/includes/library/phpPass.class.php");
        
$e = new PasswordHash(8FALSE);
        return 
$e->HashPassword($string.self::$config["security"]);
      }else{
        return 
hash($encoding,$string.self::$config["security"]);
      }
    }
  
/**
  * Check Password
  * @param string, encode= MD5, SHA1 or SHA256 
  * @return hash
  */   
    
public static function validate_pass($string,$hash,$encoding="phppass"){      

      if(
$encoding=="phppass"){
        if(!
class_exists("PasswordHash")) require_once(ROOT."/includes/library/phpPass.class.php");
        
$e = new PasswordHash(8FALSE);
        return 
$e->CheckPassword($string.self::$config["security"], $hash);
      }else{
        return 
hash($encoding,$string.self::$config["security"]);
      }
    }
/**
 * Read user cookie and extract user info
 * @param 
 * @return array of info
 * @since v1.0
 */
  
public static function user(){
    if(isset(
$_COOKIE["login"])){
      
$data=json_decode(base64_decode($_COOKIE["login"]),TRUE);
    }elseif(isset(
$_SESSION["login"])){
      
$data=json_decode(base64_decode($_SESSION["login"]),TRUE);     
    }
    if(isset(
$data["loggedin"]) && !empty($data["key"])){  
      return array(
self::clean(substr($data["key"],60)),self::clean(substr($data["key"],0,60)));
    }     
    return 
FALSE;  
  }    
  
/**
  * Generate api or random string
  * @param length, start
  * @return 
  */    
    
public static function strrand($length=12,$api=""){    
        
$use "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
        
srand((double)microtime()*1000000); 
        for(
$i=0$i<$length$i++) { 
          
$api.= $use[rand()%strlen($use)]; 
        } 
      return 
$api
    }

  
/**
  * Get extension
  * @param file name
  * @return extension
  */   
    
public static function extension($file$dot TRUE){
        return 
$dot strrchr($file".") : str_replace(".","",strrchr($file".")); 
    }

  
/**
  * Generate slug
  * @param string
  * @return slug
  */  

  
public static function slug($text$replace=array(), $delimiter='-') {
    
$str $text;
    if( !empty(
$replace) ) {
      
$str str_replace((array)$replace' '$str);
    }

    
$text $str;
    static 
$translit = array(
      
'a' => '/[ÀÁÂẦẤẪẨÃĀĂẰẮẴȦẲǠẢÅÅǺǍȀȂẠẬẶḀĄẚàáâầấẫẩãāăằắẵẳȧǡảåǻǎȁȃạậặḁą]/u',
      
'b' => '/[ḂḄḆḃḅḇ]/u',     'c' => '/[ÇĆĈĊČḈçćĉċčḉ]/u',
      
'd' => '/[ÐĎḊḌḎḐḒďḋḍḏḑḓð]/u',
      
'e' => '/[ÈËÉĒĔĖĘĚȄȆȨḔḖḘḚḜẸẺẼẾỀỂỄỆèéëēĕėęěȅȇȩḕḗḙḛḝẹẻẽếềểễệ]/u',
      
'f' => '/[Ḟḟ]/u',       'g' => '/[ĜĞĠĢǦǴḠĝğġģǧǵḡ]/u',
      
'h' => '/[ĤȞḢḤḦḨḪĥȟḣḥḧḩḫẖ]/u',    'i' => '/[ÌÏĨĪĬĮİǏȈȊḬḮỈỊiìïĩīĭįǐȉȋḭḯỉị]/u',
      
'j' => '/[Ĵĵǰ]/u',        'k' => '/[ĶǨḰḲḴKķǩḱḳḵ]/u',
      
'l' => '/[ĹĻĽĿḶḸḺḼĺļľŀḷḹḻḽ]/u',   'm' => '/[ḾṀṂḿṁṃ]/u',
      
'n' => '/[ÑŃŅŇǸṄṆṈṊñńņňǹṅṇṉṋ]/u',
      
'o' => '/[ÒÖŌŎŐƠǑǪǬȌȎȪȬȮȰṌṎṐṒỌỎỐỒỔỖỘỚỜỞỠỢØǾòöōŏőơǒǫǭȍȏȫȭȯȱṍṏṑṓọỏốồổỗộớờởỡợøǿ]/u',
      
'p' => '/[ṔṖṕṗ]/u',       'r' => '/[ŔŖŘȐȒṘṚṜṞŕŗřȑȓṙṛṝṟ]/u',
      
's' => '/[ŚŜŞŠȘṠṢṤṦṨſśŝşšșṡṣṥṧṩ]/u',  'ss'  => '/[ß]/u',
      
't' => '/[ŢŤȚṪṬṮṰţťțṫṭṯṱẗ]/u',    'th'  => '/[Þþ]/u',
      
'u' => '/[ÙŨŪŬŮŰŲƯǓȔȖṲṴṶṸṺỤỦỨỪỬỮỰùũūŭůűųưǔȕȗṳṵṷṹṻụủứừửữựµ]/u',
      
'v' => '/[ṼṾṽṿ]/u',       'w' => '/[ŴẀẂẄẆẈŵẁẃẅẇẉẘ]/u',
      
'x' => '/[ẊẌẋẍ×]/u',      'y' => '/[ÝŶŸȲẎỲỴỶỸýÿŷȳẏẙỳỵỷỹ]/u',
      
'z' => '/[ŹŻŽẐẒẔźżžẑẓẕ]/u',       
      
//combined letters and ligatures:
      
'ae'  => '/[ÄǞÆǼǢäǟæǽǣ]/u',     'oe'  => '/[Œœ]/u',
      
'dz'  => '/[DŽDžDZDzdždz]/u',
      
'ff'  => '/[ff]/u',  'fi'  => '/[ffifi]/u''ffl' => '/[fflfl]/u',
      
'ij'  => '/[IJij]/u''lj'  => '/[LJLjlj]/u',  'nj'  => '/[NJNjnj]/u',
      
'st'  => '/[ſtst]/u''ue'  => '/[ÜǕǗǙǛüǖǘǚǜ]/u',
      
//currencies:
      
'eur'   => '/[€]/u',  'cents' => '/[¢]/u',  'lira'  => '/[₤]/u',  'dollars' => '/[$]/u',
      
'won' => '/[₩]/u',  'rs'  => '/[₨]/u',  'yen' => '/[¥]/u',  'pounds'  => '/[£]/u',
      
'pts' => '/[₧]/u',
      
//misc:
      
'degc'  => '/[℃]/u',  'degf'  => '/[℉]/u',
      
'no'  => '/[№]/u',  'tm'  => '/[™]/u'
    
);
    
//do the manual transliteration first
    
$str preg_replace (array_values ($translit), array_keys ($translit), $str);
    
    
//flatten the text down to just a-z0-9 and dash, with underscores instead of spaces
    
$str preg_replace (
      
//remove punctuation  //replace non a-z //deduplicate //trim underscores from start & end
      
array('/p{P}/u',  '/[^A-Za-z0-9]/''/-{2,}/''/^-|-$/'),
      array(
'-',           '-',              '-',       '-'),
      
      
//attempt transliteration with PHP5.4's transliteration engine (best):
      //(this method can handle near anything, including converting chinese and arabic letters to ASCII.
      // requires the 'intl' extension to be enabled)
      
function_exists ('transliterator_transliterate') ? transliterator_transliterate (
        
//split unicode accents and symbols, e.g. "Å" > "A°":
        
'NFKD; '.
        
//convert everything to the Latin charset e.g. "ま" > "ma":
        //(splitting the unicode before transliterating catches some complex cases,
        // such as: "㏳" >NFKD> "20日" >Latin> "20ri")
        
'Latin; '.
        
//because the Latin unicode table still contains a large number of non-pure-A-Z glyphs (e.g. "œ"),
        //convert what remains to an even stricter set of characters, the US-ASCII set:
        //(we must do this because "Latin/US-ASCII" alone is not able to transliterate non-Latin characters
        // such as "ま". this two-stage method also means we catch awkward characters such as:
        // "㏀" >Latin> "kΩ" >Latin/US-ASCII> "kO")
        
'Latin/US-ASCII; '.
        
//remove the now stand-alone diacritics from the string
        
'[:Nonspacing Mark:] Remove; '.
        
//change everything to lowercase; anything non A-Z 0-9 that remains will be removed by
        //the letter stripping above
        
'Lower',
      
$str)
      
      
//attempt transliteration with iconv: <php.net/manual/en/function.iconv.php>
      
strtolower (function_exists ('iconv') ? str_replace (array ("'"'"''`''^''~'), ''strtolower (
        
//note: results of this are different depending on iconv version,
        //      sometimes the diacritics are written to the side e.g. "ñ" = "~n", which are removed
        
iconv ('UTF-8''US-ASCII//IGNORE//TRANSLIT'$str)
      )) : 
$str)
    );
    
    
//old iconv versions and certain inputs may cause a nullstring. don't allow a blank response
    
if(!$str || $str =="_" || $str == "-"){
      
$str preg_replace("/[^A-Za-z0-9 -]/"''$text);  
      
$str preg_replace("/[/_|+ -]+/"$delimiter$str);
      
$str str_replace("'","",$str);
      
$str str_replace('"','',$str);
      
$str strtolower(rtrim(trim($str,'-'), '-'));
      if(empty(
$str) || $str =="_" || $str == "-"){
        return 
Main::strrand(5);
      }else{
        return 
$str;
      }                
    }else{
      return 
$str;
    }           
  }

  
/**
  * Clean cookie
  * @param cookie
  * @return cleaned cookie
  */  

    
public static function get_cookie($cookie){
      return 
Main::clean($cookie,1);
    }

  
/**
  * Convert a timestap into timeago format
  * @param time
  * @return timeago
  */  

    
public static function timeago($time$tense "ago"){
      if(empty(
$time)) return "n/a";
       
$time=strtotime($time);
       
$periods = array("second""minute""hour""day""week""month""year""decade");
       
$lengths = array("60","60","24","7","4.35","12","10");
       
$now time();
         
$difference $now $time;
         for(
$j 0$difference >= $lengths[$j] && $j count($lengths)-1$j++) {
           
$difference /= $lengths[$j];
         }
         
$difference round($difference);
         if(
$difference != 1) {
           
$periods[$j].= "s";
         }
       return 
"$difference $periods[$j] $tense ";
    } 

  
/**
  * Redirect function
  * @param url/path (not including base), message and header code
  * @return nothing
  */   

    
public static function redirect($url,$message=array(),$header="",$fullurl=FALSE){      

      if(!empty(
$message)){      
        
$_SESSION["msg"]=self::clean("{$message[0]}::{$message[1]}",2);
      }
      switch (
$header) {
        case 
'301':
          
header('HTTP/1.1 301 Moved Permanently');
          break;
        case 
'404':
          
header('HTTP/1.1 404 Not Found');
          break;
        case 
'503':
          
header('HTTP/1.1 503 Service Temporarily Unavailable');
          
header('Status: 503 Service Temporarily Unavailable');
          
header('Retry-After: 60');
          break;
      }
      if(
$fullurl){
        
header("Location: $url");
        exit;
      }    
      
header("Location: ".self::$config["url"]."/$url");
      exit;
    }

  
/**
  * Notification Function
  * @param none
  * @return message
  */     

    
public static function message($style=""){
      if(isset(
$_SESSION["msg"]) && !empty($_SESSION["msg"])) {
        
$message=explode("::",self::clean($_SESSION["msg"],2));
          
$message="<div class='custom-alert alert alert-{$message[0]}$style>{$message[1]}</div>";
          unset(
$_SESSION["msg"]);
      }else {
        
$message="";
      }
      return 
$message;
    }

  
/**
  * Show error message
  * @param message
  * @return formatted message
  */  
    
public static function error($message){
      return 
"<div class='custom-alert alert alert-danger'>$message</div>";
    }

  
/**
  * Truncate a string
  * @param string, delimiter, append string
  * @return truncated message
  */  
    
public static function truncate($string,$del,$limit="...") {
      
$len strlen($string);
        if (
$len $del) {
           
$new substr($string,0,$del).$limit;
            return 
$new;
        }
        return 
$string;
    } 

  
/**
  * Format Number
  * @param number, decimal
  * @return formatted number
  */  
    
public static function formatnumber($number,$decimal="0") {
      if(
$number>1000000000000$numberround($number /1000000000000$decimal)."T";
      if(
$number>1000000000$numberround($number /1000000000$decimal)."B";
      if(
$number>1000000$numberround($number /1000000$decimal)."M";
      if(
$number>10000$numberround($number /10000$decimal)."K";

      return 
$number;
    }  

  
/**
  * Get Facebook Likes
  * @param Facebook page
  * @return number of likes
  */   
      
public static function facebook_likes($url){
          if(
preg_match('((http://|https://|www.)facebook.+[w-d]+/(.*))'$url,$id)) {
          
$id $id[2];
          
$count Main::cache_get(__FUNCTION__);
          if(
$count == null){
            
$content json_decode(@file_get_contents("https://graph.facebook.com/$id/"),TRUE);
            
$count $content["likes"];
            
Main::cache_set(__FUNCTION__,$count,60);
          }
        return 
$count;        
          }
      }

  
/**
  * Ajax Button
  * @param type, max number of page, current page, url, text, class
  * @return formatted button
  */ 
    
public static function ajax_button($url$current$max$text='Load More'$class="btn btn-block btn-primary ajax_load"){
      if(
$current >= $max) return FALSE;
      return 
"<a href='".sprintf($url$current+1)."' class='$class'>$text</a>";
    }

  
/**
  * Generates url based on settings (seo or not)
  * @param default (non-seo), pretty urls (seo)
  * @return url
  */ 
    
public static function href($default="",$seo="",$base=TRUE){
      if(empty(
$seo)){
        if(
self::$config["mod_rewrite"]){
          return (!
$base)?"$default":self::$config["url"]."/$default";
        }else{
          return (!
$base)?"$default":self::$config["url"]."/index.php?a=$default";
        }        
      }else{
        if(
self::$config["mod_rewrite"]){
          return (!
$base)?"$seo":self::$config["url"]."/$seo";
        }else{
          return (!
$base)?"$default":self::$config["url"]."/index.php?a=$default";
        }
      }
    }

  
/**
  * Generates admin url based on settings (seo or not)
  * @see Main::href()
  * @param default (non-seo), pretty urls (seo)
  * @return url
  */ 
    
public static function ahref($default="",$seo="",$base=TRUE){
      if(empty(
$seo)){
        if(
self::$config["mod_rewrite"]){
          return (!
$base)?"admin/$default":self::$config["url"]."/admin/$default";
        }else{
          return (!
$base)?"admin/$default":self::$config["url"]."/admin/index.php?a=$default";
        }        
      }else{
        if(
self::$config["mod_rewrite"]){
          return (!
$base)?"admin/$seo":self::$config["url"]."/admin/$seo";
        }else{
          return (!
$base)?"admin/$default":self::$config["url"]."/admin/index.php?a=$default";
        }
      }      
    }
  
/**  
  * Generates pagination with class "pagination"
  * @param total number of pages, current pages, format of url
  * @return complete pagination elements
  */
  
public static function pagination($total$current$format$limit='1'$class='pager'){
         
$page_count ceil($total/$limit);
         
$current_range = array(($current-$current-3), ($current+$page_count $page_count $current+3));

         
$first_page $current '<li><a href="'.sprintf($format'1').'">'.Main::e("First").'</a></li>'.($current ' ' '') : null;
         
$last_page $current $page_count-? ($current $page_count-' ' '  ').'<li><a href="'.sprintf($format$page_count).'">'.Main::e("Last").'</a></li>' null;

         
$previous_page $current '<li class="previous"><a href="'.sprintf($format, ($current-1)).'">'.Main::e("Previous").'</a></li> ' null;
         
$next_page $current $page_count ' <li class="next"><a href="'.sprintf($format, ($current+1)).'">'.Main::e("Next").'</a></li> ' null;

         for (
$x=$current_range[0];$x <= $current_range[1]; ++$x)    
        
$pages[] = ($x == $current '<li class="active"><a href="#">'.$x.'</a></li>' '<li><a href="'.sprintf($format$x).'"">'.$x.'</a></li>');
         if (
$page_count 1)
      return 
'<ul class="pager">'.$first_page.$previous_page.implode(' '$pages).$next_page.$last_page.'</ul>';
  }

  
/**  
  * Generates the path to the thumbnail based on mod-rewrite settings
  * @param file name, width, height
  * @return url
  */    
    
public static function thumb($file,$width="",$height="",$base=TRUE){
      return 
Main::href("index.php?action=thumb&p=".Main::clean($file,3)."/$width/$height","thumb/".Main::clean($file,3)."/$width/$height",$base);
    }

/**  
* Validates the captcha based on settings
* @param data
* @return ok
* @since v2.0
*/  
    
public static function check_captcha($array){      
        if(
self::$config["captcha"]=="1"){
          
// Recaptcha
          
require_once(ROOT."/includes/library/Recaptcha.php");
          if(empty(
$array["recaptcha_response_field"])) {
            return 
e('Please enter the CAPTCHA.');  
          }else{
            
$resp recaptcha_check_answer (self::$config["captcha_private"],$_SERVER["REMOTE_ADDR"],$array["recaptcha_challenge_field"],$array["recaptcha_response_field"]);
            if (!
$resp->is_valid) {
              return 
e("The CAPTCHA wasn't entered correctly. Please try it again.");
            }
          }
        }
        return 
'ok';    
      }

/**  
* Generates CAPTCHA html based on settings
* @param none
* @return captcha
* @since v2.0
*/     
    
public static function captcha(){
        if(
self::$config["captcha"]=="1"){
          require_once(
ROOT."/includes/library/Recaptcha.php");
          echo 
recaptcha_get_html(self::$config["captcha_public"]);
        }elseif(
self::$config["captcha"]=="2"){
          require_once(
ROOT."/includes/library/Solvemedia.php");
          echo 
solvemedia_get_html(SV_CHALLENGE);
        }
    }

  
/**
  * Generated CSRF Token
  * @param none
  * @return token
  * @since v1.0
  */   
    
public static function csrf_token($form=FALSE,$echo=TRUE){
        if(
$form && $echo && isset($_SESSION["CSRF"])) return "<input type='hidden' name='token' value='{$_SESSION["CSRF"]}' />";      
        if(
$echo && isset($_SESSION["CSRF"])) return $_SESSION["CSRF"];

        
$token self::encode("csrf_token".rand(0,1000000).time().uniqid(),"SHA1");
        
$_SESSION["CSRF"] = $token;

        if(
$form) return "<input type='hidden' name='token' value='$token' />";
      return 
$token;
    }

  
/**
  * Validate CSRF Token
  * @param token
  * @return boolean
  * @since v1.0
  */   
    
public static function validate_csrf_token($token,$redirect=""){
      if(isset(
$_SESSION["CSRF"]) && ($_SESSION["CSRF"] == trim($token))) {
        unset(
$_SESSION["CSRF"]);
        return 
TRUE;
      }
      if(!empty(
$redirect)) self::redirect($redirect,array("error",e("The CSRF token is not valid. Please try again.")));
      return 
FALSE;
    }  
/**
  * Create Nonce
  * @param action, duration in minutes
  * @return token
  * @since v4.0
  */   
    
public static function nonce_create($action="",$duration="60"){
      
$i ceiltime() / ( $duration*60 ) );
      return 
md5$i $action $action);
    }
/**
  * Return Nonce
  * @param action, GET key
  * @return token
  * @since v4.0
  */   
    
public static function nonce($action="",$key="nonce"){
      return 
"?".$key."=".substr(self::nonce_create($action), -1210);
    }
  
/**
  * Validate Nonce
  * @param action, GET key
  * @return boolean
  * @since v4.0
  */   
    
public static function validate_nonce($action="",$key="nonce"){
      if(isset(
$_GET[$key]) && substr(self::nonce_create($action), -1210) == $_GET[$key]){
        return 
true;
      }
      return 
false;
    }  

  
/**
   * Set ucookie
   * @param Name, value
   * @since v1.0
   */  
    
public static function cookie($name,$value="",$time=1){
      if(empty(
$value)){
        if(isset(
$_COOKIE[$name])){
          return 
Main::clean($_COOKIE[$name],3,FALSE);
        }else{
          return 
FALSE;
        }
      }
      
setcookie($name,$valuetime()+($time*60), "/","",FALSE,TRUE);
    }
  
/**
   * Enqueue scripts to header and footer
   * @since v1.0
   */
    
public static function enqueue($where="header"){
      if(
$where=="footer"){  
        echo 
self::$enqueue["footer"];
      }else{
        echo 
self::$enqueue["header"];
      }
    }
  
/**
   * Add scripts to header and footer
   * @since v1.0
   */  
    
public static function add($url$type="script"$footer=TRUE){
      if(
$type == "style"){
        
$tag '<link rel="stylesheet" type="text/css" href="'.$url.'">';
      }elseif(
$type=="custom"){
        
$tag=$url;
      }else{
        
$tag '<script type="text/javascript" src="'.$url.'"></script>';
      }
      if(
$footer){        
        
self::$enqueue["footer"] .= $tag."nt";
      }else{
        
self::$enqueue["header"] .= $tag."nt";
      }
    } 
  
/**
   * Enqueue scripts to header and footer
   * @since v1.0
   */
    
public static function admin_enqueue($where="header"){
      if(
$where == "footer"){  
        echo 
self::$admin_enqueue["footer"];
      }else{
        echo 
self::$admin_enqueue["header"];
      } 
    }
  
/**
   * Add scripts to header and footer
   * @since v1.0
   */  
    
public static function admin_add($url,$type="script",$footer=TRUE){
      if(
$type=="style"){
        
$tag='<link rel="stylesheet" type="text/css" href="'.$url.'">';
      }elseif(
$type=="custom"){
        
$tag=$url;
      }else{
        
$tag='<script type="text/javascript" src="'.$url.'"></script>';
      }
      if(
$footer){
        
self::$admin_enqueue["footer"].=$tag."nt";
      }else{
        
self::$admin_enqueue["header"].=$tag."nt";
      }
    }
   
/**
    * List of CDNs
    * Powered by CloudFlare.com
    * @since 1.0
    **/  
    
public static function cdn($cdn,$version="",$admin=FALSE){
      
$cdns=array(
        
"jquery"=> array(
            
"src" => "//ajax.googleapis.com/ajax/libs/jquery/[version]/jquery.min.js",
            
"latest" =>"2.0.3"
          
),
        
"jquery-ui"=> array(
            
"src" => "//cdnjs.cloudflare.com/ajax/libs/jqueryui/[version]/jquery-ui.min.js",
            
"latest" =>"1.10.3"
          
),
        
"ace"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/ace/[version]/ace.js",
            
"latest" => "1.1.01"
          
),
        
"icheck"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/iCheck/[version]/icheck.min.js",
            
"latest" => "1.0.1"            
          
),
        
"ckeditor"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/ckeditor/[version]/ckeditor.js",
            
"latest" => "4.3.2"
          
),
        
"selectize"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/selectize.js/[version]/js/standalone/selectize.min.js",
            
"latest"=>"0.8.5",
            
"css" => "//cdnjs.cloudflare.com/ajax/libs/selectize.js/0.8.5/css/selectize.css"
          
),
        
"zlip"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/zclip/[version]/jquery.zclip.min.js",
            
"latest"=>"1.1.2"
          
),
        
"flot"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/flot/[version]/jquery.flot.min.js",
            
"latest"=>"0.8.2",
            
"js" => array(
                
"//cdnjs.cloudflare.com/ajax/libs/flot/0.8.2/jquery.flot.time.min.js",
                
"//cdnjs.cloudflare.com/ajax/libs/flot/0.8.2/jquery.flot.pie.min.js",
                
"//cdnjs.cloudflare.com/ajax/libs/flot/0.8.2/excanvas.min.js"
              
)
          ),
        
"less"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/less.js/[version]/less.min.js",
            
"latest"=>"1.6.2"
          
),
        
"ckeditor"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/ckeditor/[version]/ckeditor.js",
            
"latest"=>"4.3.2"
          
),
        
"pace"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/pace/[version]/pace.js",
            
"latest"=>"0.4.17"
          
),
        
"chosen"=>array(
            
"src"=>"//cdnjs.cloudflare.com/ajax/libs/chosen/[version]/chosen.jquery.min.js",
            
"latest"=>"1.1.0",
            
//"css"=> "//cdnjs.cloudflare.com/ajax/libs/chosen/1.1.0/chosen.css"
          
),
        
"color" => array(
            
"src" => "//cdnjs.cloudflare.com/ajax/libs/bootstrap-colorpicker/[version]/js/bootstrap-colorpicker.min.js",
            
"latest" => "2.1.0",
            
"css" => "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-colorpicker/2.1.0/css/bootstrap-colorpicker.min.css"
          
),
        
"owl" => array(
            
"src" => "//cdnjs.cloudflare.com/ajax/libs/owl-carousel/[version]/owl.carousel.min.js",
            
"latest" => "1.3.3",
            
"css" => "https://cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.carousel.min.css",
            )
        );
      if(
array_key_exists($cdn$cdns)){
        if(!empty(
$version)  && $version <= $cdns[$cdn]["latest"]){
          
$js=str_replace("[version]"$version$cdns[$cdn]["src"])."?v=$version";
        }else{
          
$js=str_replace("[version]"$cdns[$cdn]["latest"], $cdns[$cdn]["src"])."?v={$cdns[$cdn]["latest"]}";
        }
       if(
$admin){                    
          
Main::admin_add($js,"script",FALSE);          
          if(isset(
$cdns[$cdn]["css"])) Main::admin_add($cdns[$cdn]["css"]."?v={$cdns[$cdn]["latest"]}","style",FALSE);
          if(isset(
$cdns[$cdn]["js"])){
            foreach (
$cdns[$cdn]["js"] as $key) {
              
Main::admin_add($key."?v={$cdns[$cdn]["latest"]}","script",FALSE);
            }
          } 
          return 
TRUE;             
        }else{
          
Main::add($js,"script",FALSE);          
          if(isset(
$cdns[$cdn]["css"])) Main::add($cdns[$cdn]["css"]."?v={$cdns[$cdn]["latest"]}","style",FALSE);
          if(isset(
$cdns[$cdn]["js"])){
            foreach (
$cdns[$cdn]["js"] as $key) {
              
Main::add($key."?v={$cdns[$cdn]["latest"]}","script",FALSE);
            }
          } 
          return 
TRUE;         
        }
      }
      return 
FALSE;
    }
  
/**
   * Translate strings
   * @since v1.0
   */   
    
public static function e($text){
      if(!
is_array(Main::$lang)) return $text;
      if(isset(
Main::$lang[$text]) && !empty(Main::$lang[$text])) {
        return 
ucfirst(Main::$lang[$text]);
      }
      return 
$text;    
    }
  
/**
   * Check if user agent is bot
   * @since v1.0
   */  
  
public static function bot($ua=""){
    if(empty(
$ua)){
      if(!isset(
$_SERVER['HTTP_USER_AGENT']) || empty($_SERVER['HTTP_USER_AGENT']) || is_null($_SERVER['HTTP_USER_AGENT'])){
        return 
TRUE;
      }
      
$ua=$_SERVER['HTTP_USER_AGENT'];
    }
    
$list = array("facebookexternalhit","Teoma""alexa""froogle""Gigabot""inktomi",
    
"looksmart""URL_Spider_SQL""Firefly""NationalDirectory",
    
"Ask Jeeves""TECNOSEEK""InfoSeek""WebFindBot""girafabot",
    
"crawler""www.galaxy.com""Googlebot""Scooter""Slurp",
    
"msnbot""appie""FAST""WebBug""Spade""ZyBorg""rabaz",
    
"Baiduspider""Feedfetcher-Google""TechnoratiSnoop""Rankivabot",
    
"Mediapartners-Google""Sogou web spider""WebAlta Crawler","TweetmemeBot",
    
"Butterfly","Twitturls","Me.dium","Twiceler");
    foreach(
$list as $bot){
      if(
strpos($ua,$bot)!==false)
      return 
true;
    }
    return 
false
  }  
  
/**
   * Custom cURL Function
   * @since 1.0
   **/  
  
public static function http($url$option=array()){   
    if(
ini_get('allow_url_fopen') && !isset($option["post"])){
      return @
file_get_contents($url);
    }    
    if(
in_array('curl'get_loaded_extensions())){ 
      
$curl curl_init();
      
curl_setopt($curlCURLOPT_URL$url);
      if(isset(
$option["post"]) && isset($option["data"]) && is_array($option["data"])){
        
$fields="";
        
//url-ify the data for the POST
        
foreach($option["data"] as $key=>$value) { $fields .= $key.'='.$value.'&'; }

        
rtrim($fields'&');       
        
curl_setopt($curlCURLOPT_POSTcount($option["data"]));
        
curl_setopt($curlCURLOPT_POSTFIELDS$fields);
      }
      
curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
      
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      
$resp curl_exec($curl);
      
curl_close($curl);
      return 
$resp;
    }    
    return 
FALSE;
  }  
  
/**
   * Send Email
   * @param array
   * @return boolean
   */  
  
public static function send(array $array){    
    require_once(
ROOT."/includes/library/PHPMailer.class.php");
    
$mail= new PHPMailer();  
    if(!empty(
self::$config["smtp"]["host"])){
      
$mail->IsSMTP();
      
$mail->SMTPAuth true;
      
$mail->SMTPSecure "tls";
      
$mail->Hostself::$config["smtp"]["host"];
      
$mail->Port self::$config["smtp"]["port"]; 
      
$mail->Usernameself::$config["smtp"]["user"]; 
      
$mail->Password  self::$config["smtp"]["pass"];     
    }
    
$mail->CharSet "utf-8";
    
$mail->IsHTML(true); 
    
$mail->SetFrom(self::$config["email"], self::$config["title"]);
    
$mail->AddReplyTo(self::$config["email"], self::$config["title"]);
    
$mail->AddAddress($array["to"]);
    
$mail->Subject$array["subject"];    

    
$content=file_get_contents(THEME."/email.php");
    
$content=str_replace("[subject]",$array["subject"],$content);
    
$content=str_replace("[message]",$array["message"],$content);
    
$content=str_replace("[title]",self::$config["title"],$content);
    
$content=str_replace("[url]",self::$config["url"],$content);
    if(!empty(
self::$config["facebook"])){
      
$content=str_replace("[facebook]"," <a href='".self::$config["facebook"]."'>Like us on Facebook</a>",$content);  
    }else{
      
$content=str_replace("[facebook]","",$content);  
    }
    if(!empty(
self::$config["twitter"])){
      
$content=str_replace("[twitter]"," <a href='".self::$config["twitter"]."'>Follow us on Twitter</a>",$content);
    }else{
      
$content=str_replace("[twitter]","",$content);  
    }
    
$mail->Body $content;
    if(!
$mail->Send()) {
        
error_log("SMTP Error: {$mail->ErrorInfo}");
        
$headers  'From:  '.self::$config["title"].' <'.self::$config["email"].'>' "rn";
        
$headers .= 'MIME-Version: 1.0' "rn";
        
$headers .= 'Content-type: text/html; charset=utf-8' "rn";
        
mail($array["to"], $array["subject"], $content$headers);
        return 
TRUE;
    } else {
      return 
TRUE;
    }          
  }  
  
/**
   * Country Codes
   * @since 1.0
   **/
 
public static function ccode($code,$reverse=FALSE){
    
$array=array('AF' => 'Afghanistan''AX' => 'Aland Islands''AL' => 'Albania''DZ' => 'Algeria''AS' => 'American Samoa''AD' => 'Andorra''AO' => 'Angola''AI' => 'Anguilla''AQ' => 'Antarctica''AG' => 'Antigua And Barbuda''AR' => 'Argentina''AM' => 'Armenia''AW' => 'Aruba''AU' => 'Australia''AT' => 'Austria''AZ' => 'Azerbaijan''BS' => 'Bahamas''BH' => 'Bahrain''BD' => 'Bangladesh''BB' => 'Barbados''BY' => 'Belarus''BE' => 'Belgium''BZ' => 'Belize''BJ' => 'Benin''BM' => 'Bermuda''BT' => 'Bhutan''BO' => 'Bolivia''BA' => 'Bosnia And Herzegovina''BW' => 'Botswana''BV' => 'Bouvet Island''BR' => 'Brazil''IO' => 'British Indian Ocean Territory''BN' => 'Brunei Darussalam''BG' => 'Bulgaria''BF' => 'Burkina Faso''BI' => 'Burundi''KH' => 'Cambodia''CM' => 'Cameroon''CA' => 'Canada''CV' => 'Cape Verde''KY' => 'Cayman Islands''CF' => 'Central African Republic''TD' => 'Chad''CL' => 'Chile''CN' => 'China''CX' => 'Christmas Island''CC' => 'Cocos (Keeling) Islands''CO' => 'Colombia''KM' => 'Comoros''CG' => 'Congo''CD' => 'Congo, Democratic Republic''CK' => 'Cook Islands''CR' => 'Costa Rica''CI' => 'Cote D'Ivoire', 'HR' => 'Croatia', 'CU' => 'Cuba', 'CY' => 'Cyprus', 'CZ' => 'Czech Republic', 'DK' => 'Denmark', 'DJ' => 'Djibouti', 'DM' => 'Dominica', 'DO' => 'Dominican Republic', 'EC' => 'Ecuador', 'EG' => 'Egypt', 'SV' => 'El Salvador', 'GQ' => 'Equatorial Guinea', 'ER' => 'Eritrea', 'EE' => 'Estonia', 'ET' => 'Ethiopia', 'FK' => 'Falkland Islands (Malvinas)', 'FO' => 'Faroe Islands', 'FJ' => 'Fiji', 'FI' => 'Finland', 'FR' => 'France', 'GF' => 'French Guiana', 'PF' => 'French Polynesia', 'TF' => 'French Southern Territories', 'GA' => 'Gabon', 'GM' => 'Gambia', 'GE' => 'Georgia', 'DE' => 'Germany', 'GH' => 'Ghana', 'GI' => 'Gibraltar', 'GR' => 'Greece', 'GL' => 'Greenland', 'GD' => 'Grenada', 'GP' => 'Guadeloupe', 'GU' => 'Guam', 'GT' => 'Guatemala', 'GG' => 'Guernsey', 'GN' => 'Guinea', 'GW' => 'Guinea-Bissau', 'GY' => 'Guyana', 'HT' => 'Haiti', 'HM' => 'Heard Island Mcdonald Islands', 'VA' => 'Holy See (Vatican City State)', 'HN' => 'Honduras', 'HK' => 'Hong Kong', 'HU' => 'Hungary', 'IS' => 'Iceland', 'IN' => 'India', 'ID' => 'Indonesia', 'IR' => 'IranIslamic Republic Of', 'IQ' => 'Iraq', 'IE' => 'Ireland', 'IM' => 'Isle Of Man', 'IL' => 'Israel', 'IT' => 'Italy', 'JM' => 'Jamaica', 'JP' => 'Japan', 'JE' => 'Jersey', 'JO' => 'Jordan', 'KZ' => 'Kazakhstan', 'KE' => 'Kenya', 'KI' => 'Kiribati', 'KR' => 'Korea', 'KW' => 'Kuwait', 'KG' => 'Kyrgyzstan', 'LA' => 'Lao People's Democratic Republic''LV' => 'Latvia''LB' => 'Lebanon''LS' => 'Lesotho''LR' => 'Liberia''LY' => 'Libyan Arab Jamahiriya''LI' => 'Liechtenstein''LT' => 'Lithuania''LU' => 'Luxembourg''MO' => 'Macao''MK' => 'Macedonia''MG' => 'Madagascar''MW' => 'Malawi''MY' => 'Malaysia''MV' => 'Maldives''ML' => 'Mali''MT' => 'Malta''MH' => 'Marshall Islands''MQ' => 'Martinique''MR' => 'Mauritania''MU' => 'Mauritius''YT' => 'Mayotte''MX' => 'Mexico''FM' => 'Micronesia, Federated States Of''MD' => 'Moldova''MC' => 'Monaco''MN' => 'Mongolia''ME' => 'Montenegro''MS' => 'Montserrat''MA' => 'Morocco''MZ' => 'Mozambique''MM' => 'Myanmar''NA' => 'Namibia''NR' => 'Nauru''NP' => 'Nepal''NL' => 'Netherlands''AN' => 'Netherlands Antilles''NC' => 'New Caledonia''NZ' => 'New Zealand''NI' => 'Nicaragua''NE' => 'Niger''NG' => 'Nigeria''NU' => 'Niue''NF' => 'Norfolk Island''MP' => 'Northern Mariana Islands''NO' => 'Norway''OM' => 'Oman''PK' => 'Pakistan''PW' => 'Palau''PS' => 'Palestinian Territory, Occupied''PA' => 'Panama''PG' => 'Papua New Guinea''PY' => 'Paraguay''PE' => 'Peru''PH' => 'Philippines''PN' => 'Pitcairn''PL' => 'Poland''PT' => 'Portugal''PR' => 'Puerto Rico''QA' => 'Qatar''RE' => 'Reunion''RO' => 'Romania''RU' => 'Russian Federation''RW' => 'Rwanda''BL' => 'Saint Barthelemy''SH' => 'Saint Helena''KN' => 'Saint Kitts And Nevis''LC' => 'Saint Lucia''MF' => 'Saint Martin''PM' => 'Saint Pierre And Miquelon''VC' => 'Saint Vincent And Grenadines''WS' => 'Samoa''SM' => 'San Marino''ST' => 'Sao Tome And Principe''SA' => 'Saudi Arabia''SN' => 'Senegal''RS' => 'Serbia''SC' => 'Seychelles''SL' => 'Sierra Leone''SG' => 'Singapore''SK' => 'Slovakia''SI' => 'Slovenia''SB' => 'Solomon Islands''SO' => 'Somalia''ZA' => 'South Africa''GS' => 'South Georgia And Sandwich Isl.''ES' => 'Spain''LK' => 'Sri Lanka''SD' => 'Sudan''SR' => 'Suriname''SJ' => 'Svalbard And Jan Mayen''SZ' => 'Swaziland''SE' => 'Sweden''CH' => 'Switzerland''SY' => 'Syrian Arab Republic''TW' => 'Taiwan''TJ' => 'Tajikistan''TZ' => 'Tanzania''TH' => 'Thailand''TL' => 'Timor-Leste''TG' => 'Togo''TK' => 'Tokelau''TO' => 'Tonga''TT' => 'Trinidad And Tobago''TN' => 'Tunisia''TR' => 'Turkey''TM' => 'Turkmenistan''TC' => 'Turks And Caicos Islands''TV' => 'Tuvalu''UG' => 'Uganda''UA' => 'Ukraine''AE' => 'United Arab Emirates''GB' => 'United Kingdom''US' => 'United States''UM' => 'United States Outlying Islands''UY' => 'Uruguay''UZ' => 'Uzbekistan''VU' => 'Vanuatu''VE' => 'Venezuela''VN' => 'Viet Nam''VG' => 'Virgin Islands, British''VI' => 'Virgin Islands, U.S.''WF' => 'Wallis And Futuna''EH' => 'Western Sahara''YE' => 'Yemen''ZM' => 'Zambia''ZW' => 'Zimbabwe');
    if(
$reverse){
      
$array=array_flip($array);
      if(isset(
$array[$code])) return $array[$code];      
    }
    
$code=strtoupper($code);
    if(isset(
$array[$code])) return $array[$code];
    return 
FALSE;
  }
  
/**
   * List of Countries and ISO Code
   * @since 1.0
   **/
  
public static function countries($code=""){
    
$countries=array('AF'=>'Afghanistan','AX'=>'Aland Islands','AL'=>'Albania','DZ'=>'Algeria','AS'=>'American Samoa','AD'=>'Andorra','AO'=>'Angola','AI'=>'Anguilla','AQ'=>'Antarctica','AG'=>'Antigua And Barbuda','AR'=>'Argentina','AM'=>'Armenia','AW'=>'Aruba','AU'=>'Australia','AT'=>'Austria','AZ'=>'Azerbaijan','BS'=>'Bahamas','BH'=>'Bahrain','BD'=>'Bangladesh','BB'=>'Barbados','BY'=>'Belarus','BE'=>'Belgium','BZ'=>'Belize','BJ'=>'Benin','BM'=>'Bermuda','BT'=>'Bhutan','BO'=>'Bolivia','BA'=>'Bosnia And Herzegovina','BW'=>'Botswana','BV'=>'Bouvet Island','BR'=>'Brazil','IO'=>'British Indian Ocean Territory','BN'=>'Brunei Darussalam','BG'=>'Bulgaria','BF'=>'Burkina Faso','BI'=>'Burundi','KH'=>'Cambodia','CM'=>'Cameroon','CA'=>'Canada','CV'=>'Cape Verde','KY'=>'Cayman Islands','CF'=>'Central African Republic','TD'=>'Chad','CL'=>'Chile','CN'=>'China','CX'=>'Christmas Island','CC'=>'Cocos (Keeling) Islands','CO'=>'Colombia','KM'=>'Comoros','CG'=>'Congo','CD'=>'Congo, Democratic Republic','CK'=>'Cook Islands','CR'=>'Costa Rica','CI'=>'Cote D'Ivoire','HR'=>'Croatia','CU'=>'Cuba','CY'=>'Cyprus','CZ'=>'Czech Republic','DK'=>'Denmark','DJ'=>'Djibouti','DM'=>'Dominica','DO'=>'Dominican Republic','EC'=>'Ecuador','EG'=>'Egypt','SV'=>'El Salvador','GQ'=>'Equatorial Guinea','ER'=>'Eritrea','EE'=>'Estonia','ET'=>'Ethiopia','FK'=>'Falkland Islands (Malvinas)','FO'=>'Faroe Islands','FJ'=>'Fiji','FI'=>'Finland','FR'=>'France','GF'=>'French Guiana','PF'=>'French Polynesia','TF'=>'French Southern Territories','GA'=>'Gabon','GM'=>'Gambia','GE'=>'Georgia','DE'=>'Germany','GH'=>'Ghana','GI'=>'Gibraltar','GR'=>'Greece','GL'=>'Greenland','GD'=>'Grenada','GP'=>'Guadeloupe','GU'=>'Guam','GT'=>'Guatemala','GG'=>'Guernsey','GN'=>'Guinea','GW'=>'Guinea-Bissau','GY'=>'Guyana','HT'=>'Haiti','HM'=>'Heard Island Mcdonald Islands','VA'=>'Holy See (Vatican City State)','HN'=>'Honduras','HK'=>'Hong Kong','HU'=>'Hungary','IS'=>'Iceland','IN'=>'India','ID'=>'Indonesia','IR'=>'IranIslamic Republic Of','IQ'=>'Iraq','IE'=>'Ireland','IM'=>'Isle Of Man','IL'=>'Israel','IT'=>'Italy','JM'=>'Jamaica','JP'=>'Japan','JE'=>'Jersey','JO'=>'Jordan','KZ'=>'Kazakhstan','KE'=>'Kenya','KI'=>'Kiribati','KR'=>'Korea','KW'=>'Kuwait','KG'=>'Kyrgyzstan','LA'=>'Lao People's Democratic Republic','LV'=>'Latvia','LB'=>'Lebanon','LS'=>'Lesotho','LR'=>'Liberia','LY'=>'Libyan Arab Jamahiriya','LI'=>'Liechtenstein','LT'=>'Lithuania','LU'=>'Luxembourg','MO'=>'Macao','MK'=>'Macedonia','MG'=>'Madagascar','MW'=>'Malawi','MY'=>'Malaysia','MV'=>'Maldives','ML'=>'Mali','MT'=>'Malta','MH'=>'Marshall Islands','MQ'=>'Martinique','MR'=>'Mauritania','MU'=>'Mauritius','YT'=>'Mayotte','MX'=>'Mexico','FM'=>'Micronesia, Federated States Of','MD'=>'Moldova','MC'=>'Monaco','MN'=>'Mongolia','ME'=>'Montenegro','MS'=>'Montserrat','MA'=>'Morocco','MZ'=>'Mozambique','MM'=>'Myanmar','NA'=>'Namibia','NR'=>'Nauru','NP'=>'Nepal','NL'=>'Netherlands','AN'=>'Netherlands Antilles','NC'=>'New Caledonia','NZ'=>'New Zealand','NI'=>'Nicaragua','NE'=>'Niger','NG'=>'Nigeria','NU'=>'Niue','NF'=>'Norfolk Island','MP'=>'Northern Mariana Islands','NO'=>'Norway','OM'=>'Oman','PK'=>'Pakistan','PW'=>'Palau','PS'=>'Palestinian Territory, Occupied','PA'=>'Panama','PG'=>'Papua New Guinea','PY'=>'Paraguay','PE'=>'Peru','PH'=>'Philippines','PN'=>'Pitcairn','PL'=>'Poland','PT'=>'Portugal','PR'=>'Puerto Rico','QA'=>'Qatar','RE'=>'Reunion','RO'=>'Romania','RU'=>'Russian Federation','RW'=>'Rwanda','BL'=>'Saint Barthelemy','SH'=>'Saint Helena','KN'=>'Saint Kitts And Nevis','LC'=>'Saint Lucia','MF'=>'Saint Martin','PM'=>'Saint Pierre And Miquelon','VC'=>'Saint Vincent And Grenadines','WS'=>'Samoa','SM'=>'San Marino','ST'=>'Sao Tome And Principe','SA'=>'Saudi Arabia','SN'=>'Senegal','RS'=>'Serbia','SC'=>'Seychelles','SL'=>'Sierra Leone','SG'=>'Singapore','SK'=>'Slovakia','SI'=>'Slovenia','SB'=>'Solomon Islands','SO'=>'Somalia','ZA'=>'South Africa','GS'=>'South Georgia And Sandwich Isl.','ES'=>'Spain','LK'=>'Sri Lanka','SD'=>'Sudan','SR'=>'Suriname','SJ'=>'Svalbard And Jan Mayen','SZ'=>'Swaziland','SE'=>'Sweden','CH'=>'Switzerland','SY'=>'Syrian Arab Republic','TW'=>'Taiwan','TJ'=>'Tajikistan','TZ'=>'Tanzania','TH'=>'Thailand','TL'=>'Timor-Leste','TG'=>'Togo','TK'=>'Tokelau','TO'=>'Tonga','TT'=>'Trinidad And Tobago','TN'=>'Tunisia','TR'=>'Turkey','TM'=>'Turkmenistan','TC'=>'Turks And Caicos Islands','TV'=>'Tuvalu','UG'=>'Uganda','UA'=>'Ukraine','AE'=>'United Arab Emirates','GB'=>'United Kingdom','US'=>'United States','UM'=>'United States Outlying Islands','UY'=>'Uruguay','UZ'=>'Uzbekistan','VU'=>'Vanuatu','VE'=>'Venezuela','VN'=>'Viet Nam','VG'=>'Virgin Islands, British','VI'=>'Virgin Islands, U.S.','WF'=>'Wallis And Futuna','EH'=>'Western Sahara','YE'=>'Yemen','ZM'=>'Zambia','ZW'=>'Zimbabwe');
    
$form="";
    foreach (
$countries as $key => $value) {
      
$form.='<option value="'.strtolower($key).'"'.($code==strtolower($key)?' selected':'').'>'.$value.'</option>';
    }
    return 
$form;
  }
  
/**
   * Currency
   * @since 1.0
   **/
  
public static function currency($code="",$amount=""){
    
$array = array('AUD' => array('label'=>'Australian Dollar','format' => '$%s'),'CAD' => array('label' => 'Canadian Dollar','format' => '$%s'),'EUR' => array('label' => 'Euro','format' => '€ %s'),'GBP' => array('label' => 'Pound Sterling','format' => '£ %s'),'JPY' => array('label' => 'Japanese Yen','format' => '¥ %s'),'USD' => array('label' => 'U.S. Dollar','format' => '$%s'),'NZD' => array('label' => 'N.Z. Dollar','format' => '$%s'),'CHF' => array('label' => 'Swiss Franc','format' => '%s Fr'),'HKD' => array('label' => 'Hong Kong Dollar','format' => '$%s'),'SGD' => array('label' => 'Singapore Dollar','format' => '$%s'),'SEK' => array('label' => 'Swedish Krona','format' => '%s kr'),'DKK' => array('label' => 'Danish Krone','format' => '%s kr'),'PLN' => array('label' => 'Polish Zloty','format' => '%s zł'),'NOK' => array('label' => 'Norwegian Krone','format' => '%s kr'),'HUF' => array('label' => 'Hungarian Forint','format' => '%s Ft'),'CZK' => array('label' => 'Czech Koruna','format' => '%s Kč'),'ILS' => array('label' => 'Israeli New Sheqel','format' => '₪ %s'),'MXN' => array('label' => 'Mexican Peso','format' => '$%s'),'BRL' => array('label' => 'Brazilian Real','format' => 'R$%s'),'MYR' => array('label' => 'Malaysian Ringgit','format' => 'RM %s'),'PHP' => array('label' => 'Philippine Peso','format' => '₱ %s'),'TWD' => array('label' => 'New Taiwan Dollar','format' => 'NT$%s'),'THB' => array('label' => 'Thai Baht','format' => '฿ %s'),'TRY' => array('label' => 'Turkish Lira','format' => 'TRY %s'));
    if(empty(
$code)) return $array;
    
    
$code=strtoupper($code);
    if(isset(
$array[$code])) return sprintf($array[$code]["format"],$amount);
  }   
 
/**
  * Get Domain
  * @since 1.0
  **/  
  
public static function domain($url,$scheme=TRUE,$http=TRUE){
    
$url=parse_url($url);
    if(!isset(
$url["host"])) return false;
    
$url["host"] = explode(".",str_replace("www."""$url["host"]));
    
$url["host"] = $url["host"][0];
    return (
$scheme ? ($http $url["scheme"]."://".$url["host"] : $url["host"] ) : $url["host"]);
  }
 
/**
  * Cache Data
  * @since 4.0
  **/
  
public static function cache_set($id,$data,$time){
    if(!isset(
self::$config["cache"]) || !self::$config["cache"]) return NULL;
    return 
phpFastCache::set($id,$data,60*$time);
  }
 
/**
  * Cache Get
  * @since 4.0
  **/
  
public static function cache_get($id){
    if(!isset(
self::$config["cache"]) || !self::$config["cache"]) return NULL;
    return 
phpFastCache::get($id);
  } 
 
/**
  * Plug-in Function
  * @author KBRmedia
  * @since  1.0
  * @param  string $area  Area to plugin function
  * @param  array  $param Parameters sent by the function
  */
  
public static function plug($area$param = array()){
    
$return "";
    if(isset(
self::$plugin[$area]) && is_array(self::$plugin[$area])) {
      foreach (
self::$plugin[$area] as $fn) {
       if(
is_array($fn) && class_exists($fn[0]) && method_exists($fn[0], $fn[1])){        
          
$f $fn[1];
          
$return .= $fn[0]::$f($param);       
        }elseif(
function_exists($fn)){
          
$return .= $fn($param);
        }
      }
      return 
$return;
    }
  }
 
/**
  * Register Plug in
  * @since 1.0
  **/
  
public static function hook($area$fn){
    if(
is_array($fn) && class_exists($fn[0]) && method_exists($fn[0], $fn[1])){
      
self::$plugin[$area][] = $fn;  
      return;    
    }
    if(
function_exists($fn)) {
      
self::$plugin[$area][] = $fn;  
      return;
    }
  }
  
/**
   * Register Shortcode
   * @since 1.0
   */
  
public static function register_shortcode($name$fn){
    if(
is_array($fn) && class_exists($fn[0]) && method_exists($fn[0], $fn[1])){
      
self::$shortcode[$name][] = $fn;  
      return;    
    }
    if(
function_exists($fn)) {
      
self::$shortcode[$name][] = $fn;  
      return;
    }
  } 
  
/**
   * Parse Shortcode
   * @author KBRmedia
   * @since  1.0
   */
  
public static function parse_shortcode($content){
    
$content preg_match_all('/(w+)s*=s*"([^"]*)"(?:s|$)|(w+)s*=s*'([^']*)'(?:s|$)|(w+)s*=s*([^s'"]+)(?:s|$)|"([^"]*)"(?:s|$)|(S+)(?:s|$)/'trim$content ), $c );
    list( 
$dummy$keys$values ) = array_values$c );
    
var_dump($dummy$keys$values);
  }   
  
/**
   * Share Buttons
   * @author KBRmedia
   * @since  1.0
   */
  
public static function share($url$title$site = array()){
    
$html  "";
    if(empty(
$site) || in_array("facebook",$site)){
      
$html .="<a href='http://www.facebook.com/sharer.php?u=$url' target='_blank' class='popup'><span class='fa fa-facebook'></span></a>";
    }
    if(empty(
$site) || in_array("twitter",$site)){
      
$html .="<a href='http://twitter.com/share?url=$url&text=$title' target='_blank' class='popup'><span class='fa fa-twitter'></span></a>";
    }
    if(empty(
$site) || in_array("google",$site)){
      
$html .="<a href='https://plus.google.com/share?url=$url' target='_blank' class='popup'><span class='fa fa-google'></span></a>";
    }
    if(empty(
$site) || in_array("digg",$site)){
      
$html .="<a href='http://www.digg.com/submit?url=$url' target='_blank' class='popup'><span class='fa fa-digg'></span></a>";
    }
    if(empty(
$site) || in_array("reddit",$site)){
      
$html .="<a href='http://reddit.com/submit?url=$url&title=$title' target='_blank' class='popup'><span class='fa fa-reddit'></span></a>";
    }
    if(empty(
$site) || in_array("linkedin",$site)){
      
$html .="<a href='http://www.linkedin.com/shareArticle?mini=true&url=$url' target='_blank' class='popup'><span class='fa fa-linkedin'></span></a>";
    }
    if(empty(
$site) || in_array("stumbleupon",$site)){
      
$html .="<a href='http://www.stumbleupon.com/submit?url=$url&title=$title' target='_blank' class='popup'><span class='fa fa-stumbleupon'></span></a>";
    }

    return 
$html;
  }
  
/**
   * Media Types
   * @author KBRmedia
   * @since  1.0
   */
  
public static function types($type NULL$html FALSE$plural FALSE$class='type'){
    
// Array of types
    
$types = array();
    if(
self::$config["type"]["video"]){
      
$types["video"] = e("Video");
    }  
    if(
self::$config["type"]["music"]){
      
$types["music"] = e("Music Video");
    }
    if(
self::$config["type"]["picture"]){
      
$types["picture"] = e("Picture");
    }
    if(
self::$config["type"]["vine"]){
      
$types["vine"] = e("Vine");
    }
    if(
self::$config["type"]["post"]){
      
$types["post"] = e("Post");
    }    
    
// Return HTML
    
if($html){
      
$html "<select name='type' id='$class' class='$class'>";
        foreach (
$types as $value => $text) {       
          
$html .="<option value='$value' ".(!is_null($type) && $type == $value "selected" "").">$text</option>";
        }
      
$html .="</select>";
      return 
$html;
    }
    if(
is_null($type)) return $types;
    if(isset(
$types[$type])) return ($plural) ? $types[$type] : $types[$type];
    return 
FALSE;    
  }  
  
/**
   * Generate Thumbnail
   * @author KBRmedia
   * @since  1.0
   */
  
public static function generatethumb($src,$dest='',$desired_width$desired_height "auto"$quality='100'){

        if(!
file_exists($src)) return array("error"=>TRUE"msg"=> "This file ($src) doesn't exist."); 

        
$extension self::extension($src);   // Gets the extension of the file
        
if(empty($dest)){
          
$dest=str_replace($extension$desired_width.$extension$src); //Rename the file if the user didn't rename it.
        
}
        
$suffix = array(        
          
'.jpeg' => 'jpeg',      
          
'.jpg' => 'jpeg',      
          
'.gif' => 'gif',        
          
'.png' => 'png'      
        
);
        if(
$suffix[$extension]=="png"){
          
$quality=0;
        }elseif (
$suffix[$extension]=="gif") {
          
$quality=FALSE;
        }

        
//Determines if the file has a valid extension, if not outputs an error.
        
if(!isset($suffix[$extension])) return array("error"=>TRUE"msg"=> "Unknown File Type. You can only resize jpeg (jpg), gif and png.");

        
//Proceeds with resizing
        
$image_suffix=$suffix[$extension];
        
$createfrom='imagecreatefrom'.$image_suffix;    
        
$image='image'.$image_suffix;
          
$source_image $createfrom($src);
          
$width imagesx($source_image);
          
$height imagesy($source_image);
          if(
$desired_height == "auto"$desired_height floor($height*($desired_width/$width));
          
$virtual_image imagecreatetruecolor($desired_width,$desired_height);
          
imagecopyresampled($virtual_image,$source_image,0,0,0,0,$desired_width,$desired_height,$width,$height);
          
$image($virtual_image,$dest,$quality);

        return array(
"error"=>FALSE"msg"=> "Image has been successfully resized.""thumb"=>$dest);
  } 
  
/**
   * Generate and Crop Thumbnail
   * @author KBRmedia
   * @since  1.3
   */
  
public static function cropthumb($src,$dest=''$desired_width$desired_height $quality='100'){

        if(!
file_exists($src)) return array("error"=>TRUE"msg"=> "This file ($src) doesn't exist."); 

        
$extension self::extension($src);   // Gets the extension of the file
        
if(empty($dest)){
          
$dest=str_replace($extension$desired_width.$extension$src); //Rename the file if the user didn't rename it.
        
}
        
$suffix = array(        
          
'.jpeg' => 'jpeg',      
          
'.jpg' => 'jpeg',      
          
'.gif' => 'gif',        
          
'.png' => 'png'      
        
);
        if(
$suffix[$extension]=="png"){
          
$quality=0;
        }elseif (
$suffix[$extension]=="gif") {
          
$quality=FALSE;
        }

        
//Determines if the file has a valid extension, if not outputs an error.
        
if(!isset($suffix[$extension])) return array("error"=>TRUE"msg"=> "Unknown File Type. You can only resize jpeg (jpg), gif and png.");
        
        
$start_X floor($desired_width 4); 
        
$start_Y floor($desired_height 4);
        
$end_x 3*$start_X;
        
$end_y 3*$start_Y;

        
//Proceeds with resizing
        
$image_suffix=$suffix[$extension];
        
$createfrom='imagecreatefrom'.$image_suffix;    
        
$image='image'.$image_suffix;
          
$source_image $createfrom($src);
          
$width imagesx($source_image);
          
$height imagesy($source_image);          
          
$virtual_image imagecreatetruecolor($desired_width,$desired_height);
          
imagecopyresampled($virtual_image,$source_image0000,$desired_width,$desired_height,200200);
          
$image($virtual_image,$dest,$quality);

        return array(
"error"=>FALSE"msg"=> "Image has been successfully resized.""thumb"=>$dest);
  }   
  
/**
   * Filter Words
   * @author KBRmedia
   * @since  1.0
   */
  
public static function filter($comment$words){
    
$words explode(","$words);
    foreach (
$words as $word) {
      if(empty(
$word)) continue;
      
$comment str_ireplace(rtrim($word" ") , str_repeat("*"strlen($word)) , $comment);
    }
    return 
$comment;
  }
  
/**
   * Generate Menu
   * @author KBRmedia
   * @since  1.2  
   */
  
public static function menu($menus = array(), $custom FALSE){
    if(isset(
self::$config["menus"]) && !empty(self::$config["menus"]) && !$custom){
      
$sys_menus json_decode(self::$config["menus"], TRUE);
      if(
is_array($sys_menus)) $menus $sys_menus;
    }

    
$html "";    
    if(
is_array($menus)){
      foreach (
$menus as $menu) {
        if(!isset(
$menu["href"]) || !isset($menu["text"])) continue;
        
$icon = isset($menu["icon"]) && !empty($menu["icon"]) ? "<span class='fa fa-{$menu["icon"]}'></span> " "";
        if(isset(
$menu["child"]) && is_array($menu["child"])){
          
$html .="<li class='dropdown'>";
        }else{
          
$html .="<li>";
        }
        
$html .= "<a href='{$menu["href"]}' ".($menu["icon"] == "times-circle" "class='delete'":"").">$icon".e($menu["text"])."</a>";
          if(isset(
$menu["child"]) && is_array($menu["child"])){
            
$html .= "<ul class='child'>";
              foreach (
$menu["child"] as $child) {
                
$icon = isset($child["icon"]) && !empty($menu["icon"]) ? "<span class='fa fa-{$child["icon"]}'></span> " "";
                
$html .= "<li class='child'><a href='{$child["href"]}'>$icon".e($child["text"])."</a>";
              }
            
$html .= "</ul>";
          }
        
$html .="</li>";
      }
    }
    return 
$html;
  }  

}
Онлайн: 0
Реклама