Browse Source

Finalizado o upgrade

Igor 4 years ago
parent
commit
58d2877616
61 changed files with 54639 additions and 3436 deletions
  1. BIN
      .locallib.php.swp
  2. 3 2
      db/install.xml
  3. 149 0
      db/upgrade.php
  4. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/codemirror.css
  5. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/NimbusSanLConBold.ttf
  6. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/NimbusSanLConRegular.ttf
  7. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/cyrillic-ext-roboto.woff2
  8. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/cyrillic-roboto.woff2
  9. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/greek-ext-roboto.woff2
  10. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/greek-roboto.woff2
  11. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/latin-ext-roboto.woff2
  12. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/latin-roboto.woff2
  13. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/texgyreheros-regular.otf
  14. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/fonts/vietnamese-roboto.woff2
  15. 2 5
      ilm/iVProg/1.0.20200121/ivprog/css/ivprog-assessment.css
  16. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/ivprog-editor.css
  17. 0 4
      ilm/iVProg/1.0.20200121/ivprog/css/ivprog-term.css
  18. 1 2
      ilm/iVProg/1.0.20200121/ivprog/css/ivprog-visual-1.0.css
  19. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/roboto.css
  20. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/show-hint.css
  21. 0 0
      ilm/iVProg/1.0.20190717/ivprog/css/ttcn.css
  22. 0 0
      ilm/iVProg/1.0.20190717/ivprog/img/empty.svg
  23. 0 0
      ilm/iVProg/1.0.20190717/ivprog/img/trash-icon.png
  24. 161 0
      ilm/iVProg/1.0.20190717/ivprog/index.html
  25. 0 0
      ilm/iVProg/1.0.20190717/ivprog/js/Sortable.js
  26. 51 53
      ilm/iVProg/1.0.20200121/ivprog/js/iassign-integration-functions.js
  27. 0 0
      ilm/iVProg/1.0.20190717/ivprog/js/jquery.json-editor.min.js
  28. 25343 0
      ilm/iVProg/1.0.20190717/ivprog/js/main.953c46193185032c68f7.js
  29. 1 0
      ilm/iVProg/1.0.20190717/ivprog/js/main.953c46193185032c68f7.js.map
  30. 28735 0
      ilm/iVProg/1.0.20190717/ivprog/js/vendors~main.28bb9bf067b35b9514f7.js
  31. 1 0
      ilm/iVProg/1.0.20190717/ivprog/js/vendors~main.28bb9bf067b35b9514f7.js.map
  32. 65 0
      ilm/iVProg/1.0.20190717/ivprog/runner.html
  33. 0 372
      ilm/iVProg/1.0.20200121/ivprog/css/semantic.min.css
  34. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.eot
  35. 0 1008
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.svg
  36. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.ttf
  37. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.woff
  38. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.woff2
  39. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.eot
  40. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.otf
  41. 0 1518
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.svg
  42. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.ttf
  43. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.woff
  44. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.woff2
  45. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.eot
  46. 0 366
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.svg
  47. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.ttf
  48. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.woff
  49. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.woff2
  50. BIN
      ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/images/flags.png
  51. 0 40
      ilm/iVProg/1.0.20200121/ivprog/index.html
  52. 0 13
      ilm/iVProg/1.0.20200121/ivprog/js/jquery-ui.min.js
  53. 0 2
      ilm/iVProg/1.0.20200121/ivprog/js/jquery.min.js
  54. 0 2
      ilm/iVProg/1.0.20200121/ivprog/js/main.d06095b50c2dc5e3d481.js
  55. 0 11
      ilm/iVProg/1.0.20200121/ivprog/js/semantic.min.js
  56. 0 6
      ilm/iVProg/1.0.20200121/ivprog/js/vendors~main.887dfb2c019ca2447c57.js
  57. 0 18
      ilm/iVProg/1.0.20200121/ivprog/runner.html
  58. 1 1
      ilm_handlers/html5.php
  59. 16 2
      ilm_handlers/java.php
  60. 108 9
      locallib.php
  61. 2 2
      version.php

BIN
.locallib.php.swp


+ 3 - 2
db/install.xml

@@ -128,8 +128,9 @@
                 <FIELD NAME="userid"              TYPE="int"  LENGTH="10"  NOTNULL="true" UNSIGNED="true"  DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="id of submitting author"                                                                            PREVIOUS="iassign_statementid" NEXT="timecreated"/>
                 <FIELD NAME="timecreated"         TYPE="int"  LENGTH="10"  NOTNULL="true" UNSIGNED="true"  DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="Date of first submission"                                                                           PREVIOUS="userid"              NEXT="timemodified"/>
                 <FIELD NAME="timemodified"        TYPE="int"  LENGTH="10"  NOTNULL="true" UNSIGNED="true"  DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="Date last modified"                                                                                 PREVIOUS="timecreated"         NEXT="grade"/>
-                <FIELD NAME="grade"               TYPE="float"             NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="Grade of evaluation"                                                                                PREVIOUS="timemodified"        NEXT="teacher"/>
-                <FIELD NAME="teacher"             TYPE="int"  LENGTH="10"  NOTNULL="true" UNSIGNED="true"  DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="id teacher"                                                                                         PREVIOUS="grade"               NEXT="answer"/>
+                <FIELD NAME="grade"               TYPE="float"             NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="Grade of evaluation"                                                                                PREVIOUS="timemodified"        NEXT="previous_grade"/>
+                <FIELD NAME="previous_grade"      TYPE="float"             NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="Previous grade of evaluation"                                                                       PREVIOUS="grade"               NEXT="teacher"/>
+                <FIELD NAME="teacher"             TYPE="int"  LENGTH="10"  NOTNULL="true" UNSIGNED="true"  DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="id teacher"                                                                                         PREVIOUS="previous_grade"               NEXT="answer"/>
                 <FIELD NAME="answer"              TYPE="text" LENGTH="big" NOTNULL="true"                              SEQUENCE="false"  ENUM="false" COMMENT="String with the last solution sent by the student"                                                  PREVIOUS="teacher"             NEXT="experiment"/>
                 <FIELD NAME="experiment"          TYPE="int"  LENGTH="1"   NOTNULL="true" UNSIGNED="true"  DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="Total  of submissions"                                                                              PREVIOUS="answer"              NEXT="status"/>
                 <FIELD NAME="status"              TYPE="int"  LENGTH="1"   NOTNULL="true" UNSIGNED="true"  DEFAULT="0" SEQUENCE="false"  ENUM="false" COMMENT="Status of activities. 0-not submitted/1-submitted/2-evaluated as incorrect/3-evaluated as correct"  PREVIOUS="experiment"/>

+ 149 - 0
db/upgrade.php

@@ -426,6 +426,155 @@ function xmldb_iassign_upgrade ($oldversion) {
       } // foreach ($records as $record)
 
     } // if ($oldversion < 2018031000)
