'html', 'htm' => 'html', 'tpl' => 'html', 'js' => 'javascript', 'css' => 'css', 'scss' => 'scss', 'sass' => 'scss', 'less' => 'less', 'php' => 'php', 'php4' => 'php', 'php5' => 'php', 'phtml' => 'php', 'json' => 'json', 'java' => 'java', 'xml' => 'xml', 'sql' => 'sql', 'md' => 'markdown', 'c' => 'c_cpp', 'cpp' => 'c_cpp', 'd' => 'd', 'h' => 'c_cpp', 'hpp' => 'c_cpp', 'py' => 'python', 'rb' => 'ruby', 'erb' => 'html_ruby', 'jade' => 'jade', 'coffee' => 'coffee', 'vm' => 'velocity'); ////////////////////////////////////////////////////////////////// //availiable text modes ////////////////////////////////////////////////////////////////// private $availiableTextModes = array( 'abap', 'abc', 'actionscript', 'ada', 'apache_conf', 'applescript', 'asciidoc', 'assembly_x86', 'autohotkey', 'batchfile', 'c9search', 'c_cpp', 'cirru', 'clojure', 'cobol', 'coffee', 'coldfusion', 'csharp', 'css', 'curly', 'd', 'dart', 'diff', 'django', 'dockerfile', 'dot', 'eiffel', 'ejs', 'elixir', 'elm', 'erlang', 'forth', 'ftl', 'gcode', 'gherkin', 'gitignore', 'glsl', 'gobstones', 'golang', 'groovy', 'haml', 'handlebars', 'haskell', 'haxe', 'html', 'html_elixir', 'html_ruby', 'ini', 'io', 'jack', 'jade', 'java', 'javascript', 'json', 'jsoniq', 'jsp', 'jsx', 'julia', 'latex', 'lean', 'less', 'liquid', 'lisp', 'livescript', 'logiql', 'lsl', 'lua', 'luapage', 'lucene', 'makefile', 'markdown', 'mask', 'matlab', 'maze', 'mel', 'mips_assembler', 'mushcode', 'mysql', 'nix', 'nsis', 'objectivec', 'ocaml', 'pascal', 'perl', 'pgsql', 'php', 'plain_text', 'powershell', 'praat', 'prolog', 'protobuf', 'python', 'r', 'razor', 'rdoc', 'rhtml', 'rst', 'ruby', 'rust', 'sass', 'scad', 'scala', 'scheme', 'scss', 'sh', 'sjs', 'smarty', 'snippets', 'soy_template', 'space', 'sql', 'sqlserver', 'stylus', 'svg', 'swift', 'swig', 'tcl', 'tex', 'text', 'textile', 'toml', 'twig', 'typescript', 'vala', 'vbscript', 'velocity', 'verilog', 'vhdl', 'wollok', 'xml', 'xquery', 'yaml' ); const storeFilename = 'extensions.php'; ////////////////////////////////////////////////////////////////// //check the session if the user is allowed to do anything here ////////////////////////////////////////////////////////////////// public function __construct() { Common::checkSession(); } public function getAvailiableTextModes() { return $this->availiableTextModes; } public function getDefaultExtensions() { return $this->defaultExtensions; } ////////////////////////////////////////////////////////////////// //checks if the sended extensions are valid to prevent any injections ////////////////////////////////////////////////////////////////// public function validateExtension($extension) { return preg_match('#^[a-z0-9\_]+$#i', $extension); } ////////////////////////////////////////////////////////////////// //checks if the sended extensions are valid to prevent any injections and usage of removed text modes ////////////////////////////////////////////////////////////////// public function validTextMode($mode) { return in_array($mode, $this->availiableTextModes); } ////////////////////////////////////////////////////////////////// //process the form with the associations ////////////////////////////////////////////////////////////////// private function processFileExtTextModeForm() { if (!Common::checkAccess()) { return array('status' =>'error', 'msg' =>'You are not allowed to edit the file extensions.'); } //Store Fileextensions and Textmodes in File: if (!isset($_POST['extension']) || !is_array($_POST['extension']) || !isset($_POST['textMode']) || !is_array($_POST['textMode'])) { return json_encode(array('status' => 'error', 'msg' => 'incorrect data send')); } $exMap = array(); $warning = ''; //Iterate over the sended extensions foreach ($_POST['extension'] as $key => $extension) { //ignore empty extensions, so that they are going to removed if (trim($extension) == '') { continue; } //get the sended data and check it if (!isset($_POST["textMode"][$key])) { return json_encode(array('status' => 'error', 'msg' => 'incorrect data send.')); } $extension = strtolower(trim($extension)); $textMode = strtolower(trim($_POST["textMode"][$key])); if (!$this->validateExtension($extension)) { return json_encode(array('status' => 'error', 'msg' => 'incorrect extension:'.htmlentities($extension))); } if (!$this->validTextMode($textMode)) { return json_encode(array('status' => 'error', 'msg' => 'incorrect text mode:'.htmlentities($textMode))); } //data was correct and could be insert if (isset($exMap[$extension])) { $warning = htmlentities($extension).' is already set.
'; } else { $exMap[$extension] = $textMode; } } //store the associations Common::saveJSON(fileextension_textmode::storeFilename, $exMap); if ($warning != '') { return json_encode(array('status' => 'warning', 'msg' => $warning, 'extensions' => $exMap )); } else { return json_encode(array('status' => 'success', 'msg' => 'File extensions are saved successfully.', 'extensions' => $exMap)); } } ////////////////////////////////////////////////////////////////// //process all the possible forms ////////////////////////////////////////////////////////////////// public function processForms() { if (!isset($_GET['action'])) { return json_encode(array('status' => 'error', 'msg' => 'incorrect data send.')); } switch ($_GET['action']) { case 'FileExtTextModeForm': return $this->processFileExtTextModeForm(); break; case 'GetFileExtTextModes': return $this->prcessGetFileExtTextModes(); break; default: return json_encode(array('status' => 'error', 'msg' => 'Incorrect data send')); break; } } ////////////////////////////////////////////////////////////////// //Send the default extensions ////////////////////////////////////////////////////////////////// private function prcessGetFileExtTextModes() { $ext = false; //ignore warnings $ext = @Common::getJSON(fileextension_textmode::storeFilename); if (!is_array($ext)) { //default extensions $ext = $this->defaultExtensions; } //the availiable extensions, which aren't removed $availEx = array(); foreach ($ext as $ex => $mode) { if (in_array($mode, $this->availiableTextModes)) { $availEx[$ex] = $mode; } } return json_encode(array('status' => 'success', 'extensions' => $availEx, 'textModes' => $this->availiableTextModes)); } ////////////////////////////////////////////////////////////////// //return a select-field with all availiable text modes, the one in the parameter is selected ////////////////////////////////////////////////////////////////// public function getTextModeSelect($extension) { $extension = trim(strtolower($extension)); $find = false; $ret = ''."\n"; return $ret; } }