rrodriguez 14 years ago
parent
commit
5e75c6a0d7
100 changed files with 862 additions and 631 deletions
  1. 1 1
      documentation/changelog.html
  2. 2 0
      documentation/credits.html
  3. 56 2
      documentation/installation_guide.html
  4. 44 0
      documentation/installation_guide_es_ES.html
  5. 34 21
      main/admin/configure_homepage.php
  6. 29 33
      main/admin/index.php
  7. 7 7
      main/admin/session_list.php
  8. 20 19
      main/admin/settings.lib.php
  9. 54 44
      main/attendance/attendance_sheet.php
  10. 4 4
      main/auth/profile.php
  11. 66 29
      main/document/document.inc.php
  12. 50 38
      main/document/document.php
  13. 8 0
      main/document/downloadfolder.inc.php
  14. 2 2
      main/document/upload.php
  15. 2 4
      main/exercice/admin.php
  16. 50 52
      main/exercice/exercice.php
  17. 1 1
      main/exercice/exercice_submit.php
  18. 1 1
      main/exercice/exercise_admin.php
  19. 1 1
      main/exercice/hotpotatoes.php
  20. 1 1
      main/exercice/qti2.php
  21. 1 1
      main/exercice/question_create.php
  22. 2 2
      main/exercice/question_pool.php
  23. 4 0
      main/gradebook/lib/be/attendancelink.class.php
  24. 5 0
      main/gradebook/lib/be/dropboxlink.class.php
  25. 9 4
      main/gradebook/lib/be/exerciselink.class.php
  26. 4 0
      main/gradebook/lib/be/forumthreadlink.class.php
  27. 5 0
      main/gradebook/lib/be/learnpathlink.class.php
  28. 5 0
      main/gradebook/lib/be/studentpublicationlink.class.php
  29. 63 36
      main/gradebook/lib/gradebook_functions.inc.php
  30. BIN
      main/img/export_db.png
  31. BIN
      main/img/import_db.png
  32. BIN
      main/img/shared.png
  33. BIN
      main/img/show_test_results.gif
  34. 13 0
      main/inc/banner.inc.php
  35. 60 41
      main/inc/lib/asciimath/ASCIIMathML.js
  36. 4 11
      main/inc/lib/attendance.lib.php
  37. 1 1
      main/inc/lib/fckeditor/editor/fckdialog.html
  38. 5 4
      main/inc/lib/fckeditor/editor/fckdialogframe.html
  39. 19 3
      main/inc/lib/fckeditor/editor/filemanager/connectors/php/commands.php
  40. 10 2
      main/inc/lib/fckeditor/editor/filemanager/connectors/php/config.php
  41. 12 3
      main/inc/lib/fckeditor/editor/plugins/ImageManager/config.inc.php
  42. 1 1
      main/inc/lib/fckeditor/editor/plugins/ImageManager/fckplugin.js
  43. 0 0
      main/inc/lib/fckeditor/editor/plugins/ImageManager/fckplugin_compressed.js
  44. 9 1
      main/inc/lib/fckeditor/editor/plugins/ajaxfilemanager/ajax_file_upload.php
  45. 9 1
      main/inc/lib/fckeditor/editor/plugins/ajaxfilemanager/inc/config.base.php
  46. 168 185
      main/inc/lib/fckeditor/editor/plugins/asciimath/fck_asciimath.html
  47. 11 74
      main/inc/lib/fckeditor/editor/plugins/asciimath/fck_asciimath.js
  48. 1 1
      main/inc/lib/fckeditor/editor/plugins/asciimath/fckplugin.js
  49. 0 0
      main/inc/lib/fckeditor/editor/plugins/asciimath/fckplugin_compressed.js
  50. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/abcd.png
  51. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/aleph.png
  52. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/alpha.png
  53. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/angle.png
  54. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/approx.png
  55. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/backslash.png
  56. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/bara.png
  57. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/bba.png
  58. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/bbba.png
  59. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/beta.png
  60. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/bigcap.png
  61. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/bigcup.png
  62. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/bigvee.png
  63. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/bigwedge.png
  64. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/bot.png
  65. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/braxcket.png
  66. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/cap.png
  67. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/cc.png
  68. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/cca.png
  69. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/chi.png
  70. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/circ.png
  71. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/cong.png
  72. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/cup.png
  73. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/darr.png
  74. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/ddelta.png
  75. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/ddota.png
  76. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/delta.png
  77. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/diamond.png
  78. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/div.png
  79. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/dot.png
  80. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/dota.png
  81. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/dydx.png
  82. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/emptyset.png
  83. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/epsilon.png
  84. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/equiv.png
  85. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/eta.png
  86. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/exists.png
  87. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/forall.png
  88. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/fra.png
  89. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/gamma.png
  90. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/ge.png
  91. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/ggamma.png
  92. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/harr.png
  93. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/hata.png
  94. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/hharr.png
  95. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/if.png
  96. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/ifx.png
  97. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/in.png
  98. 8 0
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/index.html
  99. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/infty.png
  100. BIN
      main/inc/lib/fckeditor/editor/plugins/asciimath/images/int.png

+ 1 - 1
documentation/changelog.html

@@ -29,7 +29,7 @@
 
 <h3>Debugging</h3>
 <ul>