+
+    if ($oldversion < 2019112217) {
+
+      $table = new xmldb_table('iassign_submission');
+      $field = new xmldb_field('previous_grade', XMLDB_TYPE_FLOAT, null, null, null, null, null);
+
+      if (!$dbman->field_exists($table, $field)) {
+        $dbman->add_field($table, $field);
+      }
+
+      $records = array(
+        // iGeom 5.9.22
+        array_combine(
+          array('name', 'url', 'version', 'type', 'description', 'extension', 'file_jar', 'file_class', 'width', 'height', 'enable', 'timemodified', 'author', 'timecreated', 'evaluate'),
+          array('iGeom', 'http://www.matematica.br/igeom', '5.9.22', 'Java', '{"en":"Interactive Geometry on the Internet","pt_br":"Geometria Interativa na Internet"}', 'geo', 'ilm/iGeom/5.9.22/iGeom.jar', 'IGeomApplet.class', 800, 600, 1, time(), $USER->id, time(), 1)),
+        // iGraf 4.4.0.10
+        array_combine(
+          array('name', 'url', 'version', 'type', 'description', 'extension', 'file_jar', 'file_class', 'width', 'height', 'enable', 'timemodified', 'author', 'timecreated', 'evaluate'),
+          array('iGraf', 'http://www.matematica.br/igraf', '4.4.0.10', 'Java', '{"en":"Interactive Graphic on the Internet","pt_br":"Gráficos Interativos na Internet"}', 'grf', 'ilm/iGraf/4.4.0.10/iGraf.jar', 'igraf.IGraf.class', 840, 600, 1, time(), $USER->id, time(), 1)),
+        // iHanoi 0.1.20200115
+        array_combine(
+          array('name', 'url', 'version', 'type', 'description', 'extension', 'file_jar', 'file_class', 'width', 'height', 'enable', 'timemodified', 'author', 'timecreated', 'evaluate'),
+          array('iHanoi', 'http://www.matematica.br/ihanoi', '0.1.20200115', 'HTML5', '{"en":"interactive Tower os Hanoi (by LInE)", "pt_br":"Torres de Hanói (do LInE)"}', 'ihn', 'ilm/iHanoi/0.1.20200115/ihanoi/', 'index.html', 730, 450, 1, time(), $USER->id, time(), 1)),
+        // iVProg 1.0.20190717 - HTML5 - 2019
+        array_combine(
+          array('name', 'url', 'version', 'type', 'description', 'extension', 'file_jar', 'file_class', 'width', 'height', 'enable', 'timemodified', 'author', 'timecreated', 'evaluate'), 
+          array('iVProg', 'http://www.usp.br/line/ivprog/', '1.0.20190717', 'HTML5', '{"en":"Visual Interactive Programming on the Internet (HTML)","pt_br":"Programação visual interativa na Internet"}', 'ivph', 'ilm/iVProg/1.0.20190717/ivprog/', 'index.html', 800, 600, 1, time(), $USER->id, time(), 1)),
+        // iFractions 0.1.20200221 - HTML5
+        array_combine(
+          array('name', 'url', 'version', 'type', 'description', 'extension', 'file_jar', 'file_class', 'width', 'height', 'enable', 'timemodified', 'author', 'timecreated', 'evaluate'), 
+          array('iFractions', 'http://www.matematica.br/ifractions', '0.1.20200221', 'HTML5', '{"en":"Interactive Fractions game","pt_br":"Jogo interativa de frações"}', 'frc', 'ilm/iFractions/0.1.20200221/ifractions/', 'index.html', 1000, 600, 1, time(), $USER->id, time(), 1))
+          );
+        
+        $iassign_ilm = $DB->get_records('iassign_ilm');
+
+        foreach ($records as $record) {
+          $newentry = new stdClass();
+          $newentry->name = $record['name'];
+          $newentry->version = $record['version'];
+          $newentry->type = $record['type'];
+          $newentry->url = $record['url'];
+          $newentry->description = $record['description'];
+          $newentry->extension = $record['extension'];
+          $newentry->file_jar = $record['file_jar'];
+          $newentry->file_class = $record['file_class'];
+          $newentry->width = $record['width'];
+          $newentry->height = $record['height'];
+          $newentry->enable = $record['enable'];
+          $newentry->timemodified = time();
+          $newentry->author = $USER->id;
+          $newentry->timecreated = time();
+          $newentry->evaluate = $record['evaluate'];
+
+          if ($iassign_ilm) {
+
+            foreach ($iassign_ilm as $iassign) {
+              if ($iassign->name == $record['name'] && $iassign->version == $record['version']) {
+                $updateentry = new stdClass();
+                $updateentry->id = $iassign->id;
+                $updateentry->file_jar = $record['file_jar'];
+                $updateentry->file_class = $record['file_class'];
+                $updateentry->timemodified = time();
+
+                $DB->update_record("iassign_ilm", $updateentry);
+              } 
+              elseif ($iassign->name == $record['name'] && $iassign->version != $record['version']) {
+                $updateentry = new stdClass();
+                $updateentry->id = $iassign->id;
+                $updateentry->file_jar = $record['file_jar'];
+                $updateentry->file_class = $record['file_class'];
+                $updateentry->version = $record['version'];
+                $updateentry->timemodified = time();
+
+                $DB->update_record("iassign_ilm", $updateentry);
+              }
+            }
+          } else {
+            $DB->insert_record("iassign_ilm", $newentry, false);
+          }
+        } // foreach ($records as $record)
+
+        $not_found = '';
+        if ($iassign_ilm) {
+          foreach ($iassign_ilm as $iassign) {
+
+            $found = false;
+            foreach ($records as $record) {
+              if ($iassign->name == $record['name']) {
+                $found = true;
+                break;
+              }
+            }
+
+            if (!$found) {
+              $not_found .= '<li>' . $iassign->name . ' - <a href="' . $iassign->url . '" target="_blank">' . $iassign->url . '</a></li>';
+              
+              $updateentry = new stdClass();
+              $updateentry->id = $iassign->id;
+              $updateentry->enable = 0;
+              $updateentry->timemodified = time();
+
+              $DB->update_record("iassign_ilm", $updateentry);
+            }
+          }
+        }
+
+        if ($not_found != '') {
+          echo '<div class="alert alert-warning alert-block fade in " role="alert" data-aria-autofocus="true" tabindex="0" >';
+          echo 'A atualização foi finalizada com sucesso! Porém, alguns dos iMA instalados anteriormente em sua versão local, não estão disponíveis na distribuição atual do iAssign:';
+          echo '<ul style="margin-top: 1rem;">';
+          echo $not_found;
+          echo '</ul>';
+          echo 'Esses iMA foram desabilitados, para evitar problemas de usabilidade. <br> Solução: adicione novamente esses iMA ao iAssign, na área <a href="'.new moodle_url('/admin/settings.php?section=modsettingiassign').'">administrativa do plugin</a>.';
+          echo '</div>';
+        }
+
+        $iassign_ilm = $DB->get_records('iassign_ilm');
+
+        foreach ($records as $record) {
+          $newentry = new stdClass();
+          $newentry->name = $record['name'];
+          $newentry->version = $record['version'];
+          $newentry->type = $record['type'];
+          $newentry->url = $record['url'];
+          $newentry->description = $record['description'];
+          $newentry->extension = $record['extension'];
+          $newentry->file_jar = $record['file_jar'];
+          $newentry->file_class = $record['file_class'];
+          $newentry->width = $record['width'];
+          $newentry->height = $record['height'];
+          $newentry->enable = $record['enable'];
+          $newentry->timemodified = time();
+          $newentry->author = $USER->id;
+          $newentry->timecreated = time();
+          $newentry->evaluate = $record['evaluate'];
+
+          $found = false;
+          foreach ($iassign_ilm as $iassign) {
+            if ($iassign->name == $newentry->name) {
+              $found = true;
+              break;
+            }
+          }
+          if (!$found) {
+            $DB->insert_record("iassign_ilm", $newentry, false);
+          }
+        }
+
+    } // if ($oldversion < 2019112200)
     
 
   // log event -----------------------------------------------------

