diff --git a/components/fileext_textmode/class.fileextension_textmode.php b/components/fileext_textmode/class.fileextension_textmode.php index 6de3b8c..2a2788f 100644 --- a/components/fileext_textmode/class.fileextension_textmode.php +++ b/components/fileext_textmode/class.fileextension_textmode.php @@ -12,6 +12,9 @@ require_once '../../common.php'; class fileextension_textmode{ + ////////////////////////////////////////////////////////////////// + //default assotiations + ////////////////////////////////////////////////////////////////// private $defaultExtensions = array( 'html' => 'html', 'htm' => 'html', @@ -38,6 +41,9 @@ class fileextension_textmode{ 'jade' => 'jade', 'coffee' => 'coffee'); + ////////////////////////////////////////////////////////////////// + //availiable text modes + ////////////////////////////////////////////////////////////////// private $availiableTextModes = array( 'abap', 'asciidoc', @@ -116,6 +122,9 @@ class fileextension_textmode{ const storeFilename = 'extensions.php'; + ////////////////////////////////////////////////////////////////// + //check the session if the user is allowed to do anything here + ////////////////////////////////////////////////////////////////// public function __construct(){ Common::checkSession(); } @@ -128,17 +137,25 @@ class fileextension_textmode{ return $this->defaultExtensions; } - private function validateExtension($extension){ + ////////////////////////////////////////////////////////////////// + //checks if the sended extensions are valid to prevent any injections + ////////////////////////////////////////////////////////////////// + public function validateExtension($extension){ return preg_match('#^[a-z0-9\_]+$#i', $extension); } - private function validTextMode($mode){ + ////////////////////////////////////////////////////////////////// + //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 assotiation + ////////////////////////////////////////////////////////////////// private function processFileExtTextModeForm(){ //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')); @@ -148,18 +165,21 @@ class fileextension_textmode{ $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))); } @@ -168,6 +188,7 @@ class fileextension_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{ @@ -175,7 +196,7 @@ class fileextension_textmode{ } } - + //store the assotiations Common::saveJSON(fileextension_textmode::storeFilename, $exMap); if($warning != ''){ return json_encode(array('status' => 'warning', 'msg' => $warning, 'extensions' => $exMap )); @@ -185,12 +206,15 @@ class fileextension_textmode{ } + ////////////////////////////////////////////////////////////////// + //process all the possible forms + ////////////////////////////////////////////////////////////////// public function processForms(){ - if(!isset($_POST['action'])){ + if(!isset($_GET['action'])){ return json_encode(array('status' => 'error', 'msg' => 'incorrect data send.')); } - switch($_POST['action']){ + switch($_GET['action']){ case 'FileExtTextModeForm': return $this->processFileExtTextModeForm(); break; @@ -203,6 +227,9 @@ class fileextension_textmode{ } } + ////////////////////////////////////////////////////////////////// + //Send the default extensions + ////////////////////////////////////////////////////////////////// private function prcessGetFileExtTextModes(){ $ext = false; //ignore warnings @@ -212,8 +239,41 @@ class fileextension_textmode{ //default extensions $ext = $this->defaultExtensions; } - - return json_encode(array('status' => 'success', 'extensions' => $ext, 'textModes' => $this->availiableTextModes)); + + //the availiable extensions, which aren't removed + $availEx = array(); + foreach($ext as $ex => $mode){ + if(in_array($ex, $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; } } diff --git a/components/fileext_textmode/dialog.php b/components/fileext_textmode/dialog.php index 6d12d0b..e39635a 100644 --- a/components/fileext_textmode/dialog.php +++ b/components/fileext_textmode/dialog.php @@ -9,68 +9,64 @@ require_once 'class.fileextension_textmode.php'; -//check Session +//check Session is done in constructor $fileExTM = new fileextension_textmode(); -//return a select-field with all availiable text modes, the one in the param is selected -function getTextModeSelect($extension){ - global $fileExTM; - $extension = trim(strtolower($extension)); - $find = false; - $ret = ''."\n"; - - return $ret; + + $textModes = $fileExTM->getAvailiableTextModes(); + + if(!@ksort($ext)){ + die(json_encode(array('status' => 'error', 'msg' => 'Internal PHP error.') )); + } + ?> +
+ + + + + + + + + $mode){ + ////////////////////////////////////////////////////////////////// + //print only valid assotiations + ////////////////////////////////////////////////////////////////// + if(!$fileExTM->validTextMode($mode)){ + continue; + }?> + + + + + + +
File extensionText mode
getTextModeSelect($mode)?>
+
+ +getDefaultExtensions(); -} - -$textModes = $fileExTM->getAvailiableTextModes(); - -if(!@ksort($ext)){ - die(json_encode(array('status' => 'error', 'msg' => 'Internal PHP error.') )); -} - -//echo '
'."\n"; -echo '
'; -echo ''; -echo ''; - echo ''; - echo ''; - echo ''."\n"; - foreach($ext as $ex => $mode){ - echo ''; - echo ''; - echo ''; - echo ''."\n"; - } - echo ''; -echo '
'.getTextModeSelect($mode).'
'; -echo '
'; -echo ''; -echo ''; -echo ''; - -//echo '
'."\n"; ?> \ No newline at end of file diff --git a/components/fileext_textmode/init.js b/components/fileext_textmode/init.js index eca3c47..0f5ea17 100644 --- a/components/fileext_textmode/init.js +++ b/components/fileext_textmode/init.js @@ -17,82 +17,26 @@ dialog: 'components/fileext_textmode/dialog.php', controller: 'components/fileext_textmode/controller.php', + ////////////////////////////////////////////////////////////////// + //do a post request for the first assotiation of fileextensions and textmodes + ////////////////////////////////////////////////////////////////// availableTextModes : [], init : function() { self = this; this.initEditorFileExtensionTextModes(); }, - - formWidth : 300, - - open : function() { - codiad.modal.unload(); - codiad.modal.load(this.formWidth, - this.dialog); - codiad.modal.hideOverlay(); - }, - //send the isert extesions and textmodes to the server. - sendForm : function(){ - var $div = $('#FileExtTextModeDiv'); - var extensions = $div.find('.FileExtension'); - //data to send - var formData = {'extension[]' : [], 'textMode[]' : [], 'action' : 'FileExtTextModeForm'}; - for(var i = 0; i < extensions.size(); ++i){ - formData['extension[]'].push(extensions[i].value); - } - - var textMode = $div.find('.textMode'); - for(var i = 0; i < textMode.size(); ++i){ - formData['textMode[]'].push(textMode[i].value); - } - - $.post(this.controller, formData, self.setEditorFileExtensionTextModes); - - codiad.modal.unload(); - }, - - //Add a new insert line to the form - addFieldToForm : function(){ - var $table = $('#FileExtTextModeTable'); - var $tbody = $('#FileExtTextModeTableTbody'); - - var code = ''; - code += ''; - - $tbody.append(code); - - //scroll as far down as possible - $table.scrollTop(1000000); - }, - - //function for showing the status and msg from a http-request - showStatus : function(resp) { - resp = $.parseJSON(resp); - if(resp.status != undefined && resp.status != '' && resp.msg != undefined && resp.message != ''){ - switch (resp.status) { - case 'success': - codiad.message.success(resp.msg); - break; - case 'error': - codiad.message.error(resp.msg); - break; - case 'notice': - codiad.message.notice(resp.msg); - break; - }; - } - }, + ////////////////////////////////////////////////////////////////// + //do a post request for the first assotiation of fileextensions and textmodes + ////////////////////////////////////////////////////////////////// initEditorFileExtensionTextModes : function(){ - $.post(this.controller, {'action' : 'GetFileExtTextModes'}, this.setEditorFileExtensionTextModes); + $.get(this.controller, {'action' : 'GetFileExtTextModes'}, this.setEditorFileExtensionTextModes); }, - //initial method to get the stored joins + ////////////////////////////////////////////////////////////////// + //initial method to get the stored assotiations + ////////////////////////////////////////////////////////////////// setEditorFileExtensionTextModes : function(data){ resp = $.parseJSON(data); if(resp.status != 'error' && resp.extensions != undefined){ @@ -110,7 +54,79 @@ amplify.publish('fileext_textmode.loadedExtensions'); } self.showStatus(data); - } + }, + + formWidth : 300, + ////////////////////////////////////////////////////////////////// + // Open the component dialog + ////////////////////////////////////////////////////////////////// + open : function() { + codiad.modal.unload(); + codiad.modal.load(this.formWidth, + this.dialog+"?action=fileextension_textmode_form"); + codiad.modal.hideOverlay(); + }, + ////////////////////////////////////////////////////////////////// + //send the insert extesions and textmodes to the server. + ////////////////////////////////////////////////////////////////// + sendForm : function(){ + var $div = $('#FileExtTextModeDiv'); + var extensions = $div.find('.FileExtension'); + //data to send + var formData = {'extension[]' : [], 'textMode[]' : []}; + for(var i = 0; i < extensions.size(); ++i){ + formData['extension[]'].push(extensions[i].value); + } + + var textMode = $div.find('.textMode'); + for(var i = 0; i < textMode.size(); ++i){ + formData['textMode[]'].push(textMode[i].value); + } + + $.post(this.controller+'?action=FileExtTextModeForm', formData, self.setEditorFileExtensionTextModes); + + codiad.modal.unload(); + }, + ////////////////////////////////////////////////////////////////// + //Add a new insert line to the form + ////////////////////////////////////////////////////////////////// + addFieldToForm : function(){ + var $table = $('#FileExtTextModeTable'); + var $tbody = $('#FileExtTextModeTableTbody'); + + var code = ''; + code += ''; + + $tbody.append(code); + + //scroll as far down as possible + $table.scrollTop(1000000); + }, + + ////////////////////////////////////////////////////////////////// + //showing the status and msg from a http-request + ////////////////////////////////////////////////////////////////// + showStatus : function(resp) { + resp = $.parseJSON(resp); + if(resp.status != undefined && resp.status != '' && resp.msg != undefined && resp.message != ''){ + switch (resp.status) { + case 'success': + codiad.message.success(resp.msg); + break; + case 'error': + codiad.message.error(resp.msg); + break; + case 'notice': + codiad.message.notice(resp.msg); + break; + }; + } + } }; })(this, jQuery); \ No newline at end of file diff --git a/themes/default/fileext_textmode/screen.css b/themes/default/fileext_textmode/screen.css index ccb178e..cb2fe16 100644 --- a/themes/default/fileext_textmode/screen.css +++ b/themes/default/fileext_textmode/screen.css @@ -9,22 +9,21 @@ overflow-y: scroll; display: block; height: 280px; + margin-top: 5px; } -#FileExtTextModeDiv thead td{ +#FileExtTextModeDiv thead th{ vertical-align: middle; } #FileExtTextModeDiv input{ - /*padding: 0px; - margin: 0px;*/ display: inline; } #FileExtTextModeDiv input.FileExtension{ - width: 80px; + /*width: 80px;*/ } #FileExtTextModeDiv input.textMode{ - width: 120px; + /*width: 120px;*/ } \ No newline at end of file