Bladeren bron

Fix glossary ajax requests see #7638

Julio Montoya 10 jaren geleden
bovenliggende
commit
2bb3b7d2c7

+ 14 - 0
main/glossary/glossary.js.php

@@ -0,0 +1,14 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+require_once '../inc/global.inc.php';
+
+$tpl = new Template();
+
+$templateName = 'glossary/glossary_auto.js.tpl';
+if (api_get_setting('show_glossary_in_documents') == 'ismanual') {
+    $templateName = 'glossary/glossary_manual.js.tpl';
+}
+
+$contentTemplate = $tpl->get_template($templateName);
+$tpl->display($contentTemplate);

+ 62 - 0
main/glossary/glossary_ajax_request.php

@@ -0,0 +1,62 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+/* @todo move this file in the inc/ajax/ folder */
+/**
+ * Glossary ajax request code
+ * @package chamilo.glossary
+ */
+
+require_once '../inc/global.inc.php';
+
+/**
+ * Search a term and return description from a glossary.
+ */
+$charset = api_get_system_encoding();
+
+//replace image path
+$path_image=api_get_path(WEB_COURSE_PATH).api_get_course_path();
+$path_image_search='../../courses/'.api_get_course_path();
+
+if (isset($_POST['glossary_id']) &&
+    $_POST['glossary_id'] == strval(intval($_POST['glossary_id']))
+) {
+    $glossary_id= Security::remove_XSS($_POST['glossary_id']);
+    $glossary_description_by_id = GlossaryManager::get_glossary_term_by_glossary_id($glossary_id);
+    $glossary_description_by_id = str_replace($path_image_search,$path_image,$glossary_description_by_id);
+    echo api_xml_http_response_encode($glossary_description_by_id);
+} elseif (isset($_POST['glossary_data']) && $_POST['glossary_data']=='true') {
+    //get_glossary_terms
+    $glossary_data = GlossaryManager::get_glossary_terms();
+    $glossary_all_data = array();
+    if (count($glossary_data) > 0) {
+        foreach ($glossary_data as $glossary_index => $glossary_value) {
+            $glossary_all_data[] = $glossary_value['id'].'__|__|'.$glossary_value['name'];
+        }
+        $glossary_all_data = implode('[|.|_|.|-|.|]', $glossary_all_data);
+        echo api_xml_http_response_encode($glossary_all_data);
+    }
+} elseif(isset($_POST['glossary_name'])) {
+    $my_glossary_name = Security::remove_XSS($_POST['glossary_name']);
+    $my_glossary_name = api_convert_encoding($my_glossary_name, $charset, 'UTF-8');
+    $my_glossary_name = trim($my_glossary_name);
+
+    $glossary_description = GlossaryManager::get_glossary_term_by_glossary_name(
+        $my_glossary_name
+    );
+
+    $glossary_description = str_replace(
+        $path_image_search,
+        $path_image,
+        $glossary_description
+    );
+
+    if (is_null($glossary_description) || strlen(trim($glossary_description)) == 0) {
+        echo api_xml_http_response_encode(get_lang('NoResults'));
+    } else {
+        echo api_xml_http_response_encode($glossary_description);
+    }
+
+} else {
+    echo api_xml_http_response_encode(get_lang('NoResults'));
+}

+ 80 - 0
main/template/default/glossary/glossary_auto.js.tpl

