]> git.mxchange.org Git - friendica-addons.git/blobdiff - jappixmini/jappix/php/get.php
jappixmini: include jappix source
[friendica-addons.git] / jappixmini / jappix / php / get.php
diff --git a/jappixmini/jappix/php/get.php b/jappixmini/jappix/php/get.php
new file mode 100644 (file)
index 0000000..f5078a7
--- /dev/null
@@ -0,0 +1,340 @@
+<?php
+
+/*
+
+Jappix - An open social platform
+This is the file get script
+
+-------------------------------------------------
+
+License: AGPL
+Author: Vanaryon
+Last revision: 03/12/11
+
+*/
+
+// PHP base
+define('JAPPIX_BASE', '..');
+
+// We get the needed files
+require_once('./functions.php');
+require_once('./functions-get.php');
+require_once('./read-main.php');
+require_once('./read-hosts.php');
+
+// Hide PHP errors
+hideErrors();
+
+// Get some parameters
+$is_developer = isDeveloper();
+$has_compression = hasCompression();
+
+if($is_developer) {
+       header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
+       header('Cache-Control: no-store, no-cache, must-revalidate');
+       header('Cache-Control: post-check=0, pre-check=0', false);
+       header('Pragma: no-cache');
+}
+
+// Else, we put a far away cache date (1 year)
+else {
+       $expires = 31536000;
+       header('Pragma: public');
+       header('Cache-Control: maxage='.$expires);
+       header('Expires: '.gmdate('D, d M Y H:i:s', (time() + $expires)).' GMT');
+}
+
+// Initialize the vars
+$type = '';
+$file = '';
+
+// Read the type var
+if(isset($_GET['t']) && !empty($_GET['t']) && preg_match('/^(css|js|img|snd|store)$/', $_GET['t']))
+       $type = $_GET['t'];
+
+// Read the files var
+if(isset($_GET['f']) && !empty($_GET['f']) && isSafe($_GET['f']))
+       $file = $_GET['f'];
+
+// Read the group var (only for text files)
+if(isset($_GET['g']) && !empty($_GET['g']) && preg_match('/^(\S+)\.xml$/', $_GET['g']) && preg_match('/^(css|js)$/', $type) && isSafe($_GET['g']) && file_exists('../xml/'.$_GET['g'])) {
+       $xml_data = file_get_contents('../xml/'.$_GET['g']);
+       
+       // Any data?
+       if($xml_data) {
+               $xml_read = new SimpleXMLElement($xml_data);
+               $xml_parse = $xml_read->$type;
+               
+               // Files were added to the list before (with file var)?
+               if($file)
+                       $file .= '~'.$xml_parse;
+               else
+                       $file = $xml_parse;
+       }
+}
+
+// We check if the data was submitted
+if($file && $type) {
+       // We define some stuffs
+       $dir = '../'.$type.'/';
+       $path = $dir.$file;
+       
+       // Define the real type if this is a "store" file
+       if($type == 'store') {
+               // Extract the file extension
+               switch(getFileExt($file)) {
+                       // CSS file
+                       case 'css':
+                               $type = 'css';
+                               
+                               break;
+                       
+                       // JS file
+                       case 'js':
+                               $type = 'js';
+                               
+                               break;
+                       
+                       // Audio file
+                       case 'ogg':
+                       case 'oga':
+                               $type = 'snd';
+                               
+                               break;
+                       
+                       // Image file
+                       case 'png':
+                       case 'jpg':
+                       case 'jpeg':
+                       case 'gif':
+                       case 'bmp':
+                               $type = 'img';
+                               
+                               break;
+               }
+       }
+       
+       // JS and CSS special stuffs
+       if(($type == 'css') || ($type == 'js')) {
+               // Compression var
+               if($has_compression)
+                       $cache_encoding = 'deflate';
+               else
+                       $cache_encoding = 'plain';
+               
+               // Get the vars
+               $version = getVersion();
+               $hash = genHash($version);
+               $cache_hash = md5($path.$hash.staticLocation()).'_'.$cache_encoding;
+               
+               // Check if the browser supports DEFLATE
+               $deflate_support = false;
+               
+               if(isset($_SERVER['HTTP_ACCEPT_ENCODING']) && substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && hasCompression() && !$is_developer)
+                       $deflate_support = true;
+               
+               // Internationalization
+               if($type == 'js') {
+                       if(isset($_GET['l']) && !empty($_GET['l']) && !preg_match('/\.\.\//', $_GET['l']) && is_dir('../lang/'.$_GET['l']))
+                               $locale = $_GET['l'];
+                       else
+                               $locale = 'en';
+               }
+               
+               else
+                       $locale = '';
+               
+               // Define the cache lang name
+               if($locale)
+                       $cache_lang = $cache_hash.'_'.$locale;
+               else
+                       $cache_lang = $cache_hash;
+       }
+       
+       // Explode the file string
+       if(strpos($file, '~') != false)
+               $array = explode('~', $file);
+       else
+               $array = array($file);
+       
+       // Define the reading vars
+       $continue = true;
+       $loop_files = true;
+       
+       // Check the cache exists for text files (avoid the heavy file_exists loop!)
+       if(!$is_developer && (($type == 'css') || ($type == 'js')) && hasCache($cache_lang))
+               $loop_files = false;
+       
+       // Check if the all the file(s) exist(s)
+       if($loop_files) {
+               foreach($array as $current) {
+                       // Stop the loop if a file is missing
+                       if(!file_exists($dir.$current)) {
+                               $continue = false;
+                               
+                               break;
+                       }
+               }
+       }
+       
+       // We can read the file(s)
+       if($continue) {
+               // We get the file MIME type
+               $mime = strtolower(preg_replace('/(^)(.+)(\.)(.+)($)/i', '$4', $file));
+               
+               // We set up a known MIME type (and some other headers)
+               if(($type == 'css') || ($type == 'js')) {
+                       // DEFLATE header
+                       if($deflate_support)
+                               header('Content-Encoding: deflate');
+                       
+                       // MIME header
+                       if($type == 'css')
+                               header('Content-Type: text/css; charset=utf-8');
+                       else if($type == 'js')
+                               header('Content-Type: application/javascript; charset=utf-8');
+               }
+               
+               else if($mime == 'png')
+                       header('Content-Type: image/png');
+               else if($mime == 'gif')
+                       header('Content-Type: image/gif');
+               else if(($mime == 'jpg') || ($mime == 'jpeg'))
+                       header('Content-Type: image/jpeg');
+               else if($mime == 'bmp')
+                       header('Content-Type: image/bmp');
+               else if(($mime == 'oga') || ($mime == 'ogg'))
+                       header('Content-Type: audio/ogg');
+               
+               // Catch the file MIME type
+               else
+                       header('Content-Type: '.getFileMIME($path));
+               
+               // Read the text file(s) (CSS & JS)
+               if(($type == 'css') || ($type == 'js')) {
+                       // If there's a cache file, read it
+                       if(hasCache($cache_lang) && !$is_developer) {
+                               $cache_read = readCache($cache_lang);
+                               
+                               if($deflate_support || !$has_compression)
+                                       echo $cache_read;
+                               else
+                                       echo gzinflate($cache_read);
+                       }
+                       
+                       // Else, we generate the cache
+                       else {
+                               // First try to read the cache reference
+                               if(hasCache($cache_hash) && !$is_developer) {
+                                       // Read the reference
+                                       $cache_reference = readCache($cache_hash);
+                                       
+                                       // Filter the cache reference
+                                       if($has_compression)
+                                               $output = gzinflate($cache_reference);
+                                       else
+                                               $output = $cache_reference;
+                               }
+                               
+                               // No cache reference, we should generate it
+                               else {
+                                       // Initialize the loop
+                                       $looped = '';
+                                       
+                                       // Add the content of the current file
+                                       foreach($array as $current)
+                                               $looped .= rmBOM(file_get_contents($dir.$current))."\n";
+                                       
+                                       // Filter the CSS
+                                       if($type == 'css') {
+                                               // Apply the CSS logos
+                                               $looped = setLogos($looped, $array);
+                                               
+                                               // Apply the CSS background
+                                               $looped = setBackground($looped);
+                                               
+                                               // Set the Get API paths
+                                               $looped = setPath($looped, $hash, HOST_STATIC, $type, '');
+                                       }
+                                       
+                                       // Optimize the code rendering
+                                       if($type == 'css') {
+                                               // Can minify the CSS
+                                               if($has_compression && !$is_developer)
+                                                       $output = compressCSS($looped);
+                                               else
+                                                       $output = $looped;
+                                       }
+                                       
+                                       else {
+                                               // Can minify the JS (sloooooow!)
+                                               if($has_compression && !$is_developer) {
+                                                       require_once('./jsmin.php');
+                                                       $output = JSMin::minify($looped);
+                                               }
+                                               
+                                               else
+                                                       $output = $looped;
+                                       }
+                                       
+                                       // Generate the reference cache
+                                       if($has_compression)
+                                               $final = gzdeflate($output, 9);
+                                       else
+                                               $final = $output;
+                                       
+                                       // Write it!
+                                       genCache($final, $is_developer, $cache_hash);
+                               }
+                               
+                               // Filter the JS
+                               if($type == 'js') {
+                                       // Set the JS locales
+                                       $output = setLocales($output, $locale);
+                                       
+                                       // Set the JS configuration
+                                       $output = setConfiguration($output, $locale, $version, uploadMaxSize());
+                                       
+                                       // Set the Get API paths
+                                       $output = setPath($output, $hash, HOST_STATIC, $type, $locale);
+                                       
+                                       // Translate the JS script
+                                       require_once('./gettext.php');
+                                       includeTranslation($locale, 'main');
+                                       $output = setTranslation($output);
+                                       
+                                       // Generate the cache
+                                       if($has_compression)
+                                               $final = gzdeflate($output, 9);
+                                       else
+                                               $final = $output;
+                                       
+                                       // Write it!
+                                       genCache($final, $is_developer, $cache_lang);
+                               }
+                               
+                               // Output a well-encoded string
+                               if($deflate_support || !$has_compression)
+                                       echo $final;
+                               else
+                                       echo gzinflate($final);
+                       }
+               }
+               
+               // Read the binary file (PNG, OGA and others)
+               else
+                       readfile($path);
+               
+               exit;
+       }
+       
+       // The file was not found
+       header('Status: 404 Not Found', true, 404);
+       exit('HTTP/1.1 404 Not Found');
+}
+
+// The request is not correct
+header('Status: 400 Bad Request', true, 400);
+exit('HTTP/1.1 400 Bad Request');
+
+?>