-  <li></li>
+  <li>Duplicate query calls have been removed from .../install/update-db-18.6.2-1.8.7.inc.php. The bug has been reported (with solution given) by Omar Arino (Bug #1713)</li>
 </ul>
 
 <h3>Deprecated files</h3>

+ 2 - 0
documentation/credits.html

@@ -438,6 +438,7 @@ rewritten by
   <li>Second integration: FCKEditor</li>
   <li>Update to FCKEditor 2.6.2: Julio Montoya Armas(gugli100@gmail.com)</li>
   <li>Update to FCKEditor 2.6.6 and addition of other plugins: Ivan Tcholakov</li>
+  <li>ASCIIMathML-based formula rendering: Furio Petrossi for advocacy, reserch and recommendations</li>
 </ul>
 
 <h1>Translations</h1>
@@ -503,6 +504,7 @@ of information requests and organizing great community events</li>
   <li> Hubert Borderiou - various bugfixes in 1.8.7 and very accurate bug reporting contributions </li>
   <li> David Auzeine- various bugfixes in 1.8.7</li>
   <li> Anna Frovola for reporting bugs for 1.8.7</li>
+  <li> Omar Arino (omar.arino _at__ linuxdojo.com.ar) - various bugfixes in 1.8.7.1</li>
 
 </ul>
 

+ 56 - 2
documentation/installation_guide.html

@@ -44,6 +44,7 @@
   <li><a href="#5._Administration_section">Administration section</a></li>
   <li><a href="#6._LDAP">LDAP&nbsp;</a></li>
   <li><a href="#7._Mathematical_formulas">Mathematical formulas with LaTeX</a></li>
+  <li><a href="#8._ASCIIMathML_mathematical_formulas">Mathematical formulas with ASCIIMathML</a></li>
 </ol>
 
 <br />
@@ -254,7 +255,7 @@ date.timezone = 'America/New_York'
   <li>php-mysql The mysql shared extension for php</li>
   <li>php-pcre The pcre shared extension for php</li>
   <li>php-session The session shared extension for php</li>
-  <li>php-zlib The zlib shared extension for php</li>    
+  <li>php-zlib The zlib shared extension for php</li>
   <li>(optional) php-ldap if you want to be able to use LDAP authentication</li>
 </ul>
 
@@ -263,7 +264,7 @@ date.timezone = 'America/New_York'
 	<li>php-ctype</li>
 	<li>php-gd</li>
 	<li>php-iconv</li>
-	<li>php-json</li> 
+	<li>php-json</li>
 	<li>php-mbstring</li>
 </ul>
 <p><a href="http://dev.mysql.com/doc/mysql/en/index.html"></a><br /></p>
@@ -634,6 +635,59 @@ copy mimetex.exe (for windows) or mimetex.cgi (for linux) from <i>chamilo/main/i
 to insert mathematical formulas into your documents.<br />
 
 
+<hr style="width: 100%; height: 2px;" />
+<h2><a name="8._ASCIIMathML_mathematical_formulas"></a>8. Mathematical formulas with ASCIIMathML</h2>
+
+<p>Mathematical formulas may be rendered on web-pages using the script ASCIIMathML.js (a customized version for Chamilo). For more information about this script
+and about the ASCIIMath formula syntax see <a href="http://www1.chapman.edu/~jipsen/mathml/asciimath.html">http://www1.chapman.edu/~jipsen/mathml/asciimath.html</a>
+and <a href="http://dlippman.imathas.com/asciimathtex/AMT.html">http://dlippman.imathas.com/asciimathtex/AMT.html</a>.</p>
+
+<p>For writing ASCIIMath formulas in documents, a correspondent plugin for the online editor should be activated. For doing this,
+see the platform administration section and open the page "Administration &gt; Configuration settings &gt; WYSIWYG Editor".
+Enable the setting <strong>"ASCIIMathML mathematical editor"</strong>.</p>
+
+<p>Inside documents, the script ASCIIMathML.js renders mathematical formulas in two altrnative ways:</p>
+<ul>
+	<li>By translation ASCIIMath formula notation into MathML code. MathML standard currently is supported by the following browsers:
+		<ul>
+			<li>Mozilla Firefox, you may consider installing STIX fonts (<a href="http://www.stixfonts.org">http://www.stixfonts.org</a>) on your client machines for nice looking formulas</li>
+			<li>Internet Explorer 6 or higher with the add-on MathPlayer 2.0 or higher (<a href="http://www.dessci.com/en/products/mathplayer">http://www.dessci.com/en/products/mathplayer</a>)</li>
+			<li>Opera 9.5 or higher</li>
+		</ul>
+	</li>
+	<li>For browser that do not support MathML - by translation ASCIIMath formula notation into TeX notation and passing it to
+	an external service. The external service produces and returns an image that contains the formula. This way is so called
+	"image-based fallback".
+	</li>
+</ul>
+
+<p>For providing <strong>image-based fallback</strong> in a production system, you should pick up and install on your server software for TeX rendering, such as:
+<ul>
+	<li>mimeTeX - <a href="http://www.forkosh.dreamhost.com/source_mimetex.html">http://www.forkosh.dreamhost.com/source_mimetex.html</a>.
+	See <a href="#7._Mathematical_formulas">"7. Mathematical formulas with LaTeX"</a> on how to install the mimetex executable file on your server</li>
+	<li>mathTeX - <a href="http://www.forkosh.com/mathtex.html">http://www.forkosh.com/mathtex.html</a>. Browse the site for installation instructions</li>
+</ul>
+
+<p>As an alternative, you may try to use some public services for TeX rendering, such as:</p>
+<ul>
+	<li>MathTran - <a href="http://www.mathtran.org">http://www.mathtran.org</a></li>
+	<li>Google Chart Tools - <a href="http://code.google.com/apis/charttools">http://code.google.com/apis/charttools</a></li>
+</ul>
+
+<p>Open with a text editor the file <strong>.../chamilo/main/inc/lib/asciimath/ASCIIMathML.js</strong>.
+Find somewhere at the beginning the line that initializes the variable <strong>AMTcgiloc</strong>.
+You may need to alter the setting to be for example:</p>
+<ul>
+	<li><div class="code">var AMTcgiloc = "http://mychamiloserver.org/cgi-bin/mimetex.cgi";</div></li>
+	<li><div class="code">var AMTcgiloc = "http://mychamiloserver.org/cgi-bin/mathtex.cgi";</div></li>
+	<li><div class="code">var AMTcgiloc = "http://www.mathtran.org/cgi-bin/mathtran?tex=";</div></li>
+	<li><div class="code">var AMTcgiloc = "http://chart.apis.google.com/chart?cht=tx&chs=1x0&chl=";</div></li>
+	<li>... or something else</li>
+</ul>
+<p>For testing how the variable <strong>AMTcgiloc</strong> may be set, there are some examples (as comments) inside the script.</p>
+
+<p>
+  <hr style="width: 100%; height: 2px;" />
   <br />
   <br />
   Contact address<br />

+ 44 - 0
documentation/installation_guide_es_ES.html

@@ -52,6 +52,7 @@ no son requeridos para usar Chamilo LMS. &nbsp;Por favor, lea completamente este
   <li><a href="#5._Administration_section">Sección de administración</a></li>
   <li><a href="#6._LDAP">LDAP&nbsp;</a></li>
   <li><a href="#7._Mathematical_formulas">Fórmulas Matemáticas con LaTeX</a></li>
+  <li><a href="#8._ASCIIMathML_mathematical_formulas">Fórmulas Matemáticas con ASCIIMathML</a></li>
 </ol>
 
 
@@ -720,9 +721,52 @@ Linux usando el siguiente comando:</i>
 <p>&nbsp;</p>
 <p>Este procedimiento creará un nuevo icono en su editor en línea de Chamilo, el cual hará posible la inserción de fórmulas matemáticas en sus documentos.<br />
   <br />
+<hr style="width: 100%; height: 2px;" />
+<h2><a name="8._ASCIIMathML_mathematical_formulas"></a>8. Fórmulas matemáticas con ASCIIMathML</h2>
+
+<p>Las fórmulas matemáticas pueden ser renderizadas en páginas web usando el script ASCIIMathML.js (en su versión modificada para Chamilo). Para más información sobre este script y sobre la sintaxis de fórmulas de ASCIIMath, ver <a href="http://www1.chapman.edu/~jipsen/mathml/asciimath.html">http://www1.chapman.edu/~jipsen/mathml/asciimath.html</a> y <a href="http://dlippman.imathas.com/asciimathtex/AMT.html">http://dlippman.imathas.com/asciimathtex/AMT.html</a>.</p>
+
+<p>Para escribir fórmulas ASCIIMath en documentos, es necesario activar el plugin correspondiente del editor en línea. Para hacerlo, ver la sección de administración de la plataforma, "Administración &gt; Parámetros de configuración  &gt; &gt; Editor WYSIWYG".
+Activar el parámetro <strong>"Editor matemático ASCIIMathML"</strong>.</p>
 
+<p>El script ASCIIMathML.js puede mostrar fórmulas matemáticas en los documentos de dos formas:</p>
+<ul>
+        <li>Traduciendo las fórmulas en notación ASCIIMath en código MathML. El estándar MathML está soportado actualmente sobre tres navegadores:
+                <ul>
+                        <li>Mozilla Firefox: debería considerar la instalación de las fuentes de carácter STIX (<a href="http://www.stixfonts.org">http://www.stixfonts.org</a>) en sus máquinas cliente para tener fórmulas bonitas</li>
+                        <li>Internet Explorer 6 o superior, con el add-on MathPlayer 2.0 o superior (<a href="http://www.dessci.com/en/products/mathplayer">http://www.dessci.com/en/products/mathplayer</a>)</li>
+                        <li>Opera 9.5 o superior</li>
+                </ul>
+      </li>
+        <li>Traduciendo la notación de fórmulas ASCIIMath en notación TeX y pasándolo a un servicio externo. Se debe usar en el caso de navegadores que no soporten MathML.  El servicio externo produce y devuelve un imagen que contiene la fórmula. Esta técnica se llama "image-based fallback".
+        </li>
+</ul>
+<p>Para proveer <strong>image-based fallback</strong> en un sistema en producción, debería seleccionar e instalar en su servidor algun software de renderización TeX, como:
+<ul>
+        <li>mimeTeX - <a href="http://www.forkosh.dreamhost.com/source_mimetex.html">http://www.forkosh.dreamhost.com/source_mimetex.html</a>.
+        Ver <a href="#7._Mathematical_formulas">"7. Fórmulas matemáticas con LaTeX"</a> para instalar el ejecutable mimetex en su servidor</li>
+        <li>mathTeX - <a href="http://www.forkosh.com/mathtex.html">http://www.forkosh.com/mathtex.html</a>. Ver el sitio para instrucciones de instalación</li>
+</ul>
 
+<p>Y como alternativa, puede intentar servicios públicos, como:</p>
+<ul>
+        <li>MathTran - <a href="http://www.mathtran.org">http://www.mathtran.org</a></li>
+        <li>Google Chart Tools - <a href="http://code.google.com/apis/charttools">http://code.google.com/apis/charttools</a></li>
+</ul>
+<p>Abrir el fichero <strong>.../chamilo/main/inc/lib/asciimath/ASCIIMathML.js</strong> con un editor de texto.
+Encuentre un lugar al inicio de la línea que inicializa la variable <strong>AMTcgiloc</strong>.
+Podría necesitar modificar el ejemplo para tener algo como:</p>
+<ul>
+        <li><div class="code">var AMTcgiloc = "http://mychamiloserver.org/cgi-bin/mimetex.cgi";</div></li>
+        <li><div class="code">var AMTcgiloc = "http://mychamiloserver.org/cgi-bin/mathtex.cgi";</div></li>
+        <li><div class="code">var AMTcgiloc = "http://www.mathtran.org/cgi-bin/mathtran?tex=";</div></li>
+        <li><div class="code">var AMTcgiloc = "http://chart.apis.google.com/chart?cht=tx&chs=1x0&chl=";</div></li>
+        <li>... o algo similar</li>
+</ul>
+<p>Para formas de probar como la variable <strong>AMTcgiloc</strong> tiene que ser configurada, existen unos ejemplos (en comentario) dentro del script.</p>
 
+<p>
+  <hr style="width: 100%; height: 2px;" />
   <br />
   <br />
 

+ 34 - 21
main/admin/configure_homepage.php

@@ -255,7 +255,7 @@ if (!empty($action)) {
 			case 'insert_link':
 			case 'edit_link':
 				$link_index = intval($_POST['link_index']);
-				
+
 				$insert_where = intval($_POST['insert_where']);
 				$link_name = trim(stripslashes($_POST['link_name']));
 				$link_url = trim(stripslashes($_POST['link_url']));
@@ -279,7 +279,7 @@ if (!empty($action)) {
 				} elseif (empty($link_name)) {
 					$errorMsg = get_lang('PleaseEnterLinkName');
 				} else {
-					
+
 					// New links are added as new files in the home/ directory
 					if ($action == 'insert_link' || $action == 'insert_tabs' || empty($filename) || strstr($filename, '/') || !strstr($filename, '.html')) {
 						$filename = replace_dangerous_char($link_name, 'strict').'.html';
@@ -296,14 +296,20 @@ if (!empty($action)) {
 					// Get the contents of home_menu_en.html (or active menu language
 					// version) into $home_menu as an array of one entry per line
 					$home_menu = file($homep.$menuf.'_'.$lang.$ext);
+					$home_menu = implode("\n", $home_menu);
+					$home_menu = api_to_system_encoding($home_menu, api_detect_encoding(strip_tags($home_menu)));
+					$home_menu = explode("\n", $home_menu);
+					$home_menu = array_values(array_filter(array_map('trim', $home_menu), 'strlen'));
 					// Prepare place to insert the new link into (default is end of file)
 					if ($insert_where < -1 || $insert_where > (sizeof($home_menu) - 1)) {
 						$insert_where = sizeof($home_menu) - 1;
 					}
+					//
 					// For each line of the file, remove trailing spaces and special chars
-					foreach ($home_menu as $key => $enreg) {
-						$home_menu[$key] = trim($enreg);
-					}
+					//foreach ($home_menu as $key => $enreg) {
+					//	$home_menu[$key] = trim($enreg);
+					//}
+					//
 					// If the given link url is empty, then replace the link url by a link to the link file created
 					if (empty($link_url)) {
 						$link_url = api_get_path(WEB_PATH).'index.php?include='.urlencode($filename);
@@ -474,6 +480,7 @@ if (!empty($action)) {
 					$home_menu = api_to_system_encoding($home_menu, api_detect_encoding(strip_tags($home_menu)));
 					$home_menu = explode("\n", $home_menu);
 				}
+				$home_menu = array_values(array_filter(array_map('trim', $home_menu), 'strlen'));
 				break;
 			case 'insert_tabs':
 				// This request is the preparation for the addition of an item in home_menu
@@ -493,6 +500,7 @@ if (!empty($action)) {
 					$home_menu = api_to_system_encoding($home_menu, api_detect_encoding(strip_tags($home_menu)));
 					$home_menu = explode("\n", $home_menu);
 				}
+				$home_menu = array_values(array_filter(array_map('trim', $home_menu), 'strlen'));
 				break;
 			case 'edit_tabs':
 			case 'edit_link':
@@ -512,27 +520,30 @@ if (!empty($action)) {
 				if (!empty($home_menu)) {
 					$home_menu = implode("\n", $home_menu);
 					$home_menu = api_to_system_encoding($home_menu, api_detect_encoding(strip_tags($home_menu)));
-					$home_menu = explode("\n", $home_menu);					
+					$home_menu = explode("\n", $home_menu);
 				}
 
 				$link_index = intval($_GET['link_index']);
-				
+
 				$target_blank = false;
 				$link_name = '';
 				$link_url = '';
-				
-				$home_menu_new = array();
-				
-				//Cleaning array 
-				foreach ($home_menu as $item) {
-					if(!empty($item)) {
-						$home_menu_new[] = $item;						
-					}	
-				}
-				$home_menu = $home_menu_new;
-				
+
+				//$home_menu_new = array();
+				//
+				//Cleaning array
+				//foreach ($home_menu as $item) {
+				//	if(!empty($item)) {
+				//		$home_menu_new[] = $item;
+				//	}
+				//}
+				//$home_menu = $home_menu_new;
+
+				// Cleaning the array
+				$home_menu = array_values(array_filter(array_map('trim', $home_menu), 'strlen'));
+
 				// For each line of the home_menu file
-				foreach ($home_menu as $key => $enreg) {					
+				foreach ($home_menu as $key => $enreg) {
 					// Check if the current item is the one we want to update
 					if ($key == $link_index) {
 						// This is the link we want to update
@@ -659,7 +670,9 @@ switch ($action) {
 			$form->addElement('html', '<td><select name="insert_where"><option value="-1">'.get_lang('FirstPlace').'</option>');
 			if (is_array($home_menu)){
 				foreach ($home_menu as $key => $enreg) {
-					$form->addElement('html', '<option value="'.$key.'" '.($formSent && $insert_where == $key ? 'selected="selected"' : '').' >'.get_lang('After').' &quot;'.trim(strip_tags($enreg)).'&quot;</option>');
+					if (strlen($enreg = trim(strip_tags($enreg))) > 0) {
+						$form->addElement('html', '<option value="'.$key.'" '.($formSent && $insert_where == $key ? 'selected="selected"' : '').' >'.get_lang('After').' &quot;'.$enreg.'&quot;</option>');
+					}
 				}
 			}
 			$form->addElement('html', '</select></td></tr>');
@@ -886,7 +899,7 @@ switch ($action) {
 							$delete_link = '<a href="'.api_get_self().'?action=delete_link&amp;link_index='.$i.'" onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES)).'\')) return false;">'.Display::return_icon('delete.gif', get_lang('Delete')).'</a>';
 							echo str_replace(array('href="'.api_get_path(WEB_PATH).'index.php?include=', '</li>'), array('href="'.api_get_path(WEB_CODE_PATH).'admin/'.basename(api_get_self()).'?action=open_link&link=', '<br />'.$edit_link.' '.$delete_link.'</li>'), $enreg);
 							$i++;
-						}						
+						}
 					}
 				?>
 				</ul>

+ 29 - 33
main/admin/index.php

@@ -99,44 +99,40 @@ if (api_is_platform_admin()) {
 <?php
 }
 
+//Advance search link moved
+/* <li><a href="course_list.php?search=advanced"><?php echo api_ucfirst(get_lang('AdvancedSearch')); ?></a></li> */
 
 if(api_is_platform_admin()) {
 ?>
 	<div class="admin_section">
-<h4><?php Display::display_icon('course.gif', get_lang('Courses')); ?> <?php echo api_ucfirst(get_lang('Courses')); ?></h4>
-		<div style="list-style-type:none"><form method="get" action="course_list.php">
-		<input type="text" name="keyword" value="<?php echo $keyword_url; ?>"/>
-		<button class="search" type="submit"> <?php echo get_lang('Search');?>
-			</button>
-		</form></div>
-
-
-		<ul>
-		<li>
-		<!-- <a href="course_list.php?search=advanced"><?php echo api_ucfirst(get_lang('AdvancedSearch')); ?></a> -->
-
-	</li>
-	<li><a href="course_list.php"><?php echo get_lang('CourseList') ?></a></li>
-	<li><a href="course_add.php"><?php echo get_lang('AddCourse') ?></a></li>
-	<li><a href="course_export.php"><?php echo get_lang('ExportCourses'); ?></a></li>
-	<li><a href="course_import.php"><?php echo get_lang('ImportCourses'); ?></a></li>
-	<!--<li><a href="course_virtual.php"><?php //echo get_lang('AdminManageVirtualCourses') ?></a></li>-->
-	<li><a href="course_category.php"><?php echo get_lang('AdminCategories'); ?></a></li>
-	<li><a href="subscribe_user2course.php"><?php echo get_lang('AddUsersToACourse'); ?></a></li>
-	<li><a href="course_user_import.php"><?php echo get_lang('ImportUsersToACourse'); ?></a></li>
-	<?php if (api_get_setting('search_enabled')=='true') { ?>
-	  <li><a href="specific_fields.php"><?php echo get_lang('SpecificSearchFields'); ?></a></li>
-	<?php } ?>
-	<?php
-		if(isset($extAuthSource) && isset($extAuthSource['ldap']) && count($extAuthSource['ldap'])>0){
-		?>
-		<!-- dynamic ldap code -->
-		<li><a href="ldap_import_students.php"><?php echo get_lang('ImportLDAPUsersIntoCourse');?></a></li>
-		<!-- dynamic ldap code -->
+		<h4><?php Display::display_icon('course.gif', get_lang('Courses')); ?> <?php echo api_ucfirst(get_lang('Courses')); ?></h4>
+		<div style="list-style-type:none">
+			<form method="get" action="course_list.php">
+				<input type="text" name="keyword" value="<?php echo $keyword_url; ?>"/>
+				<button class="search" type="submit"> <?php echo get_lang('Search');?></button>
+			</form>
+		</div>
+	<ul>		
+		<li><a href="course_list.php"><?php echo get_lang('CourseList') ?></a></li>
+		<li><a href="course_add.php"><?php echo get_lang('AddCourse') ?></a></li>
+		<li><a href="course_export.php"><?php echo get_lang('ExportCourses'); ?></a></li>
+		<li><a href="course_import.php"><?php echo get_lang('ImportCourses'); ?></a></li>
+		<!-- <li><a href="course_virtual.php"><?php //echo get_lang('AdminManageVirtualCourses') ?></a></li> -->
+		<li><a href="course_category.php"><?php echo get_lang('AdminCategories'); ?></a></li>
+		<li><a href="subscribe_user2course.php"><?php echo get_lang('AddUsersToACourse'); ?></a></li>
+		<li><a href="course_user_import.php"><?php echo get_lang('ImportUsersToACourse'); ?></a></li>
+		<?php if (api_get_setting('search_enabled')=='true') { ?>
+		  <li><a href="specific_fields.php"><?php echo get_lang('SpecificSearchFields'); ?></a></li>
+		<?php } ?>
 		<?php
-		}
-	?>
-
+			if(isset($extAuthSource) && isset($extAuthSource['ldap']) && count($extAuthSource['ldap'])>0){
+			?>
+			<!-- dynamic ldap code -->
+			<li><a href="ldap_import_students.php"><?php echo get_lang('ImportLDAPUsersIntoCourse');?></a></li>
+			<!-- dynamic ldap code -->
+			<?php
+			}
+		?>
 	</ul>
 	</div>
 

+ 7 - 7
main/admin/session_list.php

@@ -146,12 +146,12 @@ if (isset ($_GET['search']) && $_GET['search'] == 'advanced') {
 	
 	//Get list sessions
 	$sort = ($sort != "name_category")?  's.'.$sort : 'category_name';
-	$query = "SELECT s.id, s.name, s.nbr_courses, s.date_start, s.date_end, u.firstname, u.lastname , sc.name as category_name, s.visibility
-			 FROM $tbl_session s
-			 	LEFT JOIN  $tbl_session_category sc ON s.session_category_id = sc.id
-			 	INNER JOIN $tbl_user u ON s.id_coach = u.user_id 
-			 $where
-			 ORDER BY $sort ";
+	$query = "SELECT s.id, s.name, s.nbr_courses, s.date_start, s.date_end, u.firstname, u.lastname , sc.name as category_name, s.visibility ".
+			" FROM $tbl_session s ".
+			 	" LEFT JOIN  $tbl_session_category sc ON s.session_category_id = sc.id ".
+			 	" INNER JOIN $tbl_user u ON s.id_coach = u.user_id ".
+			 $where.
+			 " ORDER BY $sort LIMIT $from,".($limit+1);
 	//query which allows me to get a record without taking into account the page
 	$query_rows = "SELECT count(*) as total_rows
 			 FROM $tbl_session s
@@ -375,4 +375,4 @@ if (isset ($_GET['search']) && $_GET['search'] == 'advanced') {
 <?php
 }
 Display::display_footer();
-?>
+?>

+ 20 - 19
main/admin/settings.lib.php

@@ -5,7 +5,7 @@
 *
 * @author Julio Montoya <gugli100@gmail.com>
 * @author Guillaume Viguier <guillaume@viguierjust.com>
-* 
+*
 * @since Chamilo 1.8.7
 * @package chamilo.admin
 */
@@ -282,10 +282,10 @@ function handle_stylesheets()
 <?php
 	echo '<form name="stylesheets" method="post" action="'.api_get_self().'?category='.Security::remove_XSS($_GET['category']).'">';
 	echo '<br /><select name="style" onChange="load_preview(this)" >';
-	
+
 	$list_of_styles = array();
 	$list_of_names  = array();
-	
+
 	if ($handle = @opendir(api_get_path(SYS_PATH).'main/css/')) {
 		$counter=1;
 		while (false !== ($style_dir = readdir($handle))) {
@@ -304,7 +304,7 @@ function handle_stylesheets()
 
 					if ($is_style_changeable) {
 						$list_of_styles[$style_dir] = "<option  value=\"".$style_dir."\" ".$selected." /> $show_name </option>";
-						$list_of_names[$style_dir]  = $show_name;						
+						$list_of_names[$style_dir]  = $show_name;
 						//echo "<input type=\"radio\" name=\"style\" value=\"".$style_dir."\" ".$selected." onClick=\"parent.preview.location='style_preview.php?style=".$style_dir."';\"/>";
 						//echo '<a href="style_preview.php?style='.$style_dir.'" target="preview">'.$show_name.'</a>';
 					} else {
@@ -318,12 +318,13 @@ function handle_stylesheets()
 		@closedir($handle);
 	}
 	//Sort styles in alphabetical order
-	asort($list_of_names);	
+	asort($list_of_names);
 	foreach($list_of_names as $style_dir=>$item) {
 		echo $list_of_styles[$style_dir];
 	}
-	
-	echo '</select><br />';
+
+	//echo '</select><br />';
+	echo '</select>&nbsp;&nbsp;';
 	//var_dump($list_of_names);
 	if ($is_style_changeable){
 		echo '<button class="save" type="submit" name="submit_stylesheets"> '.get_lang('SaveSettings').' </button></form>';
@@ -350,7 +351,7 @@ function upload_stylesheet($values,$picture)
 	{
 		mkdir(api_get_path(SYS_CODE_PATH).'css/'.$style_name.'/', api_get_permissions_for_new_directories());
 	}
-	
+
 	$info = pathinfo($picture['name']);
 	if($info['extension'] == 'zip') {
 		// Try to open the file and extract it in the theme
@@ -361,7 +362,7 @@ function upload_stylesheet($values,$picture)
 			$valid = true;
 			$single_directory = true;
 			$invalid_files = array();
-			
+
 			for($i =0; $i < $numFiles; $i++) {
 				$file = $zip->statIndex($i);
 				if(substr($file['name'], -1) != "/") {
@@ -371,7 +372,7 @@ function upload_stylesheet($values,$picture)
 						$invalid_files[] = $file['name'];
 					}
 				}
-				
+
 				if(strpos($file['name'], "/") === false) {
 					$single_directory = false;
 				}
@@ -393,7 +394,7 @@ function upload_stylesheet($values,$picture)
 					for($i = 0; $i < $numFiles; $i++) {
 						$entry = $zip->getNameIndex($i);
 						if ( substr($entry, -1) == '/') continue;
-						
+
 						$pos_slash = strpos($entry, '/');
 						$entry_without_first_dir = substr($entry, $pos_slash + 1);				
 						// If there is still a slash, we need to make sure the directories are created
@@ -403,21 +404,21 @@ function upload_stylesheet($values,$picture)
 								@mkdir($extraction_path.dirname($entry_without_first_dir), $mode = 0777, true);
 							}
 						}
-						
+
 						$fp = $zip->getStream($entry);
 						$ofp = fopen( $extraction_path. dirname($entry_without_first_dir).'/'.basename($entry), 'w');
-						
+
 						while ( ! feof($fp)) {
 							fwrite($ofp, fread($fp, 8192));
 						}
-						
+
 						fclose($fp);
 						fclose($ofp);
 					}
 				}
 			}
 			$zip->close();
-				
+
 		} else {
 			Display::display_error_message(get_lang('ErrorReadingZip').$info['extension'], false);
 		}
@@ -949,9 +950,9 @@ function select_timezone_value() {
 
 /**
  * Returns an array containing the list of options used to populate the gradebook_number_decimals variable
- * 
+ *
  * @return array List of gradebook_number_decimals options
- * 
+ *
  * @author Guillaume Viguier <guillaume.viguier@beeznest.com>
  */
 function select_gradebook_number_decimals() {
@@ -961,9 +962,9 @@ function select_gradebook_number_decimals() {
 /**
  * Updates the gradebook score custom values using the scoredisplay class of the
  * gradebook module
- * 
+ *
  * @param array List of gradebook score custom values
- * 
+ *
  * @author Guillaume Viguier <guillaume.viguier@beeznest.com>
  */
 function update_gradebook_score_display_custom_values($values) {

+ 54 - 44
main/attendance/attendance_sheet.php

@@ -2,7 +2,7 @@
 /* For licensing terms, see /license.txt */
 
 /**
-* View (MVC patter) for attendance sheet (list, edit, add) 
+* View (MVC patter) for attendance sheet (list, edit, add)
 * @author Christian Fasanando <christian1827@gmail.com>
 * @package chamilo.attendance
 */
@@ -16,7 +16,7 @@ if (api_is_allowed_to_edit(null, true)) {
 		$param_gradebook = '&gradebook='.$_SESSION['gradebook'];
 	}
 	echo '<div class="actions" style="margin-bottom:30px">';
-	echo '<a href="index.php?'.api_get_cidreq().'&action=calendar_list&attendance_id='.$attendance_id.$param_gradebook.'">'.Display::return_icon('calendar_up.gif',get_lang('AttendanceCalendar')).' '.get_lang('AttendanceCalendar').'</a>';	
+	echo '<a href="index.php?'.api_get_cidreq().'&action=calendar_list&attendance_id='.$attendance_id.$param_gradebook.'">'.Display::return_icon('calendar_up.gif',get_lang('AttendanceCalendar')).' '.get_lang('AttendanceCalendar').'</a>';
 	echo '</div>';
 
 	$message_information = get_lang('AttendanceSheetDescription');
@@ -26,27 +26,32 @@ if (api_is_allowed_to_edit(null, true)) {
 		Display::display_normal_message($message, false);
 	}
 ?>
-<?php 
+<?php
 
-	if (count($users_in_course) > 0) { 
+	if (count($users_in_course) > 0) {
 	?>
 	<form method="post" action="index.php?action=attendance_sheet_add&<?php echo api_get_cidreq().$param_gradebook ?>&attendance_id=<?php echo $attendance_id?>" >
-	
+
 	<div class="attendance-sheet-content" style="width:100%;background-color:#E1E1E1;border:1px solid gray;margin-top:20px;">
 
 		<div class="attendance-users-table" style="width:40%;float:left;margin:0px;padding:0px;">
 			<table class="data_table" width="100%">
-				<tr class="row_odd" >	
+				<tr class="row_odd" >
 					<th height="65px" width="25px" ><?php echo get_lang('DisplayOrder')?></th>
 					<th width="30px" ><?php echo get_lang('Photo')?></th>
+					<?php if (api_is_western_name_order()) { ?>
+					<th><?php echo get_lang('FirstName')?></th>
+					<th><?php echo get_lang('LastName')?></th>
+					<?php } else { ?>
 					<th><?php echo get_lang('LastName')?></th>
 					<th><?php echo get_lang('FirstName')?></th>
+					<?php } ?>
 					<th width="100px"><?php echo get_lang('AttendancesFaults')?></th>
-				</tr>				
-				<?php 
+				</tr>
+				<?php
 				$i = 1;
 				$class = '';
-				
+
 				foreach ($users_in_course as $data) {
 					$faults = 0;
 					if ($i%2 == 0) {$class='row_odd';}
@@ -55,8 +60,13 @@ if (api_is_allowed_to_edit(null, true)) {
 					<tr class="<?php echo $class ?>">
 					<td height="50px"><center><?php echo $i ?></center></td>
 					<td><?php echo $data['photo'] ?></td>
+					<?php if (api_is_western_name_order()) { ?>
+					<td><?php echo $data['firstname'] ?></td>
+					<td><?php echo $data['lastname'] ?></td>
+					<?php } else { ?>
 					<td><?php echo $data['lastname'] ?></td>
 					<td><?php echo $data['firstname'] ?></td>
+					<?php } ?>
 					<td><center><div class="attendance-faults-bar" style="background-color:<?php echo (!empty($data['result_color_bar'])?$data['result_color_bar']:'none') ?>"><?php echo $data['attendance_result'] ?></div></center></td>
 					</tr>
 				<?php
@@ -75,38 +85,38 @@ if (api_is_allowed_to_edit(null, true)) {
 							$date = $calendar['date'];
 							$time = $calendar['time'];
 							$datetime = $date.'<br />'.$time;
-														
-							$img_lock = Display::return_icon('lock.gif',get_lang('DateUnLock'),array('class'=>'img_lock','id'=>'datetime_column_'.$calendar['id']));													
+
+							$img_lock = Display::return_icon('lock.gif',get_lang('DateUnLock'),array('class'=>'img_lock','id'=>'datetime_column_'.$calendar['id']));
 							if (!empty($calendar['done_attendance'])){
 								$datetime = '<font color="blue">'.$date.'<br />'.$time.'</font>';
 							}
 							$disabled_check = 'disabled';
-							$input_hidden = '<input type="hidden" id="hidden_input_'.$calendar['id'].'" name="hidden_input[]" value="" disabled />';						
+							$input_hidden = '<input type="hidden" id="hidden_input_'.$calendar['id'].'" name="hidden_input[]" value="" disabled />';
 							if ($next_attendance_calendar_id == $calendar['id']) {
 								$input_hidden = '<input type="hidden" id="hidden_input_'.$calendar['id'].'" name="hidden_input[]" value="'.$calendar['id'].'" />';
 								$disabled_check = '';
 								$img_lock = Display::return_icon('unlock.gif',get_lang('DateLock'),array('class'=>'img_unlock','id'=>'datetime_column_'.$calendar['id']));
-							}										
-					?>							
+							}
+					?>
 							<th height="65px" style="padding:1px 5px;" ><?php echo '<center><div style="font-size:10px;min-width:80px;width:80px;">'.$datetime.'&nbsp;<span id="attendance_lock" style="cursor:pointer">'.$img_lock.'</span><br /><input type="checkbox" id="checkbox_head_'.$calendar['id'].'" '.$disabled_check.' checked />'.$input_hidden.'</div></center>' ?></th>
-					<?php }					
+					<?php }
 					} else { ?>
 						<th height="65px" style="padding:5px;"><span><a href="index.php?<?php echo api_get_cidreq() ?>&action=calendar_list&attendance_id=<?php echo $attendance_id.$param_gradebook ?>">
 						<?php echo Display::return_icon('calendar_up.gif',get_lang('AttendanceCalendar')).' '.get_lang('GoToAttendanceCalendar') ?></a></span></th>
 					<?php } ?>
-				</tr>			
-				<?php 
+				</tr>
+				<?php
 				$i = 0;
-				foreach ($users_in_course as $user) { 
+				foreach ($users_in_course as $user) {
 						$class = '';
 						if ($i%2==0) {$class = 'row_even';}
 						else {$class = 'row_odd';}
-				?>			
+				?>
 					<tr class="<?php echo $class ?>">
-					<?php 
+					<?php
 						if (count($attendant_calendar) > 0 ) {
-							foreach ($attendant_calendar as $calendar) { 
-								$checked = 'checked';							
+							foreach ($attendant_calendar as $calendar) {
+								$checked = 'checked';
 								if (isset($users_presence[$user['user_id']][$calendar['id']]['presence'])) {
 									$presence = $users_presence[$user['user_id']][$calendar['id']]['presence'];
 									if (intval($presence) == 1) {
@@ -123,32 +133,32 @@ if (api_is_allowed_to_edit(null, true)) {
 								}
 					?>
 							<td height="50px" style="<?php echo $style_td ?>" class="checkboxes_col_<?php echo $calendar['id'] ?>"><center><input type="checkbox" name="check_presence[<?php echo $calendar['id'] ?>][]" value="<?php echo $user['user_id'] ?>"  <?php echo $disabled.' '.$checked ?> /><span class="<?php echo 'anchor_'.$calendar['id'] ?>"></span></center></td>
-							
-					<?php 	} 
+
+					<?php 	}
 						} else { ?>
 							<td height="50px" class="checkboxes_col_<?php echo $calendar['id'] ?>"><center>&nbsp;</center></td>
 				  <?php	} ?>
 					</tr>
-				<?php $i++ ; 			
-				} 
-				?>				
+				<?php $i++ ;
+				}
+				?>
 			</table>
 		</div>
 
-		
+
 	</div>
-	
+
 	<div class="clear"></div>
 	<div style="margin-top:20px;"><button type="submit" class="save"><?php echo get_lang('Save') ?></button></div>
 	</form>
-	
-	<?php } else {	
-		echo '<div><a href="'.api_get_path(WEB_CODE_PATH).'user/user.php?'.api_get_cidreq().'">'.get_lang('ThereAreNoRegisteredLearnersInsidetheCourse').'</a></div>';	
+
+	<?php } else {
+		echo '<div><a href="'.api_get_path(WEB_CODE_PATH).'user/user.php?'.api_get_cidreq().'">'.get_lang('ThereAreNoRegisteredLearnersInsidetheCourse').'</a></div>';
 	}
 
 } else {
 	// View for students
-?>	
+?>
 	<h3><?php echo get_lang('AttendanceSheetReport') ?></h3>
 	<?php if(!empty($users_presence)) { ?>
 		<div>
@@ -164,27 +174,27 @@ if (api_is_allowed_to_edit(null, true)) {
 	<br />
 	<center>
 		<table class="data_table">
-				<tr class="row_odd" >	
+				<tr class="row_odd" >
 					<th><?php echo get_lang('AttendanceCalendar')?></th>
-					<th><?php echo get_lang('Attendance')?></th>				
+					<th><?php echo get_lang('Attendance')?></th>
 				</tr>
-				<?php 
-				
+				<?php
+
 				if (!empty($users_presence)) {
 					$i = 0;
-					foreach($users_presence[$user_id] as $presence) { 
+					foreach($users_presence[$user_id] as $presence) {
 						$class = '';
 						if ($i%2==0) {$class = 'row_even';}
-						else {$class = 'row_odd';}	
+						else {$class = 'row_odd';}
 					?>
-					<tr class="<?php echo $class ?>"><td><?php echo Display::return_icon('lp_calendar_event.png',get_lang('DateTime')).' '.$presence['date_time'] ?></td><td><center><?php echo $presence['presence']?Display::return_icon('checkbox_on.gif',get_lang('Presence')):Display::return_icon('checkbox_off.gif',get_lang('Presence')) ?></center></td></tr>					
-				<?php } 
+					<tr class="<?php echo $class ?>"><td><?php echo Display::return_icon('lp_calendar_event.png',get_lang('DateTime')).' '.$presence['date_time'] ?></td><td><center><?php echo $presence['presence']?Display::return_icon('checkbox_on.gif',get_lang('Presence')):Display::return_icon('checkbox_off.gif',get_lang('Presence')) ?></center></td></tr>
+				<?php }
 				} else { ?>
-				<tr><td colspan="2"><center><?php echo get_lang('YouDoNotHaveDoneAttendances')?></center></td></tr>	
+				<tr><td colspan="2"><center><?php echo get_lang('YouDoNotHaveDoneAttendances')?></center></td></tr>
 				<?php }
-				
+
 				?>
-		</table>			
+		</table>
 	</center>
 	</div>
 <?php } ?>

+ 4 - 4
main/auth/profile.php

@@ -256,7 +256,7 @@ if (api_get_setting('profile', 'language') !== 'true') {
 
 //	EXTENDED PROFILE  this make the page very slow!
 if (api_get_setting('extended_profile') == 'true') {
-	if ($_GET['type'] == 'extended') {
+	if (!isset($_GET['type']) || (isset($_GET['type']) && $_GET['type'] == 'extended')) {
 		//$form->addElement('html', '<a href="javascript: void(0);" onclick="javascript: show_extend();"> show_extend_profile</a>');
 		$form->addElement('static', null, '<em>'.get_lang('OptionalTextFields').'</em>');
 		//	MY COMPETENCES
@@ -823,10 +823,10 @@ if (api_get_setting('allow_social_tool') == 'true') {
 			echo '<div id="social-content-online">';
 				if (api_get_setting('extended_profile') == 'true') {
 					$show = isset($_GET['show']) ? '&amp;show='.Security::remove_XSS($_GET['show']) : '';
-					if (isset($_GET['type']) && $_GET['type'] == 'extended') {
-						echo '<a href="profile.php?type=reduced'.$show.'"><span class="social-menu-text1">'.Display::return_icon('edit.gif', get_lang('EditNormalProfile')).'&nbsp;'.get_lang('EditNormalProfile').'</span></a>';
+					if (isset($_GET['type']) && $_GET['type'] == 'reduced') {
+						echo '<a href="profile.php?type=extended '.$show.'"><span class="social-menu-text1">'.Display::return_icon('edit.gif', get_lang('EditExtendProfile')).'&nbsp;'.get_lang('EditExtendProfile').'</span></a>';
 					} else {
-						echo '<a href="profile.php?type=extended'.$show.'"><span class="social-menu-text1">'.Display::return_icon('edit.gif', get_lang('EditExtendProfile')).'&nbsp;'.get_lang('EditExtendProfile').'</span></a>';
+						echo '<a href="profile.php?type=reduced'.$show.'"><span class="social-menu-text1">'.Display::return_icon('edit.gif', get_lang('EditNormalProfile')).'&nbsp;'.get_lang('EditNormalProfile').'</span></a>';
 					}
 				}
 			echo '</div>';

+ 66 - 29
main/document/document.inc.php

@@ -55,13 +55,6 @@ function build_directory_selector($folders, $curdirpath, $group_dir = '', $chang
 			foreach ($folders as & $folder) {
 				$selected = ($curdirpath == $folder) ? ' selected="selected"' : '';
 				$path_parts = explode('/', $folder);
-
-				if ($folder_titles[$folder] == 'shared_folder') {
-					$folder_titles[$folder] = get_lang('SharedFolder');
-				} elseif (strstr($folder_titles[$folder], 'sf_user_')) {
-					$userinfo = Database::get_user_info_from_id(substr($folder_titles[$folder], 8));
-					$folder_titles[$folder] = api_get_person_name($userinfo['firstname'], $userinfo['lastname']);
-				}
 				$folder_titles[$folder] = cut($folder_titles[$folder], 80);
 				$label = str_repeat('&nbsp;&nbsp;&nbsp;', count($path_parts) - 2).' &mdash; '.$folder_titles[$folder];
 				$parent_select -> addOption($label, $folder);
@@ -149,25 +142,26 @@ function create_document_link($www, $title, $path, $filetype, $size, $visibility
 	//$tooltip_title = str_replace('?cidReq='.$_GET['cidReq'], '', basename($path));
 	$tooltip_title = explode('?', basename($path));
 	$tooltip_title = $tooltip_title[0];
-
+	
+	$tooltip_title_alt = $tooltip_title;
 	if ($tooltip_title == 'shared_folder') {
 		$tooltip_title_alt = get_lang('SharedFolder');
-	} elseif(strstr($tooltip_title, 'sf_user_')) {
+	}elseif(strstr($tooltip_title, 'shared_folder_session_')) {
+		$tooltip_title_alt = get_lang('SharedFolder').' ('.api_get_session_name($current_session_id).')';
+	}elseif(strstr($tooltip_title, 'sf_user_')) {
 		$userinfo = Database::get_user_info_from_id(substr($tooltip_title, 8));
-		$tooltip_title_alt = api_get_person_name($userinfo['firstname'], $userinfo['lastname']);
-	} else {
-		$tooltip_title_alt = $tooltip_title;
+		$tooltip_title_alt = get_lang('SharedFolder').' ('.api_get_person_name($userinfo['firstname'], $userinfo['lastname']).')';
 	}
 
+
 	if (!$show_as_icon) {
 		if ($filetype == 'folder') {
 			if (api_is_allowed_to_edit() || api_is_platform_admin() || api_get_setting('students_download_folders') == 'true') {
-				
 				//filter when I am into shared folder, I can show for donwload only my shared folder
-				if(is_shared_folder($_GET['curdirpath']))
-				{							
-					$my_preg_folder="/shared_folder\/sf_user_".api_get_user_id()."$/";
-					if (preg_match($my_preg_folder, urldecode($forcedownload_link))|| api_is_allowed_to_edit() || api_is_platform_admin())
+				$current_session_id=api_get_session_id();
+				if(is_shared_folder($_GET['curdirpath'],$current_session_id))
+				{		
+					if (preg_match('/shared_folder\/sf_user_'.api_get_user_id().'$/', urldecode($forcedownload_link))|| preg_match('/shared_folder_session_'.$current_session_id.'\/sf_user_'.api_get_user_id().'$/', urldecode($forcedownload_link)) || api_is_allowed_to_edit() || api_is_platform_admin())
 					{			
 					  $force_download_html = ($size == 0) ? '' : '<a href="'.$forcedownload_link.'" style="float:right"'.$prevent_multiple_click.'>'.Display::return_icon($forcedownload_icon, get_lang('Download'), array('height'=>'16', 'width' => '16')).'</a>';
 					}
@@ -182,7 +176,13 @@ function create_document_link($www, $title, $path, $filetype, $size, $visibility
 		}
 		return '<a href="'.$url.'" title="'.$tooltip_title_alt.'" target="'.$target.'"'.$visibility_class.' style="float:left">'.$title.'</a>'.$force_download_html;
 	} else {
+		if(preg_match('/shared_folder/', urldecode($url)) && preg_match('/shared_folder$/', urldecode($url))==false){
+			return '<a href="'.$url.'" title="'.$tooltip_title_alt.'" target="'.$target.'"'.$visibility_class.' style="float:left">'.Display::return_icon('shared.png', get_lang('ResourceShared'), array('hspace' => '5', 'align' => 'middle', 'height' => 22, 'width' => 22)).build_document_icon_tag($filetype, $tooltip_title).'</a>';
+		}
+		else
+		{		
 		return '<a href="'.$url.'" title="'.$tooltip_title_alt.'" target="'.$target.'"'.$visibility_class.' style="float:left">'.build_document_icon_tag($filetype, $tooltip_title).'</a>';
+		}
 	}
 }
 
@@ -208,7 +208,14 @@ function build_document_icon_tag($type, $path) {
 			} else {
 				$basename = get_lang('SharedFolder');
 			}
-		} elseif(strstr($basename, 'sf_user_')) {
+		}elseif(strstr($basename, 'shared_folder_session_')) {
+			if ($is_allowed_to_edit) {
+				$basename = '***('.api_get_session_name($current_session_id).')*** '.get_lang('HelpSharedFolder');
+			} else {
+				$basename = get_lang('SharedFolder').' ('.api_get_session_name($current_session_id).')';
+			}			
+			$icon = 'shared_folder.gif';
+		}elseif(strstr($basename, 'sf_user_')) {
 			$userinfo = Database::get_user_info_from_id(substr($basename, 8));
 			$image_path = UserManager::get_user_picture_path_by_id(substr($basename, 8), 'web', false, true);
 
@@ -217,7 +224,9 @@ function build_document_icon_tag($type, $path) {
 			} else {
 				$icon = '../upload/users/'.substr($basename, 8).'/'.$image_path['file'];
 			}
-			$basename = api_get_person_name($userinfo['firstname'], $userinfo['lastname']);
+		
+			$basename = get_lang('SharedFolder').' ('.api_get_person_name($userinfo['firstname'], $userinfo['lastname']).')';
+
 		} else {
 			if (($basename =='audio' || $basename =='flash' || $basename =='images' || $basename =='video') && api_is_allowed_to_edit()) {
 				$basename = get_lang('HelpDefaultDirDocuments');
@@ -484,24 +493,52 @@ function create_dir_form() {
 
 /**
  * Checks whether the user is in shared folder
- * @return return bool Return true when user is in shared folder
+ * @return return bool Return true when user is into shared folder
  */
-function is_shared_folder($curdirpath) {
-	return Security::remove_XSS($curdirpath) == '/shared_folder';
+function is_shared_folder($curdirpath, $current_session_id) {
+	$clean_curdirpath = Security::remove_XSS($curdirpath);
+	if($clean_curdirpath== '/shared_folder'){	
+		return true;
+	}
+	elseif($clean_curdirpath== '/shared_folder_session_'.$current_session_id){
+		return true;
+	}
+	else{
+		return false;
+	}
 }
 
 /**
- * Checks whether the user is in any user shared folder
+ * Checks whether the user is into any user shared folder
  * @return return bool Return true when user is in any user shared folder
  */
-function is_any_user_shared_folder($path) {
-	return preg_match('/shared_folder\/sf_user_/', Security::remove_XSS($path));	
+function is_any_user_shared_folder($path, $current_session_id) {
+	$clean_path = Security::remove_XSS($path);	
+	if(strpos($clean_path,'shared_folder/sf_user_')){
+		return true;
+	}
+	elseif(strpos($clean_path, 'shared_folder_session_'.$current_session_id.'/sf_user_')){
+		return true;
+	}
+	else{		
+		return false;
+	}	
 }	
 
 /**
- * Checks whether the user is in his/her shared folder
+ * Checks whether the user is into his shared folder
  * @return return bool Return true when user is in his user shared folder
  */
-function is_my_shared_folder($user_id, $path) {
-	return Security::remove_XSS($path) == '/shared_folder/sf_user_'.$user_id;
-}
+function is_my_shared_folder($user_id, $path, $current_session_id) {
+	$clean_path = Security::remove_XSS($path);
+	if($clean_path == '/shared_folder/sf_user_'.$user_id){
+		return true;
+	}
+	elseif($clean_path == '/shared_folder_session_'.$current_session_id.'/sf_user_'.$user_id){
+		return true;
+	}
+	else{
+		return false;
+	}
+}
+?>

+ 50 - 38
main/document/document.php

@@ -222,24 +222,46 @@ $course_quota = DocumentManager::get_course_quota();
 $current_session_id = api_get_session_id();
 
 
-/*	Create shared folder */
+/*	Create shared folders */
 
-if (!file_exists($base_work_dir.'/shared_folder')) {
-	$usf_dir_title = get_lang('SharedFolder');
-	$usf_dir_name = '/shared_folder';
-	$to_group_id = 0;
-	$visibility = 0;
-	create_unexisting_directory($_course, $_user['user_id'], $to_group_id, $to_user_id, $base_work_dir, $usf_dir_name, $usf_dir_title, $visibility);	
+if($current_session_id==0){
+	//Create shared folder. Necessary for courses recycled. Allways session_id should be zero. Allway should be created from a base course, never from a session.
+	if (!file_exists($base_work_dir.'/shared_folder')) {
+		$usf_dir_title = get_lang('SharedFolder');
+		$usf_dir_name = '/shared_folder';
+		$to_group_id = 0;
+		$visibility = 0;
+		create_unexisting_directory($_course, $_user['user_id'], $to_group_id, $to_user_id, $base_work_dir, $usf_dir_name, $usf_dir_title, $visibility);	
+	}
+	// Create dynamic user shared folder
+	if (!file_exists($base_work_dir.'/shared_folder/sf_user_'.api_get_user_id())) {
+			$usf_dir_title = api_get_person_name($_user['firstName'], $_user['lastName']);
+			$usf_dir_name = '/shared_folder/sf_user_'.api_get_user_id();
+			$to_group_id = 0;
+			$visibility = 1;
+			create_unexisting_directory($_course, $_user['user_id'], $to_group_id, $to_user_id, $base_work_dir, $usf_dir_name, $usf_dir_title, $visibility);
+	}
 }
-
-if (!file_exists($base_work_dir.'/shared_folder/sf_user_'.api_get_user_id())) {
-	$usf_dir_title = api_get_person_name($_user['firstName'], $_user['lastName']);
-	$usf_dir_name = '/shared_folder/sf_user_'.api_get_user_id();
-	$to_group_id = 0;
-	$visibility = 0;
-	create_unexisting_directory($_course, $_user['user_id'], $to_group_id, $to_user_id, $base_work_dir, $usf_dir_name, $usf_dir_title, $visibility);
+else{	
+		//Create shared folder session
+		if (!file_exists($base_work_dir.'/shared_folder_session_'.$current_session_id)) {
+			$usf_dir_title = get_lang('SharedFolder').' ('.api_get_session_name($current_session_id).')';
+			$usf_dir_name = '/shared_folder_session_'.$current_session_id;			
+			$to_group_id = 0;
+			$visibility = 0;
+			create_unexisting_directory($_course, $_user['user_id'], $to_group_id, $to_user_id, $base_work_dir, $usf_dir_name, $usf_dir_title, $visibility);
+		}
+		//Create dynamic user shared folder into a shared folder session
+		if (!file_exists($base_work_dir.'/shared_folder_session_'.$current_session_id.'/sf_user_'.api_get_user_id())) {
+			$usf_dir_title = api_get_person_name($_user['firstName'], $_user['lastName']).' ('.api_get_session_name($current_session_id).')';
+			$usf_dir_name = '/shared_folder_session_'.$current_session_id.'/sf_user_'.api_get_user_id();			
+			$to_group_id = 0;
+			$visibility = 1;
+			create_unexisting_directory($_course, $_user['user_id'], $to_group_id, $to_user_id, $base_work_dir, $usf_dir_name, $usf_dir_title, $visibility);
+		}
 }
 
+
 /*	MAIN SECTION */
 
 if (isset($_GET['action']) && $_GET['action'] == 'download') {
@@ -277,13 +299,13 @@ if (isset($_GET['action']) && $_GET['action'] == 'download') {
 
 
 // Download a folder
-if (isset($_GET['action']) && $_GET['action'] == 'downloadfolder' && $curdirpath!='/' && (api_get_setting('students_download_folders') == 'true' || api_is_allowed_to_edit() || api_is_platform_admin())) {
+if (isset($_GET['action']) && $_GET['action'] == 'downloadfolder' && (api_get_setting('students_download_folders') == 'true' || api_is_allowed_to_edit() || api_is_platform_admin())) {
 	
 	//filter when I am into shared folder, I can donwload only my shared folder
 	
-	if(is_any_user_shared_folder($_GET['path']))
+	if(is_any_user_shared_folder($_GET['path'],$current_session_id))
 	{
-		if(is_my_shared_folder($_user['user_id'], $_GET['path']) || api_is_allowed_to_edit() || api_is_platform_admin())
+		if(is_my_shared_folder($_user['user_id'], $_GET['path'], $current_session_id) || api_is_allowed_to_edit() || api_is_platform_admin())
 		{
 		  require 'downloadfolder.inc.php';
 		}
@@ -323,12 +345,7 @@ if (!$is_certificate_mode) {
 
 $dir_acum = '';
 for ($i = 0; $i < $array_len; $i++) {
-	if ($dir_array[$i] == 'shared_folder') {
-		$dir_array[$i] = get_lang('SharedFolder');
-	} elseif (strpos($dir_array[$i], 'sf_user_') !== false) {
-		$userinfo = Database::get_user_info_from_id(substr($dir_array[$i], 8));
-		$dir_array[$i] = api_get_person_name($userinfo['firstname'], $userinfo['lastname']);
-	}
+
 
 	$url_dir = 'document.php?&curdirpath='.$dir_acum.$dir_array[$i];
 	
@@ -655,9 +672,11 @@ if ($is_certificate_mode && $curdirpath != '/certificates') {
 }
 
 if (isset($docs_and_folders) && is_array($docs_and_folders)) {
+	
 	//echo('<pre>');
 	//print_r($docs_and_folders);
 	//echo('</pre>');
+	
 	// Do we need the title field for the document name or not?
 	// We get the setting here, so we only have to do it once
 	$use_document_title = api_get_setting('use_document_title');
@@ -676,15 +695,7 @@ if (isset($docs_and_folders) && is_array($docs_and_folders)) {
 		if ($use_document_title == 'true' && $id['title'] != '') {
 			$document_name = $id['title'];
 		} else {
-			$document_name = basename($id['path']);
-			// Juan Carlos Raña: Get firstname and lastname when folder is in shared_folder.
-			// TODO: Check if is also necessary (above else)
-			if (strstr($document_name, 'sf_user_')) {
-				$userinfo = Database::get_user_info_from_id(substr($document_name, 8));
-				$document_name = api_get_person_name($userinfo['firstname'], $userinfo['lastname']);
-			} elseif (strpos($document_name, 'shared_folder') !== false) {
-				$document_name = get_lang('SharedFolder');
-			}
+			$document_name = basename($id['path']);		
 		}
 		// Data for checkbox
 		if (($is_allowed_to_edit || $group_member_with_upload_rights) && count($docs_and_folders) > 1) {
@@ -746,13 +757,13 @@ if (isset($docs_and_folders) && is_array($docs_and_folders)) {
 
 $column_show = array();
 
-if ($is_allowed_to_edit || $group_member_with_upload_rights || is_my_shared_folder($_user['user_id'], $curdirpath)) {
+if ($is_allowed_to_edit || $group_member_with_upload_rights || is_my_shared_folder($_user['user_id'], $curdirpath, $current_session_id)) {
 
-	// @TODO:check enable more options for shared folders
+	// TODO:check enable more options for shared folders
 	/* CREATE NEW DOCUMENT OR NEW DIRECTORY / GO TO UPLOAD / DOWNLOAD ZIPPED FOLDER */
 
 	// Create new document
-	if (!$is_certificate_mode && !is_my_shared_folder($_user['user_id'], $curdirpath)) {
+	if (!$is_certificate_mode && !is_my_shared_folder($_user['user_id'], $curdirpath, $current_session_id)) {
 ?>
 	<a href="create_document.php?<?php echo api_get_cidreq(); ?>&dir=<?php echo $curdirpathurl.$req_gid; ?>">
 		<?php Display::display_icon('filenew.gif', get_lang('CreateDoc')); echo get_lang('CreateDoc'); ?></a>&nbsp;
@@ -775,7 +786,7 @@ if ($is_allowed_to_edit || $group_member_with_upload_rights || is_my_shared_fold
 <?php
 
 	// Create directory
-	if (!$is_certificate_mode && !is_my_shared_folder($_user['user_id'], $curdirpath)) {
+	if (!$is_certificate_mode && !is_my_shared_folder($_user['user_id'], $curdirpath, $current_session_id)) {
 ?>
 	<a href="<?php echo api_get_self(); ?>?<?php echo api_get_cidreq(); ?>&curdirpath=<?php echo $curdirpathurl.$req_gid; ?>&amp;createdir=1">
 		<?php Display::display_icon('folder_new.gif', get_lang('CreateDir')); echo get_lang('CreateDir'); ?></a>&nbsp;
@@ -792,7 +803,7 @@ if (!is_null($docs_and_folders)) {
 	if (!$is_certificate_mode && $total_size != 0 && (api_get_setting('students_download_folders') == 'true' || api_is_allowed_to_edit() || api_is_platform_admin())) {
 		
 		//don't show icon into shared folder, and don´t show into main path (root)
-		if (!is_shared_folder($curdirpath) && $curdirpath!='/' || api_is_allowed_to_edit() || api_is_platform_admin())
+		if (!is_shared_folder($curdirpath, $current_session_id) && $curdirpath!='/' || api_is_allowed_to_edit() || api_is_platform_admin())
 		{
 	    	echo '<a href="'.api_get_self().'?'.api_get_cidreq().'&action=downloadfolder&path='.$curdirpathurl.'">'.Display::display_icon('zip_save.gif', get_lang('Save').' (ZIP)'). get_lang('Save').' (ZIP)</a>&nbsp';
 		}
@@ -878,4 +889,5 @@ if (!empty($table_footer)) {
 }
 
 // Footer
-Display::display_footer();
+Display::display_footer()
+?>

+ 8 - 0
main/document/downloadfolder.inc.php

@@ -21,6 +21,14 @@ if (($path != '/') && (!DocumentManager::get_document_id($_course, $path))) {
 	$path = '/';
 }
 
+//a student should not be able to download a root shared directory
+if (($path == '/shared_folder' || $path=='/shared_folder_session_'.api_get_session_id()) && (!api_is_allowed_to_edit() || !api_is_platform_admin())){		
+	echo '<div align="center">';
+	Display::display_error_message(get_lang('NotAllowedClickBack').'<br /><br /><a href="'.$_SERVER['HTTP_REFERER'].'">'.get_lang('BackToPreviousPage').'</a><br />', false);
+	echo '</div>';
+	exit;
+}
+
 //zip library for creation of the zipfile
 include api_get_path(LIBRARY_PATH).'pclzip/pclzip.lib.php';
 

+ 2 - 2
main/document/upload.php

@@ -198,7 +198,7 @@ if (isset($_SESSION['_gid']) && $_SESSION['_gid'] != '') { // If the group id is
 	} else {
 		api_not_allowed(true);
 	}
-} elseif ($is_allowed_to_edit || is_my_shared_folder($_user['user_id'], $path)) { // Admin for "regular" upload, no group documents. And check if is my shared folder
+} elseif ($is_allowed_to_edit || is_my_shared_folder($_user['user_id'], $path,api_get_session_id())) { // Admin for "regular" upload, no group documents. And check if is my shared folder
 	$to_group_id = 0;
 	$req_gid = '';
 } else { // No course admin and no group member...
@@ -488,7 +488,7 @@ if ($is_certificate_mode) {
 }
 
 // Link to create a folder
-if (!isset($_GET['createdir']) && !is_my_shared_folder($_user['user_id'], $path) && !$is_certificate_mode) {
+if (!isset($_GET['createdir']) && !is_my_shared_folder($_user['user_id'], $path, api_get_session_id()) && !$is_certificate_mode) {
 	echo '<a href="'.api_get_self().'?path='.$path.'&amp;createdir=1">'.Display::return_icon('folder_new.gif', get_lang('CreateDir')).get_lang('CreateDir').'</a>';
 }
 echo '</div>';

+ 2 - 4
main/exercice/admin.php

@@ -428,12 +428,10 @@ if (isset($exerciseId) && !empty($exerciseId)) {
 
 
 echo '<div class="actions">';
+if (isset($_GET['hotspotadmin']) || isset($_GET['newQuestion']) || isset($_GET['myid']))
+echo Display::return_icon('back.png', get_lang('GoBackToQuestionList')).' '.'<a href="admin.php?">'.get_lang('GoBackToQuestionList').'</a>';
 echo Display::return_icon('preview.gif', get_lang('Preview')).'<a href="exercice_submit.php?'.api_get_cidreq().'&exerciseId='.$objExercise->id.'">'.get_lang('Preview').'</a>';
 echo Display::return_icon('edit.gif', get_lang('ModifyExercise')).'<a href="exercise_admin.php?'.api_get_cidreq().'&modifyExercise=yes&exerciseId='.$objExercise->id.'">'.get_lang('ModifyExercise').'</a>';
-
-if (isset($_GET['hotspotadmin']) || isset($_GET['newQuestion']) || isset($_GET['myid']))
-echo Display::return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')).' '.'<a href="admin.php?">'.get_lang('GoBackToQuestionList').'</a><br/>';
-
 echo '</div>';
 
 if(isset($_GET['message']))

+ 50 - 52
main/exercice/exercice.php

@@ -732,6 +732,54 @@ if ($show == 'test') {
 	echo '</span>';
 }
 
+if (($is_allowedToEdit) and ($origin != 'learnpath')) {
+	if ($_GET['show'] != 'result') {
+		echo '<a href="exercise_admin.php?' . api_get_cidreq() . '">' . Display :: return_icon('new_test.gif', get_lang('NewEx')) . get_lang('NewEx') . '</a>';
+		echo '<a href="question_create.php?' . api_get_cidreq() . '">' . Display :: return_icon('question_add.gif', get_lang('AddQuestionToExercise')) . get_lang('AddQuestionToExercise') . '</a>';
+		echo '<a href="hotpotatoes.php?' . api_get_cidreq() . '">' . Display :: return_icon('import_db.png', get_lang('ImportHotPotatoesQuiz')) . get_lang('ImportHotPotatoesQuiz') . '</a>';
+		// link to import qti2 ... 
+		echo '<a href="qti2.php?' . api_get_cidreq() . '">' . Display :: return_icon('import_db.png', get_lang('ImportQtiQuiz')) . get_lang('ImportQtiQuiz') . '</a>';
+		echo '<a href="exercice.php?' . api_get_cidreq() . '&show=result">' . Display :: return_icon('show_test_results.gif', get_lang('Results')) . get_lang('Results') . '</a>';
+	}
+
+	// the actions for the statistics
+	if ($show == 'result') {
+		// the form
+		if (api_is_platform_admin() || api_is_course_admin() || api_is_course_tutor() || api_is_course_coach()) {
+			if ($_SESSION['export_user_fields'] == true) {
+				$alt = get_lang('ExportWithUserFields');
+				$extra_user_fields = '<input type="hidden" name="export_user_fields" value="export_user_fields">';
+			} else {
+				$alt = get_lang('ExportWithoutUserFields');
+				$extra_user_fields = '<input type="hidden" name="export_user_fields" value="do_not_export_user_fields">';
+			}
+			echo '<a href="' . api_add_url_param($_SERVER['REQUEST_URI'], 'show=test') . '">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
+			echo '<a href="javascript: void(0);" onclick="javascript: document.form1a.submit();">'.Display::return_icon('csv.gif',get_lang('ExportAsCSV')).get_lang('ExportAsCSV').'</a>';
+			echo '<a href="javascript: void(0);" onclick="javascript: document.form1b.submit();">' . Display :: return_icon('excel.gif', get_lang('ExportAsXLS')) . get_lang('ExportAsXLS') . '</a>';
+			//echo '<a href="javascript: void(0);" onclick="javascript: document.form1c.submit();">'.Display::return_icon('synthese_view.gif',$alt).$alt.'</a>';
+			echo '<form id="form1a" name="form1a" method="post" action="' . api_get_self() . '?show=' . Security :: remove_XSS($_GET['show']) . '" style="display:inline">';
+			echo '<input type="hidden" name="export_report" value="export_report">';
+			echo '<input type="hidden" name="export_format" value="csv">';
+			echo '<input type="hidden" name="export_filter" value="'.(empty($filter)?1:intval($filter)).'">';
+			echo '</form>';
+			echo '<form id="form1b" name="form1b" method="post" action="' . api_get_self() . '?show=' . Security :: remove_XSS($_GET['show']) . '" style="display:inline">';
+			echo '<input type="hidden" name="export_report" value="export_report">';
+			echo '<input type="hidden" name="export_filter" value="'.(empty($filter)?1:intval($filter)).'">';
+			echo '<input type="hidden" name="export_format" value="xls">';
+			echo '</form>';
+			//echo '<form id="form1c" name="form1c" method="post" action="'.api_get_self().'?show='.Security::remove_XSS($_GET['show']).'">';
+			//echo $extra_user_fields;
+			//echo '</form>';
+		}
+	}
+} else {
+	//the student view
+	if ($show == 'result') {
+		echo '<a href="' . api_add_url_param($_SERVER['REQUEST_URI'], 'show=test') . '">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
+	} else {
+		echo '<a href="' . api_add_url_param($_SERVER['REQUEST_URI'], 'show=result') . '">' . Display :: return_icon('show_test_results.gif', get_lang('Results')) . get_lang('Results') . '</a>';
+	}
+}
 if ($_configuration['tracking_enabled']) {
 	if ($show == 'result') {
 		/*if (!function_exists('make_select'))
@@ -809,56 +857,6 @@ if ($_configuration['tracking_enabled']) {
 		}
 	}	*/
 }
-
-if (($is_allowedToEdit) and ($origin != 'learnpath')) {
-	if ($_GET['show'] != 'result') {
-		echo '<a href="exercise_admin.php?' . api_get_cidreq() . '">' . Display :: return_icon('new_test.gif', get_lang('NewEx')) . get_lang('NewEx') . '</a>';
-		echo '<a href="question_create.php?' . api_get_cidreq() . '">' . Display :: return_icon('question_add.gif', get_lang('AddQuestionToExercise')) . get_lang('AddQuestionToExercise') . '</a>';
-		echo '<a href="hotpotatoes.php?' . api_get_cidreq() . '">' . Display :: return_icon('jqz.gif', get_lang('ImportHotPotatoesQuiz')) . get_lang('ImportHotPotatoesQuiz') . '</a>';
-		// link to import qti2 ... 
-		echo '<a href="qti2.php?' . api_get_cidreq() . '">' . Display :: return_icon('jqz.gif', get_lang('ImportQtiQuiz')) . get_lang('ImportQtiQuiz') . '</a>';
-		echo '<a href="exercice.php?' . api_get_cidreq() . '&show=result">' . Display :: return_icon('show_test_results.gif', get_lang('Results')) . get_lang('Results') . '</a>';
-	}
-
-	// the actions for the statistics
-	if ($show == 'result') {
-		// the form
-		if (api_is_platform_admin() || api_is_course_admin() || api_is_course_tutor() || api_is_course_coach()) {
-			if ($_SESSION['export_user_fields'] == true) {
-				$alt = get_lang('ExportWithUserFields');
-				$extra_user_fields = '<input type="hidden" name="export_user_fields" value="export_user_fields">';
-			} else {
-				$alt = get_lang('ExportWithoutUserFields');
-				$extra_user_fields = '<input type="hidden" name="export_user_fields" value="do_not_export_user_fields">';
-			}
-			echo '<a href="javascript: void(0);" onclick="javascript: document.form1a.submit();">'.Display::return_icon('csv.gif',get_lang('ExportAsCSV')).get_lang('ExportAsCSV').'</a>';
-			echo '<a href="javascript: void(0);" onclick="javascript: document.form1b.submit();">' . Display :: return_icon('excel.gif', get_lang('ExportAsXLS')) . get_lang('ExportAsXLS') . '</a>';
-			//echo '<a href="javascript: void(0);" onclick="javascript: document.form1c.submit();">'.Display::return_icon('synthese_view.gif',$alt).$alt.'</a>';
-			echo '<a href="' . api_add_url_param($_SERVER['REQUEST_URI'], 'show=test') . '">' . Display :: return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
-			echo '<form id="form1a" name="form1a" method="post" action="' . api_get_self() . '?show=' . Security :: remove_XSS($_GET['show']) . '">';
-			echo '<input type="hidden" name="export_report" value="export_report">';
-			echo '<input type="hidden" name="export_format" value="csv">';
-			echo '<input type="hidden" name="export_filter" value="'.(empty($filter)?1:intval($filter)).'">';
-			echo '</form>';
-			echo '<form id="form1b" name="form1b" method="post" action="' . api_get_self() . '?show=' . Security :: remove_XSS($_GET['show']) . '">';
-			echo '<input type="hidden" name="export_report" value="export_report">';
-			echo '<input type="hidden" name="export_filter" value="'.(empty($filter)?1:intval($filter)).'">';
-			echo '<input type="hidden" name="export_format" value="xls">';
-			echo '</form>';
-			//echo '<form id="form1c" name="form1c" method="post" action="'.api_get_self().'?show='.Security::remove_XSS($_GET['show']).'">';
-			//echo $extra_user_fields;
-			//echo '</form>';
-		}
-	}
-} else {
-	//the student view
-	if ($show == 'result') {
-		echo '<a href="' . api_add_url_param($_SERVER['REQUEST_URI'], 'show=test') . '">' . Display :: return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
-	} else {
-		echo '<a href="' . api_add_url_param($_SERVER['REQUEST_URI'], 'show=result') . '">' . Display :: return_icon('show_test_results.gif', get_lang('Results')) . get_lang('Results') . '</a>';
-	}
-}
-
 echo '</div>'; // closing the actions div
 
 if ($show == 'test') {
@@ -996,7 +994,7 @@ if ($show == 'test') {
 				}				
 				
 				// Export qti ...
-				echo '<a href="exercice.php?choice=exportqti2&exerciseId='.$row['id'].'"><img src="../img/export.png" border="0" title="IMS/QTI" /></a>';
+				echo '<a href="exercice.php?choice=exportqti2&exerciseId='.$row['id'].'"><img src="../img/export_db.png" border="0" title="IMS/QTI" /></a>';
 				
 				echo "</td>";
 				echo "</tr>";
@@ -1111,7 +1109,7 @@ if ($show == 'test') {
 ?>
 
     <tr>
-      <td><img src="../img/jqz.gif" alt="HotPotatoes" /></td>
+      <td><img src="../img/import_db.png" alt="HotPotatoes" /></td>
 	   <td><?php echo ($ind+($page*$limitExPage)).'.'; ?></td>
        <td><a href="showinframes.php?file=<?php echo $path?>&cid=<?php echo $_course['official_code'];?>&uid=<?php echo $_user['user_id'];?>" <?php if(!$active) echo 'class="invisible"'; ?>><?php echo $title?></a></td>
   <td></td>

+ 1 - 1
main/exercice/exercice_submit.php

@@ -1076,7 +1076,7 @@ if (isset($exerciseId) && !empty($exerciseId)) {
 // I'm in a preview mode
 if (api_is_course_admin() && $origin != 'learnpath') {
     echo '<div class="actions">';    
-    echo '<a href="exercice.php?show=test">' . Display :: return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
+    echo '<a href="exercice.php?show=test">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
     if ($show_quiz_edition) {
     	echo Display :: return_icon('edit.gif', get_lang('ModifyExercise')) . '<a href="exercise_admin.php?' . api_get_cidreq() . '&modifyExercise=yes&exerciseId=' . $objExercise->id . '">' . get_lang('ModifyExercise') . '</a>';
     } else {

+ 1 - 1
main/exercice/exercise_admin.php

@@ -184,7 +184,7 @@ if ($form -> validate()) {
 	Display::display_header($nameTools,get_lang('Exercise'));
 	
 	echo '<div class="actions">';
-	echo '<a href="exercice.php?show=test">' . Display :: return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
+	echo '<a href="exercice.php?show=test">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
 	echo '</div>';	
 	
 	if ($objExercise->feedbacktype==1)

+ 1 - 1
main/exercice/hotpotatoes.php

@@ -206,7 +206,7 @@ if((api_is_allowed_to_edit(null,true)) && (($finish == 0) || ($finish == 2)))
 	Display::display_header($nameTools,get_lang('Exercise'));
 	
 	echo '<div class="actions">';
-	echo '<a href="exercice.php?show=test">' . Display :: return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
+	echo '<a href="exercice.php?show=test">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
 	echo '</div>';
 
 	if ($finish==2) //if we are in the img upload process

+ 1 - 1
main/exercice/qti2.php

@@ -37,7 +37,7 @@ $is_allowedToEdit = api_is_allowed_to_edit(null, true);
 function ch_qti2_display_form() {
 	$name_tools = get_lang('ImportQtiQuiz');
 	$form  = '<div class="actions">';
-	$form .= '<a href="exercice.php?show=test">' . Display :: return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
+	$form .= '<a href="exercice.php?show=test">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
 	$form .= '</div>';
 	$form .= '<form action='.api_get_self()."?".api_get_cidreq().' method="post" enctype="multipart/form-data">';
 	$form .= '<div class="row"><div class="form_header">'.$name_tools.'</div></div>';

+ 1 - 1
main/exercice/question_create.php

@@ -87,7 +87,7 @@ if ($form->validate()) {
 	Display::display_header($nameTools);
 	
 	echo '<div class="actions">';
-	echo '<a href="exercice.php?show=test">' . Display :: return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
+	echo '<a href="exercice.php?show=test">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList')) . get_lang('GoBackToQuestionList') . '</a>';
 	echo '</div>';
 
 	// displaying the form

+ 2 - 2
main/exercice/question_pool.php

@@ -267,9 +267,9 @@ if($is_allowedToEdit) {
 
 	<button class="save" type="submit" name="name" value="<?php echo get_lang('Ok') ?>"><?php echo get_lang('Filter') ?></button>
 	<?php
-	echo '<a href="admin.php?',api_get_cidreq(),'&exerciseId=',$fromExercise,'">'.Display::return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')),get_lang('GoBackToQuestionList'),'</a>';
+	echo '<a href="admin.php?',api_get_cidreq(),'&exerciseId=',$fromExercise,'">'.Display::return_icon('back.png', get_lang('GoBackToQuestionList')),get_lang('GoBackToQuestionList'),'</a>';
 	/*if(!empty($fromExercise)) {
-		echo '<a href="admin.php?',api_get_cidreq(),'&exerciseId=',$fromExercise,'">'.Display::return_icon('message_reply_forum.png', get_lang('GoBackToQuestionList')),get_lang('GoBackToQuestionList'),'</a>';
+		echo '<a href="admin.php?',api_get_cidreq(),'&exerciseId=',$fromExercise,'">'.Display::return_icon('back.png', get_lang('GoBackToQuestionList')),get_lang('GoBackToQuestionList'),'</a>';
 	} else {
 		echo '<a href="admin.php?'.api_get_cidreq().'&newQuestion=yes">'.Display::return_icon('new_test.gif'),get_lang('NewQu').'</a>';
 	}*/

+ 4 - 0
main/gradebook/lib/be/attendancelink.class.php

@@ -246,5 +246,9 @@ class AttendanceLink extends AbstractLink
     	return $this->attendance_data;
     }
 
+    public function get_icon_name() {
+		return 'attendance';
+	}
+
 }
 ?>

+ 5 - 0
main/gradebook/lib/be/dropboxlink.class.php

@@ -70,4 +70,9 @@ class DropboxLink extends EvalLink
     	}
    		return $this->dropbox_table;
     }
+
+    public function get_icon_name() {
+		return 'dropbox';
+	}
+
 }

+ 9 - 4
main/gradebook/lib/be/exerciselink.class.php

@@ -96,10 +96,10 @@ class ExerciseLink extends AbstractLink
 		$sql = 'SELECT * FROM '.$tbl_stats.' WHERE exe_exo_id = '.(int)$this->get_ref_id().' AND orig_lp_id = 0 AND orig_lp_item_id = 0';
 
 		if (isset($stud_id)){
-			
-			//$currect_course=api_get_course_id();			
-			//$course_code_exe = (strlen($currect_course)===0) ? $this->get_course_code() : api_get_course_id();    		
-    		$course_code_exe = $this->get_course_code();    		
+
+			//$currect_course=api_get_course_id();
+			//$course_code_exe = (strlen($currect_course)===0) ? $this->get_course_code() : api_get_course_id();
+    		$course_code_exe = $this->get_course_code();
     		$sql .= ' AND exe_cours_id="'.$course_code_exe.'" AND exe_user_id = '."'".$stud_id."'";
     	}
 
@@ -241,4 +241,9 @@ class ExerciseLink extends AbstractLink
     	}
     	return $this->exercise_data;
     }
+
+    public function get_icon_name() {
+		return 'exercise';
+	}
+
 }

+ 4 - 0
main/gradebook/lib/be/forumthreadlink.class.php

@@ -253,4 +253,8 @@ class ForumThreadLink extends AbstractLink
     	return $this->exercise_data;
     }
 
+    public function get_icon_name() {
+		return 'forum';
+	}
+
 }

+ 5 - 0
main/gradebook/lib/be/learnpathlink.class.php

@@ -255,4 +255,9 @@ class LearnpathLink extends AbstractLink
     	}
     	return $this->learnpath_data;
     }
+
+    public function get_icon_name() {
+		return 'learnpath';
+	}
+
 }

+ 5 - 0
main/gradebook/lib/be/studentpublicationlink.class.php

@@ -269,4 +269,9 @@ class StudentPublicationLink extends AbstractLink
 		$number=Database::fetch_row($result);
 		return ($number[0] != 0);
     }
+
+    public function get_icon_name() {
+		return 'studentpublication';
+	}
+
 }

+ 63 - 36
main/gradebook/lib/gradebook_functions.inc.php

@@ -34,7 +34,7 @@ function add_resource_to_course_gradebook($course_code, $resource_type, $resourc
     define('LINK_WORK',6);
     */
     $category = 0;
-    require_once (api_get_path(SYS_CODE_PATH).'gradebook/lib/be.inc.php');
+    require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/be.inc.php';
     $link= LinkFactory :: create($resource_type);
     $link->set_user_id(api_get_user_id());
     $link->set_course_code($course_code);
@@ -139,21 +139,48 @@ function build_type_icon_tag($kind) {
  * @param string $type value returned by a gradebookitem's get_icon_name()
  */
 function get_icon_file_name ($type) {
-	if ($type == 'cat') {
-		return api_get_path(WEB_CODE_PATH) . 'img/gradebook.gif';
-	} elseif ($type == 'evalempty') {
-		return api_get_path(WEB_CODE_PATH) . 'img/empty.gif';
-	} elseif ($type == 'evalnotempty') {
-		return api_get_path(WEB_CODE_PATH) . 'img/gradebook_eval_not_empty.gif';
-	} elseif ($type == 'link') {
-		return api_get_path(WEB_CODE_PATH) . 'img/link.gif';
-	} else {
-		return null;
+	switch ($type) {
+		case 'cat':
+			$icon = 'gradebook.gif';
+			break;
+		case 'evalempty':
+			$icon = 'empty.gif';
+			break;
+		case 'evalnotempty':
+			$icon = 'gradebook_eval_not_empty.gif';
+			break;
+		case 'exercise':
+			$icon = 'quiz.gif';
+			break;
+		case 'learnpath':
+			$icon = 'scorm.gif';
+			break;
+		case 'studentpublication':
+			$icon = 'works.gif';
+			break;
+		case 'link':
+			$icon = 'link.gif';
+			break;
+		case 'forum':
+			$icon = 'forum.gif';
+			break;
+		case 'attendance':
+			$icon = 'attendance.gif';
+			break;
+		case 'survey':
+			$icon = 'survey.gif';
+			break;
+		case 'dropbox':
+			$icon = 'dropbox.gif';
+			break;
+		default:
+			$icon = 'link.gif';
+			break;
 	}
+	return api_get_path(WEB_IMG_PATH).$icon;
 }
 
 
-
 /**
  * Builds the course or platform admin icons to edit a category
  * @param object $cat category object
@@ -239,7 +266,7 @@ function is_resource_in_course_gradebook($course_code, $resource_type, $resource
     require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/be/linkfactory.class.php';
     require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/be.inc.php';
 	require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/be/linkfactory.class.php';
-	
+
     // TODO find the corresponding category (the first one for this course, ordered by ID)
     $t = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
     $l = Database::get_main_table(TABLE_MAIN_GRADEBOOK_LINK);
@@ -305,7 +332,7 @@ function get_printable_data($users,$alleval, $alllinks) {
 	$count = (($offset + 10) > $datagen->get_total_items_count()) ? ($datagen->get_total_items_count() - $offset) : 10;
 	$header_names = $datagen->get_header_names($offset, $count, true);
 	$data_array = $datagen->get_data(FlatViewDataGenerator :: FVDG_SORT_LASTNAME, 0, null, $offset, $count, true,true);
-	
+
 	$newarray = array();
 	foreach ($data_array as $data) {
 		$newarray[] = array_slice($data, 1);
@@ -317,7 +344,7 @@ function get_printable_data($users,$alleval, $alllinks) {
 /**
  * XML-parser: handle character data
  */
- 
+
 function character_data($parser, $data) {
 	global $current_value;
 	$current_value= $data;
@@ -326,7 +353,7 @@ function character_data($parser, $data) {
 /**
  * XML-parser: handle end of element
  */
- 
+
 function element_end($parser, $data) {
 	global $user;
 	global $users;
@@ -344,7 +371,7 @@ function element_end($parser, $data) {
 /**
  * XML-parser: handle start of element
  */
- 
+
 function element_start($parser, $data) {
 	global $user;
 	global $current_tag;
@@ -373,7 +400,7 @@ function overwritescore($resid, $importscore, $eval_max) {
  * @param string $file Path to the XML-file
  * @return array All userinformation read from the file
  */
- 
+
 function parse_xml_data($file) {
 	global $current_tag;
 	global $current_value;
@@ -393,44 +420,44 @@ function parse_xml_data($file) {
   * @param int The category id
   * @param int The user id
   * @param string the path name of the certificate
-  * @return void() 
+  * @return void()
   */
   function update_user_info_about_certificate ($cat_id,$user_id,$path_certificate) {
   	$table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
   	if (!UserManager::is_user_certified($cat_id,$user_id)) {
-  		$sql='UPDATE '.$table_certificate.' SET path_certificate="'.Database::escape_string($path_certificate).'"  
+  		$sql='UPDATE '.$table_certificate.' SET path_certificate="'.Database::escape_string($path_certificate).'"
 			 WHERE cat_id="'.intval($cat_id).'" AND user_id="'.intval($user_id).'" ';
 		$rs=Database::query($sql);
   	}
   }
-  
+
   /**
   * register user info about certificate
   * @param int The category id
   * @param int The user id
   * @param float The score obtained for certified
-  * @param Datetime The date when you obtained the certificate  
-  * @return void() 
+  * @param Datetime The date when you obtained the certificate
+  * @return void()
   */
   function register_user_info_about_certificate ($cat_id,$user_id,$score_certificate, $date_certificate) {
   	$table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
-  	$sql_exist='SELECT COUNT(*) as count FROM '.$table_certificate.' gc 
+  	$sql_exist='SELECT COUNT(*) as count FROM '.$table_certificate.' gc
 				WHERE gc.cat_id="'.intval($cat_id).'" AND user_id="'.intval($user_id).'" ';
 	$rs_exist=Database::query($sql_exist);
 	$row=Database::fetch_array($rs_exist);
 	if ($row['count']==0) {
 		$sql='INSERT INTO '.$table_certificate.' (cat_id,user_id,score_certificate,created_at)
 			  VALUES("'.intval($cat_id).'","'.intval($user_id).'","'.Database::escape_string($score_certificate).'","'.Database::escape_string($date_certificate).'")';
-		$rs=Database::query($sql);  
+		$rs=Database::query($sql);
 	}
-	
+
   }
   /**
   * Get date of user certificate
   * @param int The category id
   * @param int The user id
-  * @return Datetime The date when you obtained the certificate   
-  */  
+  * @return Datetime The date when you obtained the certificate
+  */
   function get_certificate_date_by_user_id ($cat_id,$user_id) {
     	$table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
     	$sql_get_date='SELECT created_at FROM '.$table_certificate.' WHERE cat_id="'.intval($cat_id).'" AND user_id="'.intval($user_id).'"';
@@ -438,21 +465,21 @@ function parse_xml_data($file) {
     	$row_get_date=Database::fetch_array($rs_get_date,'ASSOC');
     	return $row_get_date['created_at'];
   }
-  
+
   /**
   * Get list of users certificates
   * @param int The category id
   * @return array
   */
   function get_list_users_certificates ($cat_id=null) {
-    $table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE); 	
+    $table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
     $table_user = Database::get_main_table(TABLE_MAIN_USER);
-  	$sql='SELECT DISTINCT u.user_id,u.lastname,u.firstname,u.username FROM '.$table_user.' u INNER JOIN '.$table_certificate.' gc 
+  	$sql='SELECT DISTINCT u.user_id,u.lastname,u.firstname,u.username FROM '.$table_user.' u INNER JOIN '.$table_certificate.' gc
 			ON u.user_id=gc.user_id ';
 	if (!is_null($cat_id) && $cat_id>0) {
   		$sql.=' WHERE cat_id='.Database::escape_string($cat_id);
   	}
-  	$sql.=' ORDER BY u.firstname';  	
+  	$sql.=' ORDER BY u.firstname';
 	$rs=Database::query($sql);
 	$list_users=array();
 	while ($row=Database::fetch_array($rs)) {
@@ -468,8 +495,8 @@ function parse_xml_data($file) {
   *@retun array
   */
   function get_list_gradebook_certificates_by_user_id ($user_id,$cat_id=null) {
-  	$table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE); 	
-  	$sql='SELECT gc.score_certificate,gc.created_at,gc.path_certificate,gc.cat_id,gc.user_id FROM  '.$table_certificate.' gc 
+  	$table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
+  	$sql='SELECT gc.score_certificate,gc.created_at,gc.path_certificate,gc.cat_id,gc.user_id FROM  '.$table_certificate.' gc
 		  WHERE gc.user_id="'.Database::escape_string($user_id).'" ';
 	if (!is_null($cat_id) && $cat_id>0) {
   		$sql.=' AND cat_id='.Database::escape_string($cat_id);
@@ -489,8 +516,8 @@ function parse_xml_data($file) {
   * @return boolean
   */
   function delete_certificate ($cat_id,$user_id) {
-  	
-    $table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE); 		
+
+    $table_certificate = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
   	$sql_verified='SELECT count(*) AS count,path_certificate as path,user_id FROM '.$table_certificate.' gc WHERE cat_id="'.Database::escape_string($cat_id).'" AND user_id="'.Database::escape_string($user_id).'" GROUP BY user_id,cat_id';
   	$rs_verified=Database::query($sql_verified);
   	$path=Database::result($rs_verified,0,'path');

BIN
main/img/export_db.png


BIN
main/img/import_db.png


BIN
main/img/shared.png


BIN
main/img/show_test_results.gif


+ 13 - 0
main/inc/banner.inc.php

@@ -403,6 +403,19 @@ if (isset($interbreadcrumb) && is_array($interbreadcrumb)) {
 		$sep = (strrchr($breadcrumb_step['url'], '?') ? '&amp;' : '?');
 		$navigation_item['url'] = $breadcrumb_step['url'].$sep.api_get_cidreq();
 		$navigation_item['title'] = $breadcrumb_step['name'];
+		// titles for shared folders
+		if ($breadcrumb_step['name'] == 'shared_folder') {
+			$navigation_item['title'] = get_lang('SharedFolder');
+		}			
+		elseif(strstr($breadcrumb_step['name'], 'shared_folder_session_')) {
+		
+			$navigation_item['title'] = get_lang('SharedFolder');
+		}
+		elseif(strstr($breadcrumb_step['name'], 'sf_user_')) {			
+			$userinfo = Database::get_user_info_from_id(substr($breadcrumb_step['name'], 8));
+			$navigation_item['title'] = api_get_person_name($userinfo['firstname'], $userinfo['lastname']);	
+		}
+		
 		$navigation[] = $navigation_item;
 	}
 }

+ 60 - 41
main/inc/lib/asciimath/ASCIIMathML.js

@@ -52,10 +52,10 @@ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
 */
 
 // Modified by Ivan Tcholakov, 02-JUL-2010.
-//var AMTcgiloc = "http://www.imathas.com/cgi-bin/mimetex.cgi?"; //path to CGI script that
+//var AMTcgiloc = "http://www.imathas.com/cgi-bin/mimetex.cgi"; //path to CGI script that
 //						     //can render a TeX string
 //
-// You should pick up and install on your server software for TeX rendering as:
+// You should pick up and install on your server software for TeX rendering, such as:
 //
 // mimeTeX - http://www.forkosh.dreamhost.com/source_mimetex.html
 // mathTeX - http://www.forkosh.com/mathtex.html
@@ -66,27 +66,26 @@ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
 // Google Chart Tools - http://code.google.com/apis/charttools/
 //
 // You have to set here the path to the script for TeX rendering
-// and query parameters, if any.
-//
-// Examples:
-//
-// var AMTcgiloc = "/cgi-bin/mimetex.cgi?";
-// var AMTcgiloc = "http://my_server.net/cgi-bin/mimetex.cgi?";
+// and specific query parameters, if any.
 //
 // Some examples for testing purposes:
 //
-//var AMTcgiloc = "http://www.imathas.com/cgi-bin/mimetex.cgi?";
-//var AMTcgiloc = "http://schmoodle.alaskapolicy.net/cgi-bin/mimetex.cgi?";
+//var AMTcgiloc = "http://www.imathas.com/cgi-bin/mimetex.cgi";
+//var AMTcgiloc = "http://schmoodle.alaskapolicy.net/cgi-bin/mimetex.cgi";
 //
-//var AMTcgiloc = "http://korpelainen.net/cgi-bin/mathtex.cgi?\\gammacorrection{1.4}";
-//var AMTcgiloc = "http://www.forkosh.com/cgi-bin/mathtex.cgi?\\gammacorrection{1.4}";
+//var AMTcgiloc = "http://korpelainen.net/cgi-bin/mathtex.cgi";
 //
-//var AMTcgiloc = "http://www.mathtran.org/cgi-bin/mathtran?D=1;tex=\\displaystyle ";
-//var AMTcgiloc = "http://www.mathtran.org/cgi-bin/mathtran?D=2;tex=\\displaystyle ";
+//var AMTcgiloc = "http://www.mathtran.org/cgi-bin/mathtran?tex=";
+//var AMTcgiloc = "http://www.mathtran.org/cgi-bin/mathtran?D=1;tex=";
+//var AMTcgiloc = "http://www.mathtran.org/cgi-bin/mathtran?D=2;tex=";
 //
-//var AMTcgiloc = "http://chart.apis.google.com/chart?cht=tx&chs=1x0&chf=bg,s,FFFFFF00&chco=000000&chl=";
+//var AMTcgiloc = "http://chart.apis.google.com/chart?cht=tx&chl=";
+//var AMTcgiloc = "http://chart.apis.google.com/chart?cht=tx&chs=1x0&chl=";
 //
-var AMTcgiloc = "http://chart.apis.google.com/chart?cht=tx&chs=1x0&chf=bg,s,FFFFFF00&chco=000000&chl=";
+//var AMTcgiloc = "http://codecogs.izyba.com/gif.latex";
+//var AMTcgiloc = "http://codecogs.izyba.com/png.latex";
+//
+var AMTcgiloc = "http://chart.apis.google.com/chart?cht=tx&chs=1x0&chl=";
 //
 
 var AScgiloc = 'http://www.imathas.com/imathas/filter/graph/svgimg.php'; //path to CGI script
@@ -94,7 +93,7 @@ var AScgiloc = 'http://www.imathas.com/imathas/filter/graph/svgimg.php'; //path
 var mathcolor = "blue";        // change it to "" (to inherit) or another color
 // Modified by Ivan Tcholakov, 01-JUL-2010.
 //var mathfontsize = "1em";      // change to e.g. 1.2em for larger math
-var mathfontsize = "1.5em";
+var mathfontsize = "1.2em";
 //
 // Modified by Ivan Tcholakov, 05-JUL-2010.
 //var mathfontfamily = "serif";  // change to "" to inherit (works in IE)
@@ -170,9 +169,20 @@ function setStylesheet(s) {
 	}
 }
 
-setStylesheet("#AMMLcloseDiv \{font-size:0.8em; padding-top:1em; color:#014\}\n#AMMLwarningBox \{position:absolute; width:100%; top:0; left:0; z-index:200; text-align:center; font-size:1em; font-weight:bold; padding:0.5em 0 0.5em 0; color:#ffc; background:#c30\}");
+// Disabled by Ivan Tcholakov, 11-JUL-2010.
+// On Internet Explorer the inserted &nbsp; character breaks visual appearance of the online editor.
+//setStylesheet("#AMMLcloseDiv \{font-size:0.8em; padding-top:1em; color:#014\}\n#AMMLwarningBox \{position:absolute; width:100%; top:0; left:0; z-index:200; text-align:center; font-size:1em; font-weight:bold; padding:0.5em 0 0.5em 0; color:#ffc; background:#c30\}");
+//
+
+// Added by Ivan Tcholakov, 08-JUL-2010.
+// Prevention from multiple calls of the initialization function.
+var AMinitialized = false;
+//
 
 function init(){
+	// Added by Ivan Tcholakov, 08-JUL-2010.
+	if (AMinitialized) { return true; }
+	//
 	var msg, warnings = new Array();
 	if (document.getElementById==null){
 		alert("This webpage requires a recent browser such as Mozilla Firefox/Netscape 7+ or Internet Explorer 6+ with MathPlayer and Adobe SVGviewer");
@@ -182,6 +192,9 @@ function init(){
 	if (checkIfSVGavailable && (msg = checkSVG())) warnings.push(msg);
 	if (warnings.length>0) displayWarnings(warnings);
 	initSymbols();
+	// Added by Ivan Tcholakov, 08-JUL-2010.
+	AMinitialized = true;
+	//
 	return true;
 }
 
@@ -542,7 +555,6 @@ AMquote,
 {input:"&", tag:"mo", output:"\u0026", tex:null, ttype:CONST},
 {input:"^", tag:"msup", output:"^", tex:null, ttype:INFIX},
 {input:"~=", tag:"mo", output:"\u2245", tex:"cong", ttype:CONST},
-{input:"aa", tag:"mo", output:"\u00E5", tex:null, ttype:CONST},
 {input:"abs", tag:"mo", output:"abs", tex:null, ttype:UNARY, func:true},
 {input:"acute", tag:"mover", output:"\u00B4", tex:null, ttype:UNARY, acc:true},
 {input:"AE", tag:"mo", output:"\u00C6", tex:null, ttype:CONST},
@@ -1416,8 +1428,8 @@ function AMTparseExpr(str,rightbracket) {
 		if (right==')' || right==']') {
 			var left = newFrag.charAt(6);
 			if ((left=='(' && right==')' && symbol.output != '}') || (left=='[' && right==']')) {
-				var mxout = '\\matrix{';
-				//var mxout = '\\begin{array}{cc}';
+				//var mxout = '\\matrix{';
+				var mxout = '\\begin{array}{cc}';
 				var pos = new Array(); //position of commas
 				pos.push(0);
 				var matrix = true;
@@ -1447,8 +1459,8 @@ function AMTparseExpr(str,rightbracket) {
 						mxout += subarr.join('&');
 					}
 				}
-				mxout += '}';
-				//mxout += '\\end{array}';
+				//mxout += '}';
+				mxout += '\\end{array}';
 				if (matrix) { newFrag = mxout;}
 			}
 		}
@@ -1484,19 +1496,25 @@ function AMTparseAMtoTeX(str) {
 }
 
 function AMTparseMath(str,istex) {
-	if (istex) {
-		var texstring = str;
-	} else {
-		var texstring = AMTparseAMtoTeX(str);
-	}
-	//alert(texstring);
+  if (istex) {
+    var texstring = str;
+  } else {
+    var texstring = AMTparseAMtoTeX(str);
+  }
+  //alert(texstring);
   if (mathcolor!="") {
-	  texstring = "\\"+mathcolor + texstring;
+    if (AMTcgiloc.match(/mathtex/)) {
+      texstring = "\\gammacorrection{1.4}\\usepackage{color}\\color\{" + mathcolor + "\}" + texstring;
+    } else if (AMTcgiloc.match(/mimetex/)) {
+      texstring = "\\" + mathcolor + texstring;
+    } else if (AMTcgiloc.match(/.latex/)) {
+      texstring = texstring = "\\color\{" + mathcolor + "\}" + texstring;
+    }
   }
   if (displaystyle) {
-	  texstring = "\\displaystyle" + texstring;
+    texstring = "\\displaystyle" + texstring;
   } else {
-	  texstring = "\\textstyle" + texstring;
+    texstring = "\\textstyle" + texstring;
   }
   if (AMTcgiloc.match(/google/)) {
     var tclr = mathcolor;
@@ -1545,6 +1563,9 @@ function AMTparseMath(str,istex) {
   if (AMTcgiloc.match(/google/)) {
     texstring = texstring + "&chf=bg,s," + bclr + "&chco=" + tclr;
   }
+  if (AMTcgiloc.indexOf('?') == -1) {
+	  AMTcgiloc = AMTcgiloc + '?';
+  }
   node.src = AMTcgiloc + texstring;
   node.style.verticalAlign = "middle";
   if (showasciiformulaonhover)                      //fixed by djhsu so newline
@@ -1928,7 +1949,7 @@ function AMautomathrec(str) {
 function processNodeR(n, linebreaks,latex) {
   var mtch, str, arr, frg, i;
   if (n.childNodes.length == 0) {
-   if ((n.nodeType!=8 || linebreaks) &&
+   if ((n.nodeType!=8 || linebreaks) && n.parentNode &&
     n.parentNode.nodeName!="form" && n.parentNode.nodeName!="FORM" &&
     n.parentNode.nodeName!="textarea" && n.parentNode.nodeName!="TEXTAREA" /*&&
     n.parentNode.nodeName!="pre" && n.parentNode.nodeName!="PRE"*/) {
@@ -2455,8 +2476,6 @@ var LMsymbols = [
 {input:"\\#", tag:"mo", output:"\u0023", ttype:CONST},
 {input:"\\%", tag:"mo", output:"\u0025", ttype:CONST},
 {input:"\\&", tag:"mo", output:"\u0026", ttype:CONST},
-{input:"\\AA", tag:"mo", output:"\u00C5", ttype:CONST},
-{input:"\\aa", tag:"mo", output:"\u00E5", ttype:CONST},
 {input:"\\AE", tag:"mo", output:"\u00C6", ttype:CONST},
 {input:"\\ae", tag:"mo", output:"\u00E6", ttype:CONST},
 {input:"\\approxeq", tag:"mo", output:"\u224A", ttype:CONST},
@@ -3402,11 +3421,8 @@ General Public License (at http://www.gnu.org/license/lgpl.html)
 for more details.*/
 
 // you can change these
+var checkIfSVGavailable = true;
 // Modified by Ivan Tcholakov, 01-JUL-2010.
-//var checkIfSVGavailable = true;
-var checkIfSVGavailable = false;
-//
-//Modified by Ivan Tcholakov, 01-JUL-2010.
 //var notifyIfNoSVG = true;
 var notifyIfNoSVG = false;
 //
@@ -4687,7 +4703,7 @@ function ASpreprocess() {
 	 for (var i=len-1; i>=0; i--) {
 		picture = pictures[i];
 		var sscr = picture.getAttribute("sscr");
-		if (sscr!='')  {
+		if (sscr && sscr!='')  {
 			if (noSVG) {
 				n = document.createElement('img');
 				n.setAttribute("style",picture.getAttribute("style"));
@@ -4697,9 +4713,12 @@ function ASpreprocess() {
 			} else {
 				com = parseShortScript(sscr);
 				picture.setAttribute("script",com);
-				picture.className = "ASCIIsvg";
+				//picture.className = "ASCIIsvg";
 			}
 		}
+		if (!noSVG) {
+			picture.className = "ASCIIsvg";
+		}
 	 }
 }
 

+ 4 - 11
main/inc/lib/attendance.lib.php

@@ -53,19 +53,12 @@ class Attendance
 		$data = array();
 		
 		if (!empty($course_db_name)) {
-			//$course_info = api_get_course_info($course_code);
 			$tbl_attendance = Database :: get_course_table(TABLE_ATTENDANCE, $course_db_name);
 		}
-		
-		$condition_session = '';
-		if (isset($session_id)) {
-			$session_id = intval($session_id);
-			$condition_session = ' WHERE session_id = '.$session_id;
-		} else {
-			$session_id = api_get_session_id();
-			$condition_session = api_get_session_condition($session_id);
-		}
-				
+
+                $session_id = isset($session_id)?intval($session_id):api_get_session_id();
+                $condition_session = api_get_session_condition($session_id);
+
 		// Get attendance data
 		$sql = "SELECT id, name, attendance_qualify_max FROM $tbl_attendance WHERE active = 1 $condition_session ";
 		$rs  = Database::query($sql);

+ 1 - 1
main/inc/lib/fckeditor/editor/fckdialog.html

@@ -815,7 +815,7 @@ var onReadyRegister = function()
 document.write( Args().Title ) ;
 // ]]>
 					</script>
-					<div id="closeButton" onclick="Cancel();"></div>
+					<div id="closeButton" onclick="javascript: Cancel();"></div>
 				</div>
 				<div id="TabsRow" class="PopupTabArea" style="display: none">
 					<table border="0" cellpadding="0" cellspacing="0" width="100%">

+ 5 - 4
main/inc/lib/fckeditor/editor/fckdialogframe.html

@@ -122,7 +122,7 @@ document.write( '<link href="' + FCKConfig.SkinPath + 'fck_dialog.css" type="tex
 
 		// Create the IFRAME that holds the dialog contents.
 
-		window.frames["frmMain"].document.location.href =Args().Page;
+		window.frames["frmMain"].document.location.href = Args().Page ;
 		//$( 'innerContents' ).innerHTML = '<iframe id="frmMain" src="' + Args().Page + '" name="frmMain" frameborder="0" width="100%" height="100%" scrolling="auto" style="visibility: hidden;" allowtransparency="true"><\/iframe>' ;
 	} ;
 
@@ -146,13 +146,14 @@ document.write( '<link href="' + FCKConfig.SkinPath + 'fck_dialog.css" type="tex
 // ]]>
 		</script>
 	</head>
-
-	<body onload="Init();" class="PopupBody">
+	<body onload="javascript: Init();" class="PopupBody">
 		<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0">
 			<tr>
 				<td id="TitleArea" class="PopupTitleSimple">
 					<script type="text/javascript">
-						document.write( Args().Title ) ;
+// <![CDATA[
+document.write( Args().Title ) ;
+// ]]>
 					</script>
 				</td>
 			</tr>

+ 19 - 3
main/inc/lib/fckeditor/editor/filemanager/connectors/php/commands.php

@@ -33,11 +33,18 @@ function GetFolders( $resourceType, $currentFolder )
 	$oCurrentFolder = @opendir( $sServerDir ) ;
 
 	$in_group = api_is_in_group();
-	$in_shared_folder = $currentFolder == '/shared_folder/';
+	if($currentFolder=='/shared_folder/' || $currentFolder =='/shared_folder_session_'.api_get_session_id().'/')
+	{
+		$in_shared_folder=true;
+	}
+	else
+	{
+		$in_shared_folder=false;
+	}	
 	$user_id = api_get_user_id();
 
 	if ($oCurrentFolder !== false)
-	{
+	{
 		while ( $sFile = readdir( $oCurrentFolder ) )
 		{
 			if ( $sFile != '.' && $sFile != '..'
@@ -79,7 +86,16 @@ function GetFoldersAndFiles( $resourceType, $currentFolder )
 	$oCurrentFolder = @opendir( $sServerDir ) ;
 
 	$in_group = api_is_in_group();
-	$in_shared_folder = $currentFolder == '/shared_folder/';
+	
+	if($currentFolder=='/shared_folder/' || $currentFolder =='/shared_folder_session_'.api_get_session_id().'/')
+	{
+		$in_shared_folder=true;
+	}
+	else
+	{
+		$in_shared_folder=false;
+	}	
+	
 	$user_id = api_get_user_id();
 
 	if ($oCurrentFolder !== false)

+ 10 - 2
main/inc/lib/fckeditor/editor/filemanager/connectors/php/config.php

@@ -49,8 +49,16 @@ if (api_is_in_course()) {
 		if (api_is_allowed_to_edit()) {
 			$Config['UserFilesPath'] = api_get_path(REL_COURSE_PATH).api_get_course_path().'/document/';
 		} else {
-			// 1.2. Student
-			$Config['UserFilesPath'] = api_get_path(REL_COURSE_PATH).api_get_course_path().'/document/shared_folder/sf_user_'.api_get_user_id().'/';
+			// 1.2. Student	
+			$current_session_id = api_get_session_id();
+			if($current_session_id==0)
+			{
+				$Config['UserFilesPath'] = api_get_path(REL_COURSE_PATH).api_get_course_path().'/document/shared_folder/sf_user_'.api_get_user_id().'/';
+			}
+			else
+			{
+				$Config['UserFilesPath'] = api_get_path(REL_COURSE_PATH).api_get_course_path().'/document/shared_folder_session_'.$current_session_id.'/sf_user_'.api_get_user_id().'/';		
+			}
 		}
 	} else {
 		// 2. Inside a course and inside a group.

+ 12 - 3
main/inc/lib/fckeditor/editor/plugins/ImageManager/config.inc.php

@@ -46,9 +46,18 @@ if (api_is_in_course())
 		}
 		else
 		{
-			// 1.2. Student
-			$IMConfig['base_dir'] = api_get_path(SYS_COURSE_PATH).api_get_course_path().'/document/shared_folder/sf_user_'.api_get_user_id().'/';
-			$IMConfig['base_url'] = api_get_path(WEB_COURSE_PATH).api_get_course_path().'/document/shared_folder/sf_user_'.api_get_user_id().'/';
+			// 1.2. Student			
+			$current_session_id = api_get_session_id();
+			if($current_session_id==0)
+			{
+				$IMConfig['base_dir'] = api_get_path(SYS_COURSE_PATH).api_get_course_path().'/document/shared_folder/sf_user_'.api_get_user_id().'/';
+				$IMConfig['base_url'] = api_get_path(WEB_COURSE_PATH).api_get_course_path().'/document/shared_folder/sf_user_'.api_get_user_id().'/';
+			}
+			else
+			{
+				$IMConfig['base_dir'] = api_get_path(SYS_COURSE_PATH).api_get_course_path().'/document/shared_folder_session_'.$current_session_id.'/sf_user_'.api_get_user_id().'/';
+				$IMConfig['base_url'] = api_get_path(WEB_COURSE_PATH).api_get_course_path().'/document/shared_folder_session_'.$current_session_id.'/sf_user_'.api_get_user_id().'/';	
+			}	
 		}
 	}
 	else

+ 1 - 1
main/inc/lib/fckeditor/editor/plugins/ImageManager/fckplugin.js

@@ -83,7 +83,7 @@
 			// Checking whether the selected object is a real image.
 			if ( FCK.IsRealImage( image ) )
 			{
-				var command = new FCKDialogCommand( 'Image', FCKLang.DlgImgTitle, 'dialog/fck_image.html', 600, 450 ) ;
+				var command = new FCKDialogCommand( 'Image', FCKLang.DlgImgTitle, 'dialog/fck_image.html', 600, 455 ) ;
 				command.Execute() ;
 				return ;
 			}

File diff suppressed because it is too large
+ 0 - 0
main/inc/lib/fckeditor/editor/plugins/ImageManager/fckplugin_compressed.js


+ 9 - 1
main/inc/lib/fckeditor/editor/plugins/ajaxfilemanager/ajax_file_upload.php

@@ -85,7 +85,15 @@
 									{
 										if(!api_is_allowed_to_edit())
 										{
-											$dokeosFolder='/shared_folder/sf_user_'.api_get_user_id().$dokeosFolder;
+											$current_session_id = api_get_session_id();
+											if($current_session_id==0)
+											{											
+												$dokeosFolder='/shared_folder/sf_user_'.api_get_user_id().$dokeosFolder;
+											}
+											else
+											{
+												$dokeosFolder='/shared_folder_session_'.$current_session_id.'/sf_user_'.api_get_user_id().$dokeosFolder;
+											}
 										}
 									}
 

+ 9 - 1
main/inc/lib/fckeditor/editor/plugins/ajaxfilemanager/inc/config.base.php

@@ -101,7 +101,15 @@
 			}
 			else
 			{
-				$PathDokeosAjaxFileManager='../../../../../../../courses/'.$_course['path'].'/document/shared_folder/sf_user_'.api_get_user_id().'/';
+				$current_session_id = api_get_session_id();
+				if($current_session_id==0)
+				{
+					$PathDokeosAjaxFileManager='../../../../../../../courses/'.$_course['path'].'/document/shared_folder/sf_user_'.api_get_user_id().'/';
+				}
+				else
+				{
+					$PathDokeosAjaxFileManager='../../../../../../../courses/'.$_course['path'].'/document/shared_folder_session_'.$current_session_id.'/sf_user_'.api_get_user_id().'/';
+				}				
 			}
 		}
 	}

+ 168 - 185
main/inc/lib/fckeditor/editor/plugins/asciimath/fck_asciimath.html

@@ -27,50 +27,42 @@ document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
 		</script>
 
 		<style type="text/css">
-			body, td, input, textarea, select, label { font-family: Arial, Verdana, Geneva, helvetica, sans-serif; font-size: 11px; }
-		</style>
-
-  <style type="text/css">
 
+body, td, input, textarea, select, label, button { font-family: Arial, Verdana, Geneva, helvetica, sans-serif; font-size: 11px; }
 form { padding: 0px; margin: 0px; }
 form p { margin-top: 5px; margin-bottom: 5px; }
-table { font: 11px Tahoma,Verdana,sans-serif; }
-select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
-table .label { text-align: right; width: 8em; }
-.fl { width: 9em; float: left; padding: 2px 5px; text-align: right; }
-.fr { width: 7em; float: left; padding: 2px 5px; text-align: right; }
-fieldset { padding: 0px 10px 5px 5px; }
-.space { padding: 2px; }
 
-#buttons {
-      margin-top: 10px;
+#clickInput
+{
+	width: 100%;
+	border-collapse: collapse;
+	background-color: white;
+	text-align: center;
 }
-
-#outputNode,#inputText,#mathml {
-	padding:5px;
-	background-color:white;
-	width:98%;
-	height:130px;
-	font-size:1.3em;
-	border: 1px solid darkgrey;
-	overflow:auto;
+#clickInput td
+{
+	border: 1px solid gray;
+	font-size: 1.1em;
 }
-#clickInput {
-	width:100%;
-	border-collapse:collapse;
+
+#inputText, #outputNode
+{
+	padding: 5px;
 	background-color: white;
-	text-align:center;
-}
-#clickInput td {
-	border: thin solid gray;
-	cursor:pointer;
-	font-size:1.1em;
+	width: 98%;
+	height: 130px;
+	font-size: 1.3em;
+	border: 1px solid darkgrey;
+	overflow: auto;
 }
 
-h3 {
-	font-size:1.6em;
+.Hand
+{
+	cursor: pointer;
+	cursor: hand;
 }
-  </style>
+
+		</style>
 
 	</head>
 <body scroll="no" style="overflow: hidden;">
@@ -80,155 +72,156 @@ Table modified from CharacterMap for ASCIIMathML by Peter Jipsen
 HTMLSource based on HTMLArea XTD 1.5 (http://mosforge.net/projects/htmlarea3xtd/) modified by Holger Hees
 Original Author - Bernhard Pfeifer novocaine@gmx.net
 -->
-<table  id="clickInput">
+<table id="clickInput">
 <tr>
-<td colspan="3" class="character" title="(x+1)/(x-1)" onclick="javascript: Set('(x+1)/(x-1)');">`(x+1)/(x-1)`</td>
-<td colspan="2" class="character" title="x^(m+n)" onclick="javascript: Set('x^(m+n)');">`x^(m+n)`</td>
-<td colspan="2" class="character" title="x_(mn)" onclick="javascript: Set('x_(mn)');">`x_(mn)`</td>
-<td colspan="2" class="character" title="sqrt(x)" onclick="javascript: Set('sqrt(x)');">`sqrt(x)`</td>
-<td colspan="3" class="character" title="root(n)(x)" onclick="javascript: Set('root(n)(x)');">`root(n)(x)`</td>
-<td colspan="2" class="character" title="&quot;text&quot;" onclick="javascript: Set('&quot;text&quot;');">`&quot;text&quot;`</td>
-<td colspan="2" class="character" style="cursor:default"></td>
+<td colspan="3" class="Hand" title="(x+1)/(x-1)" onclick="javascript: Set('(x+1)/(x-1)');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/x1x1.png" /></td>
+<td colspan="2" class="Hand" title="x^(m+n)" onclick="javascript: Set('x^(m+n)');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/xmn.png" /></td>
+<td colspan="2" class="Hand" title="x_(mn)" onclick="javascript: Set('x_(mn)');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/x_mn.png" /></td>
+<td colspan="2" class="Hand" title="sqrt(x)" onclick="javascript: Set('sqrt(x)');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/sqrtx.png" /></td>
+<td colspan="3" class="Hand" title="root(n)(x)" onclick="javascript: Set('root(n)(x)');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/rootnx.png" /></td>
+<td colspan="3" class="Hand" title="{(1 if x&gt;=0),(0 if x&lt;0):}" onclick="javascript: Set('{(1 if x&gt;=0),(0 if x&lt;0):}');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ifx.png" /></td>
+<td colspan="2" class="Hand" title="&quot;text&quot;" onclick="javascript: Set('&quot;text&quot;');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/text.png" /></td>
 </tr><tr>
-<td colspan="2" class="character" title="dy/dx" onclick="javascript: Set('dy/dx');">`dy/dx`</td>
-<td colspan="3" class="character" title="lim_(x-&gt;oo)" onclick="javascript: Set('lim_(x-&gt;oo)');">`lim_(x-&gt;oo)`</td>
-<td colspan="3" class="character" title="sum_(n=1)^oo" onclick="javascript: Set('sum_(n=1)^oo');">`sum_(n=1)^oo`</td>
-<td colspan="3" class="character" title="int_a^bf(x)dx" onclick="javascript: Set('int_a^bf(x)dx');">`int_a^bf(x)dx`</td>
-<td colspan="3" class="character" title="[[a,b],[c,d]]" onclick="javascript: Set('[[a,b],[c,d]]');">`[[a,b],[c,d]]`</td>
-<td colspan="2" class="character" title="((n),(k))" onclick="javascript: Set('((n),(k))');">`((n),(k))`</td>
+<td colspan="2" class="Hand" title="dy/dx" onclick="javascript: Set('dy/dx');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/dydx.png" /></td>
+<td colspan="3" class="Hand" title="lim_(x-&gt;oo)" onclick="javascript: Set('lim_(x-&gt;oo)');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/lim.png" /></td>
+<td colspan="3" class="Hand" title="sum_(n=1)^oo" onclick="javascript: Set('sum_(n=1)^oo');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/sumn.png" /></td>
+<td colspan="3" class="Hand" title="int_a^bf(x)dx" onclick="javascript: Set('int_a^bf(x)dx');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/intab.png" /></td>
+<td colspan="3" class="Hand" title="[[a,b],[c,d]]" onclick="javascript: Set('[[a,b],[c,d]]');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/abcd.png" /></td>
+<td colspan="2" class="Hand" title="((n),(k))" onclick="javascript: Set('((n),(k))');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/nk.png" /></td>
 </tr><tr>
-<td class="character" title="*" onclick="javascript: Set('*');">`*`</td>
-<td class="character" title="**" onclick="javascript: Set('**');">`**`</td>
-<td class="character" title="//" onclick="javascript: Set('//');">`//`</td>
-<td class="character" title="\\" onclick="javascript: Set('\\\\');">`\\`</td>
-<td class="character" title="xx" onclick="javascript: Set('xx');">`xx`</td>
-<td class="character" title="-:" onclick="javascript: Set('-:');">`-:`</td>
-<td class="character" title="@" onclick="javascript: Set('@');">`@`</td>
-<td class="character" title="o+" onclick="javascript: Set('o+');">`o+`</td>
-<td class="character" title="ox" onclick="javascript: Set('ox');">`ox`</td>
-<td class="character" title="o." onclick="javascript: Set('o.');">`o.`</td>
-<td class="character" title="sum" onclick="javascript: Set('sum');">`sum`</td>
-<td class="character" title="prod" onclick="javascript: Set('prod');">`prod`</td>
-<td class="character" title="^^" onclick="javascript: Set('^^');">`^^`</td>
-<td class="character" title="^^^" onclick="javascript: Set('^^^');"><span style="font-size:larger">`&and;`</span></td>
-<td class="character" title="vv" onclick="javascript: Set('vv');">`vv`</td>
-<td class="character" title="vvv" onclick="javascript: Set('vvv');"><span style="font-size:larger">`&or;`</span></td>
+<td class="Hand" title="*" onclick="javascript: Set('*');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/dot.png" /></td>
+<td class="Hand" title="**" onclick="javascript: Set('**');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/star.png" /></td>
+<td class="Hand" title="//" onclick="javascript: Set('//');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/slash.png" /></td>
+<td class="Hand" title="\\" onclick="javascript: Set('\\\\');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/backslash.png" /></td>
+<td class="Hand" title="xx" onclick="javascript: Set('xx');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/times.png" /></td>
+<td class="Hand" title="-:" onclick="javascript: Set('-:');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/div.png" /></td>
+<td class="Hand" title="@" onclick="javascript: Set('@');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/circ.png" /></td>
+<td class="Hand" title="o+" onclick="javascript: Set('o+');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/oplus.png" /></td>
+<td class="Hand" title="ox" onclick="javascript: Set('ox');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/otimes.png" /></td>
+<td class="Hand" title="o." onclick="javascript: Set('o.');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/odot.png" /></td>
+<td class="Hand" title="sum" onclick="javascript: Set('sum');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/sum.png" /></td>
+<td class="Hand" title="prod" onclick="javascript: Set('prod');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/prod.png" /></td>
+<td class="Hand" title="^^" onclick="javascript: Set('^^');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/wedge.png" /></td>
+<td class="Hand" title="^^^" onclick="javascript: Set('^^^');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/bigwedge.png" /></td>
+<td class="Hand" title="vv" onclick="javascript: Set('vv');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/vee.png" /></td>
+<td class="Hand" title="vvv" onclick="javascript: Set('vvv');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/bigvee.png" /></td>
 </tr><tr>
-<td class="character" title="!=" onclick="javascript: Set('!=');">`!=`</td>
-<td class="character" title="&lt;=" onclick="javascript: Set('&lt;=');">`&lt;=`</td>
-<td class="character" title="&gt;=" onclick="javascript: Set('&gt;=');">`&gt;=`</td>
-<td class="character" title="-&lt;" onclick="javascript: Set('-&lt;');">`-&lt;`</td>
-<td class="character" title="&gt;-" onclick="javascript: Set('&gt;-');">`&gt;-`</td>
-<td class="character" title="in" onclick="javascript: Set('in');">`in`</td>
-<td class="character" title="!in" onclick="javascript: Set('!in');">`!in`</td>
-<td class="character" title="sub" onclick="javascript: Set('sub');">`sub`</td>
-<td class="character" title="sup" onclick="javascript: Set('sup');">`sup`</td>
-<td class="character" title="sube" onclick="javascript: Set('sube');">`sube`</td>
-<td class="character" title="supe" onclick="javascript: Set('supe');">`supe`</td>
-<td class="character" title="O/" onclick="javascript: Set('O/');">`O/`</td>
-<td class="character" title="nn" onclick="javascript: Set('nn');">`nn`</td>
-<td class="character" title="nnn" onclick="javascript: Set('nnn');"><span style="font-size:larger">`&cap;`</span></td>
-<td class="character" title="uu" onclick="javascript: Set('uu');">`uu`</td>
-<td class="character" title="uuu" onclick="javascript: Set('uuu');"><span style="font-size:larger">`&cup;`</span></td>
+<td class="Hand" title="!=" onclick="javascript: Set('!=');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ne.png" /></td>
+<td class="Hand" title="&lt;=" onclick="javascript: Set('&lt;=');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/le.png" /></td>
+<td class="Hand" title="&gt;=" onclick="javascript: Set('&gt;=');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ge.png" /></td>
+<td class="Hand" title="-&lt;" onclick="javascript: Set('-&lt;');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/prec.png" /></td>
+<td class="Hand" title="&gt;-" onclick="javascript: Set('&gt;-');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/succ.png" /></td>
+<td class="Hand" title="in" onclick="javascript: Set('in');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/in.png" /></td>
+<td class="Hand" title="!in" onclick="javascript: Set('!in');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/notin.png" /></td>
+<td class="Hand" title="sub" onclick="javascript: Set('sub');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/subset.png" /></td>
+<td class="Hand" title="sup" onclick="javascript: Set('sup');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/supset.png" /></td>
+<td class="Hand" title="sube" onclick="javascript: Set('sube');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/subseteq.png" /></td>
+<td class="Hand" title="supe" onclick="javascript: Set('supe');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/supseteq.png" /></td>
+<td class="Hand" title="O/" onclick="javascript: Set('O/');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/emptyset.png" /></td>
+<td class="Hand" title="nn" onclick="javascript: Set('nn');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/cap.png" /></td>
+<td class="Hand" title="nnn" onclick="javascript: Set('nnn');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/bigcap.png" /></td>
+<td class="Hand" title="uu" onclick="javascript: Set('uu');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/cup.png" /></td>
+<td class="Hand" title="uuu" onclick="javascript: Set('uuu');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/bigcup.png" /></td>
 </tr><tr>
-<td class="character" title="and" onclick="javascript: Set('and');">`and`</td>
-<td class="character" title="or" onclick="javascript: Set('or');">`or`</td>
-<td class="character" title="not" onclick="javascript: Set('not');">`not`</td>
-<td class="character" title="=&gt;" onclick="javascript: Set('==&gt;');">`=&gt;`</td>
-<td class="character" title="if" onclick="javascript: Set('if');">`if`</td>
-<td class="character" title="&lt;=&gt;" onclick="javascript: Set('&lt;=&gt;');">`&lt;=&gt;`</td>
-<td class="character" title="AA" onclick="javascript: Set('AA');">`AA`</td>
-<td class="character" title="EE" onclick="javascript: Set('EE');">`EE`</td>
-<td class="character" title="_|_" onclick="javascript: Set('_|_');">`_|_`</td>
-<td class="character" title="TT" onclick="javascript: Set('TT');">`TT`</td>
-<td class="character" title="|--" onclick="javascript: Set('|--');">`|--`</td>
-<td class="character" title="|==" onclick="javascript: Set('|==');">`|==`</td>
-<td class="character" title="-=" onclick="javascript: Set('-=');">`-=`</td>
-<td class="character" title="~=" onclick="javascript: Set('~=');">`~=`</td>
-<td class="character" title="~~" onclick="javascript: Set('~~');">`~~`</td>
-<td class="character" title="prop" onclick="javascript: Set('prop');">`prop`</td>
+<td class="Hand" title="and" onclick="javascript: Set('and');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/text_and.png" /></td>
+<td class="Hand" title="or" onclick="javascript: Set('or');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/text_or.png" /></td>
+<td class="Hand" title="not" onclick="javascript: Set('not');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/not.png" /></td>
+<td class="Hand" title="=&gt;" onclick="javascript: Set('=&gt;');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/rightarrow.png" /></td>
+<td class="Hand" title="if" onclick="javascript: Set('if');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/if.png" /></td>
+<td class="Hand" title="&lt;=&gt;" onclick="javascript: Set('&lt;=&gt;');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/leftrightarrow.png" /></td>
+<td class="Hand" title="AA" onclick="javascript: Set('AA');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/forall.png" /></td>
+<td class="Hand" title="EE" onclick="javascript: Set('EE');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/exists.png" /></td>
+<td class="Hand" title="_|_" onclick="javascript: Set('_|_');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/bot.png" /></td>
+<td class="Hand" title="TT" onclick="javascript: Set('TT');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/top.png" /></td>
+<td class="Hand" title="|--" onclick="javascript: Set('|--');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/vdash.png" /></td>
+<td class="Hand" title="|==" onclick="javascript: Set('|==');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/models.png" /></td>
+<td class="Hand" title="-=" onclick="javascript: Set('-=');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/equiv.png" /></td>
+<td class="Hand" title="~=" onclick="javascript: Set('~=');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/cong.png" /></td>
+<td class="Hand" title="~~" onclick="javascript: Set('~~');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/approx.png" /></td>
+<td class="Hand" title="prop" onclick="javascript: Set('prop');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/propto.png" /></td>
 </tr><tr>
-<td class="character" title="int" onclick="javascript: Set('int');">`int`</td>
-<td class="character" title="oint" onclick="javascript: Set('oint');">`oint`</td>
-<td class="character" title="del" onclick="javascript: Set('del');">`del`</td>
-<td class="character" title="grad" onclick="javascript: Set('grad');">`grad`</td>
-<td class="character" title="+-" onclick="javascript: Set('+-');">`+-`</td>
-<td class="character" title="oo" onclick="javascript: Set('oo');">`oo`</td>
-<td class="character" title="aleph" onclick="javascript: Set('aleph');">`aleph`</td>
-<td class="character" title="quad" onclick="javascript: Set('quad');">`quad`</td>
-<td class="character" title="diamond" onclick="javascript: Set('diamond');">`diamond`</td>
-<td class="character" title="square" onclick="javascript: Set('square');">`square`</td>
-<td class="character" title="|__" onclick="javascript: Set('|__');">`|__`</td>
-<td class="character" title="__|" onclick="javascript: Set('__|');">`__|`</td>
-<td class="character" title="|~" onclick="javascript: Set('|~');">`|~`</td>
-<td class="character" title="~|" onclick="javascript: Set('~|');">`~|`</td>
-<td class="character" title="&lt;x&gt;" onclick="javascript: Set('&lt;x&gt;');">`&lt;x&gt;`</td>
-<td class="character" title="/_" onclick="javascript: Set('/_');">`/_`</td>
+<td class="Hand" title="int" onclick="javascript: Set('int');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/int.png" /></td>
+<td class="Hand" title="oint" onclick="javascript: Set('oint');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/oint.png" /></td>
+<td class="Hand" title="del" onclick="javascript: Set('del');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/partial.png" /></td>
+<td class="Hand" title="grad" onclick="javascript: Set('grad');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/nabla.png" /></td>
+<td class="Hand" title="+-" onclick="javascript: Set('+-');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/pm.png" /></td>
+<td class="Hand" title="oo" onclick="javascript: Set('oo');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/infty.png" /></td>
+<td class="Hand" title="A\ B (space between A and B)" onclick="javascript: Set('A\\ B');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/space.png" /></td>
+<td class="Hand" title="AquadB (double space between A and B)" onclick="javascript: Set('AquadB');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/quad.png" /></td>
+<td class="Hand" title="diamond" onclick="javascript: Set('diamond');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/diamond.png" /></td>
+<td class="Hand" title="square" onclick="javascript: Set('square');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/square.png" /></td>
+<td class="Hand" title="|__" onclick="javascript: Set('|__');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/lfloor.png" /></td>
+<td class="Hand" title="__|" onclick="javascript: Set('__|');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/rfloor.png" /></td>
+<td class="Hand" title="|~" onclick="javascript: Set('|~');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/lceil.png" /></td>
+<td class="Hand" title="~|" onclick="javascript: Set('~|');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/rceil.png" /></td>
+<td class="Hand" title="&lt;&lt;x&gt;&gt;" onclick="javascript: Set('&lt;&lt;x&gt;&gt;');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/braxcket.png" /></td>
+<td class="Hand" title="/_" onclick="javascript: Set('/_');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/angle.png" /></td>
 </tr><tr>
-<td class="character" title="uarr" onclick="javascript: Set('uarr');">`uarr`</td>
-<td class="character" title="darr" onclick="javascript: Set('darr');">`darr`</td>
-<td class="character" title="larr" onclick="javascript: Set('larr');">`larr`</td>
-<td class="character" title="-&gt;" onclick="javascript: Set('-&gt;');">`-&gt;`</td>
-<td class="character" title="|-&gt;" onclick="javascript: Set('|-&gt;');">`|-&gt;`</td>
-<td class="character" title="harr" onclick="javascript: Set('harr');">`harr`</td>
-<td class="character" title="lArr" onclick="javascript: Set('lArr');">`lArr`</td>
-<td class="character" title="rArr" onclick="javascript: Set('rArr');">`rArr`</td>
-<td class="character" title="hArr" onclick="javascript: Set('hArr');">`hArr`</td>
-<td class="character" title="hata" onclick="javascript: Set('hat');">`hata`</td>
-<td class="character" title="ula" onclick="javascript: Set('ul');">`ula`</td>
-<td class="character" title="dota" onclick="javascript: Set('dot');">`dota`</td>
-<td class="character" title="ddota" onclick="javascript: Set('ddot');">`ddota`</td>
-<td class="character" title="veca" onclick="javascript: Set('vec');">`veca`</td>
-<td class="character" title="bara" onclick="javascript: Set('bar');">`bara`</td>
-<td class="character" title=":." onclick="javascript: Set(':.');">`:.`</td>
+<td class="Hand" title="uarr" onclick="javascript: Set('uarr');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/uarr.png" /></td>
+<td class="Hand" title="darr" onclick="javascript: Set('darr');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/darr.png" /></td>
+<td class="Hand" title="larr" onclick="javascript: Set('larr');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/larr.png" /></td>
+<td class="Hand" title="-&gt;" onclick="javascript: Set('-&gt;');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/rarr.png" /></td>
+<td class="Hand" title="|-&gt;" onclick="javascript: Set('|-&gt;');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/mapsto.png" /></td>
+<td class="Hand" title="harr" onclick="javascript: Set('harr');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/harr.png" /></td>
+<td class="Hand" title="lArr" onclick="javascript: Set('lArr');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/llarr.png" /></td>
+<td class="Hand" title="rArr" onclick="javascript: Set('rArr');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/rrarr.png" /></td>
+<td class="Hand" title="hArr" onclick="javascript: Set('hArr');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/hharr.png" /></td>
+<td class="Hand" title="hata" onclick="javascript: Set('hata');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/hata.png" /></td>
+<td class="Hand" title="ula" onclick="javascript: Set('ula');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ula.png" /></td>
+<td class="Hand" title="dota" onclick="javascript: Set('dota');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/dota.png" /></td>
+<td class="Hand" title="ddota" onclick="javascript: Set('ddota');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ddota.png" /></td>
+<td class="Hand" title="veca" onclick="javascript: Set('veca');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/veca.png" /></td>
+<td class="Hand" title="bara" onclick="javascript: Set('bara');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/bara.png" /></td>
+<td class="Hand" title=":." onclick="javascript: Set(':.');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/therefore.png" /></td>
 </tr><tr>
-<td class="character" title="NN" onclick="javascript: Set('NN');">`NN`</td>
-<td class="character" title="ZZ" onclick="javascript: Set('ZZ');">`ZZ`</td>
-<td class="character" title="QQ" onclick="javascript: Set('QQ');">`QQ`</td>
-<td class="character" title="RR" onclick="javascript: Set('RR');">`RR`</td>
-<td class="character" title="CC" onclick="javascript: Set('CC');">`CC`</td>
-<td class="character" title="bbA" onclick="javascript: Set('bb');">`bbA`</td>
-<td class="character" title="bbbA" onclick="javascript: Set('bbb');">`bbbA`</td>
-<td id="ccA" class="character" title="ccA" onclick="javascript: Set('cc');">`ccA`</td>
-<td id="frA" class="character" title="frA" onclick="javascript: Set('fr');">`frA`</td>
-<td class="character" title="sfA" onclick="javascript: Set('sf');">`sfA`</td>
-<td class="character" title="ttA" onclick="javascript: Set('tt');">`ttA`</td>
-<td colspan="4" class="character" title="stackrel(-&gt;)(+)" onclick="javascript: Set('stackrel(-&gt;)(+)');">`stackrel(-&gt;)(+)`</td>
-<td class="character" title="upsilon" onclick="javascript: Set('upsilon');">`upsilon`</td>
+<td class="Hand" title="NN" onclick="javascript: Set('NN');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/nn.png" /></td>
+<td class="Hand" title="ZZ" onclick="javascript: Set('ZZ');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/zz.png" /></td>
+<td class="Hand" title="QQ" onclick="javascript: Set('QQ');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/qq.png" /></td>
+<td class="Hand" title="RR" onclick="javascript: Set('RR');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/rr.png" /></td>
+<td class="Hand" title="CC" onclick="javascript: Set('CC');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/cc.png" /></td>
+<td class="Hand" title="bbA" onclick="javascript: Set('bbA');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/bba.png" /></td>
+<td class="Hand" title="bbbA" onclick="javascript: Set('bbbA');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/bbba.png" /></td>
+<td class="Hand" title="ccA" onclick="javascript: Set('ccA');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/cca.png" /></td>
+<td class="Hand" title="frA" onclick="javascript: Set('frA');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/fra.png" /></td>
+<td class="Hand" title="sfA" onclick="javascript: Set('sfA');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/sfa.png" /></td>
+<td class="Hand" title="ttA" onclick="javascript: Set('ttA');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/tta.png" /></td>
+<td colspan="3" class="Hand" title="stackrel(-&gt;)(+)" onclick="javascript: Set('stackrel(-&gt;)(+)');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/stackrel.png" /></td>
+<td class="Hand" title="aleph" onclick="javascript: Set('aleph');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/aleph.png" /></td>
+<td class="Hand" title="upsilon" onclick="javascript: Set('upsilon');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/upsilon.png" /></td>
 </tr><tr>
-<td class="character" title="alpha" onclick="javascript: Set('alpha');">`alpha`</td>
-<td class="character" title="beta" onclick="javascript: Set('beta');">`beta`</td>
-<td class="character" title="gamma" onclick="javascript: Set('gamma');">`gamma`</td>
-<td class="character" title="Gamma" onclick="javascript: Set('Gamma');">`Gamma`</td>
-<td class="character" title="delta" onclick="javascript: Set('delta');">`delta`</td>
-<td class="character" title="Delta" onclick="javascript: Set('Delta');">`Delta`</td>
-<td class="character" title="epsi" onclick="javascript: Set('epsi');">`epsi`</td>
-<td class="character" title="zeta" onclick="javascript: Set('zeta');">`zeta`</td>
-<td class="character" title="eta" onclick="javascript: Set('eta');">`eta`</td>
-<td class="character" title="theta" onclick="javascript: Set('theta');">`theta`</td>
-<td class="character" title="Theta" onclick="javascript: Set('Theta');">`Theta`</td>
-<td class="character" title="iota" onclick="javascript: Set('iota');">`iota`</td>
-<td class="character" title="kappa" onclick="javascript: Set('kappa');">`kappa`</td>
-<td class="character" title="lambda" onclick="javascript: Set('lambda');">`lambda`</td>
-<td class="character" title="Lambda" onclick="javascript: Set('Lambda');">`Lambda`</td>
-<td class="character" title="mu" onclick="javascript: Set('mu');">`mu`</td>
+<td class="Hand" title="alpha" onclick="javascript: Set('alpha');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/alpha.png" /></td>
+<td class="Hand" title="beta" onclick="javascript: Set('beta');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/beta.png" /></td>
+<td class="Hand" title="gamma" onclick="javascript: Set('gamma');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/gamma.png" /></td>
+<td class="Hand" title="Gamma" onclick="javascript: Set('Gamma');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ggamma.png" /></td>
+<td class="Hand" title="delta" onclick="javascript: Set('delta');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/delta.png" /></td>
+<td class="Hand" title="Delta" onclick="javascript: Set('Delta');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ddelta.png" /></td>
+<td class="Hand" title="epsi" onclick="javascript: Set('epsi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/epsilon.png" /></td>
+<td class="Hand" title="zeta" onclick="javascript: Set('zeta');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/zeta.png" /></td>
+<td class="Hand" title="eta" onclick="javascript: Set('eta');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/eta.png" /></td>
+<td class="Hand" title="theta" onclick="javascript: Set('theta');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/theta.png" /></td>
+<td class="Hand" title="Theta" onclick="javascript: Set('Theta');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ttheta.png" /></td>
+<td class="Hand" title="iota" onclick="javascript: Set('iota');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/iota.png" /></td>
+<td class="Hand" title="kappa" onclick="javascript: Set('kappa');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/kappa.png" /></td>
+<td class="Hand" title="lambda" onclick="javascript: Set('lambda');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/lambda.png" /></td>
+<td class="Hand" title="Lambda" onclick="javascript: Set('Lambda');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/llambda.png" /></td>
+<td class="Hand" title="mu" onclick="javascript: Set('mu');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/mu.png" /></td>
 </tr><tr>
-<td class="character" title="nu" onclick="javascript: Set('nu');">`nu`</td>
-<td class="character" title="pi" onclick="javascript: Set('pi');">`pi`</td>
-<td class="character" title="Pi" onclick="javascript: Set('Pi');">`Pi`</td>
-<td class="character" title="rho" onclick="javascript: Set('rho');">`rho`</td>
-<td class="character" title="sigma" onclick="javascript: Set('sigma');">`sigma`</td>
-<td class="character" title="Sigma" onclick="javascript: Set('Sigma');">`Sigma`</td>
-<td class="character" title="tau" onclick="javascript: Set('tau');">`tau`</td>
-<td class="character" title="xi" onclick="javascript: Set('xi');">`xi`</td>
-<td class="character" title="Xi" onclick="javascript: Set('Xi');">`Xi`</td>
-<td class="character" title="phi" onclick="javascript: Set('phi');">`phi`</td>
-<td class="character" title="Phi" onclick="javascript: Set('Phi');">`Phi`</td>
-<td class="character" title="chi" onclick="javascript: Set('chi');">`chi`</td>
-<td class="character" title="psi" onclick="javascript: Set('psi');">`psi`</td>
-<td class="character" title="Psi" onclick="javascript: Set('Psi');">`Psi`</td>
-<td class="character" title="omega" onclick="javascript: Set('omega');">`omega`</td>
-<td class="character" title="Omega" onclick="javascript: Set('Omega');">`Omega`</td>
+<td class="Hand" title="nu" onclick="javascript: Set('nu');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/nu.png" /></td>
+<td class="Hand" title="pi" onclick="javascript: Set('pi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/pi.png" /></td>
+<td class="Hand" title="Pi" onclick="javascript: Set('Pi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ppi.png" /></td>
+<td class="Hand" title="rho" onclick="javascript: Set('rho');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/rho.png" /></td>
+<td class="Hand" title="sigma" onclick="javascript: Set('sigma');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/sigma.png" /></td>
+<td class="Hand" title="Sigma" onclick="javascript: Set('Sigma');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ssigma.png" /></td>
+<td class="Hand" title="tau" onclick="javascript: Set('tau');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/tau.png" /></td>
+<td class="Hand" title="xi" onclick="javascript: Set('xi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/xi.png" /></td>
+<td class="Hand" title="Xi" onclick="javascript: Set('Xi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/xxi.png" /></td>
+<td class="Hand" title="phi" onclick="javascript: Set('phi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/phi.png" /></td>
+<td class="Hand" title="Phi" onclick="javascript: Set('Phi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/pphi.png" /></td>
+<td class="Hand" title="chi" onclick="javascript: Set('chi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/chi.png" /></td>
+<td class="Hand" title="psi" onclick="javascript: Set('psi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/psi.png" /></td>
+<td class="Hand" title="Psi" onclick="javascript: Set('Psi');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/ppsi.png" /></td>
+<td class="Hand" title="omega" onclick="javascript: Set('omega');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/omega.png" /></td>
+<td class="Hand" title="Omega" onclick="javascript: Set('Omega');" onmouseover="javascript: over(this);" onmouseout="javascript: out(this);"><img src="images/oomega.png" /></td>
 </tr>
 </table>
 <form action="javascript: void(0);">
@@ -240,10 +233,10 @@ Original Author - Bernhard Pfeifer novocaine@gmx.net
 </table>
 <table style="width: 100%; border: none;">
   <tr>
-    <td style="width:50%;" >
+    <td style="width:50%; min-width: 300px; max-width: 435px;">
     <textarea id="inputText" onkeyup="javascript: Preview();"></textarea>
     </td>
-    <td style="width:50%;" >
+    <td style="width:50%; min-width: 300px; max-width: 435px;">
     <div id="outputNode"></div>
     </td>
   </tr>
@@ -252,16 +245,6 @@ Original Author - Bernhard Pfeifer novocaine@gmx.net
 <a href="http://www.chapman.edu" onclick="javascript: window.open(this.href,'_blank','');return false;">Chapman University</a><br />
   <span fckLang="DlgAsciiMathForMoreInfo">For more information on AsciiMathML visit this page: </span><a href="http://www1.chapman.edu/~jipsen/mathml/asciimath.html" onclick="javascript: window.open(this.href,'_blank','');return false;">http://www1.chapman.edu/~jipsen/mathml/asciimath.html</a></td></tr>
 </table>
-
-<div id="buttons">
-<script type="text/javascript">
-if ( !CheckBrowserCompatibility() )
-{
-	CheckBrowserCompatibility( true ) ;
-}
-</script>
-</div>
 </form>
-
 </body>
 </html>

+ 11 - 74
main/inc/lib/fckeditor/editor/plugins/asciimath/fck_asciimath.js

@@ -36,6 +36,8 @@ FCKLang['DlgAsciiMathOldMathPlayer'] = FCKLang['DlgAsciiMathOldMathPlayer'] ? FC
 FCKLang['DlgAsciiMathOldMathPlayer'] = FCKLang['DlgAsciiMathOldMathPlayer'].replace( '%s', '<a href="http://www.dessci.com/en/products/mathplayer/" onclick="javascript: window.open(this.href,\'_blank\');return false;">http://www.dessci.com/en/products/mathplayer/</a>' ) ;
 
 // Settings for ASCIIMathML.js
+// Checking for native MathML support, it is always needed for this dialog.
+var checkForMathML = true;
 // Suppressing the built-in notification messages when the browser is incompatible.
 var notifyIfNoMathML = false ;
 var alertIfNoMathML = false ;
@@ -102,14 +104,11 @@ function Ok()
 
 window.onload = function()
 {
-	geckoFontWorkaround() ;
-
 	// Translate the dialog box texts.
 	oEditor.FCKLanguageManager.TranslatePage( document ) ;
 
-	// Translate the formulas.
-	translateOnLoad = true ;
-	generic() ;
+	// Initialization of the script ASCIIMathML.js.
+	init() ;
 
 	// Load the selected element information (if any).
 	LoadSelection() ;
@@ -270,76 +269,14 @@ function ShowMathML()
 	}
 }
 
-function CheckBrowserCompatibility( show_message )
-{
-	/*
-	if ( FCKBrowserInfo.IsGecko )
-	{
-		// The browser is compatible, it is genuine Gecko - Firefox, etc.
-		return true ;
-	}
-	else if ( FCKBrowserInfo.IsIE )
-	{
-		// Internet Explorer.
-		if ( FCKBrowserInfo.IsIE6 )
-		{
-			if ( isMathPlayerAvailable )
-			{
-				var start = navigator.appVersion.indexOf( 'MathPlayer' ) ;
-				if ( start != -1 )
-				{
-					// The browser is Internet Explorer 6.0+ with properly set up plugin MathPalyer 2.
-					return true ;
-				}
-				else
-				{
-					// Notify reader they need to upgrade to MathPlayer 2.
-					if ( show_message )
-					{
-						document.write( '<span style="color:red;">' + FCKLang['DlgAsciiMathOldMathPlayer'] + '</span>' ) ;
-					}
-					return false ;
-				}
-			}
-			else
-			{
-				// Direct reader to MathPlayer page.
-				if ( show_message )
-				{
-					document.write( '<span style="color:red;">' + FCKLang['DlgAsciiMathInstallMathPlayer'] + '</span>' ) ;
-				}
-				return false ;
-			}
-		}
-		else
-		{
-			// The browser is a very old version of Internet Explorer, it have to be upgraded.
-			if ( show_message )
-			{
-				document.write( '<span style="color:red;">' + FCKLang['DlgAsciiMathOldIE'] + '</span>' ) ;
-			}
-			return false ;
-		}
-	}
-	else if ( FCKBrowserInfo.IsOpera && parseFloat( navigator.appVersion, 10 ) >= 9.5 )
-	{
-		return true ;
-	}
+// Highlighting formulas.
 
-	// The browser is not compatible.
-	if ( show_message )
-	{
-		document.write( '<span style="color:red;">' + FCKLang['DlgAsciiIncompatibleBrowser'] + '</span>' ) ;
-	}
-	return false ;
-	*/
-	return true ;
+function over(td)
+{
+	td.className = 'LightBackground Hand' ;
 }
 
-// Excludig from the table some characters with buggy fonts (wrong height).
-function geckoFontWorkaround() {
-	if ( FCKBrowserInfo.IsGecko ) {
-		GetE( 'ccA' ).innerHTML = GetE( 'ccA' ).innerHTML.replace( /`/g, '' ) ;
-		GetE( 'frA' ).innerHTML = GetE( 'frA' ).innerHTML.replace( /`/g, '' ) ;
-	}
+function out(td)
+{
+	td.className = 'Hand' ;
 }

+ 1 - 1
main/inc/lib/fckeditor/editor/plugins/asciimath/fckplugin.js

@@ -25,7 +25,7 @@ var alertIfNoSVG = false;
 var translateASCIIMath = false ;
 
 // Registering the related command.
-FCKCommands.RegisterCommand( 'asciimath', new FCKDialogCommand( FCKLang['DlgAsciiMath'], FCKLang['DlgAsciiMath'], FCKConfig.PluginsPath + 'asciimath/fck_asciimath.html', 800, 630 ) ) ;
+FCKCommands.RegisterCommand( 'asciimath', new FCKDialogCommand( FCKLang['DlgAsciiMath'], FCKLang['DlgAsciiMath'], FCKConfig.PluginsPath + 'asciimath/fck_asciimath.html', 800, 610 ) ) ;
 
 // Create the "asciimath" toolbar button.
 var oAsciiMathItem = new FCKToolbarButton( 'asciimath', FCKLang['DlgAsciiMath'] ) ;

File diff suppressed because it is too large
+ 0 - 0
main/inc/lib/fckeditor/editor/plugins/asciimath/fckplugin_compressed.js


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/abcd.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/aleph.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/alpha.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/angle.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/approx.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/backslash.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/bara.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/bba.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/bbba.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/beta.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/bigcap.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/bigcup.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/bigvee.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/bigwedge.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/bot.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/braxcket.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/cap.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/cc.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/cca.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/chi.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/circ.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/cong.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/cup.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/darr.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/ddelta.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/ddota.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/delta.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/diamond.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/div.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/dot.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/dota.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/dydx.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/emptyset.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/epsilon.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/equiv.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/eta.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/exists.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/forall.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/fra.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/gamma.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/ge.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/ggamma.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/harr.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/hata.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/hharr.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/if.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/ifx.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/in.png


+ 8 - 0
main/inc/lib/fckeditor/editor/plugins/asciimath/images/index.html

@@ -0,0 +1,8 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+</head>
+<body>
+<br />
+</body>
+</html>

BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/infty.png


BIN
main/inc/lib/fckeditor/editor/plugins/asciimath/images/int.png


Some files were not shown because too many files changed in this diff