@@ -0,0 +1,80 @@
+$(document).ready(function() {
+    $(window).load(function () {
+        var my_text = $(".glossary-content").html();
+        var ajaxRequestUrl = "{{ _p.web }}main/glossary/glossary_ajax_request.php";
+
+        $.ajax({
+            contentType: "application/x-www-form-urlencoded",
+            type: "POST",
+            url: ajaxRequestUrl,
+            data: "glossary_data=true",
+            success: function(datas) {
+                if (datas.length==0) {
+                    return false;
+                }
+                data_terms = datas.split("[|.|_|.|-|.|]");
+                var complex_array = new Array();
+                var cp_complex_array = new Array();
+                for (i=0;i<data_terms.length;i++) {
+                    specific_terms=data_terms[i].split("__|__|");
+                    var real_term = specific_terms[1];
+                    var real_code = specific_terms[0];
+                    complex_array[real_code] = real_term;
+                    cp_complex_array[real_code] = real_term;
+                }
+
+                complex_array.reverse();
+
+                for (var my_index in complex_array) {
+                    n = complex_array[my_index];
+                    if (n == null) {
+                        n = '';
+                    } else {
+                        for (var cp_my_index in cp_complex_array) {
+                            cp_data = cp_complex_array[cp_my_index];
+                            if (cp_data == null) {
+                                cp_data = '';
+                            } else {
+                                if (cp_data == n) {
+                                    my_index = cp_my_index;
+                                }
+                            }
+                        }
+                        $('#highlight-plugin').removeHighlight().highlight(n,my_index)
+                    }
+                }
+
+                var complex_array = new Array();
+                $("#highlight-plugin .glossary-ajax").mouseover(function(){
+                    random_id = Math.round(Math.random()*100);
+                    div_show_id="div_show_id"+random_id;
+                    div_content_id="div_content_id"+random_id;
+                    $(this).append("<div id="+div_show_id+" ><div id="+div_content_id+">&nbsp;</div></div>");
+                    $("div#"+div_show_id).attr("style","z-index:99;display:inline;float:left;position:absolute;background-color:#F2F2F2;border-bottom: 1px solid #2E2E2E;border-right: 1px solid #2E2E2E;border-left: 1px solid #2E2E2E;border-top: 1px solid #2E2E2E;color:#305582;margin-left:5px;margin-right:5px;");
+                    $("div#"+div_content_id).attr("style","z-index:99;background-color:#F2F2F2;color:#0B3861;margin-left:8px;margin-right:8px;margin-top:5px;margin-bottom:5px;");
+                    notebook_id = $(this).attr("name");
+                    data_notebook = notebook_id.split("link");
+                    my_glossary_id = data_notebook[1];
+                    $.ajax({
+                        contentType: "application/x-www-form-urlencoded",
+                        beforeSend: function(content_object) {
+                            $("div#"+div_content_id).html("<img src='{{ _p.web_main }}/inc/lib/javascript/indicator.gif' />");
+                        },
+                        type: "POST",
+                        url: ajaxRequestUrl,
+                        data: "glossary_id="+my_glossary_id,
+                        success: function(datas) {
+                            $("div#"+div_content_id).html(datas);
+                        }
+                    });
+                });
+
+                $("#highlight-plugin .glossary-ajax").mouseout(function(){
+                    var current_element = $(this);
+                    div_show_id=current_element.find("div").attr("id");
+                    $("div#"+div_show_id).remove();
+                });
+            }
+        });
+    });
+});

+ 39 - 0
main/template/default/glossary/glossary_manual.js.tpl

@@ -0,0 +1,39 @@
+var ajaxRequestUrl = "{{ _p.web }}main/glossary/glossary_ajax_request.php";
+var imageSource = "{{ _p.web_main }}" + "inc/lib/javascript/indicator.gif";
+var indicatorImage ='<img src="' + imageSource + '" />';
+
+$(document).ready(function() {
+
+    $('html').on('mouseup', function(e) {
+        if(!$(e.target).closest('.popover').length) {
+            $('.popover').each(function(){
+                $(this.previousSibling).popover('hide');
+            });
+        }
+    });
+
+    $(".glossary").attr('data-toggle', 'popover');
+    $(".glossary").popover({
+        'content': '{{ 'Loading' | get_lang }}',
+        'html' : true
+    });
+
+    $("body").on("click", ".glossary", function() {
+        is_glossary_name = $(this).html();
+
+        var thisLink = $(this);
+
+        $.ajax({
+            contentType: "application/x-www-form-urlencoded",
+            type: "POST",
+            url: ajaxRequestUrl,
+            data: "glossary_name="+is_glossary_name,
+            success: function(data) {
+                thisLink.attr('data-title', is_glossary_name).data('bs.popover');
+                var popover = thisLink.attr('data-content',data).data('bs.popover');
+                popover.setContent();
+                popover.$tip.addClass(popover.options.placement);
+            }
+        });
+    });
+});