/jappixmini/jappix/php/functions.php
PHP | 1427 lines | 966 code | 247 blank | 214 comment | 164 complexity | f83a8abbe8b634782265978e8d2dc5e5 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-3.0, GPL-2.0
- <?php
- /*
- Jappix - An open social platform
- These are the PHP functions for Jappix
- -------------------------------------------------
- License: AGPL
- Authors: Vanaryon, LinkMauve, Mathieui, olivierm
- Last revision: 16/01/12
- */
- // The function to check if Jappix is already installed
- function isInstalled() {
- if(!file_exists(JAPPIX_BASE.'/store/conf/installed.xml'))
- return false;
-
- return true;
- }
- // The function to check if a static host is defined
- function hasStatic() {
- if(HOST_STATIC && (HOST_STATIC != '.'))
- return true;
-
- return false;
- }
- // The function to check if this is a static server
- function isStatic() {
- if(hasStatic() && (parse_url(HOST_STATIC, PHP_URL_HOST) == $_SERVER['HTTP_HOST']))
- return true;
-
- return false;
- }
- // The function to check if this is an upload server
- function isUpload() {
- if(HOST_UPLOAD && (parse_url(HOST_UPLOAD, PHP_URL_HOST) == $_SERVER['HTTP_HOST']))
- return true;
-
- return false;
- }
- // The function to get the users.xml file hashed name
- function usersConfName() {
- $conf_dir = JAPPIX_BASE.'/store/conf';
-
- // No conf folder?
- if(!is_dir($conf_dir))
- return '';
-
- // Read the conf folder
- $conf_scan = scandir($conf_dir.'/');
- $conf_name = '';
-
- // Loop the XML files
- foreach($conf_scan as $current) {
- if(preg_match('/(.+)(\.users\.xml)($)/', $current)) {
- $conf_name = $current;
-
- break;
- }
- }
-
- // Return the users file name
- return $conf_name;
- }
- // The function to write a XML file
- function writeXML($type, $xmlns, $xml) {
- // Generate the file path
- $conf_path = JAPPIX_BASE.'/store/'.$type.'/';
- $conf_name = $xmlns.'.xml';
-
- // Secured stored file?
- if(($type == 'conf') && ($xmlns == 'users')) {
- // Get the secured file name
- $conf_secured = usersConfName();
-
- // Does this file exist?
- if($conf_secured)
- $conf_name = $conf_secured;
- else
- $conf_name = hash('sha256', rand(1, 99999999).time()).'.users.xml';
- }
-
- // Generate the file complete path
- $conf_file = $conf_path.$conf_name;
-
- // Write the installed marker
- $gen_xml = '<?xml version="1.0" encoding="utf-8" ?>
- <jappix xmlns="jappix:'.$type.':'.$xmlns.'">
- '.trim($xml).'
- </jappix>';
-
- file_put_contents($conf_file, $gen_xml);
-
- return true;
- }
- // The function to read a XML file
- function readXML($type, $xmlns) {
- // Generate the file path
- $conf_path = JAPPIX_BASE.'/store/'.$type.'/';
- $conf_name = $xmlns.'.xml';
-
- // Secured stored file?
- if(($type == 'conf') && ($xmlns == 'users')) {
- // Get the secured file name
- $conf_secured = usersConfName();
-
- // Does this file exist?
- if($conf_secured)
- $conf_name = $conf_secured;
- }
-
- // Generate the file complete path
- $conf_file = $conf_path.$conf_name;
-
- if(file_exists($conf_file))
- return file_get_contents($conf_file);
-
- return false;
- }
- // The function to read remote URLs
- function read_url($url) {
- // Any cURL?
- if(function_exists('curl_init')) {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
- $data = curl_exec($ch);
- curl_close($ch);
- }
-
- // Default method
- else
- $data = @file_get_contents($url);
-
- return $data;
- }
- // The function to get the Jappix app. current version
- function getVersion() {
- $file = file_get_contents(JAPPIX_BASE.'/VERSION');
- $version = trim($file);
-
- return $version;
- }
- // The function to detect the user's language
- function checkLanguage() {
- // If the user defined a language
- if(isset($_GET['l']) && !empty($_GET['l'])) {
- // We define some stuffs
- $defined_lang = strtolower($_GET['l']);
- $lang_file = JAPPIX_BASE.'/lang/'.$defined_lang.'/LC_MESSAGES/main.mo';
-
- if($defined_lang == 'en')
- $lang_found = true;
- else
- $lang_found = file_exists($lang_file);
-
- // We check if the asked translation exists
- if($lang_found) {
- $lang = $defined_lang;
-
- // Write a cookie
- setcookie('jappix_locale', $lang, (time() + 31536000));
-
- return $lang;
- }
- }
-
- // No language has been defined, but a cookie is stored
- if(isset($_COOKIE['jappix_locale'])) {
- $check_cookie = $_COOKIE['jappix_locale'];
-
- // The cookie has a value, check this value
- if($check_cookie && (file_exists(JAPPIX_BASE.'/lang/'.$check_cookie.'/LC_MESSAGES/main.mo') || ($check_cookie == 'en')))
- return $check_cookie;
- }
-
- // No cookie defined (or an unsupported value), naturally, we check the browser language
- if(!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
- return 'en';
-
- // We get the language of the browser
- $nav_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
- $check_en = strtolower($nav_langs[0]);
-
- // We check if this is not english
- if($check_en == 'en')
- return 'en';
-
- $order = array();
-
- foreach($nav_langs as $entry) {
- $indice = explode('=', $entry);
- $lang = strtolower(substr(trim($indice[0]), 0, 2));
-
- if(!isset($indice[1]) || !$indice[1])
- $indice = 1;
- else
- $indice = $indice[1];
-
- $order[$lang] = $indice;
- }
-
- arsort($order);
-
- foreach($order as $nav_lang => $val) {
- $lang_found = file_exists(JAPPIX_BASE.'/lang/'.$nav_lang.'/LC_MESSAGES/main.mo');
-
- if($lang_found)
- return $nav_lang;
- }
-
- // If Jappix doen't know that language, we include the english translation
- return 'en';
- }
- // The function to convert a ISO language code to its full name
- function getLanguageName($code) {
- $code = strtolower($code);
-
- $known = array(
- 'aa' => 'Afaraf',
- 'ab' => 'Аҧсуа',
- 'ae' => 'Avesta',
- 'af' => 'Afrikaans',
- 'ak' => 'Akan',
- 'am' => 'አማርኛ',
- 'an' => 'Aragonés',
- 'ar' => 'العربية',
- 'as' => 'অসমীয়া',
- 'av' => 'авар мацӀ',
- 'ay' => 'Aymar aru',
- 'az' => 'Azərbaycan dili',
- 'ba' => 'башҡорт теле',
- 'be' => 'Беларуская',
- 'bg' => 'български',
- 'bh' => 'भोजपुरी',
- 'bi' => 'Bislama',
- 'bm' => 'Bamanankan',
- 'bn' => 'বাংলা',
- 'bo' => 'བོད་ཡིག',
- 'br' => 'Brezhoneg',
- 'bs' => 'Bosanski jezik',
- 'ca' => 'Català',
- 'ce' => 'нохчийн мотт',
- 'ch' => 'Chamoru',
- 'co' => 'Corsu',
- 'cr' => 'ᓀᐦᐃᔭᐍᐏᐣ',
- 'cs' => 'Česky',
- 'cu' => 'Словѣньскъ',
- 'cv' => 'чӑваш чӗлхи',
- 'cy' => 'Cymraeg',
- 'da' => 'Dansk',
- 'de' => 'Deutsch',
- 'dv' => 'ދިވެހި',
- 'dz' => 'རྫོང་ཁ',
- 'ee' => 'Ɛʋɛgbɛ',
- 'el' => 'Ελληνικά',
- 'en' => 'English',
- 'eo' => 'Esperanto',
- 'es' => 'Español',
- 'et' => 'Eesti keel',
- 'eu' => 'Euskara',
- 'fa' => 'فارسی',
- 'ff' => 'Fulfulde',
- 'fi' => 'Suomen kieli',
- 'fj' => 'Vosa Vakaviti',
- 'fo' => 'Føroyskt',
- 'fr' => 'Français',
- 'fy' => 'Frysk',
- 'ga' => 'Gaeilge',
- 'gd' => 'Gàidhlig',
- 'gl' => 'Galego',
- 'gn' => 'Avañe\'ẽ',
- 'gu' => 'ગુજરાતી',
- 'gv' => 'Ghaelg',
- 'ha' => 'هَوُسَ',
- 'he' => 'עברית',
- 'hi' => 'हिन्दी',
- 'ho' => 'Hiri Motu',
- 'hr' => 'Hrvatski',
- 'ht' => 'Kreyòl ayisyen',
- 'hu' => 'Magyar',
- 'hy' => 'Հայերեն',
- 'hz' => 'Otjiherero',
- 'ia' => 'Interlingua',
- 'id' => 'Bahasa',
- 'ie' => 'Interlingue',
- 'ig' => 'Igbo',
- 'ii' => 'ꆇꉙ',
- 'ik' => 'Iñupiaq',
- 'io' => 'Ido',
- 'is' => 'Íslenska',
- 'it' => 'Italiano',
- 'iu' => 'ᐃᓄᒃᑎᑐᑦ',
- 'ja' => '日本語',
- 'jv' => 'Basa Jawa',
- 'ka' => 'ქართული',
- 'kg' => 'KiKongo',
- 'ki' => 'Gĩkũyũ',
- 'kj' => 'Kuanyama',
- 'kk' => 'Қазақ тілі',
- 'kl' => 'Kalaallisut',
- 'km' => 'ភាសាខ្មែរ',
- 'kn' => 'ಕನ್ನಡ',
- 'ko' => '한 국어',
- 'kr' => 'Kanuri',
- 'ks' => 'कश्मीरी',
- 'ku' => 'Kurdî',
- 'kv' => 'коми кыв',
- 'kw' => 'Kernewek',
- 'ky' => 'кыргыз тили',
- 'la' => 'Latine',
- 'lb' => 'Lëtzebuergesch',
- 'lg' => 'Luganda',
- 'li' => 'Limburgs',
- 'ln' => 'Lingála',
- 'lo' => 'ພາສາລາວ',
- 'lt' => 'Lietuvių kalba',
- 'lu' => 'cilubà',
- 'lv' => 'Latviešu valoda',
- 'mg' => 'Fiteny malagasy',
- 'mh' => 'Kajin M̧ajeļ',
- 'mi' => 'Te reo Māori',
- 'mk' => 'македонски јазик',
- 'ml' => 'മലയാളം',
- 'mn' => 'Монгол',
- 'mo' => 'лимба молдовеняскэ',
- 'mr' => 'मराठी',
- 'ms' => 'Bahasa Melayu',
- 'mt' => 'Malti',
- 'my' => 'ဗမာစာ',
- 'na' => 'Ekakairũ Naoero',
- 'nb' => 'Norsk bokmål',
- 'nd' => 'isiNdebele',
- 'ne' => 'नेपाली',
- 'ng' => 'Owambo',
- 'nl' => 'Nederlands',
- 'nn' => 'Norsk nynorsk',
- 'no' => 'Norsk',
- 'nr' => 'Ndébélé',
- 'nv' => 'Diné bizaad',
- 'ny' => 'ChiCheŵa',
- 'oc' => 'Occitan',
- 'oj' => 'ᐊᓂᔑᓈᐯᒧᐎᓐ',
- 'om' => 'Afaan Oromoo',
- 'or' => 'ଓଡ଼ିଆ',
- 'os' => 'Ирон æвзаг',
- 'pa' => 'ਪੰਜਾਬੀ',
- 'pi' => 'पािऴ',
- 'pl' => 'Polski',
- 'ps' => 'پښتو',
- 'pt' => 'Português',
- 'pt-br' => 'Brasileiro',
- 'qu' => 'Runa Simi',
- 'rm' => 'Rumantsch grischun',
- 'rn' => 'kiRundi',
- 'ro' => 'Română',
- 'ru' => 'Русский',
- 'rw' => 'Kinyarwanda',
- 'sa' => 'संस्कृतम्',
- 'sc' => 'sardu',
- 'sd' => 'सिन्धी',
- 'se' => 'Davvisámegiella',
- 'sg' => 'Yângâ tî sängö',
- 'sh' => 'Српскохрватски',
- 'si' => 'සිංහල',
- 'sk' => 'Slovenčina',
- 'sl' => 'Slovenščina',
- 'sm' => 'Gagana fa\'a Samoa',
- 'sn' => 'chiShona',
- 'so' => 'Soomaaliga',
- 'sq' => 'Shqip',
- 'sr' => 'српски језик',
- 'ss' => 'SiSwati',
- 'st' => 'seSotho',
- 'su' => 'Basa Sunda',
- 'sv' => 'Svenska',
- 'sw' => 'Kiswahili',
- 'ta' => 'தமிழ்',
- 'te' => 'తెలుగు',
- 'tg' => 'тоҷикӣ',
- 'th' => 'ไทย',
- 'ti' => 'ትግርኛ',
- 'tk' => 'Türkmen',
- 'tl' => 'Tagalog',
- 'tn' => 'seTswana',
- 'to' => 'faka Tonga',
- 'tr' => 'Türkçe',
- 'ts' => 'xiTsonga',
- 'tt' => 'татарча',
- 'tw' => 'Twi',
- 'ty' => 'Reo Mā`ohi',
- 'ug' => 'Uyƣurqə',
- 'uk' => 'українська',
- 'ur' => 'اردو',
- 'uz' => 'O\'zbek',
- 've' => 'tshiVenḓa',
- 'vi' => 'Tiếng Việt',
- 'vo' => 'Volapük',
- 'wa' => 'Walon',
- 'wo' => 'Wollof',
- 'xh' => 'isiXhosa',
- 'yi' => 'ייִדיש',
- 'yo' => 'Yorùbá',
- 'za' => 'Saɯ cueŋƅ',
- 'zh' => '中文',
- 'zu' => 'isiZulu'
- );
-
- if(isset($known[$code]))
- return $known[$code];
-
- return null;
- }
- // The function to know if a language is right-to-left
- function isRTL($code) {
- switch($code) {
- // RTL language
- case 'ar':
- case 'he':
- case 'dv':
- case 'ur':
- $is_rtl = true;
-
- break;
-
- // LTR language
- default:
- $is_rtl = false;
-
- break;
- }
-
- return $is_rtl;
- }
- // The function to set the good localized <html /> tag
- function htmlTag($locale) {
- // Initialize the tag
- $html = '<html xml:lang="'.$locale.'" lang="'.$locale.'" dir="';
-
- // Set the good text direction (TODO)
- /* if(isRTL($locale))
- $html .= 'rtl';
- else
- $html .= 'ltr'; */
-
- $html .= 'ltr';
-
- // Close the tag
- $html .= '">';
-
- echo($html);
- }
- // The function which generates the available locales list
- function availableLocales($active_locale) {
- // Initialize
- $scan = scandir(JAPPIX_BASE.'/lang/');
- $list = array();
-
- // Loop the available languages
- foreach($scan as $current_id) {
- // Get the current language name
- $current_name = getLanguageName($current_id);
-
- // Not valid?
- if(($current_id == $active_locale) || ($current_name == null))
- continue;
-
- // Add this to the list
- $list[$current_id] = $current_name;
- }
-
- return $list;
- }
- // The function which generates the language switcher hidden part
- function languageSwitcher($active_locale) {
- // Initialize
- $keep_get = keepGet('l', false);
- $list = availableLocales($active_locale);
- $html = '';
-
- // Generate the HTML code
- foreach($list as $current_id => $current_name)
- $html .= '<a href="./?l='.$current_id.$keep_get.'">'.htmlspecialchars($current_name).'</a>, ';
-
- // Output the HTML code
- return $html;
- }
- // The function to generate a strong hash
- function genStrongHash($string) {
- // Initialize
- $i = 0;
-
- // Loop to generate a incredibly strong hash (can be a bit slow)
- while($i < 10) {
- $string = hash('sha256', $string);
-
- $i++;
- }
-
- return $string;
- }
- // The function to generate the version hash
- function genHash($version) {
- // Get the configuration files path
- $conf_path = JAPPIX_BASE.'/store/conf/';
- $conf_main = $conf_path.'main.xml';
- $conf_hosts = $conf_path.'hosts.xml';
- $conf_background = $conf_path.'background.xml';
- $logos_dir = JAPPIX_BASE.'/store/logos/';
-
- // Get the hash of the main configuration file
- if(file_exists($conf_main))
- $hash_main = md5_file($conf_main);
- else
- $hash_main = '0';
-
- // Get the hash of the main configuration file
- if(file_exists($conf_hosts))
- $hash_hosts = md5_file($conf_hosts);
- else
- $hash_hosts = '0';
-
- // Get the hash of the background configuration file
- if(file_exists($conf_background))
- $hash_background = md5_file($conf_background);
- else
- $hash_background = '0';
-
- // Get the hash of the logos folder
- $hash_logos = '';
-
- if(is_dir($logos_dir)) {
- $logos_scan = scandir($logos_dir.'/');
-
- foreach($logos_scan as $logos_current) {
- if(getFileExt($logos_current) == 'png')
- $hash_logos .= md5_file($logos_dir.$logos_current);
- }
- }
-
- return md5($version.$hash_main.$hash_hosts.$hash_background.$hash_logos);
- }
- // The function to hide the error messages
- function hideErrors() {
- // Hide errors if not developer
- if(!isDeveloper()) {
- ini_set('display_errors', 'off');
- ini_set('error_reporting', 0);
- }
-
- // Developers need to get error reports!
- else {
- ini_set('display_errors', 'on');
- ini_set('error_reporting', E_ALL);
- }
- }
- // The function to check BOSH proxy is enabled
- function BOSHProxy() {
- if(BOSH_PROXY == 'on')
- return true;
-
- return false;
- }
- // The function to check compression is enabled
- function hasCompression() {
- if(COMPRESSION != 'off')
- return true;
-
- return false;
- }
- // The function to check compression is available with the current client
- function canCompress() {
- // Compression allowed by admin & browser?
- if(hasCompression() && (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')))
- return true;
-
- return false;
- }
- // The function to check whether to show manager link or not
- function showManagerLink() {
- if(MANAGER_LINK != 'off')
- return true;
-
- return false;
- }
- // The function to check HTTPS storage is allowed
- function httpsStorage() {
- if(HTTPS_STORAGE == 'on')
- return true;
-
- return false;
- }
- // The function to check HTTPS storage must be forced
- function httpsForce() {
- if((HTTPS_FORCE == 'on') && sslCheck())
- return true;
-
- return false;
- }
- // The function to check we use HTTPS
- function useHttps() {
- if(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on'))
- return true;
-
- return false;
- }
- // The function to compress the output pages
- function compressThis() {
- if(canCompress() && !isDeveloper())
- ob_start('ob_gzhandler');
- }
- // The function to choose one file get with get.php or a liste of resources
- function multiFiles() {
- if(MULTI_FILES == 'on')
- return true;
-
- return false;
- }
- function getFiles($h, $l, $t, $g, $f) {
- // Define the good path to the Get API
- if(hasStatic())
- $path_to = HOST_STATIC.'/';
- else
- $path_to = JAPPIX_BASE.'/';
-
- if(!multiFiles()) {
- $values = array();
- if ($h)
- $values[] = 'h='.$h;
- if ($l)
- $values[] = 'l='.$l;
- if ($t)
- $values[] = 't='.$t;
- if ($g)
- $values[] = 'g='.$g;
- if ($f)
- $values[] = 'f='.$f;
-
- return $path_to.'php/get.php?'.implode('&', $values);
- }
-
- if($g && !empty($g) && preg_match('/^(\S+)\.xml$/', $g) && preg_match('/^(css|js)$/', $t) && isSafe($g) && file_exists('xml/'.$g)) {
- $xml_data = file_get_contents('xml/'.$g);
-
- // Any data?
- if($xml_data) {
- $xml_read = new SimpleXMLElement($xml_data);
- $xml_parse = $xml_read->$t;
-
- // Files were added to the list before (with file var)?
- if($f)
- $f .= '~'.$xml_parse;
- else
- $f = $xml_parse;
- }
- }
-
- // Explode the f string
- if(strpos($f, '~') != false)
- $array = explode('~', $f);
- else
- $array = array($f);
-
- $a = array();
- foreach($array as $file)
- $a[] = $path_to.$t.'/'.$file;
- if (count($a) == 1)
- return $a[0];
- return $a;
- }
- function echoGetFiles($h, $l, $t, $g, $f) {
- if ($t == 'css')
- $pattern = '<link rel="stylesheet" href="%s" type="text/css" media="all" />';
- else if ($t == 'js')
- $pattern = '<script type="text/javascript" src="%s"></script>';
-
- $files = getFiles($h, $l, $t, $g, $f);
- if (is_string($files))
- printf($pattern, $files);
- else {
- $c = count($files)-1;
- for($i=0; $i<=$c; $i++) {
- if ($i)
- echo ' ';
- printf($pattern, $files[$i]);
- if ($i != $c)
- echo "\n";
- }
- }
- }
- // The function to check if anonymous mode is authorized
- function anonymousMode() {
- if(isset($_GET['r']) && !empty($_GET['r']) && HOST_ANONYMOUS && (ANONYMOUS == 'on'))
- return true;
- else
- return false;
- }
- // The function to quickly translate a string
- function _e($string) {
- echo T_gettext($string);
- }
- // The function to check the encrypted mode
- function sslCheck() {
- if(ENCRYPTION == 'on')
- return true;
- else
- return false;
- }
- // The function to return the encrypted link
- function sslLink() {
- // Using HTTPS?
- if(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on'))
- $link = '<a class="home-images unencrypted" href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'">'.T_('Unencrypted').'</a>';
-
- // Using HTTP?
- else
- $link = '<a class="home-images encrypted" href="https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'">'.T_('Encrypted').'</a>';
-
- return $link;
- }
- // The function to get the Jappix static URL
- function staticURL() {
- // Check for HTTPS
- $protocol = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
-
- // Full URL
- $url = $protocol.'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
-
- return $url;
- }
- // The function to get the Jappix location (only from Get API!)
- function staticLocation() {
- // Filter the URL
- return preg_replace('/((.+)\/)php\/get\.php(\S)+$/', '$1', staticURL());
- }
- // The function to include a translation file
- function includeTranslation($locale, $domain) {
- T_setlocale(LC_MESSAGES, $locale);
- T_bindtextdomain($domain, JAPPIX_BASE.'/lang');
- T_bind_textdomain_codeset($domain, 'UTF-8');
- T_textdomain($domain);
- }
- // The function to check the cache presence
- function hasCache($hash) {
- if(file_exists(JAPPIX_BASE.'/store/cache/'.$hash.'.cache'))
- return true;
- else
- return false;
- }
- // The function to check if developer mode is enabled
- function isDeveloper() {
- if(DEVELOPER == 'on')
- return true;
- else
- return false;
- }
- // The function to get a file extension
- function getFileExt($name) {
- return strtolower(preg_replace('/^(.+)(\.)([^\.]+)$/i', '$3', $name));
- }
- // The function to get a file type
- function getFileType($ext) {
- switch($ext) {
- // Images
- case 'jpg':
- case 'jpeg':
- case 'png':
- case 'bmp':
- case 'gif':
- case 'tif':
- case 'svg':
- case 'psp':
- case 'xcf':
- $file_type = 'image';
-
- break;
-
- // Videos
- case 'ogv':
- case 'mkv':
- case 'avi':
- case 'mov':
- case 'mp4':
- case 'm4v':
- case 'wmv':
- case 'asf':
- case 'mpg':
- case 'mpeg':
- case 'ogm':
- case 'rmvb':
- case 'rmv':
- case 'qt':
- case 'flv':
- case 'ram':
- case '3gp':
- case 'avc':
- $file_type = 'video';
-
- break;
-
- // Sounds
- case 'oga':
- case 'ogg':
- case 'mka':
- case 'flac':
- case 'mp3':
- case 'wav':
- case 'm4a':
- case 'wma':
- case 'rmab':
- case 'rma':
- case 'bwf':
- case 'aiff':
- case 'caf':
- case 'cda':
- case 'atrac':
- case 'vqf':
- case 'au':
- case 'aac':
- case 'm3u':
- case 'mid':
- case 'mp2':
- case 'snd':
- case 'voc':
- $file_type = 'audio';
-
- break;
-
- // Documents
- case 'pdf':
- case 'odt':
- case 'ott':
- case 'sxw':
- case 'stw':
- case 'ots':
- case 'sxc':
- case 'stc':
- case 'sxi':
- case 'sti':
- case 'pot':
- case 'odp':
- case 'ods':
- case 'doc':
- case 'docx':
- case 'docm':
- case 'xls':
- case 'xlsx':
- case 'xlsm':
- case 'xlt':
- case 'ppt':
- case 'pptx':
- case 'pptm':
- case 'pps':
- case 'odg':
- case 'otp':
- case 'sxd':
- case 'std':
- case 'std':
- case 'rtf':
- case 'txt':
- case 'htm':
- case 'html':
- case 'shtml':
- case 'dhtml':
- case 'mshtml':
- $file_type = 'document';
-
- break;
-
- // Packages
- case 'tgz':
- case 'gz':
- case 'tar':
- case 'ar':
- case 'cbz':
- case 'jar':
- case 'tar.7z':
- case 'tar.bz2':
- case 'tar.gz':
- case 'tar.lzma':
- case 'tar.xz':
- case 'zip':
- case 'xz':
- case 'rar':
- case 'bz':
- case 'deb':
- case 'rpm':
- case '7z':
- case 'ace':
- case 'cab':
- case 'arj':
- case 'msi':
- $file_type = 'package';
-
- break;
-
- // Others
- default:
- $file_type = 'other';
-
- break;
- }
-
- return $file_type;
- }
- // The function to get the MIME type of a file
- function getFileMIME($path) {
- $finfo = finfo_open(FILEINFO_MIME_TYPE);
- $cmime = finfo_file($finfo, $path);
- finfo_close($finfo);
-
- return $cmime;
- }
- // The function to keep the current GET vars
- function keepGet($current, $no_get) {
- // Get the HTTP GET vars
- $request = $_SERVER['REQUEST_URI'];
-
- if(strrpos($request, '?') === false)
- $get = '';
-
- else {
- $uri = explode('?', $request);
- $get = $uri[1];
- }
-
- // Remove the items we don't want here
- $proper = str_replace('&', '&', $get);
- $proper = preg_replace('/((^)|(&))(('.$current.'=)([^&]+))/i', '', $proper);
-
- // Nothing at the end?
- if(!$proper)
- return '';
-
- // We have no defined GET var
- if($no_get) {
- // Remove the first "&" if it appears
- if(preg_match('/^(&(amp;)?)/i', $proper))
- $proper = preg_replace('/^(&(amp;)?)/i', '', $proper);
-
- // Add the first "?"
- $proper = '?'.$proper;
- }
-
- // Add a first "&" if there is no one and no defined GET var
- else if(!$no_get && (substr($proper, 0, 1) != '&') && (substr($proper, 0, 5) != '&'))
- $proper = '&'.$proper;
-
- return $proper;
- }
- // Escapes regex special characters for in-regex usage
- function escapeRegex($string) {
- return preg_replace('/[-[\]{}()*+?.,\\^$|#]/', '\\$&', $string);
- }
- // Generates the security HTML code
- function securityHTML() {
- return '<!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>Jappix - Forbidden</title>
- </head>
- <body>
- <h1>Forbidden</h1>
- <h4>This is a private folder</h4>
- </body>
- </html>';
- }
- // Checks if a relative server path is safe
- function isSafe($path) {
- // Mhh, someone is about to nasty stuffs (previous folder, or executable scripts)
- if(preg_match('/\.\.\//', $path) || preg_match('/index\.html?$/', $path) || preg_match('/(\.)((php([0-9]+)?)|(aspx?)|(cgi)|(rb)|(py)|(pl)|(jsp)|(ssjs)|(lasso)|(dna)|(tpl)|(smx)|(cfm))$/i', $path))
- return false;
-
- return true;
- }
- // Set the good unity for a size in bytes
- function formatBytes($bytes, $precision = 2) {
- $units = array('B', 'KB', 'MB', 'GB', 'TB');
-
- $bytes = max($bytes, 0);
- $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
- $pow = min($pow, count($units) - 1);
-
- $bytes /= pow(1024, $pow);
-
- return round($bytes, $precision) . ' ' . $units[$pow];
- }
- // Converts a human-readable bytes value to a computer one
- function humanToBytes($string) {
- // Values array
- $values = array(
- 'K' => '000',
- 'M' => '000000',
- 'G' => '000000000',
- 'T' => '000000000000',
- 'P' => '000000000000000',
- 'E' => '000000000000000000',
- 'Z' => '000000000000000000000',
- 'Y' => '000000000000000000000000'
- );
-
- // Filter the string
- foreach($values as $key => $zero)
- $string = str_replace($key, $zero, $string);
-
- // Converts the string into an integer
- $string = intval($string);
-
- return $string;
- }
- // Get the maximum file upload size
- function uploadMaxSize() {
- // Not allowed to upload files?
- if(ini_get('file_uploads') != 1)
- return 0;
-
- // Upload maximum file size
- $upload = humanToBytes(ini_get('upload_max_filesize'));
-
- // POST maximum size
- $post = humanToBytes(ini_get('post_max_size'));
-
- // Return the lowest value
- if($upload <= $post)
- return $upload;
-
- return $post;
- }
- // Normalizes special chars
- function normalizeChars($string) {
- $table = array(
- 'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
- 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
- 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
- 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
- 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
- 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
- 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
- 'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r'
- );
-
- return strtr($string, $table);
- }
- // Filters the XML special chars for the SVG drawer
- function filterSpecialXML($string) {
- // Strange thing: when $string = 'Mises à jour' -> bug! but 'Mise à jour' -> ok!
- $string = normalizeChars($string);
-
- // Encodes with HTML special chars
- $string = htmlspecialchars($string);
-
- return $string;
- }
- // Writes the current visit in the total file
- function writeTotalVisit() {
- // Get the current time stamp
- $stamp = time();
-
- // Initialize the defaults
- $array = array(
- 'total' => 0,
- 'stamp' => $stamp
- );
-
- // Try to read the saved data
- $total_data = readXML('access', 'total');
-
- // Get the XML file values
- if($total_data) {
- // Initialize the visits reading
- $read_xml = new SimpleXMLElement($total_data);
-
- // Loop the visit elements
- foreach($read_xml->children() as $current_child)
- $array[$current_child->getName()] = intval($current_child);
- }
-
- // Increment the total number of visits
- $array['total']++;
-
- // Generate the new XML data
- $total_xml =
- '<total>'.$array['total'].'</total>
- <stamp>'.$array['stamp'].'</stamp>'
- ;
-
- // Re-write the new values
- writeXML('access', 'total', $total_xml);
- }
- // Writes the current visit in the months file
- function writeMonthsVisit() {
- // Get the current month
- $month = intval(date('m'));
-
- // Define the stats array
- $array = array();
-
- // January to August period
- if($month <= 8) {
- for($i = 1; $i <= 8; $i++)
- $array['month_'.$i] = 0;
- }
-
- // August to September period
- else {
- $i = 8;
- $j = 1;
-
- while($j <= 3) {
- // Last year months
- if(($i >= 8) && ($i <= 12))
- $array['month_'.$i++] = 0;
-
- // First year months
- else
- $array['month_'.$j++] = 0;
- }
- }
-
- // Try to read the saved data
- $months_data = readXML('access', 'months');
-
- // Get the XML file values
- if($months_data) {
- // Initialize the visits reading
- $read_xml = new SimpleXMLElement($months_data);
-
- // Loop the visit elements
- foreach($read_xml->children() as $current_child) {
- $current_month = $current_child->getName();
-
- // Parse the current month id
- $current_id = intval(preg_replace('/month_([0-9]+)/i', '$1', $current_month));
-
- // Is this month still valid?
- if((($month <= 8) && ($current_id <= $month)) || (($month >= 8) && ($current_id >= 8) && ($current_id <= $month)))
- $array[$current_month] = intval($current_child);
- }
- }
-
- // Increment the current month value
- $array['month_'.$month]++;
-
- // Generate the new XML data
- $months_xml = '';
-
- foreach($array as $array_key => $array_value)
- $months_xml .= "\n".' <'.$array_key.'>'.$array_value.'</'.$array_key.'>';
-
- // Re-write the new values
- writeXML('access', 'months', $months_xml);
- }
- // Writes the current visit to the storage file
- function writeVisit() {
- // Write total visits
- writeTotalVisit();
-
- // Write months visits
- writeMonthsVisit();
- }
- // Returns the default background array
- function defaultBackground() {
- // Define the default values
- $background_default = array(
- 'type' => 'default',
- 'image_file' => '',
- 'image_repeat' => 'repeat-x',
- 'image_horizontal' => 'center',
- 'image_vertical' => 'top',
- 'image_adapt' => 'off',
- 'image_color' => '#cae1e9',
- 'color_color' => '#cae1e9'
- );
-
- return $background_default;
- }
- // Reads the notice configuration
- function readNotice() {
- // Read the notice configuration XML
- $notice_data = readXML('conf', 'notice');
-
- // Define the default values
- $notice_default = array(
- 'type' => 'none',
- 'notice' => ''
- );
-
- // Stored data array
- $notice_conf = array();
-
- // Read the stored values
- if($notice_data) {
- // Initialize the notice configuration XML data
- $notice_xml = new SimpleXMLElement($notice_data);
-
- // Loop the notice configuration elements
- foreach($notice_xml->children() as $notice_child)
- $notice_conf[$notice_child->getName()] = utf8_decode($notice_child);
- }
-
- // Checks no value is missing in the stored configuration
- foreach($notice_default as $notice_name => $notice_value) {
- if(!isset($notice_conf[$notice_name]) || empty($notice_conf[$notice_name]))
- $notice_conf[$notice_name] = $notice_default[$notice_name];
- }
-
- return $notice_conf;
- }
- // The function to get the admin users
- function getUsers() {
- // Try to read the XML file
- $data = readXML('conf', 'users');
- $array = array();
-
- // Any data?
- if($data) {
- $read = new SimpleXMLElement($data);
-
- // Check the submitted user exists
- foreach($read->children() as $child) {
- // Get the node attributes
- $attributes = $child->attributes();
-
- // Push the attributes to the global array (converted into strings)
- $array[$attributes['name'].''] = $attributes['password'].'';
- }
- }
-
- return $array;
- }
- // Manages users
- function manageUsers($action, $array) {
- // Try to read the old XML file
- $users_array = getUsers();
-
- // What must we do?
- switch($action) {
- // Add some users
- case 'add':
- foreach($array as $array_user => $array_password)
- $users_array[$array_user] = genStrongHash($array_password);
-
- break;
-
- // Remove some users
- case 'remove':
- foreach($array as $array_user) {
- // Not the last user?
- if(count($users_array) > 1)
- unset($users_array[$array_user]);
- }
-
- break;
- }
-
- // Regenerate the XML
- $users_xml = '';
-
- foreach($users_array as $users_name => $users_password)
- $users_xml .= "\n".' <user name="'.stripslashes(htmlspecialchars($users_name)).'" password="'.stripslashes($users_password).'" />';
-
- // Write the main configuration
- writeXML('conf', 'users', $users_xml);
- }
- // Resize an image with GD
- function resizeImage($path, $ext, $width, $height) {
- // No GD?
- if(!function_exists('gd_info'))
- return false;
-
- try {
- // Initialize GD
- switch($ext) {
- case 'png':
- $img_resize = imagecreatefrompng($path);
-
- break;
-
- case 'gif':
- $img_resize = imagecreatefromgif($path);
-
- break;
-
- default:
- $img_resize = imagecreatefromjpeg($path);
- }
-
- // Get the image size
- $img_size = getimagesize($path);
- $img_width = $img_size[0];
- $img_height = $img_size[1];
-
- // Necessary to change the image width
- if($img_width > $width && ($img_width > $img_height)) {
- // Process the new sizes
- $new_width = $width;
- $img_process = (($new_width * 100) / $img_width);
- $new_height = (($img_height * $img_process) / 100);
- }
-
- // Necessary to change the image height
- else if($img_height > $height && ($img_width < $img_height)) {
- // Process the new sizes
- $new_height = $height;
- $img_process = (($new_height * 100) / $img_height);
- $new_width = (($img_width * $img_process) / 100);
- }
-
- // Else, just use the old sizes
- else {
- $new_width = $img_width;
- $new_height = $img_height;
- }
-
- // Create the new image
- $new_img = imagecreatetruecolor($new_width, $new_height);
-
- // Must keep alpha pixels?
- if(($ext == 'png') || ($ext == 'gif')){
- imagealphablending($new_img, false);
- imagesavealpha($new_img, true);
-
- // Set transparent pixels
- $transparent = imagecolorallocatealpha($new_img, 255, 255, 255, 127);
- imagefilledrectangle($new_img, 0, 0, $new_width, $new_height, $transparent);
- }
-
- // Copy the new image
- imagecopyresampled($new_img, $img_resize, 0, 0, 0, 0, $new_width, $new_height, $img_size[0], $img_size[1]);
-
- // Destroy the old data
- imagedestroy($img_resize);
- unlink($path);
-
- // Write the new image
- switch($ext) {
- case 'png':
- imagepng($new_img, $path);
-
- break;
-
- case 'gif':
- imagegif($new_img, $path);
-
- break;
-
- default:
- imagejpeg($new_img, $path, 85);
- }
-
- return true;
- }
-
- catch(Exception $e) {
- return false;
- }
- }
- ?>