diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57f1cb2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea/ \ No newline at end of file diff --git a/Multilingual.php b/Multilingual.php index f006aa4..ce4b737 100644 --- a/Multilingual.php +++ b/Multilingual.php @@ -137,7 +137,7 @@ public function getTranslations($data, $projectSettings){ $data['project_id'] = mysqli_real_escape_string($conn, $data['project_id']); $data['page'] = mysqli_real_escape_string($conn, $data['page']); - $query = "SELECT field_name, element_type, misc, grid_name, element_validation_type, element_validation_min, element_validation_max, element_label FROM redcap_metadata + $query = "SELECT field_name, element_type, misc, grid_name, element_validation_type, element_validation_min, element_validation_max, element_label, field_req FROM redcap_metadata WHERE project_id = " . $data['project_id'] . " AND (form_name LIKE '" . $data['page'] . "' OR field_name LIKE 'survey_text_" . $data['page'] . "')"; $result = mysqli_query($conn, $query); @@ -145,6 +145,7 @@ public function getTranslations($data, $projectSettings){ while($row = mysqli_fetch_array($result)){ //default questions $response['defaults'][$row['field_name']] = strip_tags($row['element_label']. '
'); + $response['questions'][$row['field_name']]['req'] = $row['field_req'] == "1"; //$misc = explode("@", $row['misc']); $misc = str_getcsv($row['misc'], '@'); diff --git a/index.php b/index.php index cbfd6da..edda399 100644 --- a/index.php +++ b/index.php @@ -6,6 +6,8 @@ $data = @$_POST['data']; + /* @var $module Multilingual*/ + if(isset($data) && $data != ''){ $data = json_decode($data, true); diff --git a/js/multilingual_survey.js b/js/multilingual_survey.js index 9abf9eb..ebee4c6 100644 --- a/js/multilingual_survey.js +++ b/js/multilingual_survey.js @@ -6,11 +6,12 @@ var project_id = getVariable('pid'); //var languages = {1: 'en', 2: 'es', 3: 'fr'}; var languages = {1: 'en', 2: 'es'}; + var requiredFieldTranslations = {1:'Required *',2:'Required *'}; var totalLanguages = 2; var settings = {}; settings['empty'] = true; getSettings(); - getLanguages(); + getRequiredFieldTranslations(); var lang = 'en'; var langReady = 0; var interval = null; @@ -307,28 +308,57 @@ $('#changeLang').css('color', (settings['font-color'] && settings['font-color']['value'] ? settings['font-color']['value'] : '')); $('#changeLang').css('opacity','1'); - //remove required english label - $('.requiredlabel').remove(); + var mergedRequiredFieldTranslations = {}; + var requiredLabelText = ""; + + //handle required english label + if(requiredFieldTranslations[""]==""){ + // no field was set + // remove required english label + $('.requiredlabel').remove(); + }else{ + // replace required field label (if language is found) + var langKeys = Object.keys(requiredFieldTranslations); + + //match language ids with defined required field labels + for(i=0; i'; } - } - else{ - $('#label-' + id).html(translations['questions'][id]['text']); - } + + if(translations['questions'][id]['matrix'] != null){ + //$('#' + id + '-tr').children('td').eq(1).children('table').children().children().children('td:first').html(translations['questions'][id]['text']); + $('#label-' + id).html(translations['questions'][id]['text']+requiredLabelDiv); + } + else if(translations['questions'][id]['type'] == 'descriptive'){ + var tmp = $('#' + id + '-tr').children('td').eq(1).html(); + if(tmp != undefined){ + $('#' + id + '-tr').children('td').eq(1).html(translations['questions'][id]['text']+requiredLabelDiv); + //tmp = tmp.split(/<(.+)/); + //$('#' + id + '-tr').children('td').eq(1).html(translations['questions'][id]['text'] + ' <' + tmp[1]); + } + } + else{ + $('#label-' + id).html(translations['questions'][id]['text']+requiredLabelDiv); + } + } } //answers @@ -581,6 +611,27 @@ }); } + function getRequiredFieldTranslations(){ + var data = {}; + data['todo'] = 2; + data['project_id'] = pid; + data['field_name'] = 'requiredFieldTranslations'; + var json = encodeURIComponent(JSON.stringify(data)); + + $.ajax({ + url: ajax_url, + type: 'POST', + data: 'data=' + json, + success: function (r) { + requiredFieldTranslations = r; + getLanguages(); + }, + error: function(jqXHR, textStatus, errorThrown) { + console.log(textStatus, errorThrown); + } + }); + } + //generic functions function getVariable(variable){ var query = window.location.search.substring(1);