ilm/iVProg/1.0.20200121/ivprog/css/codemirror.css → ilm/iVProg/1.0.20190717/ivprog/css/codemirror.css


ilm/iVProg/1.0.20200121/ivprog/css/fonts/NimbusSanLConBold.ttf → ilm/iVProg/1.0.20190717/ivprog/css/fonts/NimbusSanLConBold.ttf


ilm/iVProg/1.0.20200121/ivprog/css/fonts/NimbusSanLConRegular.ttf → ilm/iVProg/1.0.20190717/ivprog/css/fonts/NimbusSanLConRegular.ttf


ilm/iVProg/1.0.20200121/ivprog/css/fonts/cyrillic-ext-roboto.woff2 → ilm/iVProg/1.0.20190717/ivprog/css/fonts/cyrillic-ext-roboto.woff2


ilm/iVProg/1.0.20200121/ivprog/css/fonts/cyrillic-roboto.woff2 → ilm/iVProg/1.0.20190717/ivprog/css/fonts/cyrillic-roboto.woff2


ilm/iVProg/1.0.20200121/ivprog/css/fonts/greek-ext-roboto.woff2 → ilm/iVProg/1.0.20190717/ivprog/css/fonts/greek-ext-roboto.woff2


ilm/iVProg/1.0.20200121/ivprog/css/fonts/greek-roboto.woff2 → ilm/iVProg/1.0.20190717/ivprog/css/fonts/greek-roboto.woff2


ilm/iVProg/1.0.20200121/ivprog/css/fonts/latin-ext-roboto.woff2 → ilm/iVProg/1.0.20190717/ivprog/css/fonts/latin-ext-roboto.woff2


ilm/iVProg/1.0.20200121/ivprog/css/fonts/latin-roboto.woff2 → ilm/iVProg/1.0.20190717/ivprog/css/fonts/latin-roboto.woff2


ilm/iVProg/1.0.20200121/ivprog/css/fonts/texgyreheros-regular.otf → ilm/iVProg/1.0.20190717/ivprog/css/fonts/texgyreheros-regular.otf


ilm/iVProg/1.0.20200121/ivprog/css/fonts/vietnamese-roboto.woff2 → ilm/iVProg/1.0.20190717/ivprog/css/fonts/vietnamese-roboto.woff2


+ 2 - 5
ilm/iVProg/1.0.20200121/ivprog/css/ivprog-assessment.css

@@ -66,10 +66,7 @@ table td { font-size: 14pt;}
 }
 .assessment-string-expected, .assessment-string-generated, .assessment-string-diff {text-align: left;}
 p.assessment-failed-execution {padding-left: 1rem;}
-.assessment-failed-case {
-  color:#FF1212;
-  padding-right: 1rem;
-}
+.assessment-failed-case {color:#FF1212}
 .assessment-input-unread {color: #d02929}
 .assessment-number-result-failed, .assessment-bool-result-failed {color: #d02929}
 .assessment-number-result, .assessment-bool-result, .assessment-string-result {color: #22a222}
@@ -118,4 +115,4 @@ p.assessment-failed-execution {padding-left: 1rem;}
 .assessment-empty-output {
   height: 1.5rem;
   width: 1.5rem;
-}
+}

ilm/iVProg/1.0.20200121/ivprog/css/ivprog-editor.css → ilm/iVProg/1.0.20190717/ivprog/css/ivprog-editor.css


+ 0 - 4
ilm/iVProg/1.0.20200121/ivprog/css/ivprog-term.css

@@ -9,10 +9,6 @@
   z-index: 10;
 }
 
-.ivprog-term-userText {
-  white-space: pre;
-}
-
 .ivprog-term-userText, .ivprog-term-userInput {
   color: #f2d6d6;
 }

+ 1 - 2
ilm/iVProg/1.0.20200121/ivprog/css/ivprog-visual-1.0.css

@@ -698,7 +698,6 @@ div.function_name_div_updated:active,
 .global_container .span_value_variable,
 .variable_container .span_value_variable {
     font-size: 110%;
-    white-space: pre;
 }
 .global_container .global_type, .global_container .editing_name_var, .global_container .span_value_variable,
 .variable_container .variable_type,  .variable_container .span_value_variable, .variable_container .editing_name_var,
@@ -1077,4 +1076,4 @@ div.ui.checkbox.transition.visible {
 
 .pass_button button {
 	padding-bottom: 2px;
-}
+}

ilm/iVProg/1.0.20200121/ivprog/css/roboto.css → ilm/iVProg/1.0.20190717/ivprog/css/roboto.css


ilm/iVProg/1.0.20200121/ivprog/css/show-hint.css → ilm/iVProg/1.0.20190717/ivprog/css/show-hint.css


ilm/iVProg/1.0.20200121/ivprog/css/ttcn.css → ilm/iVProg/1.0.20190717/ivprog/css/ttcn.css


ilm/iVProg/1.0.20200121/ivprog/img/empty.svg → ilm/iVProg/1.0.20190717/ivprog/img/empty.svg


ilm/iVProg/1.0.20200121/ivprog/img/trash-icon.png → ilm/iVProg/1.0.20190717/ivprog/img/trash-icon.png


+ 161 - 0
ilm/iVProg/1.0.20190717/ivprog/index.html

@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+    <title></title>
+    <link href="css/roboto.css" type="text/css" rel="stylesheet">
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.0/semantic.min.css"/>
+    <link rel="stylesheet" type="text/css" href="css/codemirror.css">
+    <link rel="stylesheet" type="text/css" href="css/show-hint.css">
+    <link rel="stylesheet" type="text/css" href="css/ttcn.css">
+    <link rel="stylesheet" type="text/css" href="css/ivprog-visual-1.0.css">
+    <link rel="stylesheet" type="text/css" href="css/ivprog-term.css">
+    <link rel="stylesheet" type="text/css" href="css/ivprog-editor.css">
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.0/semantic.min.js"></script>
+    <script src="js/Sortable.js"></script>
+    <script src="js/iassign-integration-functions.js"></script>
+  </head>
+  <body>
+
+    <div class="ui height_100 add_accordion" id="ui_main_div">
+
+      <div class="title default_visual_title">
+        <i class="dropdown icon"></i>
+      </div>
+
+    <div class="content height_100">
+   
+      <div class="ui raised container segment div_to_body">
+
+        <div class="ui container main_title only_in_frame">
+          <h2>iVProg</h2>
+        </div>
+
+        <div class="ui icon menu center aligned container" style="width: 438px; margin-top: -20px;">
+          <a class="item active visual_coding_button">
+            <i class="window maximize outline icon"></i>
+          </a>
+          <a class="item textual_coding_button">
+            <i class="code icon"></i>
+          </a>
+          <a class="item upload_file_button disabled">
+            <i class="upload icon"></i>
+          </a>
+          <a class="item download_file_button disabled">
+            <i class="download icon"></i>
+          </a>
+          <a class="item undo_button disabled">
+            <i class="undo icon"></i>
+          </a>
+          <a class="item redo_button disabled">
+            <i class="redo icon"></i>
+          </a>
+          <a id="run_button" class="item run_button">
+            <i class="play icon"></i>
+          </a>
+          <a id="stop_button" class="item stop_button" style="display: none">
+            <i class="stop icon"></i>
+          </a>
+          <a class="item assessment assessment_button">
+            <i class="check icon"></i>
+          </a>
+          <!--<a class="item expand_button">
+            <i class="expand arrows alternate icon"></i>
+          </a>-->
+          <a class="item help_button">
+            <i class="help icon"></i>
+          </a>
+        </div>
+
+        <div class="ui one column container segment ivprog_visual_panel loading">
+
+          <div class="global_var">
+
+
+            <div class="ui icon button add-globalVar-button add_global_button purple">
+
+              <i class="icons">
+                <i class="icon superscript" style="margin-top: -2px;margin-bottom: 2px;margin-left: 1px;margin-right: 1px; font-size: 18px;"></i>
+                <i class="corner add icon inverted" style="font-size: 10px;padding-top: 5px;padding-left: 7px;"></i>
+              </i>
+              
+            </div>
+
+            <div class="list_globals" id="listGlobalsHandle"></div>
+
+          </div>
+
+          <div class="all_functions list-group" id="listWithHandle">
+
+          </div>
+
+
+          <div class="ui teal small labeled icon button add_function_button">
+            <data class="i18n" value="ui:btn_function">Function</data>
+            <i class="add icon"></i>
+          </div>
+          <div class="program_final"></div>
+
+        </div>
+
+
+        <div class="ui one column container segment ivprog_textual_panel loading" style="display: none;">
+          <textarea id="ivprog-text-editor" class=".ivprog_textual_code"></textarea>
+        </div>
+        <div id='ivprog-term-div' class="six column wide">
+          
+        </div>
+      </div>
+    </div>
+    <div class="dimmer_content_message">
+      <h3>Aconteceu um erro ao processar a atividade. <br> Recarregue a página para tentar novamente.</h3>
+      <button class="positive ui button" onclick="window.parent.location.reload()">Recarregar</button>
+    </div>
+    <script src="js/iassign-integration-functions.js"></script>
+  </div>
+  <script src="js/vendors~main.28bb9bf067b35b9514f7.js"></script><script src="js/main.953c46193185032c68f7.js"></script></body>
+  <script>
+    var mouseX;
+    var mouseY;
+    $(document).ready(() => {
+      var $buttons = $('.ivprog_format .button'), 
+        handler = {
+          activate: function () {
+            $(this)
+              .addClass('active')
+              .siblings()
+              .removeClass('active');
+          }
+        };
+
+      $buttons.on('click', handler.activate);
+
+      $('.ivprog_format_info').popup(
+        {
+          popup: $('.custom.popup'),
+          on: 'click'
+        });
+
+      $(".data_types_dropdown").dropdown();
+
+      $('.ui.dropdown').dropdown();
+
+      $('.ivprog_visual_panel').removeClass("loading");
+
+      $(document).mousemove(function (e) {
+        var parentOffset = $('.ivprog_visual_panel').offset();;
+        mouseX = e.pageX - parentOffset.left + 300;
+        mouseY = e.pageY - parentOffset.top + 100;
+        /*$('.created_element').css('top', mouseY);
+        $('.created_element').css('left', mouseX);*/
+      });
+      ivprogCore.LocalizedStrings.updateTagText();
+      iassingIntegration();
+      if (iLMparameters.iLM_PARAM_TeacherAutoEval == null) {
+        ivprogCore.initVisualUI();
+      }
+    });
+  </script>
+</html>

ilm/iVProg/1.0.20200121/ivprog/js/Sortable.js → ilm/iVProg/1.0.20190717/ivprog/js/Sortable.js


+ 51 - 53
ilm/iVProg/1.0.20200121/ivprog/js/iassign-integration-functions.js

@@ -39,7 +39,7 @@ function getAnswer () {
         if (key == 'dom_object') {
             return;
         }
-        return value;
+        return value; 
       });
     }
 
@@ -51,21 +51,21 @@ function getAnswer () {
   } else {
     // Montar o retorno com a criação da atividade do professor
     var ret = ' { ' + prepareTestCases()
-        + ',\n"settings_programming_type": \n' + JSON.stringify($('form[name="settings_programming_type"]').serializeArray())
-        + ',\n"settings_data_types": \n' + JSON.stringify($('form[name="settings_data_types"]').serializeArray())
-        + ',\n"settings_commands": \n' + JSON.stringify($('form[name="settings_commands"]').serializeArray())
-        + ',\n"settings_functions": \n' + JSON.stringify($('form[name="settings_functions"]').serializeArray())
-        + ',\n"settings_filter": \n' + JSON.stringify($('form[name="settings_filter"]').serializeArray())
+        + ',\n"settings_programming_type": \n' + JSON.stringify($('form[name="settings_programming_type"]').serializeArray()) 
+        + ',\n"settings_data_types": \n' + JSON.stringify($('form[name="settings_data_types"]').serializeArray()) 
+        + ',\n"settings_commands": \n' + JSON.stringify($('form[name="settings_commands"]').serializeArray()) 
+        + ',\n"settings_functions": \n' + JSON.stringify($('form[name="settings_functions"]').serializeArray()) 
+        + ',\n"settings_filter": \n' + JSON.stringify($('form[name="settings_filter"]').serializeArray()) 
         + ' } ';
 
     if ($("input[name='include_algo']").is(':checked')) {
       ret += '\n::algorithm::';
       ret += JSON.stringify(window.program_obj, function(key, value) {
-
+          
           if (key == 'dom_object') {
               return;
           }
-          return value;
+          return value; 
       });
     }
 
@@ -83,7 +83,7 @@ function prepareTestCases () {
     var inps = test_cases_array[i].value.match(/[^\r\n]+/g);
     if (inps) {
       for (var j = 0; j < inps.length; j++) {
-        ret += '"' + inps[j] + '"';
+        ret += '"' + inps[j].trim() + '"';
         if ((j + 1) < inps.length) {
           ret += ', ';
         }
@@ -91,11 +91,9 @@ function prepareTestCases () {
     }
     ret += '], \n "output": [';
     var outs = test_cases_array[i+1].value.match(/[^\r\n]+/g);
-    console.log(outs);
     if (outs) {
       for (var j = 0; j < outs.length; j++) {
-        console.log("output -> ",outs[j]);
-        ret += '"' + outs[j] + '"';
+        ret += '"' + outs[j].trim() + '"';
         if ((j + 1) < outs.length) {
           ret += ', ';
         }
@@ -142,6 +140,7 @@ function getiLMContent () {
   // requisitado via AJAX para a captura dos dados da atividade
   $.get(iLMparameters.iLM_PARAM_Assignment, function (data) {
     //professor invocou a avaliação automática dos exercícios do bloco
+    ivprogCore.CodeEditor.initTextEditor("ivprog-text-editor");
     if (iLMparameters.iLM_PARAM_TeacherAutoEval != null) {
         teacherAutoEval(data);
         //não deve exibir nenhuma interface...
@@ -323,49 +322,49 @@ function blockAllEditingOptions () {
 
   $('.add_global_button').addClass('disabled');
   $('.move_function').addClass('disabled');
-  $('.add_function_button').addClass('disabled');
+  $('.add_function_button').addClass('disabled'); 
   $('.add_var_button_function .ui.icon.button.purple').addClass('disabled');
   $('.add_var_button_function').addClass('disabled');
   $('.menu_commands').addClass('disabled');
-
+  
   $('.global_type').addClass('disabled');
   $('.editing_name_var').addClass('disabled');
   $('.span_value_variable').addClass('disabled');
 
-  $('.remove_global').addClass('disabled');
+  $('.remove_global').addClass('disabled'); 
   $('.ui.icon.ellipsis.vertical.inverted').addClass('disabled');
 
-  $('.alternate_constant').addClass('disabled');
-  $('.remove_variable').addClass('disabled');
-
-  $('.add_global_matrix_column').addClass('disabled');
-  $('.remove_global_matrix_column').addClass('disabled');
+  $('.alternate_constant').addClass('disabled'); 
+  $('.remove_variable').addClass('disabled'); 
+  
+  $('.add_global_matrix_column').addClass('disabled'); 
+  $('.remove_global_matrix_column').addClass('disabled'); 
+  
+  $('.add_global_matrix_line').addClass('disabled'); 
+  $('.remove_global_matrix_line').addClass('disabled'); 
 
-  $('.add_global_matrix_line').addClass('disabled');
-  $('.remove_global_matrix_line').addClass('disabled');
+  $('.add_global_vector_column').addClass('disabled'); 
+  $('.remove_global_vector_column').addClass('disabled'); 
 
-  $('.add_global_vector_column').addClass('disabled');
-  $('.remove_global_vector_column').addClass('disabled');
+  $('.add_expression').addClass('disabled'); 
+  $('.add_parentheses').addClass('disabled'); 
 
-  $('.add_expression').addClass('disabled');
-  $('.add_parentheses').addClass('disabled');
+  $('.remove_function_button').addClass('disabled'); 
+  $('.button_remove_command').addClass('disabled'); 
 
-  $('.remove_function_button').addClass('disabled');
-  $('.button_remove_command').addClass('disabled');
+  $('.command_drag').addClass('disabled'); 
+  $('.simple_add').addClass('disabled'); 
 
-  $('.command_drag').addClass('disabled');
-  $('.simple_add').addClass('disabled');
-
-  $('.add_parameter_button').addClass('disabled');
+  $('.add_parameter_button').addClass('disabled'); 
   $('.parameter_div_edit').addClass('disabled');
   $('.function_name_div_updated').addClass('disabled');
   $('.value_rendered').addClass('disabled');
   $('.var_name').addClass('disabled');
   $('.variable_rendered').addClass('disabled');
-
-  $('.dropdown').addClass('disabled');
+  
+  $('.dropdown').addClass('disabled'); 
   $('.remove_parameter').addClass('disabled');
-
+  
   $('.ui.dropdown.global_type.disabled').css('opacity', '1');
   $('.ui.dropdown.variable_type.disabled').css('opacity', '1');
   $('.ui.dropdown.function_return.disabled').css('opacity', '1');
@@ -379,12 +378,12 @@ function ivprogTextualOrVisual () {
 
   if (settingsProgrammingTypes) {
     if (settingsProgrammingTypes == "textual") {
-      $('.ivprog_visual_panel').css('display', 'none');
+      $('.ivprog_visual_panel').css('display', 'none'); 
       $('.ivprog_textual_panel').css('display', 'block');
       $('.ivprog_textual_panel').removeClass('loading');
 
       $('.visual_coding_button').removeClass('active');
-      $('.textual_coding_button').addClass('active');
+      $('.textual_coding_button').addClass('active'); 
       $('.visual_coding_button').addClass('disabled');
 
       let textual_code = algorithm_in_ilm;
@@ -398,7 +397,7 @@ function ivprogTextualOrVisual () {
       ivprogCore.CodeEditor.disable(false);
     }
     if (settingsProgrammingTypes == "visual") {
-
+      
     }
   }
 }
@@ -429,14 +428,14 @@ function prepareActivityCreation () {
 
   menuTab.insertBefore('.add_accordion');
   $('.tabular.menu .item').tab();
-
+  
   $('.main_title').remove();
   $('.ui.accordion').addClass('styled');
-
+  
   $('<div class="content_margin"></div>').insertBefore($('.add_accordion').find('.content').find('.div_to_body'));
 
   $('<div class="ui checkbox"><input type="checkbox" name="include_algo" class="include_algo" tabindex="0" class="hidden"><label>'+LocalizedStrings.getUI('text_teacher_algorithm_include')+'</label></div>').insertAfter('.content_margin');
-
+  
   var cases_test_div = $('<div></div>');
 
   $('.tab_test_cases').append(cases_test_div);
@@ -500,7 +499,7 @@ function generateOutputs () {
   ivprogCore.autoGenerateTestCaseOutput(code_teacher, test_cases).catch(function (error) {
     showAlert("Houve um erro durante a execução do seu programa: "+error.message);
   });
-
+  
 }
 
 function outputGenerated (test_cases) {
@@ -517,14 +516,13 @@ function outputGenerated (test_cases) {
   }*/
   animateOutput(fields, test_cases, 0);
 
-
+  
 }
 
 function animateOutput (list, test_cases, index) {
   if (list.length == index) return;
   $(list[index]).val('');
   for (var j = 0; j < test_cases[index].output.length; j++) {
-    console.log(test_cases[index].output[j].charCodeAt(0));
     $(list[index]).val($(list[index]).val() + test_cases[index].output[j]);
     if (j < test_cases[index].output.length - 1) {
       $(list[index]).val($(list[index]).val() + '\n');
@@ -552,7 +550,7 @@ function addTestCase (test_case = null) {
         text_row += '\n';
       }
     }
-
+    
     text_row += '</textarea></td><td class="expandingArea"><textarea rows="'+test_case.output.length+'" name="output" class="text_area_output">';
 
     for (var i = 0; i < test_case.output.length; i ++) {
@@ -579,7 +577,7 @@ function addTestCase (test_case = null) {
       var lines = $(this).val().split('\n').length;
       $(this).attr('rows', lines);
   });
-
+  
   updateTestCaseCounter();
 
   $('.text_area_output').keydown(function(e) {
@@ -677,7 +675,7 @@ function getTrackingLogs () {
 // var trackingMatrix = [];
 
 /* function adCoords(e, code){
-  var x = e.pageX;
+  var x = e.pageX; 
   var y = e.pageY;
   if (code === 1) {
     return [new Date().getTime(), x, y, code, e.target.classList['value']];
@@ -724,13 +722,13 @@ function full_screen() {
       //requestFullscreen is used to display an element in full screen mode.
       if("requestFullscreen" in element) {
         element.requestFullscreen();
-      }
+      } 
       else if ("webkitRequestFullscreen" in element) {
         element.webkitRequestFullscreen();
-      }
+      } 
       else if ("mozRequestFullScreen" in element) {
         element.mozRequestFullScreen();
-      }
+      } 
       else if ("msRequestFullscreen" in element) {
         element.msRequestFullscreen();
       }
@@ -751,7 +749,7 @@ function teacherAutoEval (data) {
     }
     // Casos de testes agora são delegados ao tratamento apropriado pela função acima
     // var testCases = content.testcases;
-    settingsProgrammingTypes = content.settingsProgrammingType;
+    settingsProgrammingTypes = content.settingsProgrammingType; 
     settingsDataTypes = content.settingsDataTypes;
     settingsCommands = content.settingsCommands;
     settingsFunctions = content.settingsFunctions;
@@ -765,7 +763,7 @@ function teacherAutoEval (data) {
 
     ivprogTextualOrVisual();
     if (settingsFilter && settingsFilter[0]) {
-
+      
       blockAllEditingOptions();
     }
   });
@@ -784,4 +782,4 @@ function showInvalidData () {
   $('.dimmer_content_message').css('display', 'block');
   $('.ui.height_100.add_accordion').dimmer('add content', '.dimmer_content_message');
   $('.ui.height_100.add_accordion').dimmer('show');
-}
+}

ilm/iVProg/1.0.20200121/ivprog/js/jquery.json-editor.min.js → ilm/iVProg/1.0.20190717/ivprog/js/jquery.json-editor.min.js


File diff suppressed because it is too large
+ 25343 - 0
ilm/iVProg/1.0.20190717/ivprog/js/main.953c46193185032c68f7.js


File diff suppressed because it is too large
+ 1 - 0
ilm/iVProg/1.0.20190717/ivprog/js/main.953c46193185032c68f7.js.map


File diff suppressed because it is too large
+ 28735 - 0
ilm/iVProg/1.0.20190717/ivprog/js/vendors~main.28bb9bf067b35b9514f7.js


File diff suppressed because it is too large
+ 1 - 0
ilm/iVProg/1.0.20190717/ivprog/js/vendors~main.28bb9bf067b35b9514f7.js.map


+ 65 - 0
ilm/iVProg/1.0.20190717/ivprog/runner.html

@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+  <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
+  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.0/semantic.min.css" integrity="sha256-9mbkOfVho3ZPXfM7W8sV2SndrGDuh7wuyLjtsWeTI1Q=" crossorigin="anonymous" />
+  <link rel="stylesheet" type="text/css" href="css/ivprog-visual-1.0.css">
+  <link rel="stylesheet" type="text/css" href="css/ivprog-term.css">
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"
+    integrity="sha256-KM512VNnjElC30ehFwehXjx1YCHPiQkOPmqnrWtpccM="
+    crossorigin="anonymous"></script>
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.0/semantic.min.js" integrity="sha256-x1fC6BXl6BwnUhfQqqqC0Fd/n12wH+u8u9va6+E7xaA=" crossorigin="anonymous"></script>
+  <script type="text/javascript" src="js/jquery.json-editor.min.js"></script>
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"
+      integrity="sha256-KM512VNnjElC30ehFwehXjx1YCHPiQkOPmqnrWtpccM="
+      crossorigin="anonymous"></script>
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.0/semantic.min.js" integrity="sha256-x1fC6BXl6BwnUhfQqqqC0Fd/n12wH+u8u9va6+E7xaA=" crossorigin="anonymous"></script>
+</head>
+<body>
+    <div style="padding-top: 50px;content: ''"></div>
+  <div class="ui container grid">
+    
+    <div class="four wide column">
+      <div class="row">
+        <textarea class="ui form control" name="input" id="input" cols="100" rows="30">
+            programa {
+
+              const real C = 5.5
+             
+              funcao inicio() {
+
+               inteiro a = 8
+               se (a * C > 80) {
+                a = 0
+               } senao {
+                 a = -1
+               }
+              }
+             }
+        </textarea>
+      </div>
+      <div class="row">
+          <button class="ui button" id="btn">Run</button>
+      </div>
+    </div>
+    <div class="six wide column">
+      <div id="console">
+      </div>
+    </div>
+    <div class="six wide column">
+        <div style="overflow-y: scroll; height: 70%;">
+            <pre id="json-renderer" class="ui right floated"></pre>
+        </div>
+    </div>
+  </div>
+  
+  
+<script src="js/vendors~main.28bb9bf067b35b9514f7.js"></script><script src="js/main.953c46193185032c68f7.js"></script></body>
+<script>
+  ( function () {
+    ivprogCore.runner();
+  })();
+</script>
+</html>

File diff suppressed because it is too large
+ 0 - 372
ilm/iVProg/1.0.20200121/ivprog/css/semantic.min.css


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.eot


File diff suppressed because it is too large
+ 0 - 1008
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.svg


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.ttf


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.woff


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/brand-icons.woff2


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.eot


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.otf


File diff suppressed because it is too large
+ 0 - 1518
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.svg


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.ttf


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.woff


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/icons.woff2


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.eot


File diff suppressed because it is too large
+ 0 - 366
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.svg


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.ttf


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.woff


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/fonts/outline-icons.woff2


BIN
ilm/iVProg/1.0.20200121/ivprog/css/themes/default/assets/images/flags.png


File diff suppressed because it is too large
+ 0 - 40
ilm/iVProg/1.0.20200121/ivprog/index.html


File diff suppressed because it is too large
+ 0 - 13
ilm/iVProg/1.0.20200121/ivprog/js/jquery-ui.min.js


File diff suppressed because it is too large
+ 0 - 2
ilm/iVProg/1.0.20200121/ivprog/js/jquery.min.js


File diff suppressed because it is too large
+ 0 - 2
ilm/iVProg/1.0.20200121/ivprog/js/main.d06095b50c2dc5e3d481.js


File diff suppressed because it is too large
+ 0 - 11
ilm/iVProg/1.0.20200121/ivprog/js/semantic.min.js


File diff suppressed because it is too large
+ 0 - 6
ilm/iVProg/1.0.20200121/ivprog/js/vendors~main.887dfb2c019ca2447c57.js


File diff suppressed because it is too large
+ 0 - 18
ilm/iVProg/1.0.20200121/ivprog/runner.html


+ 1 - 1
ilm_handlers/html5.php

@@ -166,7 +166,7 @@ class html5 implements ilm_handle {
     $('.expand_button').addClass('disabled');
   }
 }</script>";
-    $html .= "<div style='width: 800px;text-align: right;'><div onClick='full_screen()' style='color: blue; cursor: pointer;'>".get_string('full_screen', 'iassign')."</div></div>";
+    $html .= "<div style='width: 800px;text-align: right;'><div onClick='full_screen()' style='color: blue; cursor: pointer; display: contents;'>".get_string('full_screen', 'iassign')."</div></div>";
 
     return $html;
   }

+ 16 - 2
ilm_handlers/java.php

@@ -87,7 +87,7 @@ class java implements ilm_handle {
       if (!empty($file_url)) { // There is an iLM file
         // Build tag to JAR file
         $html .= ' <!-- iAssign - view iLM content / LInE - http://line.ime.usp.br -->' . "\n";
-        $html .= ' <applet name="iLM" archive="' . new moodle_url("/mod/iassign/". implode(",", $file_url)) . '" code="' . $iassign_ilm->file_class . '" width="' . $iassign_ilm_width . '" height="' . $iassign_ilm_height . '" vspace=10 hspace=10>' . "\n";
+        $html .= ' <applet id="iLM_applet" name="iLM" archive="' . new moodle_url("/mod/iassign/". implode(",", $file_url)) . '" code="' . $iassign_ilm->file_class . '" width="' . $iassign_ilm_width . '" height="' . $iassign_ilm_height . '" vspace=10 hspace=10>' . "\n";
         $html .= '  <param name="lang" value="' . $lang . '"/>' . "\n";
 
         switch ($options['type']) {
@@ -159,7 +159,21 @@ class java implements ilm_handle {
         } // if (!empty($file_url))
       } // if ($iassign_ilm)
 
-    return $html;
+      $verify_java = '
+      <script>var hasJava= navigator.javaEnabled();
+      if (!hasJava) {
+        var tableRef = document.getElementById("outlinetable").getElementsByTagName("tbody")[0];
+        var newRow   = tableRef.insertRow();
+        var newCell  = newRow.insertCell(0);
+        newCell.style.textAlign = "center";
+        newCell.style.border = "2px solid red"; 
+        newCell.style.background = "#ffe8e8";
+        newCell.style.fontSize = "1.5em";
+        var newText  = document.createTextNode("Não é possível exibir o iMA, pois seu navegador não permite a execução de Applets.");
+        newCell.appendChild(newText);
+      }
+      </script>';
+    return $verify_java . $html;
     }
 
 

+ 108 - 9
locallib.php

@@ -301,7 +301,10 @@ class iassign {
       'get_answer' => '$this->get_answer();',
       'duplicate_activity' => '$this->duplicate_activity();',
       'move_activity' => '$this->move_activity();',
-      'auto_evaluate' => '$this->auto_evaluate();');
+      'auto_evaluate' => '$this->auto_evaluate();',
+      'get_student_submission' => '$this->get_student_submission();',
+      'get_teacher_exercise' => '$this->get_teacher_exercise();'
+    );
 
     $action_iassign_restricted = array_merge($restricted, $action_iassign_limit, $action_iassign);
 
@@ -322,6 +325,44 @@ class iassign {
   
       } // function action()
 
+  /// This method prints the student submission to a specific exercise
+  function get_student_submission () {
+    global $DB;
+    $student = optional_param('iassign_student', NULL, PARAM_TEXT);
+    $exercise = optional_param('iassign_exercise', NULL, PARAM_TEXT);
+    if (!$student || !$exercise) exit;
+    
+    $iassign_submission = $DB->get_record("iassign_submission", array("iassign_statementid" => $exercise, "userid" => $student));
+    
+    if ($iassign_submission)
+      print($iassign_submission->answer);
+
+    die();
+  }
+
+  /// This method prints the teacher exercise
+  function get_teacher_exercise () {
+    global $DB, $COURSE;
+
+    $ilmid = optional_param('iassign_exercise', NULL, PARAM_INT);
+
+    $iassign_statement = $DB->get_record("iassign_statement", array("id" => $ilmid));
+    $fs = get_file_storage(); // Get reference to all files in Moodle data
+    
+    $files = $fs->get_area_files(context_module::instance($this->cm->id)->id, 
+      'mod_iassign', 
+      'exercise', 
+      $iassign_statement->file);
+
+    foreach ($files as $file) {
+      if ($file->get_filename() != ".") {
+        print($file->get_content());
+      }
+    }
+    
+
+    die();
+  }
 
   /// This method runs activities auto evaluation in teacher area
   function auto_evaluate () {
@@ -330,7 +371,62 @@ class iassign {
     if (!has_capability('mod/iassign:runautoevaluate',  $USER->context, $USER->id))
       exit;
 
+    // Get list of exercises in the instance:
+    $iassignid = optional_param('iassignid', NULL, PARAM_TEXT);
+    $exercises_list = $DB->get_records("iassign_statement", array("iassignid" => $iassignid));
+
+    // Get list of enrolled students:
+    $params = array('shortname' => 'student');
+    $role = $DB->get_record_sql("SELECT s.id, s.shortname FROM {role} s WHERE s.shortname = :shortname", $params);
+    $context = context_course::instance($this->course->id);
+    $params = array('contextid' => $context->id, 'roleid' => $role->id);
+    $students_list = $DB->get_records_sql(
+        "SELECT s.userid, a.firstname, a.lastname FROM {role_assignments} s, {user} a " .
+        " WHERE s.contextid = :contextid AND s.userid = a.id AND s.roleid = :roleid " .
+        " ORDER BY a.firstname ASC,a.lastname ASC", $params);
+
     print $OUTPUT->header();
+   
+    print '<script> var exercises = [ ';
+    
+    foreach ($exercises_list as $exercise) {
+      print $exercise->id . ',';
+    }
+
+    print ' ]; var students = [ ';
+
+    foreach ($students_list as $student) {
+      print $student->userid . ',';
+    }
+    print ']; var ilms = [';
+    
+    foreach ($exercises_list as $exercise) {
+      $iassign_ilm = $DB->get_record("iassign_ilm", array("id" => $exercise->iassign_ilmid));
+      print "'" . $CFG->wwwroot . "/mod/iassign/" . $iassign_ilm->file_jar . "/" . $iassign_ilm->file_class . "',";
+    }
+    
+    print '];
+    var endpoint = "'.$CFG->wwwroot . "/mod/iassign/view.php?action=get_student_submission&id=".$this->cm->id.'";
+    window.onload = function(e){ 
+      for (i = 0; i < exercises.length; i++) {
+        var teacher_answer = "'.$CFG->wwwroot.'/mod/iassign/view.php?action=get_teacher_exercise&id='.$this->cm->id.'&iassign_exercise=" + exercises[i];
+        for (j = 0; j < students.length; j++) {//" + students[j] + "
+          var student_answer = endpoint + "&iassign_student=3&iassign_exercise=" + exercises[i];
+          var final_url = ilms[i] + "?iLM_PARAM_AssignmentURL=true&iLM_PARAM_Assignment="+encodeURIComponent(teacher_answer)+"&iLM_PARAM_TeacherAutoEval="+encodeURIComponent(student_answer);
+          console.log(final_url);
+          window.frames["ifrm"].location=final_url;
+          break;
+        }
+        break;
+      }
+    }';
+    
+    print '</script>';
+
+    print '<iframe name="ifrm"></iframe>';
+
+
+
     print $OUTPUT->footer();
   }
 
@@ -602,7 +698,7 @@ class iassign {
         $newentry->timecreated = $timenow;
         $newentry->timemodified = $timenow;
         $newentry->answer = $iLM_PARAM_ArchiveContent;
-        $newentry->grade = $grade_student;
+        $newentry->grade = round($grade_student, 2);
         $newentry->status = $status;
         $newentry->experiment = 1;
 
@@ -626,7 +722,7 @@ class iassign {
         $newentry->timecreated = $iassign_submission->timecreated;
         $newentry->timemodified = $timenow;
         $newentry->answer = $iLM_PARAM_ArchiveContent;
-        $newentry->grade = $grade_student;
+        $newentry->grade = round($grade_student, 2);
         $newentry->status = $status;
         $newentry->experiment = $iassign_submission->experiment + 1;
         if (!$DB->update_record("iassign_submission", $newentry)) {
@@ -653,7 +749,7 @@ class iassign {
           $newentry->timecreated = $iassign_submission->timecreated;
           $newentry->timemodified = $timenow;
           $newentry->answer = $iLM_PARAM_ArchiveContent;
-          $newentry->grade = $grade_student;
+          $newentry->grade = round($grade_student, 2);
           $newentry->status = $status;
           $newentry->experiment = $iassign_submission->experiment + 1;
           if (!$DB->update_record("iassign_submission", $newentry))
@@ -1378,10 +1474,10 @@ class iassign {
   /// Display activity current
   //  @calledby view() -> action() : when student do/redo activity and teacher see student answer
   function view_iassign_current () {
-    global $USER, $CFG, $COURSE, $DB, $OUTPUT;
+    global $USER, $CFG, $COURSE, $DB, $OUTPUT, $PAGE;
     $id = $this->cm->id;
     $iassignid = $this->iassign->id;
-
+    
     $only_one_send_button = 0; // to avoid to put 2 copies of comments (area to send and see comments between teacher and student)
 
     $iassign = $DB->get_record("iassign", array("id" => $iassignid)); // from table '*_iassign': id course name intro introformat activity_group grade timeavailable timedue preventlate test max_experiment
@@ -1405,11 +1501,15 @@ class iassign {
     $event->add_record_snapshot('course', $this->course);
     $event->trigger();
 
-    print $OUTPUT->header();
-
     // Search of iLM data used in the current activity
     $iassign_ilm = $DB->get_record("iassign_ilm", array("id" => $iassign_statement_activity_item->iassign_ilmid));
 
+    // Add actual activity to navbar:
+    $actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
+    $PAGE->navbar->add($iassign_statement_activity_item->name, $actual_link);
+
+    print $OUTPUT->header();
+
     if ($this->action == 'viewsubmission') {
       if (!empty($this->iassign_submission_current) || $this->iassign_submission_current != 0)
         $iassign_submission = $DB->get_record("iassign_submission", array("id" => $this->iassign_submission_current)); // data about activity current
@@ -1770,7 +1870,6 @@ class iassign {
 
       $enderecoPOST = "" . $CFG->wwwroot . "/mod/iassign/view.php?" . $param_aux;
 
-      $this->view_legend_icons();
       $this->activity->view_dates();
 
       if ($this->view_iassign) { // Box 5 to 'proposition' - open

+ 2 - 2
version.php

@@ -86,8 +86,8 @@ defined('MOODLE_INTERNAL') || die();
 // v 1.1 2016/02/13 (2.1.88 2016021300)
 // v 1.0 2012/10/16
 $plugin->component = 'mod_iassign';  // Full name of the plugin (used for diagnostics)
-$plugin->release = '2.6.00 (Build: 2019072300)'; // Human-readable version name
-$plugin->version = 2019072300;                   // The current module version (Date: YYYYMMDDXX)
+$plugin->release = '2.7.00 (Build: 2019112200)'; // Human-readable version name
+$plugin->version = 2019112217;                   // The current module version (Date: YYYYMMDDXX)
 $plugin->requires = 2014021100;      // Requires this Moodle version since 3.0.0)
 $plugin->maturity = MATURITY_STABLE; // How stable the plugin is: MATURITY_ALPHA, MATURITY_BETA, MATURITY_RC, MATURITY_STABLE (Moodle 2.0 and above)
 $plugin->cron = 60;