Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 1.9.11
    • Fix Version/s: None
    • Component/s: Module: HotPot
    • Labels:
      None
    • Database:
      MySQL
    • Affected Branches:
      MOODLE_19_STABLE

      Description

      Non-latinic text in HotPot was spoiled after update to 1.9.3.
      In 1.8 all displyed correctly.

        Gliffy Diagrams

          Attachments

          1. hotpot.png
            hotpot.png
            47 kB
          2. ttt.jmt
            4 kB
          3. ttt.jmt.mdl.19.jpg
            ttt.jmt.mdl.19.jpg
            31 kB

            Issue Links

              Activity

              Hide
              xxxxxxx Gordon Bateson added a comment -

              Please could you attach the quiz that does not display correctly.

              Or if you are talking about a report, please could you attach a screenshot.

              Show
              xxxxxxx Gordon Bateson added a comment - Please could you attach the quiz that does not display correctly. Or if you are talking about a report, please could you attach a screenshot.
              Hide
              mentis Alex Djachenko added a comment -

              I'm talking about all hotpot files: HotPot save data as ISO ISO-8859-1 and other characters translate to "#x0423;ра".
              Previus version moodle translated it to UTF-8, but 1.9.3 doesn't.

              Show
              mentis Alex Djachenko added a comment - I'm talking about all hotpot files: HotPot save data as ISO ISO-8859-1 and other characters translate to "#x0423;ра". Previus version moodle translated it to UTF-8, but 1.9.3 doesn't.
              Hide
              xxxxxxx Gordon Bateson added a comment -

              Thanks for uploading the JMatch file.
              It displays fine on my Moodle 1.9 site (see attached screenshot)

              Please could you attach a screenshot of the problem you are seeing.

              Show
              xxxxxxx Gordon Bateson added a comment - Thanks for uploading the JMatch file. It displays fine on my Moodle 1.9 site (see attached screenshot) Please could you attach a screenshot of the problem you are seeing.
              Hide
              mentis Alex Djachenko added a comment -

              It's Moodle 1.9.3+ (checkout last week). In 1.9.2 all right.

              Show
              mentis Alex Djachenko added a comment - It's Moodle 1.9.3+ (checkout last week). In 1.9.2 all right.
              Hide
              xxxxxxx Gordon Bateson added a comment -

              Thanks for the screenshot.

              I have seen something like this caused by PHP 5.0.3:
              http://moodle.org/mod/forum/discuss.php?d=22034

              If you are are using PHP 5.0.3, you will have to upgrade PHP to fix this issue.

              Otherwise, please could you confirm what version of PHP and MySQL you are using.

              Show
              xxxxxxx Gordon Bateson added a comment - Thanks for the screenshot. I have seen something like this caused by PHP 5.0.3: http://moodle.org/mod/forum/discuss.php?d=22034 If you are are using PHP 5.0.3, you will have to upgrade PHP to fix this issue. Otherwise, please could you confirm what version of PHP and MySQL you are using.
              Hide
              xxxxxxx Gordon Bateson added a comment -

              I just updated to Moodle 1.9.3+ (20081106) and confirmed the ttt.jmt displays OK, that is to say the Russian chars appear as expected.

              Show
              xxxxxxx Gordon Bateson added a comment - I just updated to Moodle 1.9.3+ (20081106) and confirmed the ttt.jmt displays OK, that is to say the Russian chars appear as expected.
              Hide
              mentis Alex Djachenko added a comment -

              Moodle 1.9.3+ (Build: 20081105)
              There is promlem still
              /admin/environment.php shows all ok.

              Show
              mentis Alex Djachenko added a comment - Moodle 1.9.3+ (Build: 20081105) There is promlem still /admin/environment.php shows all ok.
              Hide
              xxxxxxx Gordon Bateson added a comment -

              Something is removing the "&" strings from the ttt.jmt file on your server.

              I am not able to reproduce this issue on the servers I have access to which run Moodle 1.9.3+.

              Would it be possible for me to have access to your server so the problem can be investigated further?

              Show
              xxxxxxx Gordon Bateson added a comment - Something is removing the "&" strings from the ttt.jmt file on your server. I am not able to reproduce this issue on the servers I have access to which run Moodle 1.9.3+. Would it be possible for me to have access to your server so the problem can be investigated further?
              Hide
              mentis Alex Djachenko added a comment -

              We have decided this problem:
              there is libxml2-2.7.2 on our server, but HotPot need to libxml2-2.6.32 for correct work.
              I think, it could be added to manual and enviroment test...

              Show
              mentis Alex Djachenko added a comment - We have decided this problem: there is libxml2-2.7.2 on our server, but HotPot need to libxml2-2.6.32 for correct work. I think, it could be added to manual and enviroment test...
              Hide
              xxxxxxx Gordon Bateson added a comment -

              Wow - that's great information. Thanks a lot !

              It seems libxml2.7.1 and libxml2.7.2 have a serious bug which strips out html entities from xml:

              PHP Bug #45996: libxml2 2.7.1 causes breakage with character data in xml_parse()
              http://bugs.php.net/bug.php?id=45996

              I note that this is fairly recent bug - first reported on 4th Sept 2008 - and that posts on how to fix it still continue - most recent post is dated 5th Nov 2008.

              Instructions on how to downgrade libxml are here:
              http://blog.code-head.com/fixing-libxml-php-bug-and-issues-with-html-entities-downgrading-libxml

              I will investigate how the Moodle environment checks could be modified to detect a viable version of libxml.

              Show
              xxxxxxx Gordon Bateson added a comment - Wow - that's great information. Thanks a lot ! It seems libxml2.7.1 and libxml2.7.2 have a serious bug which strips out html entities from xml: PHP Bug #45996: libxml2 2.7.1 causes breakage with character data in xml_parse() http://bugs.php.net/bug.php?id=45996 I note that this is fairly recent bug - first reported on 4th Sept 2008 - and that posts on how to fix it still continue - most recent post is dated 5th Nov 2008. Instructions on how to downgrade libxml are here: http://blog.code-head.com/fixing-libxml-php-bug-and-issues-with-html-entities-downgrading-libxml I will investigate how the Moodle environment checks could be modified to detect a viable version of libxml.
              Hide
              xxxxxxx Gordon Bateson added a comment -

              here is the code to detect the bad libxml2 extensions:

              $bad_libxml2 = false;
              if (extension_loaded('libxml')) {
              ob_start();
              phpinfo(INFO_MODULES);
              $pattern = '/<tr><td[^>]>libxml2[^<]<\/td><td[^>]>\s([0-9.]+)\s*<\/td><\/tr>/';
              if (preg_match($pattern, ob_get_clean(), $matches)) {
              if ($matches[1]=='2.7.1' || $matches[1]=='2.7.2')

              { $bad_libxml2 = true; }

              }
              }
              if ($bad_libxml2)

              { // libxml2 has PHP bug #45996 which corrupts non-latin chars encoded as HTML entities in xml // this messes up the display of quizzes by Moodle's HotPot module // http://tracker.moodle.org/browse/MDL-17136 // http://bugs.php.net/bug.php?id=45996 }
              Show
              xxxxxxx Gordon Bateson added a comment - here is the code to detect the bad libxml2 extensions: $bad_libxml2 = false; if (extension_loaded('libxml')) { ob_start(); phpinfo(INFO_MODULES); $pattern = '/<tr><td [^>] >libxml2 [^<] <\/td><td [^>] >\s ( [0-9.] +)\s*<\/td><\/tr>/'; if (preg_match($pattern, ob_get_clean(), $matches)) { if ($matches [1] =='2.7.1' || $matches [1] =='2.7.2') { $bad_libxml2 = true; } } } if ($bad_libxml2) { // libxml2 has PHP bug #45996 which corrupts non-latin chars encoded as HTML entities in xml // this messes up the display of quizzes by Moodle's HotPot module // http://tracker.moodle.org/browse/MDL-17136 // http://bugs.php.net/bug.php?id=45996 }
              Hide
              xxxxxxx Gordon Bateson added a comment -

              Eloy ,
              I have added you as a watcher to this issue, because I wondered if you could advise on how we might modify the environment checking to detect faulty versions of libxml2.

              Probably, we need to modify one of the following:

              • admin/environment.xml
              • admin/environment.php
              • lib/customcheckslib.php
              • lib/environmentlib.php

              But I do not have CVS access rights to modify any of those files.

              thanks in advance for any help
              Gordon

              Show
              xxxxxxx Gordon Bateson added a comment - Eloy , I have added you as a watcher to this issue, because I wondered if you could advise on how we might modify the environment checking to detect faulty versions of libxml2. Probably, we need to modify one of the following: admin/environment.xml admin/environment.php lib/customcheckslib.php lib/environmentlib.php But I do not have CVS access rights to modify any of those files. thanks in advance for any help Gordon
              Hide
              stronk7 Eloy Lafuente (stronk7) added a comment -

              Hi Gordon

              yes, that problem with libxml is an old "friend", . See MDL-16759.

              Perhaps, instead of looking for exact versions of libxml against the information given by phpinfo we could, simply, test the parser with a small XML file, containing both encoded HTML tags and some UTF-8 chars known to fail under buggy versions? If we read the XML and get wrong results... one message can be shown in the environment page, recommending to change libxml version or pointing to one page in Docs.

              I'm not able to run any buggy version of libxml here (Mac), but if you can and can provide the test... I'll add it as custom test in 19_STABLE and HEAD.

              Ciao

              Show
              stronk7 Eloy Lafuente (stronk7) added a comment - Hi Gordon yes, that problem with libxml is an old "friend", . See MDL-16759 . Perhaps, instead of looking for exact versions of libxml against the information given by phpinfo we could, simply, test the parser with a small XML file, containing both encoded HTML tags and some UTF-8 chars known to fail under buggy versions? If we read the XML and get wrong results... one message can be shown in the environment page, recommending to change libxml version or pointing to one page in Docs. I'm not able to run any buggy version of libxml here (Mac), but if you can and can provide the test... I'll add it as custom test in 19_STABLE and HEAD. Ciao
              Hide
              timhunt Tim Hunt added a comment -

              Adjusting bogus fix version.

              Show
              timhunt Tim Hunt added a comment - Adjusting bogus fix version.
              Hide
              xxxxxxx Gordon Bateson added a comment -

              Here is a candidate for a function to go in 'lib/customchecks.php". It should detect versions of the PHP xmllib which sliently remove ampersands from XML, thereby messing up Moodle's backups, restores and HotPot module.

              function php_check_libxml($result) {
              global $CFG;
              require_once($CFG->dirroot.'/lib/xmlize.php');

              $xml = xmlize('<?xml version="1.0" encoding="ISO-8859-1"?><amp>&</amp>', 0);
              if (isset($xml['amp']'#'['0']) && $xml['amp']'#'['0']=='&')

              { // xmlize works ok $result = null; }

              else {
              // bad libxml library
              $result->status = false;
              $result->badlibxml = '';
              if (extension_loaded('libxml')) {
              // try to get libxml2 version
              ob_start();
              phpinfo(INFO_MODULES);
              $pattern = '/<tr><td[^>]>libxml2[^<]<\/td><td[^>]>\s([0-9.]+)\s*<\/td><\/tr>/';
              if (preg_match($pattern, ob_get_clean(), $matches))

              { $result->badlibxml = $matches[1]; // 2.7.1 and 2.7.2 are known to be bad }

              }
              }
              return $result;
              }

              The function would be called by adding something like the following to "admin/environment.xml"

              <CUSTOM_CHECK file="lib/customcheckslib.php" function="php_check_xmllib" level="optional">
              <FEEDBACK>
              <ON_CHECK message="xmllibwarning" />
              </FEEDBACK>
              </CUSTOM_CHECK>

              And the following message to "lang/en_utf8/admin.php"

              $string['xmllibwarning'] = '<p><strong>Dysfunctional XML library</strong></p><p>PHP's xml library on this server is dysfunctional and will cause errors in Moodle's backups, restores and the HotPot module</p>';

              It may be possible to use the $result->badxmllib to report the xmllib version, but I can't see how to do that as quickly as I think you can

              regards
              Gordon

              Show
              xxxxxxx Gordon Bateson added a comment - Here is a candidate for a function to go in 'lib/customchecks.php". It should detect versions of the PHP xmllib which sliently remove ampersands from XML, thereby messing up Moodle's backups, restores and HotPot module. function php_check_libxml($result) { global $CFG; require_once($CFG->dirroot.'/lib/xmlize.php'); $xml = xmlize('<?xml version="1.0" encoding="ISO-8859-1"?><amp>&</amp>', 0); if (isset($xml ['amp'] '#' ['0'] ) && $xml ['amp'] '#' ['0'] =='&') { // xmlize works ok $result = null; } else { // bad libxml library $result->status = false; $result->badlibxml = ''; if (extension_loaded('libxml')) { // try to get libxml2 version ob_start(); phpinfo(INFO_MODULES); $pattern = '/<tr><td [^>] >libxml2 [^<] <\/td><td [^>] >\s ( [0-9.] +)\s*<\/td><\/tr>/'; if (preg_match($pattern, ob_get_clean(), $matches)) { $result->badlibxml = $matches[1]; // 2.7.1 and 2.7.2 are known to be bad } } } return $result; } The function would be called by adding something like the following to "admin/environment.xml" <CUSTOM_CHECK file="lib/customcheckslib.php" function="php_check_xmllib" level="optional"> <FEEDBACK> <ON_CHECK message="xmllibwarning" /> </FEEDBACK> </CUSTOM_CHECK> And the following message to "lang/en_utf8/admin.php" $string ['xmllibwarning'] = '<p><strong>Dysfunctional XML library</strong></p><p>PHP's xml library on this server is dysfunctional and will cause errors in Moodle's backups, restores and the HotPot module</p>'; It may be possible to use the $result->badxmllib to report the xmllib version, but I can't see how to do that as quickly as I think you can regards Gordon
              Hide
              danmarsden Dan Marsden added a comment -

              Thanks for adding a link to this from the PHP bug Gordon! - this libxml issue also affects Moodle Networking (Mnet)

              Show
              danmarsden Dan Marsden added a comment - Thanks for adding a link to this from the PHP bug Gordon! - this libxml issue also affects Moodle Networking (Mnet)
              Hide
              skodak Petr Skoda added a comment -

              we are getting very close to the release, moving target release, sorry

              Show
              skodak Petr Skoda added a comment - we are getting very close to the release, moving target release, sorry

                People

                • Votes:
                  3 Vote for this issue
                  Watchers:
                  3 Start watching this issue

                  Dates

                  • Created:
                    Updated: