Browse Source

Merge 1.11.x

jmontoyaa 8 years ago
parent
commit
1decbe6820
58 changed files with 1909 additions and 645 deletions
  1. 13 1
      app/Migrations/Schema/V111/Version111.php
  2. 47 48
      app/Resources/public/css/base.css
  3. 27 1
      app/Resources/public/css/editor.css
  4. 15 90
      app/Resources/public/css/themes/chamilo/default.css
  5. 8 0
      main/admin/course_export.php
  6. 18 11
      main/admin/course_import.php
  7. 81 48
      main/forum/forumfunction.inc.php
  8. 1 1
      main/forum/index.php
  9. 10 11
      main/forum/newthread.php
  10. 22 43
      main/forum/reply.php
  11. BIN
      main/img/icons/22/icon-chamilo.png
  12. 76 0
      main/img/icons/svg/icon-chamilo.svg
  13. 1 1
      main/inc/lib/add_course.lib.inc.php
  14. 18 3
      main/inc/lib/course.lib.php
  15. 4 2
      main/inc/lib/database.lib.php
  16. 2 0
      main/inc/lib/export.lib.inc.php
  17. 1 0
      main/inc/lib/import.lib.php
  18. 3 3
      main/inc/lib/message.lib.php
  19. 2 1
      main/inc/lib/plugin.lib.php
  20. 5 6
      main/inc/lib/surveymanager.lib.php
  21. 4 4
      main/inc/lib/template.lib.php
  22. 1 1
      main/inc/lib/usermanager.lib.php
  23. 2 2
      main/inc/lib/userportal.lib.php
  24. 37 0
      main/lang/brazilian/trad4all.inc.php
  25. 159 72
      main/lang/dutch/trad4all.inc.php
  26. 4 2
      main/lang/english/trad4all.inc.php
  27. 2 0
      main/lang/french/trad4all.inc.php
  28. 188 7
      main/lang/portuguese/trad4all.inc.php
  29. 145 0
      main/lang/slovenian/trad4all.inc.php
  30. 4 2
      main/lang/spanish/trad4all.inc.php
  31. 11 18
      main/survey/preview.php
  32. 9 8
      main/survey/reporting.php
  33. 173 120
      main/survey/survey.lib.php
  34. 2 4
      main/survey/survey.php
  35. 1 4
      main/survey/survey_list.php
  36. 7 0
      main/template/default/layout/footer.tpl
  37. 3 6
      main/template/default/layout/header.js.tpl
  38. 20 34
      main/template/default/layout/main_header.tpl
  39. 4 2
      main/template/default/layout/menu.tpl
  40. 2 15
      main/template/default/layout/topbar.tpl
  41. 10 6
      main/template/default/user_portal/classic_session.tpl
  42. 6 3
      main/template/default/user_portal/grid_session.tpl
  43. 8 0
      plugin/courseblock/CourseBlockPlugin.php
  44. 1 0
      plugin/courseblock/lang/english.php
  45. 1 1
      plugin/ticket/src/categories.php
  46. 1 61
      plugin/tour/intro.js/introjs.min.css
  47. 1 1
      src/Chamilo/CoreBundle/Entity/SkillRelUserComment.php
  48. 7 1
      src/Chamilo/SkillBundle/Entity/Level.php
  49. 1 1
      src/Chamilo/SkillBundle/Entity/Profile.php
  50. 57 0
      src/Chamilo/TicketBundle/Entity/AssignedLog.php
  51. 91 0
      src/Chamilo/TicketBundle/Entity/Category.php
  52. 44 0
      src/Chamilo/TicketBundle/Entity/CategoryRelUser.php
  53. 83 0
      src/Chamilo/TicketBundle/Entity/Message.php
  54. 93 0
      src/Chamilo/TicketBundle/Entity/MessageAttachment.php
  55. 82 0
      src/Chamilo/TicketBundle/Entity/Priority.php
  56. 83 0
      src/Chamilo/TicketBundle/Entity/Project.php
  57. 41 0
      src/Chamilo/TicketBundle/Entity/Status.php
  58. 167 0
      src/Chamilo/TicketBundle/Entity/Ticket.php

+ 13 - 1
app/Migrations/Schema/V111/Version111.php

@@ -144,8 +144,20 @@ class Version111 extends AbstractMigrationChamilo
             $this->addSql('UPDATE plugin_ticket_ticket t INNER JOIN plugin_ticket_message as m  ON(t.ticket_id = m.ticket_id and message_id =1)  SET t.subject = m.subject');
             $this->addSql('UPDATE plugin_ticket_ticket t INNER JOIN plugin_ticket_message as m  ON(t.ticket_id = m.ticket_id and message_id =1)  SET t.message = m.message');
             $this->addSql('DELETE FROM plugin_ticket_message WHERE message_id = 1');
+
+            $this->addSql('RENAME TABLE plugin_ticket_assigned_log TO ticket_assigned_log');
+            $this->addSql('RENAME TABLE plugin_ticket_category TO ticket_category');
+            $this->addSql('RENAME TABLE plugin_ticket_category_rel_user TO ticket_category_rel_user');
+            $this->addSql('RENAME TABLE plugin_ticket_message TO ticket_message');
+            $this->addSql('RENAME TABLE plugin_ticket_message_attachments TO ticket_message_attachments');
+            $this->addSql('RENAME TABLE plugin_ticket_priority TO ticket_priority');
+            $this->addSql('RENAME TABLE plugin_ticket_project TO ticket_project');
+            $this->addSql('RENAME TABLE plugin_ticket_status TO ticket_status');
+            $this->addSql('RENAME TABLE plugin_ticket_ticket TO ticket_ticket');
         }
-}    /**
+    }
+
+    /**
      * @param Schema $schema
      */
     public function postUp(Schema $schema)

+ 47 - 48
app/Resources/public/css/base.css

@@ -17,9 +17,6 @@ html,body {
   padding: 0;
   height: 100%;
 }
-header{
-  padding-top: 20px;
-}
 #page-wrap{
   min-height: 100%;
   margin-bottom: 0;
@@ -221,43 +218,22 @@ a.thumbnail:hover{
   padding-top: 10px;
   margin-bottom: 20px;
 }
-ul#navigation {
+/* notifications help and bug */
+.notification-panel {
   position: fixed;
-  margin: 0px;
-  padding: 0px;
   top: 280px;
   right: -10px;
-  list-style: none;
   z-index:9999;
-}
-ul#navigation li {
   width: 73px;
 }
-ul#navigation li a {
+.notification-panel div a{
   display: block;
   margin-left: 1px;
   width: 65px;
-  opacity: 0.6;
-  filter:progid:DXImageTransform.Microsoft.Alpha(opacity=60);
-  -webkit-box-shadow: 0px 4px 3px #000;
-}
-#touch-button.btn-touch{
-  background-color: #C2C2C2;
-}
-#touch-button.btn-touch:hover{
-  background-color: #E9E9F0;
-}
-#touch-button.btn-touch{
-  background-color: #EFEFEF;
-  -webkit-border-top-right-radius: 5px;
-  -webkit-border-bottom-right-radius: 5px;
-  -moz-border-radius-topright: 5px;
-  -moz-border-radius-bottomright: 5px;
-  border-top-right-radius: 5px;
-  border-bottom-right-radius: 5px;
+  opacity: 0.8;
+  filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80);
 }
-
-ul#navigation .help a {
+.notification-panel .help a {
   background-color:#879DAA;
   border:1px solid #FFFFFF;
   display:block;
@@ -266,7 +242,7 @@ ul#navigation .help a {
   width:65px;
   padding: 6px 0 8px 6px;
 }
-ul#navigation .report a {
+.notification-panel .report a {
   background-color:#8fd400;
   border:1px solid #FFFFFF;
   display:block;
@@ -275,6 +251,44 @@ ul#navigation .report a {
   width:65px;
   padding: 6px 0 8px 6px;
 }
+.cookieUsageValidation {
+    padding: 5px;
+    text-align:center;
+}
+.toolbar-cookie{
+    bottom: 0;
+    position: fixed;
+    z-index: 100;
+    width: 100%;
+}
+.avatar-user .dropdown-toggle{
+    padding-top: 8px;
+    padding-bottom: 5px;
+}
+.avatar-user .img-circle{
+    border: 2px solid #FFFFFF;
+}
+.dropdown-menu .username{
+    color: #fff;
+    padding-left: 9px;
+}
+/* notifications help and bug */
+#touch-button.btn-touch{
+  background-color: #C2C2C2;
+}
+#touch-button.btn-touch:hover{
+  background-color: #E9E9F0;
+}
+#touch-button.btn-touch{
+  background-color: #EFEFEF;
+  -webkit-border-top-right-radius: 5px;
+  -webkit-border-bottom-right-radius: 5px;
+  -moz-border-radius-topright: 5px;
+  -moz-border-radius-bottomright: 5px;
+  border-top-right-radius: 5px;
+  border-bottom-right-radius: 5px;
+}
+
 #gradebook_list .centered {
     text-align:center;
     vertical-align:middle;
@@ -3431,17 +3445,6 @@ i.size-32.icon-new-work{
 }
 
 /* display the cookie usage warning validation */
-.cookieUsageValidation {
-    padding: 5px;
-    background-color: #333333;
-    color:#E0E0E0;
-    text-align:center;
-}
-
-.displayUnderToolbar
-{
-    height: 52px;
-}
 
 #settings .panel .admin-edit-block {
     display: none;
@@ -3450,10 +3453,6 @@ i.size-32.icon-new-work{
     display: block;
 }
 
-#settings .span6:nth-child(2n+1) {
-    clear:left
-}
-
 /***** Survey *****/
 #list-survey p{
   display: inline-block;
@@ -4728,12 +4727,12 @@ div#chat-remote-video video {
     box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
     text-align: left;
     background-color: #fff;
-    min-height: 235px;
+    min-height: 250px;
     border: 1px solid #DFDFDF;
     border-radius: 5px;
 }
 .hot-courses .grid-courses .items{
-   min-height: 275px;
+   min-height: 300px;
 }
 .grid-courses .items .title{
     line-height: 1.4;

+ 27 - 1
app/Resources/public/css/editor.css

@@ -6,9 +6,35 @@
         alex.aragon@beeznest.com
     Version: 1.0
 */
-@import url(//fonts.googleapis.com/css?family=Open+Sans:400,300,600,300italic,400italic);
+
 @import url(../assets/fontawesome/css/font-awesome.min.css);
 
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(themes/chamilo/fonts/OpenSans-Light.woff2) format('woff2'), url(fonts/OpenSans-Light.woff) format('woff');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(themes/chamilo/fonts/OpenSans.woff2) format('woff2'), url(fonts/OpenSans.woff) format('woff');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(themes/chamilo/fonts/OpenSans-Semibold.woff2) format('woff2'), url(fonts/OpenSans-Semibold.woff) format('woff');
+}
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(themes/chamilo/fonts/OpenSans-Bold.woff2) format('woff2'), url(fonts/OpenSans-Bold.woff) format('woff');
+}
+
+
 body{
     color: #666;
     font-family: 'Open Sans', sans-serif;

+ 15 - 90
app/Resources/public/css/themes/chamilo/default.css

@@ -29,18 +29,10 @@
   font-weight: 700;
   src: local('Open Sans Bold'), local('OpenSans-Bold'), url(fonts/OpenSans-Bold.woff2) format('woff2'), url(fonts/OpenSans-Bold.woff) format('woff');
 }
-
-
-html {
-  -ms-text-size-adjust: 100%;
-  -webkit-text-size-adjust: 100%;
-}
 body {
   margin: 0;
   font-family: 'Open Sans', sans-serif;
-  line-height: 1.72222;
 }
-
 a {
   color: #00829C;
   text-decoration: none;
@@ -58,35 +50,14 @@ a:focus {
   -moz-border-radius: 0;
   -webkit-border-radius: 0;
 }
-.navbar {
+.navbar-collapse{
+  overflow: hidden !important;
+}
+.navbar-default {
   background: #2E75A3;
   -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
   box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
 }
-.navbar-inverse{
-  background-image: -webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);
-  background-image: -o-linear-gradient(#484e55, #3a3f44 60%, #313539);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));
-  background-image: linear-gradient(#484e55, #3a3f44 60%, #313539);
-  background-repeat: no-repeat;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);
-  -webkit-filter: none;
-  filter: none;
-  border: 1px solid rgba(0, 0, 0, 0.6);
-  text-shadow: none;
-}
-.nav li a{
-   padding: 10px 15px;
-}
-.navbar-nav li a{
-  font-weight: normal;
-  line-height: 22px;
-  padding-top: 12.5px;
-  padding-bottom: 12.5px;
-}
-.navbar-collapse{
-  overflow: hidden !important;
-}
 .navbar-default .navbar-nav > li > a:focus,
 .navbar-default .navbar-nav > li > a:hover {
   color: #A4DC2D;
@@ -131,55 +102,25 @@ a:focus {
 .nav > li > a:hover, .nav > li > a:focus{
    background-color: transparent;
 }
-
-.navbar-inverse li a{
-  line-height: 30px;
-  background: none !important;
-  font-size: 12px;
-  font-weight: normal;
-  padding-top: 5px;
-  padding-right: 10px;
-  padding-left: 10px;
-  padding-bottom: 5px;
-}
-.navbar-fixed-top .navbar-collapse{
-  min-height:auto;
-}
-.navbar-inverse .navbar-brand{
-  padding: 10px;
-  font-size: 14px;
-  height: auto;
-}
 .navbar-form .form-control{
   height: 25px;
   padding: 6px;
 }
-.navbar-fixed-top{
-  min-height: 40px;
+.navbar-default .navbar-brand {
+  color:white;
 }
-.navbar-fixed-top .dropdown-menu li a{
-  line-height: 20px;
+.navbar-default .navbar-collapse, .navbar-default .navbar-form{
+  border-color: #00677C;
 }
-.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus{
-  color: #ffffff;
+.navbar-default .navbar-toggle{
+  border-color: #00677C;
 }
-.navbar-inverse li a:hover {
-  background-image: -webkit-linear-gradient(#020202, #101112 40%, #191b1d) !important;
-  background-image: -o-linear-gradient(#020202, #101112 40%, #191b1d) !important;
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#191b1d)) !important;
-  background-image: linear-gradient(#020202, #101112 40%, #191b1d) !important;
-  background-repeat: no-repeat !important;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff191b1d', GradientType=0) !important;
-  -webkit-filter: none !important;
-  filter: none !important;
-  border-left-color: transparent !important;
-}
-.navbar-inverse .dropdown-menu li a:hover,
-.navbar-inverse .dropdown-menu li a:focus{
-  background:#3C4147 !important;
-  color: #fff;
+.navbar-default .navbar-toggle .icon-bar{
+  background-color: #ffffff;
+}
+.navbar-default .navbar-toggle:focus, .navbar-default .navbar-toggle:hover{
+  background-color: #00677C;
 }
-
 .badge-warning{
   background-color: #FD6600;
 }
@@ -220,22 +161,6 @@ footer{
 footer a{
   color: #ffffff;
 }
-
-.navbar-default .navbar-brand {
-  color:white;
-}
-.navbar-default .navbar-collapse, .navbar-default .navbar-form{
-  border-color: #00677C;
-}
-.navbar-default .navbar-toggle{
-  border-color: #00677C;
-}
-.navbar-default .navbar-toggle .icon-bar{
-  background-color: #ffffff;
-}
-.navbar-default .navbar-toggle:focus, .navbar-default .navbar-toggle:hover{
-  background-color: #00677C;
-}
 .page-header{
   margin: 10px 0 10px;
 }

+ 8 - 0
main/admin/course_export.php

@@ -54,6 +54,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) {
             'Code',
             'Title',
             'CourseCategory',
+            'CourseCategoryName',
             'Teacher',
             'Language',
             'Users',
@@ -61,10 +62,17 @@ if (isset($_POST['formSent']) && $_POST['formSent']) {
         ];
 
         $dataToExport = [];
+
         foreach ($courses as $course) {
             $dataToExport['code'] = str_replace(';',',',$course['code']);
             $dataToExport['title'] = str_replace(';',',',$course['title']);
             $dataToExport['category_code'] = str_replace(';',',',$course['category_code']);
+            $categoryInfo = CourseCategory::getCategory($course['category_code']);
+            if ($categoryInfo) {
+                $dataToExport['category_name'] = str_replace(';',',',$categoryInfo['name']);
+            } else {
+                $dataToExport['category_name'] = '';
+            }
             $dataToExport['tutor_name'] = str_replace(';',',',$course['tutor_name']);
             $dataToExport['course_language'] = str_replace(';',',',$course['course_language']);
 

+ 18 - 11
main/admin/course_import.php

@@ -9,6 +9,9 @@
 
 /**
  * Validates imported data.
+ *
+ * @param array $courses
+ * @return array $errors
  */
 function validate_data($courses)
 {
@@ -20,14 +23,14 @@ function validate_data($courses)
         // 1. Check whether mandatory fields are set.
         $mandatory_fields = array ('Code', 'Title', 'CourseCategory');
         foreach ($mandatory_fields as $field) {
-            if (!isset($course[$field]) || strlen($course[$field]) == 0) {
+            if (empty($course[$field])) {
                 $course['error'] = get_lang($field.'Mandatory');
                 $errors[] = $course;
             }
         }
 
         // 2. Check current course code.
-        if (isset ($course['Code']) && strlen($course['Code']) != 0) {
+        if (!empty($course['Code'])) {
             // 2.1 Check whether code has been already used by this CVS-file.
             if (isset($coursecodes[$course['Code']])) {
                 $course['error'] = get_lang('CodeTwiceInFile');
@@ -61,12 +64,14 @@ function validate_data($courses)
             }
         }
 
-        // 4. Check whether course category exists.
-        if (isset($course['CourseCategory']) && strlen($course['CourseCategory']) != 0) {
+        if(!empty($course['CourseCategory'])) {
             $categoryInfo = CourseCategory::getCategory($course['CourseCategory']);
             if (empty($categoryInfo)) {
-                CourseCategory::addNode($course['CourseCategory'], $course['CourseCategory'], 'TRUE', null);
+                CourseCategory::addNode($course['CourseCategory'], $course['CourseCategoryName'] ? $course['CourseCategoryName'] : $course['CourseCategory'], 'TRUE', null);
             }
+        } else {
+            $course['error'] = get_lang('NoCourseCategorySupplied');
+            $errors[] = $course;
         }
     }
 
@@ -74,8 +79,9 @@ function validate_data($courses)
 }
 
 /**
- * @param array $teachers
+ * Get the teacher list
  *
+ * @param array $teachers
  * @return array
  */
 function getTeacherListInArray($teachers)
@@ -149,7 +155,7 @@ function save_data($courses)
  */
 function parse_csv_data($file)
 {
-    $courses = Import::csvToArray($file);
+    $courses = Import::csv_reader($file);
     return $courses;
 }
 
@@ -186,6 +192,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) {
             Display :: display_error_message(get_lang('YouMustImportAFileAccordingToSelectedOption'));
         } else {
             $courses = parse_csv_data($_FILES['import_file']['tmp_name']);
+
             $errors = validate_data($courses);
             if (count($errors) == 0) {
                 save_data($courses);
@@ -219,10 +226,10 @@ $form->display();
 
 <blockquote>
 <pre>
-<strong>Code</strong>;<strong>Title</strong>;<strong>CourseCategory</strong>;Teacher;Language
-BIO0015;Biology;BIO;teacher1;english
-BIO0016;Maths;MATH;teacher2|teacher3;english
-BIO0017;Language;LANG;;english
+<strong>Code</strong>;<strong>Title</strong>;<strong>CourseCategory</strong>;<strong>CourseCategoryName</strong>;Teacher;Language
+BIO0015;Biology;BIO;Science;teacher1;english
+BIO0016;Maths;MATH;Engineerng;teacher2|teacher3;english
+BIO0017;Language;LANG;;;english
 </pre>
 </blockquote>
 

+ 81 - 48
main/forum/forumfunction.inc.php

@@ -2386,14 +2386,14 @@ function updateThread($values)
  * @param array $values
  * @param array $courseInfo
  * @param bool $showMessage
- * @return void HTML
+ * @return int
  *
  * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
  * @version february 2006, dokeos 1.8
  */
 function store_thread($current_forum, $values, $courseInfo = array(), $showMessage = true)
 {
-    $courseInfo = empty($courseInfo) ? api_get_course_info() : $courseInfo ;
+    $courseInfo = empty($courseInfo) ? api_get_course_info() : $courseInfo;
     $_user = api_get_user_info();
     $course_id = $courseInfo['real_id'];
     $courseCode = $courseInfo['code'];
@@ -2411,7 +2411,6 @@ function store_thread($current_forum, $values, $courseInfo = array(), $showMessa
     }
 
     if ($upload_ok) {
-
         $post_date = api_get_utc_datetime();
 
         if ($current_forum['approval_direct_post'] == '1' && !api_is_allowed_to_edit(null, true)) {
@@ -2547,7 +2546,7 @@ function store_thread($current_forum, $values, $courseInfo = array(), $showMessa
                 editAttachedFile(
                     array(
                         'comment' => $_POST['file_comments'][$key],
-                        'post_id' => $last_post_id,
+                        'post_id' => $last_post_id
                     ),
                     $id
                 );
@@ -2592,10 +2591,13 @@ function store_thread($current_forum, $values, $courseInfo = array(), $showMessa
 
         if ($current_forum['approval_direct_post'] == '1' && !api_is_allowed_to_edit(null, true)) {
             $message .= get_lang('MessageHasToBeApproved').'<br />';
-            $message .= get_lang('ReturnTo').' <a href="viewforum.php?'.api_get_cidreq().'&forum='.$values['forum_id'].'">'.get_lang('Forum').'</a><br />';
+            $message .= get_lang('ReturnTo').' <a href="viewforum.php?'.api_get_cidreq().'&forum='.$values['forum_id'].'">'.
+                get_lang('Forum').'</a><br />';
         } else {
-            $message .= get_lang('ReturnTo').' <a href="viewforum.php?'.api_get_cidreq().'&forum='.$values['forum_id'].'">'.get_lang('Forum').'</a><br />';
-            $message .= get_lang('ReturnTo').' <a href="viewthread.php?'.api_get_cidreq().'&forum='.$values['forum_id'].'&gradebook='.$gradebook.'&thread='.$last_thread_id.'">'.get_lang('Message').'</a>';
+            $message .= get_lang('ReturnTo').' <a href="viewforum.php?'.api_get_cidreq().'&forum='.$values['forum_id'].'">'.
+                get_lang('Forum').'</a><br />';
+            $message .= get_lang('ReturnTo').' <a href="viewthread.php?'.api_get_cidreq().'&forum='.$values['forum_id'].'&gradebook='.$gradebook.'&thread='.$last_thread_id.'">'.
+                get_lang('Message').'</a>';
         }
         $reply_info['new_post_id'] = $last_post_id;
         $my_post_notification = isset($values['post_notification']) ? $values['post_notification'] : null;
@@ -2611,13 +2613,12 @@ function store_thread($current_forum, $values, $courseInfo = array(), $showMessa
         Session::erase('breadcrumbs');
         Session::erase('addedresource');
         Session::erase('addedresourceid');
-        if ($showMessage) {
-            Display:: display_confirmation_message($message, false);
-        }
+
+        Display::addFlash(Display::return_message($message, 'success', false));
+        return $last_thread_id;
+
     } else {
-        if ($showMessage) {
-            Display::display_error_message(get_lang('UplNoFileUploaded'));
-        }
+        Display::addFlash(Display::return_message(get_lang('UplNoFileUploaded'), 'error', false));
     }
 }
 
@@ -2632,8 +2633,6 @@ function store_thread($current_forum, $values, $courseInfo = array(), $showMessa
  */
 function showUpdateThreadForm($currentForum, $forumSetting, $formValues = '')
 {
-    $userInfo = api_get_user_info();
-
     $myThread = isset($_GET['thread']) ? intval($_GET['thread']) : '';
     $myForum = isset($_GET['forum']) ? intval($_GET['forum']) : '';
     $myGradebook = isset($_GET['gradebook']) ? Security::remove_XSS($_GET['gradebook']) : '';
@@ -2763,35 +2762,40 @@ function showUpdateThreadForm($currentForum, $forumSetting, $formValues = '')
  *  2. replythread: Replying to a thread ($action = replythread) => I-frame with the complete thread (if enabled)
  *  3. replymessage: Replying to a message ($action =replymessage) => I-frame with the complete thread (if enabled) (I first thought to put and I-frame with the message only)
  *  4. quote: Quoting a message ($action= quotemessage) => I-frame with the complete thread (if enabled). The message will be in the reply. (I first thought not to put an I-frame here)
- * @return void HMTL
+ * @return FormValidator
  * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
  * @version february 2006, dokeos 1.8
  */
-function show_add_post_form($current_forum, $forum_setting, $action = '', $id = '', $form_values = '')
+function show_add_post_form($current_forum, $forum_setting, $action, $id = '', $form_values = '')
 {
     $_user = api_get_user_info();
-    $action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : null;
-    $myThread = isset($_GET['thread']) ? $_GET['thread'] : '';
-    $my_forum = isset($_GET['forum']) ? $_GET['forum'] : '';
-    $my_post = isset($_GET['post']) ? $_GET['post'] : '';
+    $action = isset($action) ? Security::remove_XSS($action) : '';
+    $myThread = isset($_GET['thread']) ? (int) $_GET['thread'] : '';
+    $forumId = isset($_GET['forum']) ? (int) $_GET['forum'] : '';
+    $my_post = isset($_GET['post']) ? (int) $_GET['post'] : '';
     $my_gradebook = isset($_GET['gradebook']) ? Security::remove_XSS($_GET['gradebook']) : '';
+
+    $url = api_get_self() . '?' . http_build_query([
+        'action' => $action,
+        'forum' => $forumId,
+        'gradebook' => $my_gradebook,
+        'thread' => $myThread,
+        'post' => $my_post
+    ]) . '&' . api_get_cidreq();
+
     $form = new FormValidator(
         'thread',
         'post',
-        api_get_self() . '?' . http_build_query([
-            'forum' => intval($my_forum),
-            'gradebook' => $my_gradebook,
-            'thread' => intval($myThread),
-            'post' => intval($my_post),
-            'action' => $action,
-        ]) . '&' . api_get_cidreq()
+        $url
     );
+
     $form->setConstants(array('forum' => '5'));
 
     // Setting the form elements.
-    $form->addElement('hidden', 'forum_id', intval($my_forum));
-    $form->addElement('hidden', 'thread_id', intval($myThread));
+    $form->addElement('hidden', 'forum_id', $forumId);
+    $form->addElement('hidden', 'thread_id', $myThread);
     $form->addElement('hidden', 'gradebook', $my_gradebook);
+    $form->addElement('hidden', 'action', $action);
 
     // If anonymous posts are allowed we also display a form to allow the user to put his name or username in.
     if ($current_forum['allow_anonymous'] == 1 && !isset($_user['user_id'])) {
@@ -2813,7 +2817,7 @@ function show_add_post_form($current_forum, $forum_setting, $action = '', $id =
             'ToolbarSet' => 'ForumStudent',
             'Width' => '100%',
             'Height' => '300',
-            'UserStatus' => 'student',
+            'UserStatus' => 'student'
         )
     );
 
@@ -2821,7 +2825,7 @@ function show_add_post_form($current_forum, $forum_setting, $action = '', $id =
     $iframe = null;
     $myThread = Security::remove_XSS($myThread);
     if ($forum_setting['show_thread_iframe_on_reply'] && $action != 'newthread' && !empty($myThread)) {
-        $iframe = "<iframe style=\"border: 1px solid black\" src=\"iframe_thread.php?".api_get_cidreq()."&forum=".Security::remove_XSS($my_forum)."&thread=".$myThread."#".Security::remove_XSS($my_post)."\" width=\"100%\"></iframe>";
+        $iframe = "<iframe style=\"border: 1px solid black\" src=\"iframe_thread.php?".api_get_cidreq()."&forum=".Security::remove_XSS($forumId)."&thread=".$myThread."#".Security::remove_XSS($my_post)."\" width=\"100%\"></iframe>";
     }
     if (!empty($iframe)) {
         $form->addElement('label', get_lang('Thread'), $iframe);
@@ -2882,10 +2886,6 @@ function show_add_post_form($current_forum, $forum_setting, $action = '', $id =
         $form->addElement('checkbox', 'thread_sticky', '', get_lang('StickyPost'));
     }
 
-    if ($current_forum['allow_attachments'] == '1' || api_is_allowed_to_edit(null, true)) {
-        $values = $form->exportValues();
-    }
-
     $form->addElement('html', '</div>');
 
     if (in_array($action, ['quote', 'replymessage'])) {
@@ -2926,23 +2926,37 @@ function show_add_post_form($current_forum, $forum_setting, $action = '', $id =
 
     // If we are quoting a message we have to retrieve the information of the post we are quoting so that
     // we can add this as default to the textarea.
-
     if (($action == 'quote' || $action == 'replymessage') && isset($my_post)) {
         // We also need to put the parent_id of the post in a hidden form when
         // we are quoting or replying to a message (<> reply to a thread !!!)
-        $form->addElement('hidden', 'post_parent_id', intval($my_post));
+        $form->addHidden('post_parent_id', intval($my_post));
 
         // If we are replying or are quoting then we display a default title.
         $values = get_post_information($my_post);
+        $posterInfo = api_get_user_info($values['poster_id']);
+        $posterName = '';
+        if ($posterInfo) {
+            $posterName = $posterInfo['complete_name'];
+        }
         $defaults['post_title'] = get_lang('ReplyShort').api_html_entity_decode($values['post_title'], ENT_QUOTES);
         // When we are quoting a message then we have to put that message into the wysiwyg editor.
         // Note: The style has to be hardcoded here because using class="quote" didn't work.
         if ($action == 'quote') {
-            $defaults['post_text'] = '<div>&nbsp;</div><div style="margin: 5px;"><div style="font-size: 90%; font-style: italic;">'.get_lang('Quoting').' '.api_get_person_name($values['firstname'], $values['lastname']).':</div><div style="color: #006600; font-size: 90%;  font-style: italic; background-color: #FAFAFA; border: #D1D7DC 1px solid; padding: 3px;">'.prepare4display($values['post_text']).'</div></div><div>&nbsp;</div><div>&nbsp;</div>';
+            $defaults['post_text'] = '<div>&nbsp;</div>
+                <div style="margin: 5px;">
+                    <div style="font-size: 90%; font-style: italic;">'.
+                        get_lang('Quoting').' '.$posterName.':</div>
+                        <div style="color: #006600; font-size: 90%;  font-style: italic; background-color: #FAFAFA; border: #D1D7DC 1px solid; padding: 3px;">'.
+                            prepare4display($values['post_text']).'
+                        </div>
+                    </div>
+                <div>&nbsp;</div>
+                <div>&nbsp;</div>
+            ';
         }
     }
 
-    $form->setDefaults(isset($defaults) ? $defaults : null);
+    $form->setDefaults(isset($defaults) ? $defaults : []);
 
     // The course admin can make a thread sticky (=appears with special icon and always on top).
     $form->addRule('post_title', get_lang('ThisFieldIsRequired'), 'required');
@@ -2969,9 +2983,29 @@ function show_add_post_form($current_forum, $forum_setting, $action = '', $id =
 
                 return false;
             }
-            Security::clear_token();
 
-            return $values;
+            switch ($action) {
+                case 'newthread':
+                    $myThread = store_thread($current_forum, $values);
+                    break;
+                case 'quote':
+                case 'replythread':
+                case 'replymessage':
+                    store_reply($current_forum, $values);
+
+                    break;
+            }
+
+            $url = api_get_path(WEB_CODE_PATH).'forum/viewthread.php?'.api_get_cidreq().'&'.http_build_query(
+                [
+                    'forum' => $forumId,
+                    'thread' => $myThread
+                ]
+            );
+
+            Security::clear_token();
+            header('Location: '.$url);
+            exit;
         }
     } else {
         $token = Security::get_token();
@@ -2986,7 +3020,7 @@ function show_add_post_form($current_forum, $forum_setting, $action = '', $id =
         $ajaxHtml = $attachmentAjaxTable;
         $form->addElement('html', $ajaxHtml);
 
-        $form->display();
+        return $form;
     }
 }
 
@@ -5125,9 +5159,8 @@ function send_notifications($forum_id = 0, $thread_id = 0, $post_id = 0)
 
     if (is_array($users_to_be_notified)) {
         foreach ($users_to_be_notified as $value) {
-
             $user_info = api_get_user_info($value['user_id']);
-            $email_body = get_lang('Dear').' '.api_get_person_name($user_info['firstname'], $user_info['lastname'], null, PERSON_NAME_EMAIL_ADDRESS).", <br />\n\r";
+            $email_body = get_lang('Dear').' '.$user_info['complete_name'].", <br />\n\r";
             $email_body .= get_lang('NewForumPost').": ".$current_forum['forum_title'].' - '.$current_thread['thread_title']." <br />\n";
             $email_body .= get_lang('Course').': '.$_course['name'].' - ['.$_course['official_code']."]  <br />\n";
             $email_body .= get_lang('YouWantedToStayInformed')."<br />\n";
@@ -5588,7 +5621,7 @@ function editAttachedFile($array, $id, $courseId = null) {
  *
  * @return string The Forum Attachments Ajax Table
  */
-function getAttachmentsAjaxTable($postId = null)
+function getAttachmentsAjaxTable($postId = 0)
 {
     // Init variables
     $postId = intval($postId);
@@ -5607,7 +5640,7 @@ function getAttachmentsAjaxTable($postId = null)
             }
         }
     }
-    
+
     // Get data to fill into attachment files table
     if (!empty($_SESSION['forum']['upload_file'][$courseId]) &&
         is_array($_SESSION['forum']['upload_file'][$courseId])
@@ -5662,7 +5695,7 @@ function getAttachmentsAjaxTable($postId = null)
  *
  * @return array
  */
-function getAttachedFiles($forumId, $threadId, $postId = null, $attachId = null, $courseId = null)
+function getAttachedFiles($forumId, $threadId, $postId = 0, $attachId = 0, $courseId = 0)
 {
     $forumId = intval($forumId);
     $courseId = intval($courseId);

+ 1 - 1
main/forum/index.php

@@ -469,7 +469,7 @@ if (is_array($forumCategories)) {
                         }
                         $forum['forum_of_group'] == 0 ? $groupid = '' : $groupid = $forum['forum_of_group'];
 
-                        $number_threads = isset($forum['number_of_threads']) ? $forum['number_of_threads'] : 0;
+                        $number_threads = isset($forum['number_of_threads']) ? (int) $forum['number_of_threads'] : 0;
                         $number_posts = isset($forum['number_of_posts']) ? $forum['number_of_posts'] : 0;
 
                         $html .= '<div class="row">';

+ 10 - 11
main/forum/newthread.php

@@ -151,6 +151,14 @@ $htmlHeadXtra[] = <<<JS
     </script>
 JS;
 
+$form = show_add_post_form(
+    $current_forum,
+    $forum_setting,
+    'newthread',
+    '',
+    isset($_SESSION['formelements']) ? $_SESSION['formelements'] : null
+);
+
 if ($origin == 'learnpath') {
     Display::display_reduced_header();
 } else {
@@ -168,18 +176,9 @@ echo '</div>';
 // Set forum attachment data into $_SESSION
 getAttachedFiles($current_forum['forum_id'], 0, 0);
 
-$values = show_add_post_form(
-    $current_forum,
-    $forum_setting,
-    'newthread',
-    '',
-    isset($_SESSION['formelements']) ? $_SESSION['formelements'] : null
-);
 
-if (!empty($values) && isset($values['SubmitPost'])) {
-    // Add new thread in table forum_thread.
-    store_thread($current_forum, $values);
-}
+
+$form->display();
 
 if (isset($origin) && $origin == 'learnpath') {
     Display::display_reduced_footer();

+ 22 - 43
main/forum/reply.php

@@ -20,7 +20,6 @@
 
 require_once '../inc/global.inc.php';
 
-// The section (tabs).
 $this_section = SECTION_COURSES;
 
 // Notification for unauthorized people.
@@ -38,13 +37,16 @@ if (isset($_GET['origin'])) {
 require_once 'forumconfig.inc.php';
 require_once 'forumfunction.inc.php';
 
+$forumId = isset($_GET['forum']) ? (int)$_GET['forum'] : 0;
+$threadId = isset($_GET['thread']) ? (int)$_GET['thread'] : 0;
+
 /* MAIN DISPLAY SECTION */
 
 /* Retrieving forum and forum categorie information */
 // We are getting all the information about the current forum and forum category.
 // Note pcool: I tried to use only one sql statement (and function) for this,
 // but the problem is that the visibility of the forum AND forum cateogory are stored in the item_property table.
-$current_thread	= get_thread_information($_GET['thread']); // Note: This has to be validated that it is an existing thread.
+$current_thread	= get_thread_information($threadId); // Note: This has to be validated that it is an existing thread.
 $current_forum	= get_forum_information($current_thread['forum_id']); // Note: This has to be validated that it is an existing forum.
 $current_forum_category = get_forumcategory_information(Security::remove_XSS($current_forum['forum_category']));
 
@@ -55,19 +57,18 @@ $current_forum_category = get_forumcategory_information(Security::remove_XSS($cu
 // 3. if anonymous posts are not allowed
 // The only exception is the course manager
 // I have split this is several pieces for clarity.
-//if (!api_is_allowed_to_edit() AND (($current_forum_category['visibility'] == 0 OR $current_forum['visibility'] == 0) OR ($current_forum_category['locked'] <> 0 OR $current_forum['locked'] <> 0 OR $current_thread['locked'] <> 0))) {
 if (!api_is_allowed_to_edit(false, true) &&
     (($current_forum_category && $current_forum_category['visibility'] == 0) || $current_forum['visibility'] == 0)
 ) {
-    api_not_allowed();
+    api_not_allowed(true);
 }
 if (!api_is_allowed_to_edit(false, true) &&
     (($current_forum_category && $current_forum_category['locked'] <> 0) || $current_forum['locked'] <> 0 || $current_thread['locked'] <> 0)
 ) {
-    api_not_allowed();
+    api_not_allowed(true);
 }
 if (!$_user['user_id'] && $current_forum['allow_anonymous'] == 0) {
-    api_not_allowed();
+    api_not_allowed(true);
 }
 
 if ($current_forum['forum_of_group'] != 0) {
@@ -97,7 +98,7 @@ if (!empty($gradebook) && $gradebook == 'view') {
 
 if ($origin == 'group') {
     $_clean['toolgroup'] = api_get_group_id();
-    $group_properties  = GroupManager :: get_group_properties($_clean['toolgroup']);
+    $group_properties = GroupManager :: get_group_properties($_clean['toolgroup']);
     $interbreadcrumb[] = array(
         'url' => api_get_path(WEB_CODE_PATH).'group/group.php?'.api_get_cidreq(),
         'name' => get_lang('Groups'),
@@ -105,16 +106,16 @@ if ($origin == 'group') {
 
     $interbreadcrumb[] = array(
         'url' => api_get_path(WEB_CODE_PATH).'group/group_space.php?'.api_get_cidreq(),
-        'name' => get_lang('GroupSpace').' '.$group_properties['name'],
+        'name' => get_lang('GroupSpace').' '.$group_properties['name']
     );
 
     $interbreadcrumb[] = array(
-        'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?origin='.$origin.'&forum='.intval($_GET['forum']).'&'.api_get_cidreq(),
-        'name' => $current_forum['forum_title'],
+        'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?origin='.$origin.'&forum='.$forumId.'&'.api_get_cidreq(),
+        'name' => $current_forum['forum_title']
     );
     $interbreadcrumb[] = array(
-        'url' => api_get_path(WEB_CODE_PATH).'forum/viewthread.php?origin='.$origin.'&gradebook='.$gradebook.'&forum='.intval($_GET['forum']).'&thread='.intval($_GET['thread']).'&'.api_get_cidreq(),
-        'name' => $current_thread['thread_title'],
+        'url' => api_get_path(WEB_CODE_PATH).'forum/viewthread.php?origin='.$origin.'&gradebook='.$gradebook.'&forum='.$forumId.'&thread='.$threadId.'&'.api_get_cidreq(),
+        'name' => $current_thread['thread_title']
     );
 
     $interbreadcrumb[] = array(
@@ -124,19 +125,19 @@ if ($origin == 'group') {
 } else {
     $interbreadcrumb[] = array(
         'url' => 'index.php?gradebook='.$gradebook,
-        'name' => $nameTools,
+        'name' => $nameTools
     );
     $interbreadcrumb[] = array(
         'url' => api_get_path(WEB_CODE_PATH).'forum/viewforumcategory.php?forumcategory='.$current_forum_category['cat_id'].'&'.api_get_cidreq(),
-        'name' => $current_forum_category['cat_title'],
+        'name' => $current_forum_category['cat_title']
     );
     $interbreadcrumb[] = array(
-        'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?origin='.$origin.'&forum='.intval($_GET['forum']).'&'.api_get_cidreq(),
-        'name' => $current_forum['forum_title'],
+        'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?origin='.$origin.'&forum='.$forumId.'&'.api_get_cidreq(),
+        'name' => $current_forum['forum_title']
     );
     $interbreadcrumb[] = array(
-        'url' => api_get_path(WEB_CODE_PATH).'forum/viewthread.php?origin='.$origin.'&gradebook='.$gradebook.'&forum='.intval($_GET['forum']).'&thread='.intval($_GET['thread']).'&'.api_get_cidreq(),
-        'name' => $current_thread['thread_title'],
+        'url' => api_get_path(WEB_CODE_PATH).'forum/viewthread.php?origin='.$origin.'&gradebook='.$gradebook.'&forum='.$forumId.'&thread='.$threadId.'&'.api_get_cidreq(),
+        'name' => $current_thread['thread_title']
     );
     $interbreadcrumb[] = array('url' => '#', 'name' => get_lang('Reply'));
 }
@@ -174,35 +175,13 @@ $my_action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : ''
 $my_post = isset($_GET['post']) ? Security::remove_XSS($_GET['post']) : '';
 $my_elements = isset($_SESSION['formelements']) ? $_SESSION['formelements'] : '';
 
-$values = show_add_post_form(
+$form = show_add_post_form(
     $current_forum,
     $forum_setting,
     $my_action,
     $my_post,
     $my_elements
 );
-$form = '';
-if (is_object($values)) {
-    $form = $values->returnForm();
-} else {
-    if (!empty($values) && isset($_POST['SubmitPost'])) {
-        store_reply($current_forum, $values);
-        //@todo split the show_add_post_form function
-        $origin = isset($_GET['origin']) && $_GET['origin'] === 'learnpath' ? 'learnpath' : null;
-
-        $url = api_get_path(WEB_CODE_PATH).'forum/viewthread.php?'.http_build_query(
-            [
-                'forum' => $current_thread['forum_id'],
-                'gradebook' => $gradebook,
-                'thread' => intval($_GET['thread']),
-                'gidReq' => api_get_group_id(),
-                'origin' => $origin
-            ]
-        );
-        header('Location: '.$url);
-        exit;
-    }
-}
 
 if ($origin == 'learnpath') {
     Display::display_reduced_header();
@@ -215,7 +194,7 @@ if ($origin == 'learnpath') {
 if ($origin != 'learnpath') {
     echo '<div class="actions">';
     echo '<span style="float:right;">'.search_link().'</span>';
-    echo '<a href="viewthread.php?'.api_get_cidreq().'&forum='.Security::remove_XSS($_GET['forum']).'&gradebook='.$gradebook.'&thread='.Security::remove_XSS($_GET['thread']).'&origin='.$origin.'">'.
+    echo '<a href="viewthread.php?'.api_get_cidreq().'&forum='.$forumId.'&gradebook='.$gradebook.'&thread='.$threadId.'&origin='.$origin.'">'.
         Display::return_icon('back.png', get_lang('BackToThread'), '', ICON_SIZE_MEDIUM).'</a>';
     echo '</div>';
 }
@@ -227,7 +206,7 @@ echo '<h1><a href="viewforum.php?&origin='.$origin.'&forum='.$current_forum['for
 echo '<p class="forum_description">'.prepare4display($current_forum['forum_comment']).'</p>';
 echo '</div>';
 
-echo $form;
+$form->display();
 
 if ($origin == 'learnpath') {
     Display::display_reduced_footer();

BIN
main/img/icons/22/icon-chamilo.png


File diff suppressed because it is too large
+ 76 - 0
main/img/icons/svg/icon-chamilo.svg


+ 1 - 1
main/inc/lib/add_course.lib.inc.php

@@ -693,7 +693,7 @@ class AddCourse
                 'category' =>'certificates'
             ],
             'documents_default_visibility' => ['default' =>'visible', 'category' =>'document'],
-            'show_course_in_user_language' => ['default' => 2],
+            'show_course_in_user_language' => ['default' => 2, 'category' => null],
         ];
 
         $counter = 1;

+ 18 - 3
main/inc/lib/course.lib.php

@@ -286,7 +286,15 @@ class CourseManager
             $sql .= ' OFFSET 0';
         }
 
-        return Database::store_result(Database::query($sql));
+        $data = [];
+        $res = Database::query($sql);
+        if (Database::num_rows($res) > 0) {
+            while ($row = Database::fetch_array($res, 'ASSOC')) {
+                $data[] = $row;
+            }
+        }
+
+        return $data;
     }
 
     /**
@@ -3980,12 +3988,19 @@ class CourseManager
             $session_title = $course_info['name'];
         }
         
+        $thumbnails = null;
+        $image = null;
         $showCustomIcon = api_get_setting('course_images_in_courses_list');
         $iconName = basename($course_info['course_image']);
+        
         if ($showCustomIcon === 'true' && $iconName != 'course.png') {
-            $params['icon'] = $course_info['course_image_large'];
+            $thumbnails = $course_info['course_image'];
+            $image = $course_info['course_image_large'];
+        }else{
+            $image = Display::return_icon('session_default.png', null, null, null,null, true);
         }
-
+        $params['thumbnails'] = $thumbnails;
+        $params['image'] = $image;
         $params['link'] = $session_url;
         $params['title'] = $session_title;
         $params['edit_actions'] = '';

+ 4 - 2
main/inc/lib/database.lib.php

@@ -140,8 +140,9 @@ class Database
                 'ChamiloUserBundle' => 'Chamilo\UserBundle\Entity',
                 'ChamiloCoreBundle' => 'Chamilo\CoreBundle\Entity',
                 'ChamiloCourseBundle' => 'Chamilo\CourseBundle\Entity',
-                'ChamiloFaqBundle' => 'Chamilo\FaqBundle\Entity',
-                'ChamiloSkillBundle' => 'Chamilo\SkillBundle\Entity'
+                'ChamiloSkillBundle' => 'Chamilo\SkillBundle\Entity',
+                'ChamiloTicketBundle' => 'Chamilo\TicketBundle\Entity'
+                'ChamiloFaqBundle' => 'Chamilo\FaqBundle\Entity'                
             )
         );
 
@@ -661,6 +662,7 @@ class Database
             $path.'src/Chamilo/CoreBundle/Entity',
             $path.'src/Chamilo/UserBundle/Entity',
             $path.'src/Chamilo/CourseBundle/Entity',
+            $path.'src/Chamilo/TicketBundle/Entity',
             $path.'src/Chamilo/ContactBundle/Entity',
             //$path.'vendor/sonata-project/user-bundle/Entity',
             //$path.'vendor/sonata-project/user-bundle/Model',

+ 2 - 0
main/inc/lib/export.lib.inc.php

@@ -37,6 +37,8 @@ class Export
      * Export tabular data to CSV-file
      * @param array $data
      * @param string $filename
+     *
+     * @return mixed csv file | false if no data to export
      */
     public static function arrayToCsv($data, $filename = 'export')
     {

+ 1 - 0
main/inc/lib/import.lib.php

@@ -16,6 +16,7 @@ class Import
 {
     /**
      * @param string $path
+     * @param bool $setFirstRowAsHeader
      * @return CsvReader
      */
     public static function csv_reader($path, $setFirstRowAsHeader = true)

+ 3 - 3
main/inc/lib/message.lib.php

@@ -201,14 +201,14 @@ class MessageManager
     /**
      * Sends a message to a user/group
      *
-     * @param int 	   $receiver_user_id
+     * @param int 	  $receiver_user_id
      * @param string  $subject
      * @param string  $content
      * @param array   $file_attachments files array($_FILES) (optional)
      * @param array   $file_comments about attachment files (optional)
      * @param int     $group_id (optional)
      * @param int     $parent_id (optional)
-     * @param int 	   $edit_message_id id for updating the message (optional)
+     * @param int 	  $edit_message_id id for updating the message (optional)
      * @param int     $topic_id (optional) the default value is the current user_id
      * @param int     $sender_id
      * @param bool $directMessage
@@ -253,7 +253,7 @@ class MessageManager
         $total_filesize = 0;
         if (is_array($file_attachments)) {
             foreach ($file_attachments as $file_attach) {
-                $total_filesize += $file_attach['size'];
+                $total_filesize += isset($file_attach['size']) && is_int($file_attach['size']) ? $file_attach['size'] : 0;
             }
         }
 

+ 2 - 1
main/inc/lib/plugin.lib.php

@@ -19,6 +19,7 @@ class AppPlugin
         'header_center',
         'header_left',
         'header_right',
+        'pre_footer',
         'footer_left',
         'footer_center',
         'footer_right',
@@ -427,7 +428,7 @@ class AppPlugin
                     "subkey = ? AND category = ? AND type = ? " => array($plugin_name, 'Plugins','setting')
                 )
             );
-            
+
             $settings_filtered = array();
             foreach ($plugin_settings as $item) {
                 $settings_filtered[$item['variable']] = $item['selected_value'];

+ 5 - 6
main/inc/lib/surveymanager.lib.php

@@ -19,7 +19,7 @@ class SurveyTree
     {
         // Database table definitions
         $table_survey = Database :: get_course_table(TABLE_SURVEY);
-        $table_survey_question 	= Database :: get_course_table(TABLE_SURVEY_QUESTION);
+        $table_survey_question = Database :: get_course_table(TABLE_SURVEY_QUESTION);
         $table_user = Database :: get_main_table(TABLE_MAIN_USER);
 
         // searching
@@ -39,18 +39,17 @@ class SurveyTree
 				LEFT JOIN $table_survey_question  survey_question
 				ON survey.survey_id = survey_question.survey_id , $table_user user
 				WHERE
-					survey.c_id 			=  $course_id AND
-					survey_question.c_id 	=  $course_id AND
-					survey.author 			= user.user_id
+					survey.c_id =  $course_id AND
+					survey_question.c_id = $course_id AND
+					survey.author = user.user_id
 				GROUP BY survey.survey_id";
 
         $res = Database::query($sql);
-        $surveys_parents = array ();
         $refs = array();
         $list = array();
         $plain_array=array();
 
-        while ($survey = Database::fetch_array($res,'ASSOC')) {
+        while ($survey = Database::fetch_array($res, 'ASSOC')) {
             $plain_array[$survey['survey_id']]=$survey;
             $surveys_parents[]=$survey['survey_version'];
             $thisref = &$refs[ $survey['survey_id'] ];

+ 4 - 4
main/inc/lib/template.lib.php

@@ -899,17 +899,17 @@ class Template
         $this->setHelp();
 
         //@todo move this in the template
-        $bug_notification_link = '';
+        $bugLink = '';
         $iconBug = Display::return_icon('bug.png', get_lang('ReportABug'), null, ICON_SIZE_LARGE);
         if (api_get_setting('show_link_bug_notification') == 'true' && $this->user_is_logged_in) {
-            $bug_notification_link = '<li class="report">
+            $bugLink = '<div class="report">
 		<a href="http://support.chamilo.org/projects/chamilo-18/wiki/How_to_report_bugs" target="_blank">
                     '. $iconBug . '
                 </a>
-		</li>';
+		</div>';
         }
 
-        $this->assign('bug_notification_link', $bug_notification_link);
+        $this->assign('bug_notification', $bugLink);
 
         $notification = return_notification_menu();
         $this->assign('notification_menu', $notification);

+ 1 - 1
main/inc/lib/usermanager.lib.php

@@ -1664,7 +1664,7 @@ class UserManager
         // Storing the new photos in 4 versions with various sizes.
 
         $small = new Image($source_file);
-        $small->resize(22);
+        $small->resize(32);
         $small->send_image($path.'small_'.$filename);
         $medium = new Image($source_file);
         $medium->resize(85);

+ 2 - 2
main/inc/lib/userportal.lib.php

@@ -1258,7 +1258,7 @@ class IndexManager
                                 );
                             } else {
                                 $sessions_with_no_category = $this->tpl->fetch(
-                                    $this->tpl->get_template('/user_portal/session.tpl')
+                                    $this->tpl->get_template('/user_portal/classic_session.tpl')
                                 );
                             }
                             $sessionCount++;
@@ -1357,7 +1357,7 @@ class IndexManager
 
                                 $this->tpl->assign('session', $sessionParams);
                                 $html_sessions .= $this->tpl->fetch(
-                                    $this->tpl->get_template('user_portal/session.tpl')
+                                    $this->tpl->get_template('user_portal/classic_session.tpl')
                                 );
 
                                 $sessionCount++;

+ 37 - 0
main/lang/brazilian/trad4all.inc.php

@@ -7558,5 +7558,42 @@ $NewLogoUpdated = "Novo logotipo carregado";
 $CurrentLogo = "Logo atual";
 $UpdateLogo = "Logotipo atualização";
 $FollowedStudentBosses = "chefes de estudantes seguiram";
+$DatabaseManager = "Gerenciador de banco";
+$CourseTemplate = "Template de Curso";
+$PickACourseAsATemplateForThisNewCourse = "Escolha um curso como modelo para este novo curso";
+$TeacherCanSelectCourseTemplateTitle = "Professor pode selecionar um curso como modelo";
+$TeacherCanSelectCourseTemplateComment = "Permitir escolher um curso como modelo para o novo curso que o professor está criando";
+$TheForumAutoLaunchSettingIsOnStudentsWillBeRedirectToTheForumTool = "Início automático do fórum está ligado. Os alunos serão redirecionados para a ferramenta fórum ao entrar neste curso.";
+$RedirectToForumList = "Redirecionar para lista de fóruns";
+$EnableForumAutoLaunch = "Ativar auto-lançamento do  fórum";
+$NowDownloadYourCertificateClickHere = "Agora você pode baixar o seu certificado clicando aqui";
+$AdditionallyYouHaveObtainedTheFollowingSkills = "Além disso, você tem alcançado as seguintes habilidades";
+$IHaveObtainedSkillXOnY = "Tenho conseguido habilidade %s em %s";
+$AnotherAttempt = "Outra tentativa";
+$RemainingXAttempts = "Restante %d tentativas";
+$Map = "Mapa";
+$MyLocation = "Minha localização";
+$ShowCourseInUserLanguage = "Mostrar curso de idioma do usuário";
 $AccessData = "Dados de acesso";
+$InvalidImageDimensions = "Dimensões da imagem não corresponder às exigências. Por favor, verifique as sugestões ao lado do campo de imagem.";
+$CouldNotResetPasswordBecauseLDAP = "Não foi possível redefinir a senha, contacte o helpdesk.";
+$Quote = "Citar";
+$ValueTooSmall = "O valor é muito pequeno.";
+$ValueTooBig = "O valor é muito grande.";
+$YouAreATeacherOfThisCourse = "Você é um professor deste curso";
+$StudentBossList = "Lista de chefes de estudante";
+$ShowScoreEveryAttemptShowAnswersLastAttempt = "Mostrar as respostas corretas somente na última tentativa estabelecida (só funciona com um limite de tentativas pré-configurada)";
+$MissingChartLibraryPleaseCheckLog = "Faltando biblioteca gráfico. Verifique o log de erro para mais detalhes.";
+$UserXIndicated = "Usuário %s indicados:";
+$AcquiredLevel = "Nível adquirida";
+$ManageSkillsLevels = "Gerir níveis de competências";
+$AddProfile = "Adicionar perfil";
+$AddLevel = "Adicionar nível";
+$ChangeAcquiredLevel = "Mudança adquirida de nível";
+$NoLevelAcquiredYet = "Nenhum nível ainda adquirido";
+$RecordAudio = "Gravar audio";
+$StartRecordingAudio = "Comece a gravar";
+$StopRecordingAudio = "Parar a gravação";
+$SaveRecordedAudio = "Salvar o áudio gravado";
+$GradeFromX = "Grades de curso: %s";
 ?>

+ 159 - 72
main/lang/dutch/trad4all.inc.php

@@ -9,24 +9,43 @@ $CriteriaToEarnTheBadge = "Criteria om de badge te verdienen";
 $DesignNewBadge = "Ontwerp een nieuwe badge";
 $TotalX = "Totaal: %s";
 $CreateBadge = "Badge aanmaken";
+$SocialWallWhatAreYouThinkingAbout = "Waar denk je aan?";
+$BuyCourses = "Inschrijven";
+$MySessions = "Mijn sessies";
+$AssignedCourses = "Toegekende cursussen";
 $SignatureFormula = "Groetjes";
+$SessionName = "Naam sessie";
+$ExerciseProgressInfo = "Vordering van de student in de oefeningen";
+$SessionDurationXDaysLeft = "Deze sessie is tijdsgebonden. De cursus is afgelopen in %s dagen.";
+$DRH = "Human Resources Manager";
+$Calendar = "Kalender";
+$YouShouldAddItemsBeforeAttachAudio = "Voeg eerst items toe aan je leerpad, zodat je de geluidsbestanden aan deze items kunt koppelen.";
+$InactiveDays = "Dagen inactiviteit";
+$FollowedHumanResources = "Gevolgde HR medewerkers";
+$FollowedStudents = "Gevolgde cursisten";
+$FollowedTeachers = "Gevolgde leerkrachten";
 $HereIsYourFeedback = "In onderstaande bijlage kan je feedback vinden.";
 $LoginToGoToThisCourse = "Gelieve in te loggen om het document te bekijken";
+$ActiveUsers = "Actieve deelnemers";
+$SearchStudent = "Zoek cursist";
+$Username = "Gebruikersnaam ('log-in')";
 $YouAreReg = "Je bent aangemeld op";
+$SelectAnOption = "Kies een optie";
 $CourseVisibilityHidden = "Verborgen - Volledig verborgen voor alle gebruikers behalve de platformbeheerders";
 $HandedOutDate = "Ingediend datum";
 $HandedOut = "Aantal ingediend";
 $HandOutDateLimit = "Deadline";
+$CheckEasyPasswords = "Controleer op te eenvoudige wachtwoorden";
 $ShowAllEvents = "Alles tonen";
 $Month = "Maand";
-$Hour = "Uur";
+$Hour = "uur";
 $Minutes = "Minuten";
 $AddSuccess = "Het agenda-item is toegevoegd.";
 $AgendaDeleteSuccess = "Het agenda-item is verwijderd.";
 $NoAgendaItems = "Er zijn geen agenda-items.";
 $ClassName = "Klasnaam";
 $ItemTitle = "Itemtitel";
-$Day = "dag";
+$Day = "Dag";
 $month_default = "standaardmaand";
 $year_default = "standaardjaar";
 $Hour = "uur";
@@ -37,7 +56,7 @@ $OldToNew = "oud naar nieuw";
 $NewToOld = "nieuw naar oud";
 $Now = "nu";
 $AddEvent = "Agenda-item toevoegen";
-$Detail = "detail";
+$Detail = "Detail";
 $MonthView = "Maandoverzicht";
 $WeekView = "Weekoverzicht";
 $DayView = "Dagoverzicht";
@@ -141,8 +160,8 @@ $MessageDeleted = "Het bericht werd verwijderd";
 $ConfirmDeleteMessage = "Ben je zeker dat je het geselecteerde bericht wil verwijderen?";
 $DeleteMessage = "Verwijder bericht";
 $ReadMessage = "Lees bericht";
-$SendInviteMessage = "Verstuur uitnodiging";
-$SendMessageInvitation = "Ben je zeker dat je deze uitnodigingen wil versturen ?";
+$SendInviteMessage = "Verstuur vriendschapsverzoek";
+$SendMessageInvitation = "Ben je zeker dat je deze vriendschapsverzoeken wil versturen ?";
 $MessageTool = "Berichtenmodule";
 $WriteAMessage = "Schrijf een bericht";
 $AlreadyReadMessage = "Bericht reeds gelezen";
@@ -213,7 +232,7 @@ $BackH = "Terug naar startpagina";
 $OtherCategory = "Andere categorie";
 $AllowedToUnsubscribe = "Toegelaten";
 $NotAllowedToUnsubscribe = "Niet toegelaten";
-$CourseVisibilityClosed = "Volledig gesloten, de cursus is enkel toegankelijk voor de cursusbeheerder";
+$CourseVisibilityClosed = "Gesloten – geen toegang tot deze cursus";
 $CourseVisibilityClosed = "Gesloten – geen toegang tot deze cursus";
 $CourseVisibilityModified = "Gewijzigd (de instellingen werden gewijzigd via het rollen-rechten systeem)";
 $WorkEmailAlert = "Waarschuw via email bij een nieuwe publicatie";
@@ -824,6 +843,7 @@ $DownloadFile = "Upload volgend bestand naar de server";
 $Builder = "Leerpad aanmaken";
 $AllowTeachersToCreateSessionsComment = "Leerkrachten kunnen hun eigen sessies aanmaken, bewerken en verwijderen.";
 $AllowTeachersToCreateSessionsTitle = "Sta leerkrachten toe om sessies te maken";
+$SelectACategory = "Kies een categorie";
 $MailSubjectReplyShort = "RE:";
 $ScormBuilder = "Leerpadfunctie – SCORM-cursusfunctie";
 $CreateDoc = "Nieuw document";
@@ -1090,6 +1110,7 @@ $LinkURL = "URL van de hyperlink";
 $OpenInNewWindow = "Open in nieuw venster";
 $LimitUsersListDefaultMaxComment = "In schermen waar gebruikers kunnen toegevoegd worden aan cursussen of klassen, wordt standaard gefilterd op de eerste letter (A) indien de eerste niet-gefilterde lijst een groter aantal gebruikers bevat dan dit getal";
 $HideDLTTMarkupComment = "Verberg de [=...=] opmaak wanneer de taalvariabele niet vertaald is";
+$SignUp = "Schrijf je in!";
 $UserDeleted = "De gebruiker is verwijderd.";
 $NoClassesForThisCourse = "Er zijn geen klassen ingeschreven in deze cursus";
 $CourseUsage = "Cursusgebruik";
@@ -1394,7 +1415,7 @@ $ExtendedProfileRegistrationRequiredComment = "Welke van de onderstaande velden
 $NoReplyEmailAddress = "No-reply e-mail-adres";
 $NoReplyEmailAddressComment = "Dit is het e-mail-adres dat gebruikt wordt wanneer een e-mail moet verstuurd worden waarin uitdrukkelijk wordt verzocht die niet te beantwoorden. Meestal wordt dit e-mail-adres zodanig geconfigureerd op uw server dat inkomende mails worden genegeerd/verwijderd.";
 $SurveyEmailSenderNoReply = "Afzender e-mail voor survey (no-reply)";
-$SurveyEmailSenderNoReplyComment = "Moeten de e-mail-uitnodigingen die verstuurd worden voor surveys gebruik maken van het e-mail-adres van coach/docent, of van het speciale no-reply adres (opgegeven in de algemene configuratie)?";
+$SurveyEmailSenderNoReplyComment = "Moeten de email-uitnodigingen die verstuurd worden voor surveys gebruik maken van het mailadres van coach/docent, of van het speciale no-reply adres (opgegeven in de algemene configuratie)?";
 $CourseCoachEmailSender = "E-mail-adres van begeleider/docent";
 $NoReplyEmailSender = "\"No-reply\" e-mail-adres";
 $OpenIdAuthenticationComment = "Activeer de OpenID URL-gebaseerde authenticatie (er verschijnt een extra login-formulier op de homepage)";
@@ -1840,8 +1861,8 @@ $ContactsGroupsComment = "Dit scherm is een lijst van contacten gesorteerd per g
 $YouDontHaveContactsInThisGroup = "Geen contacten gevonden";
 $SelectTheCheckbox = "Selecteer het keuzevak";
 $YouDontHaveInvites = "Leeg";
-$SocialInvitesComment = "Wachtende invitaties";
-$InvitationSentBy = "Invitatie verzonden door";
+$SocialInvitesComment = "Hangende vriendschapsverzoeken";
+$InvitationSentBy = "Vriendschapsverzoek verzonden door";
 $RequestContact = "Verzoek tot contact";
 $SocialUnknow = "Onbekend";
 $SocialParent = "Mijn ouders";
@@ -1852,7 +1873,7 @@ $SocialDeleted = "Contact verwijderd";
 $MessageOutboxComment = "Verstuurde berichten";
 $MyPersonalData = "Mijn persoonlijke gegevens";
 $AlterPersonalData = "Persoonlijke gegevens wijzigen";
-$Invites = "Uitnodigingen";
+$Invites = "Vriendschapsverzoeken";
 $ContactsGroups = "Contactgroepen";
 $MyInbox = "Mijn inbox";
 $ViewSharedProfile = "Gedeeld profiel bekijken";
@@ -1861,7 +1882,7 @@ $ExtraInformation = "Extra informatie";
 $SearchContacts = "Contacten zoeken";
 $SocialSeeContacts = "Contacten bekijken";
 $SocialUserInformationAttach = "Gelieve eerst een bericht in te vullen vooraleer het te verzenden";
-$MessageInvitationNotSent = "Uw uitnodigingsbericht is niet verstuurd";
+$MessageInvitationNotSent = "Uw vriendschapsverzoek is niet verstuurd";
 $SocialAddToFriends = "Toevoegen aan mijn contacten";
 $ChangeContactGroup = "Wijzig contact groep";
 $Friend = "Vriend";
@@ -1872,7 +1893,7 @@ $ViewUser = "Bekijk deze gebruiker";
 $RSSFeeds = "RSS feed";
 $NoFriendsInYourContactList = "Geen vrienden in uw contactenlijst";
 $TryAndFindSomeFriends = "Probeer vrienden te vinden";
-$SendInvitation = "Invitatie versturen";
+$SendInvitation = "Vriendschapsverzoek";
 $SocialInvitationToFriends = "Uitnodigen tot mijn vriendengroep";
 $MyCertificates = "Mijn certificaten";
 $NewGroupCreate = "Nieuwe groep(en) aanmaken";
@@ -1919,7 +1940,7 @@ $CreateGroup = "Groep(en) aanmaken";
 $ProceedToCreateGroup = "Ga verder naar het aanmaken van groep(en)";
 $StudentRegAllowed = "Studenten mogen zichzelf inschrijven in groepen.";
 $GroupAllowStudentUnregistration = "De gebruikers mogen zichzelf uitschrijven uit groepen.";
-$AllGroups = "alle groepen";
+$AllGroups = "Alle groepen";
 $StudentUnsubscribe = "Uitschrijven uit de groep";
 $StudentDeletesHimself = "U bent uitgeschreven uit de groep. Terug naar";
 $DefaultSettingsForNewGroups = "Standaardinstellingen voor nieuwe groepen";
@@ -2114,11 +2135,7 @@ $OogieUnknownError = "De conversie is mislukt voor een onbekende reden.<br />Gel
 $OogieBadExtension = "Gelieve enkel presentatie up te loaden. Bestandsnamen dienen te eindigen met .ppt of .odp";
 $WoogieBadExtension = "Gelieve enkel text bestanden up te loaden. De bestandsnaam dient te eindigen met .doc, .docx of .odt";
 $ShowAudioRecorder = "Geef de geluidsopnemer weer.";
-$SearchFeatureSearchExplanation = "Om de cursussen-database te doorzoeken, gelieve volgende syntax te gebruiken:
-   term tag:tag_name -exclude +include \"exact phrase\"
-Bijvoorbeeld:
-   car tag:truck -ferrari +ford \"high consumption\".
-Dit zal alle resultaten tonen voor het woord 'car' met de tag 'truck', behalve met het woord 'ferrari' maar met het woord ford en de exacte zin 'high consumption'.";
+$SearchFeatureSearchExplanation = "Om de cursussen-database te doorzoeken, gelieve volgende syntax te gebruiken:\n   term tag:tag_name -exclude +include \"exact phrase\"\nBijvoorbeeld:\n   car tag:truck -ferrari +ford \"high consumption\".\nDit zal alle resultaten tonen voor het woord 'car' met de tag 'truck', behalve met het woord 'ferrari' maar met het woord ford en de exacte zin 'high consumption'.";
 $ViewLearningPath = "Toon cursus";
 $SearchFeatureDocumentTagsIfIndexing = "Tags die moeten toegevoegd worden aan het document, indien geïndexeerd";
 $ReturnToLearningPaths = "Terug naar leerpaden";
@@ -2157,6 +2174,7 @@ $AddAssignmentToCourse = "Voeg een taak toe aan de cursus";
 $AddForumToCourse = "Voeg een forum toe aan de cursus";
 $SaveAudioAndOrganization = "Geluid en organisatie bewaren";
 $UploadOnlyMp3Files = "Gelieve enkel MP3 bestanden te uploaden";
+$NoPosts = "Geen berichten";
 $TypeMessage = "Gelieve een tekst te tikken!";
 $ConfirmReset = "Bent u zeker dat u alle berichten wilt verwijderen?";
 $ClearList = "Wissen";
@@ -2321,10 +2339,10 @@ $HotspotValidateError2 = "Vereiste aantal muiskliks op de afbeelding voor het re
 $HotspotRequired = "Beschrijving en gewist zijn verplicht voor elke hotspot - commentaar is optioneel";
 $HotspotChoose = "<div style=\"padding:2px 3px;\">• Om een hotspot aan te maken: selecteer een vorm naast de kleuren en teken de hotspot op de afbeelding.</div><div style=\"padding:2px 3px;\">• Om een hotspot te verplaatsen, selecteer de kleur, klik op een andere plaats in de afbeelding en teken de hotspot.</div><div style=\"padding:2px 3px;\">• Om een hotspot bij te voegen: klik op de [+hotspot] knop.</div><div style=\"padding:2px 3px;\">• Om een polygoon vorm te sluiten: rechtsklikken en selecteer \"Sluit polygoon\".</div>";
 $Fault = "Fout";
-$HotSpot = "Hot spot";
+$HotSpot = "Hotspot";
 $ClickNumber = "Aantal klikken.";
 $HotspotGiveAnswers = "Gelieve een antwoord op te geven";
-$Addlimits = "Grenzen toevoegen";
+$Addlimits = "Begrenzing toevoegen";
 $AreYouSure = "Weet u zeker";
 $StudentScore = "Score student";
 $backtoTesthome = "Terug naar startpagina test";
@@ -2448,7 +2466,7 @@ $BackToResultList = "Terg naar resultatenlijst";
 $EditingScoreCauseProblemsToExercisesInLP = "Als u een de score van een vraag wijzigt, vergeet niet dat dit een oefening is die in een cursus werd toegevoegd.";
 $SelectExercise = "Oefening selecteren";
 $YouHaveToSelectATest = "U moet een test selecteren";
-$HotspotDelineation = "Hotspot contour";
+$HotspotDelineation = "Hotspot schets";
 $CreateQuestions = "Vragen maken";
 $MoreOAR = "Meer gebieden op eigen risico";
 $LessOAR = "Minder gebieden op risico";
@@ -2487,7 +2505,7 @@ $NewDir = "Naam van de nieuwe map";
 $DirCr = "Map is aangemaakt.";
 $Download = "Downloaden";
 $Group = "Groepen";
-$Edit = "wijzig";
+$Edit = "Wijzig";
 $GroupForum = "groepsforum";
 $Language = "Taal";
 $LoginName = "Gebruikersnaam";
@@ -2519,7 +2537,7 @@ $OfficialCode = "Officiële code";
 $FirstName = "Voornaam";
 $LastName = "Familienaam";
 $Status = "Statuut";
-$Email = "Email";
+$Email = "E-mail";
 $SlideshowConversion = "Conversie van de presentatie";
 $UploadFile = "Bestand uploaden";
 $AvailableFrom = "Beschikbaar vanaf";
@@ -2592,7 +2610,7 @@ $Total = "Totaal";
 $Take = "neem";
 $One = "Eén";
 $Several = "Verschillende";
-$Notice = "Merk op";
+$Notice = "Mededelingen";
 $Date = "Datum";
 $Among = "uit";
 $Show = "Weergeven";
@@ -2637,7 +2655,7 @@ $Statistics = "Statistieken";
 $GroupList = "Groepenlijst";
 $Previous = "Vorige";
 $DestDirectoryDoesntExist = "De bestemmingsmap bestaat niet";
-$Courses = "cursussen";
+$Courses = "Cursussen";
 $In = "in";
 $ShowAll = "Toon alle";
 $Page = "Pagina";
@@ -3128,8 +3146,8 @@ $AccountURLInactive = "Account inactief voor deze URL";
 $MaxFileSize = "Maximum bestandsgrootte";
 $SendFileError = "Er heeft zich een fout voorgedaan tijdens het ontvangen van uw bestand. Gelieve na te gaan of het bestand niet corrupt is en even opnieuw te proberen.";
 $Expired = "Vervallen";
-$InvitationHasBeenSent = "De uitnodiging werd verzonden";
-$InvitationHasBeenNotSent = "De uitnodiging is niet verzonden";
+$InvitationHasBeenSent = "Het vriendschapsverzoek werd verzonden";
+$InvitationHasBeenNotSent = "Het vriendschapsverzoek is niet verzonden";
 $Outbox = "Verzonden items";
 $Overview = "Overzicht";
 $ApiKeys = "API sleutels";
@@ -3141,7 +3159,7 @@ $ThereIsNotQualifiedLearners = "Er zijn geen bevoegde cursisten";
 $ThereIsNotUnqualifiedLearners = "Er zijn geen onbevoegde cursisten";
 $SocialNetwork = "Sociaal netwerk";
 $BackToOutbox = "Terug naar vezonden items";
-$Invitation = "Uitnodiging";
+$Invitation = "Vriendschapsverzoek";
 $SeeMoreOptions = "Meer opties";
 $TemplatePreview = "Voorbeeldweergave van het sjabloon";
 $NoTemplatePreview = "Voorbeeldweergave is niet beschikbaar";
@@ -3256,7 +3274,7 @@ $GradebookWelcomeMessage = "Welkom bij het puntenbriefje. Met deze functionalite
 $CreateAllCat = "Alle cursuscategorieën aanmaken";
 $AddAllCat = "Alle categorieën werden toegevoegd.";
 $StatsStudent = "Statistieken van";
-$Results = "resultaten";
+$Results = "Resultaten";
 $Certificates = "Certificaten";
 $Certificate = "Certificaat";
 $ChooseUser = "Kies gebruikers voor deze evaluatie.";
@@ -3373,8 +3391,8 @@ $MenuGeneral = "Algemeen";
 $MenuUser = "Gebruiker";
 $MenuAdmin = "Platformbeheerder";
 $UsersOnLineList = "Lijst van gebruikers die online zijn";
-$TotalOnLine = "Totaal online";
-$Refresh = "Bijwerken";
+$TotalOnLine = "Aantal gebruikers online";
+$Refresh = "Vernieuw";
 $SystemAnnouncements = "Platformmededelingen";
 $HelpMaj = "Help";
 $NotRegistered = "Niet geregistreerd";
@@ -3723,7 +3741,7 @@ $StatsOfCourse = "Statistieken van cursus";
 $StatsOfUser = "Statistieken van gebruiker";
 $StatsOfCampus = "Statistieken van campus";
 $CountUsers = "Aantal gebruikers";
-$CountToolAccess = "Totaal aantal verbindingen met deze cursus";
+$CountToolAccess = "Aantal aanmeldingen in deze cursus";
 $LoginsTitleMonthColumn = "Maand";
 $LoginsTitleCountColumn = "Aantal logins";
 $ToolTitleToolnameColumn = "Modulenaam";
@@ -4847,7 +4865,7 @@ $MessagesSent = "Aantal verzonden berichten";
 $MessagesReceived = "Aantal ontvangen berichten";
 $CountFriends = "Aantal contacten";
 $ToChangeYourEmailMustTypeYourPassword = "Om uw e-mailadres te kunnen wijzigen, moet u uw wachtwoord bevestigen";
-$Invitations = "Invitaties";
+$Invitations = "Uitnodigingen";
 $MyGroups = "Mijn groepen";
 $Social = "Sociaal";
 $MyFriends = "Mijn vrienden";
@@ -4871,7 +4889,7 @@ $MaximunFileSizeX = "Maximale bestandsgrootte: %s";
 $ModifyInformation = "Informatie wijzigen";
 $GroupEdit = "Groep wijzigen";
 $ThereAreNotUsersInTheWaitingList = "Er zijn geen gebruikers in de wachtlijst";
-$SendInvitationTo = "Verzend invitatie aan";
+$SendInvitationTo = "Verzend uitnodiging aan";
 $InviteUsersToGroup = "Inviteer gebruikers tot groep";
 $PostIn = "Het verzond";
 $Newest = "Nieuwste";
@@ -4969,16 +4987,7 @@ $StartToType = "Tik hier en klik vervolgens op deze balk om de tag te valideren"
 $InstallChamilo = "Installeer Chamilo";
 $ChamiloURL = "Chamilo URL";
 $YouDoNotHaveAnySessionInItsHistory = "U hebt geen sessie in uw sessie geschiedenis";
-$PortalHomepageDefaultIntroduction = "Gefeliciteerd! U hebt uw leeromgeving succesvol geïnstalleerd!
-
-U kan nu de installatie voltooien door deze drie stappen te volgen:
-1. Configureer uw systeem door naar het administratie-gedeelte te gaan en selecteer Platform -> Chamiloinstellingen.
-2. Breng wat leven in uw systeem door gebruikers en/of opleidingen toe te voegen. U kan dit doen door gebruikers te verzoeken om zich te registreren of u kunt hen zelf inschrijven via onderdelen gebruikers en cursussen.
-3.Wijzig deze pagina via het onderdeel aanpassen startpagina in het administratie-gedeelte.
-
-U kan steeds meer informatie vinden over deze software op onze website: http://www.chamilo.org.
-
-Wij wensen u veel plezier. Aarzel niet om deel te nemen aan de Chamilo-gemeenschap en ons feedback te geven via ons forum.";
+$PortalHomepageDefaultIntroduction = "Gefeliciteerd! U hebt uw leeromgeving succesvol geïnstalleerd!\n\nU kan nu de installatie voltooien door deze drie stappen te volgen:\n1. Configureer uw systeem door naar het administratie-gedeelte te gaan en selecteer Platform -> Chamiloinstellingen.\n2. Breng wat leven in uw systeem door gebruikers en/of opleidingen toe te voegen. U kan dit doen door gebruikers te verzoeken om zich te registreren of u kunt hen zelf inschrijven via onderdelen gebruikers en cursussen.\n3.Wijzig deze pagina via het onderdeel aanpassen startpagina in het administratie-gedeelte.\n\nU kan steeds meer informatie vinden over deze software op onze website: http://www.chamilo.org.\n\nWij wensen u veel plezier. Aarzel niet om deel te nemen aan de Chamilo-gemeenschap en ons feedback te geven via ons forum.";
 $WithTheFollowingSettings = "met de volgende instellingen:";
 $ThePageHasBeenExportedToDocArea = "De pagina is geëxporteerd naar de document tool";
 $TitleColumnGradebook = "Kolomtitel in Competentie Rapport";
@@ -5262,14 +5271,16 @@ $OralQuestionsAttemptedAreX = "De mondelinge vragen die werden geprobeerd zijn %
 $OralQuestionsAttempted = "Een student heeft een of meerdere mondelinge vragen geprobeerd";
 $RelativeScore = "Relatieve score";
 $AbsoluteScore = "Absolute score";
-$CourseSettingsRegisterDirectLink = "Als uw cursus publiek of geopend is, kunt u gebruik maken van onderstaande directe link om een uitnodiging te verzenden naar alle nieuwe gebruikers. Dus na registratie, zullen ze direct worden doorverwezen naar de cursus. Ook kunt u de e = 1 parameter toevoegen aan de URL, vervang het cijfer \"1\" door het juiste oefening ID om ze rechtstreeks naar een specifiek examen door te verwijzen. Het oefening ID kan je vinden in de URL die je te zien krijgt wanneer je klikt op een te openen oefening.
-%s";
+$PrerequisitesOptions = "Instellen vereisten";
+$ClearAllPrerequisites = "Alle vereisten wissen";
+$SetPrerequisiteForEachItem = "Zet de vorige stap als vereiste bij elke stap";
+$CourseSettingsRegisterDirectLink = "Als uw cursus publiek of geopend is, kunt u gebruik maken van onderstaande directe link om een uitnodiging te verzenden naar alle nieuwe gebruikers. Dus na registratie, zullen ze direct worden doorverwezen naar de cursus. Ook kunt u de e = 1 parameter toevoegen aan de URL, vervang het cijfer \"1\" door het juiste oefening ID om ze rechtstreeks naar een specifiek examen door te verwijzen. Het oefening ID kan je vinden in de URL die je te zien krijgt wanneer je klikt op een te openen oefening.\n%s";
 $DirectLink = "Directe link";
 $GoAheadAndBrowseOurCourseCatalogXOnceRegisteredYouWillSeeTheCourseHereX = "Blader gerust door onze cursuslijst %s om u aan te melden bij de gewenste cursus. Eens u geregistreerd bent, zal u de cursus zien verschijnen %s, in plaats van deze boodschap.";
-$HelloXAsYouCanSeeYourCourseListIsEmpty = "Welkom %s,
-Zoals u kan zien, is uw cursuslijst nog leeg. Dit is te wijten aan het feit dat u nog niet geregistreerd bent voor een cursus.";
+$HelloXAsYouCanSeeYourCourseListIsEmpty = "Welkom %s,\nZoals u kan zien, is uw cursuslijst nog leeg. Dit is te wijten aan het feit dat u nog niet geregistreerd bent voor een cursus.";
 $UnsubscribeUsersAlreadyAddedInCourse = "Schrijf reeds toegevoegde gebruikers uit";
 $EditQuestions = "Bewerk vragen";
+$ClickOnTheLearnerViewToSeeYourLearningPath = "Klik op de knop [Zicht als student] rechtsboven om het leerpad te zien.";
 $GenerateCertificates = "Certificaten maken";
 $ExportAllCertificatesToPDF = "Exporteer alle certificaten naar PDF";
 $DeleteAllCertificates = "Verwijder alle certificaten";
@@ -5305,13 +5316,7 @@ $YouMustAcceptLicence = "Je moet de gebruiksvoorwaarden accepteren";
 $SelectOne = "Maak een keuze";
 $ContactInformationHasBeenSent = "Contactgegevens werden verstuurd";
 $ExerciseDescriptionLabel = "Beschrijving";
-$ContactInformationDescription = "Beste gebruiker,
-\n
-Je staat op het punt een van de beste open-source leerplatformen op de markt te gebruiken. Zoals veel open-source projecten, wordt dit project gesteund door een massale gemeenschap van studenten, instructeurs, ontwikkelaars en makers van inhoud die dit project willen prmoten.
-\n
-\nDoor dit formulier in te vullen, geef je de Chamilo associatie en haar leden de toestemming je informatie door te mailen over belangrijke activiteiten of updates in de Chamilo software of community. Hierdoor kan de community groeien als een georganiseerde entiteit waar informatie goed doorstroomt, met permanent respect voor je tijd en je privacy.
-\n
-\nMerk op dat je <b>niet verplicht</b> bent om dit formulier in te vullen. Wil je anoniem blijven, dan verlies je natuurlijk wel de voordelen verbonden aan geregistreerde portalbeheerders. Tegelijk zullen we je beslissing respecteren. Laat het formulier in dit geval leeg en klik op \"Volgende\".";
+$ContactInformationDescription = "Beste gebruiker,\n\n\nJe staat op het punt een van de beste open-source leerplatformen op de markt te gebruiken. Zoals veel open-source projecten, wordt dit project gesteund door een massale gemeenschap van studenten, instructeurs, ontwikkelaars en makers van inhoud die dit project willen prmoten.\n\n\n\nDoor dit formulier in te vullen, geef je de Chamilo associatie en haar leden de toestemming je informatie door te mailen over belangrijke activiteiten of updates in de Chamilo software of community. Hierdoor kan de community groeien als een georganiseerde entiteit waar informatie goed doorstroomt, met permanent respect voor je tijd en je privacy.\n\n\n\nMerk op dat je <b>niet verplicht</b> bent om dit formulier in te vullen. Wil je anoniem blijven, dan verlies je natuurlijk wel de voordelen verbonden aan geregistreerde portalbeheerders. Tegelijk zullen we je beslissing respecteren. Laat het formulier in dit geval leeg en klik op \"Volgende\".";
 $CompanyActivity = "Bedrijfsactiviteit";
 $PleaseAllowUsALittleTimeToSubscribeYouToOneOfOurCourses = "Gelieve even geduld te hebben zodat wij u kunnen inschrijven in één van onze cursussen. Indien u denkt dat wij dit vergeten zijn, contacteer de beheerder(s) van dit platform. U kan normaal gezien de gegevens terugvinden onderaan (in de voet) deze pagina.";
 $DateUnLock = "Ontgrendel datum";
@@ -5397,7 +5402,7 @@ $ExamTaken = "Genomen";
 $ExamNotTaken = "Niet afgenomen";
 $ExamPassX = "Minum om te slagen %s";
 $ExamFail = "Niet geslaagd";
-$ExamTracking = "Examen opvolging";
+$ExamTracking = "Opvolging examens";
 $NoAttempt = "Geen pogingen";
 $PassExam = "Geslaagd";
 $CreateCourseRequest = "Maak een cursusverzoek aan";
@@ -5438,8 +5443,7 @@ $CourseRequestPageForApproval = "Dit cursusverzoek kan goedgekeurd worden op de
 $PleaseActivateCourseValidationFeature = "De optie \"Cursusvalidering\" is nog niet ingeschakeld. Wil je deze optie gebruiken, schakel ze dan in door de instelling %s te gebruiken.";
 $CourseRequestLegalNote = "De informatie over dit cursusverzoek is afgeschermd. Het mag enkel gebruikt worden om een nieuwe cursus op te starten in ons e-learning portaal. Deze informatie mag niet gedeeld worden met derden.";
 $EnableCourseValidation = "Cursusvalidering";
-$EnableCourseValidationComment = "Als de optie \"cursusvalidering\" ingeschakeld is, kan een onderwijzer zelf geen cursus aanmaken. Hij/zij moet een cursusverzoek invullen. De platformbeheerder zal de verzoeken evalueren en dan goed- of afkeuren.
-Deze functionaliteit maakt gebruik van automatische e-mail verzending. Zorg dat Chamilo geconfigureerd is met toegang tot een mailserver en beschikt over een exclusief e-mail adres.";
+$EnableCourseValidationComment = "Als de optie \"cursusvalidering\" ingeschakeld is, kan een onderwijzer zelf geen cursus aanmaken. Hij/zij moet een cursusverzoek invullen. De platformbeheerder zal de verzoeken evalueren en dan goed- of afkeuren.\nDeze functionaliteit maakt gebruik van automatische e-mail verzending. Zorg dat Chamilo geconfigureerd is met toegang tot een mailserver en beschikt over een exclusief e-mail adres.";
 $CourseRequestAskInfoEmailSubject = "%s Verzoek voor bijkomende informatie over een cursusverzoek %s";
 $CourseRequestAskInfoEmailText = "We hebben je verzoek ontvangen voor een nieuwe cursus met de code %s. We hebben meer informatie nodig om het voorstel te evalueren.\n\nGelieve  een kort woordje uitleg te geven over de inhoud van de cursus (beschrijving), de doelstellingen, je doelgroep van de vooropgestelde cursus. Indien van toepassing, vermeld de naam van de instelling of de afdeling in wiens naam je het verzoek indiende.";
 $CourseRequestAcceptedEmailSubject = "%s Cursusverzoek %s is goedgekeurd";
@@ -5447,8 +5451,7 @@ $CourseRequestAcceptedEmailText = "Cursusverzoek %s werd goedgekeurd. Een nieuwe
 $CourseRequestRejectedEmailSubject = "%s Cursusverzoek %s werd afgekeurd";
 $CourseRequestRejectedEmailText = "Het spijt ons te moeten meedelen dat je cursusverzoek %s niet geaccepteerd werd, omdat die niet voldoet aan onze Algemene Voorwaarden.";
 $CourseValidationTermsAndConditionsLink = "Cursusvalidering - link naar de algemene voorwaarden";
-$CourseValidationTermsAndConditionsLinkComment = "Deze URL leidt naar de \"Algemene Voorwaarden\" die van toepassing zijn als je een cursusverzoek wil indienen. Als hier een URL is ingevuld, zal deze gebruiker deze moeten lezen en goedkeuren als die een cursusverzoek wil indienen.
-Als je de \"Algemene Voorwaarden\" module in Chamilo gebruikt en je wil die URL gebruiken, laat dit veld dan leeg.";
+$CourseValidationTermsAndConditionsLinkComment = "Deze URL leidt naar de \"Algemene Voorwaarden\" die van toepassing zijn als je een cursusverzoek wil indienen. Als hier een URL is ingevuld, zal deze gebruiker deze moeten lezen en goedkeuren als die een cursusverzoek wil indienen.\nAls je de \"Algemene Voorwaarden\" module in Chamilo gebruikt en je wil die URL gebruiken, laat dit veld dan leeg.";
 $CourseCreationFailed = "De aanmaak van de cursus is mislukt door een interne fout.";
 $CourseRequestCreationFailed = "Het cursusverzoek werd niet ingediend door een interne fout.";
 $CourseRequestEdit = "Cursusverzoek bewerken";
@@ -5468,8 +5471,7 @@ $SSOServerUnAuthURIComment = "De pagina die de server gebruikt om de gebruiker a
 $SSOServerProtocolTitle = "Protocol van de Single Sign On server";
 $SSOServerProtocolComment = "De protocol-prefix gebruikt door je Single Sign On server (we adviseren https:// aangezien andere protocols onbeveiligd zijn en dus gevaarlijk voor authenticatie)";
 $EnabledWirisTitle = "WIRIS wiskundige editor";
-$EnabledWirisComment = "Schakel de WIRIS wikundige editor in. Door deze plugin te installeren, krijg je de WIRIS editor en de WIRIS CAS. De activering is pas compleet als ook de <a href=\"http://www.wiris.com/es/plugins3/ckeditor/download\">PHP plugin voor CKeditor WIRIS</a> gedownload en gedecomprimeerd is in de Chamilo map main/inc/lib/javascript/ckeditor/plugins/
-Dit is noodzakelijk want WIRIS is gepatenteerd en de dienstverlening is <a href=\"http://www.wiris.com/store/who-pays\">commercieel</a>. Wil je wijzigingen aanbrengen aan deze plugin, bewerk dan configuration.ini of vervang de inhoud door de standaard configuration.ini die bij Chamilo geleverd wordt.";
+$EnabledWirisComment = "Schakel de WIRIS wikundige editor in. Door deze plugin te installeren, krijg je de WIRIS editor en de WIRIS CAS. De activering is pas compleet als ook de <a href=\"http://www.wiris.com/es/plugins3/ckeditor/download\">PHP plugin voor CKeditor WIRIS</a> gedownload en gedecomprimeerd is in de Chamilo map main/inc/lib/javascript/ckeditor/plugins/\nDit is noodzakelijk want WIRIS is gepatenteerd en de dienstverlening is <a href=\"http://www.wiris.com/store/who-pays\">commercieel</a>. Wil je wijzigingen aanbrengen aan deze plugin, bewerk dan configuration.ini of vervang de inhoud door de standaard configuration.ini die bij Chamilo geleverd wordt.";
 $FileSavedAs = "Bestand opgeslagen als";
 $FileExportAs = "Exporteer bestand as";
 $AllowSpellCheckTitle = "Spellingscontrole";
@@ -5503,20 +5505,12 @@ $OnlyAccessFromYourGroup = "Enkel toegankelijk voor je groep";
 $CreateAssignmentPage = "Dit zal een speciale wiki pagina aanmaken waarin de docent een taak kan omschrijven en automatisch zal doorkoppelen naar de pagina's waar de cursisten de taak kunnen uitvoeren. Zowel de pagina van de docent en van de cursisten worden automatisch aangemaakt. In deze taken kunnen cursisten enkel hun eigen pagina's zien en bewerken, maar dit kan eenvoudig gewijzigd worden, mocht je dit willen.";
 $UserFolders = "Gebruikersmappen";
 $UserFolder = "Gebruikersmap";
-$HelpUsersFolder = "INFORMATIE ENKEL ZICHTBAAR VOOR DE DOCENT:\nDe gebruikersmap bevat een map voor elke gebruiker die toegang tot de documenttool gebruikt heeft, of of als een bestand werd ingestuurd door de online editor. Als geen van beide gebeurd is, zal er nog geen map bestaan voor deze gebruiker. Als er met groepen gewerkt wordt, zullen bestanden die via de editor opgeladen werden, in de map van een groep geplaatst worden - en deze zullen dan toegankelijk zijn door de leden van de groep.
-
-De gebruikersmap en alle onderliggende mappen zullen standaard verborgen zijn voor alle cursisten, maar elke cursist kan de inhoud in zijn/haar map zien door de online editor. Als een cursist de mapnaam van een andere cursist kent, kan die deze wel manueel invoeren.
-
-Als een map van een cursist zichtbaar is, kunnen andere gebruikers zien wat erin zit. In dit geval kan de student (met de bestanden in zijn/haar map) ook: online documenten aanmaken en bewerken, documenten converteren in een sjabloon voor persoonlijk gebruik, afbeeldingen (SVG, PNG) maken of bewerken, audiobestanden opnemen in WAV, teksten omzetten in MP3-bestanden, snapshots maken met je webcam, documenten insturen, mappen aanmaken, mappen en bestanden verplaatsen of verwijderen, downloaden en/of backuppen van zijn/haar map.
-
-Bovendien is de documenttool gesynchroniseerd met de bestandsbeheerder in de online editor, dus wijzigingen in de documenten in de ene omgeving, zijn ook zichtbaar in de andere.
-
-Dus de gebruikersmap is niet alleen de plaats waar bestanden geplaatst kunnen worden, het wordt een volledig documentbeheersysteem (waarvan hij al dan niet de eigenaar is) voor zijn/haar portfolio of persoonlijke documentzone van het sociale netwerk die zullen beschikbaar zijn voor hem/haar in andere cursussen.";
+$HelpUsersFolder = "INFORMATIE ENKEL ZICHTBAAR VOOR DE DOCENT:\nDe gebruikersmap bevat een map voor elke gebruiker die toegang tot de documenttool gebruikt heeft, of of als een bestand werd ingestuurd door de online editor. Als geen van beide gebeurd is, zal er nog geen map bestaan voor deze gebruiker. Als er met groepen gewerkt wordt, zullen bestanden die via de editor opgeladen werden, in de map van een groep geplaatst worden - en deze zullen dan toegankelijk zijn door de leden van de groep.\n\nDe gebruikersmap en alle onderliggende mappen zullen standaard verborgen zijn voor alle cursisten, maar elke cursist kan de inhoud in zijn/haar map zien door de online editor. Als een cursist de mapnaam van een andere cursist kent, kan die deze wel manueel invoeren.\n\nAls een map van een cursist zichtbaar is, kunnen andere gebruikers zien wat erin zit. In dit geval kan de student (met de bestanden in zijn/haar map) ook: online documenten aanmaken en bewerken, documenten converteren in een sjabloon voor persoonlijk gebruik, afbeeldingen (SVG, PNG) maken of bewerken, audiobestanden opnemen in WAV, teksten omzetten in MP3-bestanden, snapshots maken met je webcam, documenten insturen, mappen aanmaken, mappen en bestanden verplaatsen of verwijderen, downloaden en/of backuppen van zijn/haar map.\n\nBovendien is de documenttool gesynchroniseerd met de bestandsbeheerder in de online editor, dus wijzigingen in de documenten in de ene omgeving, zijn ook zichtbaar in de andere.\n\nDus de gebruikersmap is niet alleen de plaats waar bestanden geplaatst kunnen worden, het wordt een volledig documentbeheersysteem (waarvan hij al dan niet de eigenaar is) voor zijn/haar portfolio of persoonlijke documentzone van het sociale netwerk die zullen beschikbaar zijn voor hem/haar in andere cursussen.";
 $HelpFolderChat = "INFORMATIE ENKEL ZICHTBAAR VOOR DE INSTRUCTEUR:\nDeze map bevat alle sessies die geopend werden in de chat. Hoewel de chats vaak banaal zijn, kunnen anderen bijzonder interessant zijn om op te nemen in je cursus of te gebruiken in je cursus. Om dit te doen zonder de zichtbaarheid van de map te wijzigen, maak je het bestand zichtbaar en maak je een koppeling van waar je het wil gebruiken.";
 $HelpFolderCertificates = "INFORMATIE ENKEL ZICHTBAAR VOOR DE INSTRUCTEUR:\nDeze map bevat de verschillende certificaatsjablonen die aangemaakt werden via het puntenboek. Het is niet aangewezen om deze zichtbaar te maken voor iedereen.";
 $DestinationDirectory = "Bestemmingsmap";
 $CertificatesFiles = "Certificaten";
-$ChatFiles = "Chatgeschiedenis";
+$ChatFiles = "Chat geschiedenis";
 $Flash = "Flash";
 $Video = "Video";
 $Images = "Afbeeldingen";
@@ -5618,9 +5612,21 @@ $ByCourse = "Per cursus";
 $MyQCM = "Mijn meerkeuzevragen";
 $LearnpathUpdated = "Leerpad bijgewerkt";
 $YouNeedToCreateACareerFirst = "Je moet een carrière aanmaken voor je promoties kunt toevoegen (promoties zijn sub-elementen van een carrière)";
+$OutputBufferingInfo = "Uitvoer buffer instelling is \"On\" als deze geactiveerd is of \"Off\" als deze uitgeschakeld is. Deze instelling kan ook geactiveerd worden door een integer waarde (bijvoorbeeld 4096) welke de uitvoor buffer grootte is.";
+$LoadedExtension = "extensie geladen";
+$AddACourse = "Voeg een cursus toe";
+$PerWeek = "Per week";
+$SubscribeGroupToSessions = "Schrijf groep in voor sessies";
+$SubscribeGroupToCourses = "Schrijf groep in voor cursussen";
+$CompareStats = "Vergelijk statistieken";
+$RenameAndComment = "Hernoem en geef commentaar";
+$PhotoRetouching = "Photo be/bijwerken";
+$EnabledPixlrTitle = "Activeer externe Pixlr service";
+$EnabledPixlrComment = "Pixlr maakt het mogelijk om je foto's te bewerken, aanpassen en filteren met opties vergelijkbaar met Photoshop. Het is de ideale aanvulling om plaatjes te bewerken gebaseerd op bitmap.";
 $PDFWaterMarkHeader = "Watermerk hoofding in geëxporteerde PDF's";
 $False = "Niet waar";
 $DoubtScore = "Ik weet het niet";
+$PublicationDate = "Publicatiedatum";
 $MySocialGroups = "Mijn sociale groepen";
 $SocialGroups = "Sociale groepen";
 $CreateASocialGroup = "Sociale groep maken";
@@ -5633,8 +5639,12 @@ $PropagateNegativeResults = "Verspreid negatieve resultaten tussen vragen";
 $InsertALinkToThisQuestionInTheExercise = "Gebruik deze vraag in de test als een koppeling (geen kopie)";
 $OnlyShowScore = "Oefenmode: toon score alleen";
 $EditMembersList = "Wijzig gebruikerslijst";
+$MailNotifyInvitation = "Stuur email bij nieuw vriendschapsverzoek";
+$MailNotifyMessage = "Stuur email bij persoonlijk bericht";
+$MailNotifyGroupMessage = "Stuur email bij bericht in groep";
 $ImportExcelQuiz = "Importeer quiz uit Excel";
 $DownloadExcelTemplate = "Download het Excel sjabloon";
+$YouAreCurrentlyUsingXOfYourX = "Je gebruikt momenteel %s MB (%s) van de %s MB beschikbaar.";
 $ExerciseWillBeActivatedFromXToY = "De oefening zal geactiveerd worden van %s tot %s";
 $ExerciseAvailableFromX = "Oefening beschikbaar van %s";
 $ExerciseAvailableUntilX = "Oefening beschikbaar tot %s";
@@ -5700,7 +5710,9 @@ $LockEvaluation = "Evaluatie vergrendelen";
 $UnLockEvaluation = "Evaluatie ontgrendelen";
 $TheEvaluationIsLocked = "De evaluatie werd vergrendeld";
 $BackToEvaluation = "Terug naar evaluatie";
+$Reset = "Wissen";
 $YouAreRegisterToSessionX = "Je bent aangemeld op sesie: %s.";
+$Configuration = "Configuratie";
 $TotalWeight = "Totaal gewicht";
 $SumOfActivitiesWeightMustBeEqualToTotalWeight = "De som van alle gewichten van de activiteit moet gelijk zijn aan het totale gewicht dat werd aangegeven in de instellingen van de puntenlijst. De cursisten kunnen anders niet genoeg scoren om hun certificaat te behalen.";
 $TotalSumOfWeights = "De som van alle gewichten van de activiteiten in deze opdracht moet gelijk zijn aan dit nummer.";
@@ -5715,15 +5727,19 @@ $LoadUsersExtraData = "Laad gebruikers' extra data";
 $TotalWeightMustBeX = "De som van alle gewichten van activiteiten moet %s zijn.";
 $DisableEndDate = "Schakel einddatum uit";
 $ForumCategories = "Forum categorieën";
+$EnableStartTime = "Instellen tijdstip begin";
+$EnableEndTime = "Instellen tijdstip einde";
 $AllEvents = "Alle evenementen";
 $StartTest = "Start de test";
 $ExportAsDOC = "Exporteren als .doc";
+$Wrong = "Fout";
 $QuestionsToReview = "Te beoordelen vragen";
 $QuestionWithNoAnswer = "Vragen zonder antwoord";
 $ValidateAnswers = "Antwoorden valideren";
 $ReviewQuestions = "Geselecteerde antwoorden nakijken";
 $YouTriedToResolveThisExerciseEarlier = "U hebt vroeger reeds geprobeerd om deze oefening op te lossen";
 $ThereAreNoQuestionsForThisExercise = "Er zijn geen vragen voor deze oefening";
+$SaveForNow = "Opslaan en later verderdoen";
 $ContinueTest = "Ga verder met de test";
 $XQuestionsWithTotalScoreY = "%d vragen, goed voor een totale score (op alle vragen) van %s";
 $QuestionLowerCase = "vraag";
@@ -5759,6 +5775,7 @@ $MofidfyCategoryDone = "Categorie gewijzigd";
 $NotInAGroup = "Niet in een groep";
 $DoFilter = "Filteren";
 $ByCategory = "Per categorie";
+$Skills = "Competenties";
 $ResultsNotRevised = "Resultaten niet beoordeeld";
 $ResultNotRevised = "Resultaat niet beoordeeld";
 $ActivateLegal = "Juridische termen inschakelen";
@@ -5766,9 +5783,13 @@ $ShowALegalNoticeWhenEnteringTheCourse = "Toon een gebruiksovereenkomst bij open
 $NumberOfStudentsWhoTryTheExercise = "Aantal cursisten die de oefening hebben gemaakt";
 $LowestScore = "Laagste score";
 $HighestScore = "Hoogste score";
+$ExerciseProgress = "Voortgang oefeningen";
 $SelectGradebook = "Selecteer opdracht";
 $UserList = "Gebruikerslijst";
+$SearchUsers = "Zoek deelnemers";
+$Administration = "Beheer";
 $AddAsAnnouncement = "Toevoegen als aankondiging";
+$AcceptLegal = "Gebruiksovereenkomst aanvaarden.";
 $RandomQuestionByCategory = "Willekeurige vraag per categorie";
 $QuestionDisplayCategoryName = "Toon vragen categorie";
 $ReviewAnswers = "Beoordeel mijn antwoorden";
@@ -5786,21 +5807,54 @@ $AddGradebook = "Voeg opdracht toe";
 $NoStudents = "Geen student";
 $NoData = "Geen data beschikbaar";
 $IAmAHRM = "Ik ben een human resources manager";
+$NumberOfStudents = "Aantal cursisten";
+$NumberStudentsAccessingCourse = "Aantal cursisten nu aanwezig";
+$PercentageStudentsAccessingCourse = "Percentage cursisten nu aanwezig";
+$NumberStudentsCompleteAllActivities = "Aantal cursisten die de cursus afgerond hebben";
+$PercentageStudentsCompleteAllActivities = "Percentage van cursisten die de cursus afgerond hebben";
+$AverageOfActivitiesCompletedPerStudent = "Gemiddeld aantal activiteiten voltooid per cursist";
+$TotalTimeSpentInTheCourse = "Totale tijd doorgebracht in de cursus";
+$AverageTimePerStudentInCourse = "Gemiddelde tijd doorgebracht per cursist";
+$NumberOfDocumentsInLearnpath = "Aantal documenten in leerpad";
+$NumberOfExercisesInLearnpath = "Aantal oefeningen in leerpad";
+$NumberOfLinksInLearnpath = "Aantal koppelingen in leerpad";
+$NumberOfForumsInLearnpath = "Aantal forums in leerpad";
+$NumberOfAssignmentsInLearnpath = "Aantal taken in leerpad";
+$NumberOfAnnouncementsInCourse = "Aantal aankondigingen in leerpad";
+$CurrentCoursesReport = "Overzicht huidige cursussen";
+$CoursesReporting = "Cursus statistieken";
+$AdminReports = "Algemene statistieken";
+$ExamsReporting = "Statistieken examens";
+$MyReporting = "Mijn voortgang";
+$SessionList = "Sessielijst";
+$StudentList = "Lijst cursisten";
 $StudentsWhoAreTakingTheExerciseRightNow = "Aantal cursisten die momenteel de oefening maken";
 $ReportByQuestion = "Rapporteren per vraag";
 $LiveResults = "Live resultaten";
+$Me = "Ik";
+$Vote = "Stem";
+$Votes = "Stemmen";
+$XStarsOutOf5 = "%s sterren (max. 5)";
+$Visit = "Bezoek";
+$Visits = "Bezoeken";
+$YourVote = "Jouw stem";
+$HottestCourses = "Populairste cursussen";
+$LoginToVote = "Meld aan om te stemmen";
 $ImportGlossary = "Importeer woordenlijst";
 $ReplaceGlossary = "Vervang woordenlijst";
 $CannotDeleteGlossary = "Kan de woordenlijst niet verwijderen";
 $TermsImported = "Termen geïmporteerd";
 $TermsNotImported = "Termen niet geïmporteerd";
 $ExportGlossaryAsCSV = "Exporteer woordenlijst als een CSV-bestand";
+$ChatConnected = "Chat (Verbonden)";
+$ChatDisconnected = "Chat (Klik om te verbinden)";
 $AddCourseDescription = "Voeg cursus beschrijving toe";
 $RecordAnswer = "Antwoord opnemen";
 $UseTheMessageBelowToAddSomeComments = "Gebruik onderstaand bericht om een commentaar toe te voegen";
 $SendRecord = "Record verzenden";
 $DownloadLatestRecord = "Record downloaden";
 $OralExpression = "Mondelinge expressie";
+$YouHaveEnteredTheCourseXInY = "Je bent ingeschreven voor de cursus <b>%s</b>(%s)";
 $CongratulationsYouPassedTheTest = "Gefeliciteerd. U bent geslaagd!";
 $YouDidNotReachTheMinimumScore = "U hebt de minimumscore niet gehaald.";
 $EndTest = "Einde van de test";
@@ -5808,6 +5862,10 @@ $SelectGradeModel = "Selecteer een kwalificatie model";
 $AllMustWeight100 = "De som van alle waarden moet 100 zijn";
 $Components = "Componenten";
 $OnlyActiveWhenThereAreAnyComponents = "Deze optie is ingeschakeld als u evaluaties of categorieën hebt";
+$GoToCourse = "Meld je aan voor de cursus";
+$Configure = "Configuratie";
+$Regions = "Regio's";
+$CourseList = "Cursuslijst";
 $GradebookLockedAlert = "Deze evaluatie werd vergrendeld. Je kan ze niet ontgrendelen. Als je ze echt wil ontgrendelen, contacteer dan de platform beheerder, leg hem/haar uit waarom je de evaluatie moet kunnen ontgrendelen (anders kan je evaluatie als frauduleus worden aanzien)";
 $AnnouncementForGroup = "Aankondiging voor een groep";
 $AllGroups = "Alle groepen";
@@ -5822,11 +5880,40 @@ $ExerciseAverage = "Gemiddelde van de oefening";
 $NoNegativeScore = "Geen negatieve score";
 $GlobalMultipleAnswer = "Globale meerdere antwoorden";
 $AllQuestionsShort = "Alle";
+$FollowedSessions = "Gevolgde sessies";
+$FollowedCourses = "Gevolgde cursussen";
+$FollowedUsers = "Gevolgde gebruikers";
+$Timeline = "Tijdslijn";
 $CourseCatalog = "Cursuscatalogus";
 $ProblemsRecordingUploadYourOwnAudioFile = "Problemen bij het opnemen? Upload uw eigen geluidsbestand.";
 $List = "Lijst";
 $CourseDescriptions = "Cursus beschrijvingen";
 $GlossaryTermUpdated = "Termen aangepast";
 $DeleteAllGlossaryTerms = "Verwijder alle termen";
+$YouNotYetAchievedCertificates = "Je hebt nog geen certificaten behaald. Vervolledig je leerpad om er een te halen!";
+$ForumThreadPeerScoring = "Thread scored by peers";
+$ForumThreadPeerScoringComment = "If selected, this option will require each student to qualify at least 2 other students in order to get his score greater than 0 in the gradebook.";
+$ForumThreadPeerScoringStudentComment = "Om een score te ontvangen in dit forum, moet een andere cursist punten geven voor je bijdragen, en moet jij zelf minstens punten geven op de bijdragen van twee andere cursisten in het forum. Zolang dit niet gebeurd is, blijft je score for deze deelname op 0 staan in je globale punten.";
 $MyCoursesSessionView = "Per module";
+$AddCustomCourseIntro = "Plaats een voorwoord bij deze cursus door te klikken op het bewerken-icoontje...";
+$PoweredByX = "%s onder de motorkap";
+$LatestLoginInCourse = "Meest recente bezoek";
+$LatestLoginInPlatform = "Meest recente toegang tot platform";
+$FirstLoginInPlatform = "Eerste toegang tot platform";
+$FirstLoginInCourse = "Eerste bezoek aan cursus";
+$GroupReporting = "Opvolging groep";
+$XDays = "%s dagen";
+$SkillProfile = "Competentieprofiel";
+$AchievedSkills = "Gerealiseerde competenties";
+$BusinessCard = "Visitekaartje";
+$BadgeDetails = "Badge details";
+$TheUserXNotYetAchievedTheSkillX = "De gebruiker %s beheerst deze vaardigheid nog niet \"%s\"";
+$IssuedBadgeInformation = "Verleende badge informatie";
+$RecipientDetails = "Recipient details";
+$SkillAcquiredAt = "Competentie verworven op";
+$BasicSkills = "Basisvaardigheden";
+$TimeXThroughCourseY = "<strong>%s</strong> tot <em>%s</em>";
+$ExportBadge = "Badge exporteren";
+$HotspotExerciseFinished = "Klik op de knop onderaan om je antwoorden te valideren.";
+$FollowedStudentBosses = "Cursist voortrekkers die ik opvolg";
 ?>

+ 4 - 2
main/lang/english/trad4all.inc.php

@@ -7664,5 +7664,7 @@ $RecordAudio = "Record audio";
 $StartRecordingAudio = "Start recording";
 $StopRecordingAudio = "Stop recording";
 $SaveRecordedAudio = "Save recorded audio";
-$GradeFromX = "Grade for course: %s";
-?>
+$GradeFromX = "Grades from course: %s";
+$TitleMandatory = "A title is required";
+$NoCourseCategorySupplied = "No course category was provided";
+?>

+ 2 - 0
main/lang/french/trad4all.inc.php

@@ -7652,4 +7652,6 @@ $StartRecordingAudio = "Lancer l'enregistrement";
 $StopRecordingAudio = "Arrêter l'enregistrement";
 $SaveRecordedAudio = "Sauvegarder l'audio enregistré";
 $GradeFromX = "Bulletin pour l'îlot: %s";
+$TitleMandatory = "Le titre est obligatoire";
+$NoCourseCategorySupplied = "Aucune catégorie de cours n'a été indiquée";
 ?>

+ 188 - 7
main/lang/portuguese/trad4all.inc.php

@@ -6,6 +6,14 @@ $TotalX = "Total: %s";
 $SkillsReport = "Relatório de Competências";
 $TemplateCertificateTitle = "Certificado";
 $DownloadCertificate = "Baixar Certificado";
+$Write = "Escrever";
+$SocialWall = "Mural social";
+$IncludeAllUsers = "Incluir todos os utilizadores";
+$DocumentAlreadyAdded = "Documento já adicionado";
+$AddDocument = "Adicionar documento";
+$ShowDescription = "Mostrar descrição";
+$SubscribeTeachersToSession = "Inscrever professores para a(s) sessão(sessões)";
+$DocumentsAdded = "Documentos adicionados";
 $CatchScreenCasts = "Capturas de ecrãn";
 $View = "Ver";
 $AmountSubmitted = "Número submetido";
@@ -30,7 +38,7 @@ $TheTextYouEnteredDoesNotMatchThePicture = "O texto inserido não corresponde à
 $RemoveOldRelationships = "Remover relações anteriores";
 $ImportSessionDrhList = "Importar lista de diretores de RH para as sessões";
 $FollowedStudents = "Alunos seguidos";
-$FollowedTeachers = "Instrutores seguidos";
+$FollowedTeachers = "Professores seguidos";
 $AllowOnlyFiles = "Permitir apenas ficheiros";
 $AllowOnlyText = "Permitir apenas texto";
 $AllowFileOrText = "Permitir ficheiros ou texto online";
@@ -669,6 +677,7 @@ $CourseDescriptionAdded = "Descrição do curso adicionada";
 $NotebookAdded = "Nota adicionada";
 $NotebookUpdated = "Nota actualizada";
 $NotebookDeleted = "Nota eliminada";
+$DeleteAllAttendances = "Apagar todas as presenças";
 $AssignSessionsTo = "Atribuir sessões a";
 $Upload = "Enviar";
 $MailTemplateRegistrationTitle = "Novo utilizador em ((sitename))";
@@ -927,7 +936,7 @@ $Subscribe = "Aderir/inscrever-se";
 $AlreadySubscribed = "Já aderido/subscrito";
 $CodeMandatory = "Código obrigatório";
 $CourseCategoryMandatory = "Categoria de curso obrigatória";
-$TeacherMandatory = "Instrutor obrigatório";
+$TeacherMandatory = "Nome do professor obrigatório";
 $CourseCategoryStored = "Categoria do curso criada";
 $WithoutTimeLimits = "Sem limite de tempo";
 $Added = "Adicionado";
@@ -1028,8 +1037,8 @@ $Used = "em utilização";
 $Exist = "existente";
 $ShowBackLinkOnTopOfCourseTree = "Apresentar ligações para voltar a partir das categorias/cursos";
 $ShowNumberOfCourses = "Apresentar o número de cursos";
-$DisplayTeacherInCourselistTitle = "Exibir o nome do instrutor no nome do curso";
-$DisplayTeacherInCourselistComment = "Exibir o nome do instrutor na lista do curso";
+$DisplayTeacherInCourselistTitle = "Exibir o nome do professor no nome do curso";
+$DisplayTeacherInCourselistComment = "Exibir o nome do professor na lista do curso";
 $DisplayCourseCodeInCourselistComment = "Exibir o Código do Curso na lista do curso";
 $DisplayCourseCodeInCourselistTitle = "Exibir o Código no nome do Curso";
 $ThereAreNoVirtualCourses = "Não existem cursos pseudónimos/virtuais na plataforma.";
@@ -1256,7 +1265,7 @@ $AllowLostPasswordTitle = "Password/senha perdida/esquecida";
 $AllowLostPasswordComment = "Os utilizadores estão autorizados a solititar a sua password/senha perdida/esquecida?";
 $AllowRegistrationTitle = "Registro/inscrição";
 $AllowRegistrationComment = "É permitido o registro/inscrição como um novo utilizador? Podem os utilizadores criar novas contas de utilizador?";
-$AllowRegistrationAsTeacherTitle = "Registro/inscrição como Instrutor";
+$AllowRegistrationAsTeacherTitle = "Registro/inscrição como Professor";
 $AllowRegistrationAsTeacherComment = "Pode qualquer utilizador registar-se como instrutor (com permissões para criar cursos)?";
 $PlatformLanguage = "Idioma do portal";
 $Tuning = "Melhorar/aperfeiçoar";
@@ -1514,7 +1523,7 @@ $WrongDate = "Formato de data incorrecto (yyyy-mm-dd)";
 $YouWillSoonReceiveMailFromCoach = "Brevemente irá receber um e-mail do seu tutor.";
 $SlideSize = "Tamanho dos slides/apresentação";
 $EphorusPlagiarismPrevention = "Prevenção de plágio Ephorus (verificar se os alunos plagiaram/copiaram trabalho uns dos outros)";
-$CourseTeachers = "Instrutores";
+$CourseTeachers = "Professores";
 $UnknownTeacher = "Instrutor desconhecido";
 $HideDLTTMarkup = "Ocultar/esconder caracteres DLTT";
 $ListOfCoursesOfSession = "Lista de cursos para a sessão";
@@ -2337,9 +2346,11 @@ $AddAssignmentToCourse = "Adicionar trabalho/tarefa ao curso";
 $AddForumToCourse = "Adicionar fórum ao curso";
 $SaveAudioAndOrganization = "Guardar áudio e organização";
 $UploadOnlyMp3Files = "Por favor envie apenas ficheiros mp3";
+$NoPosts = "Sem posts";
 $TypeMessage = "Por favor, escreva a sua mensagem!";
 $ConfirmReset = "Tem a certeza que deseja eliminar todas as mensagens?";
 $ClearList = "Limpar o chat";
+$ShortDescription = "Descrição curta";
 $CallSent = "Convite de Chat foi enviado. Aguardando aceitação pelo convidado.";
 $ChatDenied = "O seu convite de Chat foi rejeitado pelo convidado.";
 $Send = "Enviar mensagem";
@@ -2747,7 +2758,7 @@ $Propositions = "Propostas de sugestão de melhoria de";
 $Maj = "Actualizar";
 $Modify = "Editar";
 $Invisible = "invisível";
-$Save = "Enviar mensagem";
+$Save = "Guardar";
 $Move = "Mover";
 $Help = "Ajuda";
 $Ok = "Validar";
@@ -4303,6 +4314,17 @@ $BadFormData = "Falha no envio: dados incorrectos no formulário. Por favor cont
 $GeneralError = "Ocorreu um erro. Por favor, contacte o administrador do sistema.";
 $ToPlayTheMediaYouWillNeedToUpdateYourBrowserToARecentVersionYouCanAlsoDownloadTheFile = "Para ver o conteúdo deverá ou atualizar o seu browser para uma versão mais recente ou atualizar o plugin Flash. Verifique se o ficheiro tem a extensão correta.";
 $UpdateRequire = "Atualização necessária";
+$ThereAreNoRegisteredDatetimeYet = "Não existe ainda qualquer data/hora registada";
+$CalendarList = "Lista de calendários de presenças";
+$AttendanceCalendarDescription = "O calendário de presenças permite-lhe registar listas de presenças (uma por por sessão que os alunos tenham de frequentar). Adicione nova lista de presenças aqui.";
+$CleanCalendar = "Limpar o calendário em todas as listas";
+$AddDateAndTime = "Adicionar uma data e horário";
+$AttendanceSheet = "Registo de presenças";
+$GoToAttendanceCalendar = "Ir para o calendário de presenças";
+$AttendanceCalendar = "Calendário de presenças";
+$QualifyAttendanceGradebook = "Avalie a lista de presenças na ferramenta de avaliação";
+$CreateANewAttendance = "Criar nova lista de presenças";
+$Attendance = "Presenças";
 $XResultsCleaned = "%d resultados apagados";
 $AreYouSureToDeleteResults = "Tem a certeza de que deseja apagar os resultados?";
 $CouldNotResetPassword = "Não foi possível redefinir a senha";
@@ -5112,14 +5134,28 @@ $InvitationDenied = "Convite negado";
 $UserAdded = "O utilizador foi adicionado";
 $UpdatedIn = "Atualizado em";
 $Metadata = "Metadados";
+$AddMetadata = "Visualizar/Editar metadados";
 $SendMessage = "Enviar Mensagem";
 $SeeForum = "Ver Fórum";
 $SeeMore = "Ver Mais";
+$NoDataAvailable = "Não há dados disponíveis";
 $Created = "Criado";
+$LastUpdate = "Última actualização";
+$UserNonRegisteredAtTheCourse = "Utilizador não registado no Curso";
 $EditMyProfile = "Editar o meu perfil";
+$Announcements = "Anúncios";
 $Password = "Senha";
+$DescriptionGroup = "Descrição do grupo";
+$Installation = "Instalação";
+$ReadTheInstallationGuide = "Ler o guia de instalação";
 $SeeBlog = "Ver Blog";
 $Blog = "Blog";
+$BlogPosts = "Posts no Blog";
+$BlogComments = "Comentários no Blog";
+$ThereAreNotExtrafieldsAvailable = "Não existem campos extra disponíveis";
+$StartToType = "Comece a escrever, depois clique para validar";
+$InstallChamilo = "Instalar Chamilo";
+$ChamiloURL = "Chamilo URL";
 $YouDoNotHaveAnySessionInItsHistory = "Não possui qualquer sessão do curso no seu histórico";
 $PortalHomepageDefaultIntroduction = "Parabéns! Você instalou com sucesso seu portal de e-learning!
 
@@ -5130,6 +5166,7 @@ Edite a página inicial do portal através da opção de Edição da Página Ini
 Você pode sempre encontrar mais informação sobre este software em nosso Web site: http://www.chamilo.org.
 Divirta-se, e não hesite em juntar-se à comunidade e dar-nos o feedback através de nosso fórum.";
 $WithTheFollowingSettings = "com as seguintes configurações:";
+$ThePageHasBeenExportedToDocArea = "A página foi exportada para a ferramenta de documento";
 $TitleColumnGradebook = "Cabeçalho da coluna no Relatório de Competências";
 $QualifyWeight = "Peso no Relatório";
 $ConfigureExtensions = "Configurar extensões";
@@ -5145,12 +5182,31 @@ $ViewUsersWithTask = "Trabalhos recebidos";
 $ReminderMessage = "Enviar lembrete";
 $DateSent = "Dados enviados";
 $ViewUsersWithoutTask = "Ver trabalhos/tarefas em falta";
+$SuggestionOnlyToEnableSubLanguageFeatureOrUpgradeProcess = "Necessário apenas para a função de sub-linguas ou para o processo de actualização de versão";
+$ThematicAdvance = "Progresso temático";
+$EditProfile = "Editar perfil";
+$TabsDashboard = "Painel";
 $DashboardBlocks = "Módulos do Painel";
 $DashboardList = "Lista do Painel";
 $YouHaveNotEnabledBlocks = "Não tem ativo nenhum módulo";
 $BlocksHaveBeenUpdatedSuccessfully = "Os módulos foram atualizados";
+$Dashboard = "Painel";
+$DashboardPlugins = "Plugins do Painel";
 $ThisPluginHasbeenDeletedFromDashboardPluginDirectory = "Este plugin foi excluído da pasta de plugins do painel";
 $EnableDashboardPlugins = "Ativar plugins do painel";
+$SelectBlockForDisplayingInsideBlocksDashboardView = "Selecionar módulos para visualização no painel";
+$ColumnPosition = "Posição (coluna)";
+$EnableDashboardBlock = "Ativar módulo do painel";
+$ThereAreNoEnabledDashboardPlugins = "Não está ativado nenhum plugin do painel";
+$Enabled = "Ativado";
+$ThematicAdvanceQuestions = "Qual é o actual progresso alcançado pelos alunos no Curso? Quanto julga faltar comparando com o programa completo?";
+$ThematicAdvanceHistory = "Histórico do progresso";
+$Homepage = "Página Inicial";
+$Attendances = "Presenças";
+$CountDoneAttendance = "# presenças";
+$AssignUsers = "Definir utilizadores";
+$AssignCourses = "Definir Cursos";
+$AssignSessions = "Definir sessões";
 $CoursesListInPlatform = "Lista de cursos da plataforma";
 $AssignedCoursesListToHumanResourceManager = "Cursos atribuídos ao gestor de RH";
 $AssignedCoursesTo = "Cursos atribuídos a";
@@ -5161,10 +5217,29 @@ Se não for definido, o sistema utilizará o fuso horário do servidor. Se for d
 $UseUsersTimezoneTitle = "Permitir fusos horários definidos por utilizadores";
 $UseUsersTimezoneComment = "Ativar a possibilidade do utilizador definir o seu próprio fuso horário. O campo de fuso horário deve ser visível e editável na seção de administração antes do utilizador escolher o seu fuso horário.\r\nUma vez configurado, os utilizadores serão capazes de ver as possibilidades de fuso horário.";
 $FieldTypeTimezone = "Fuso horário";
+$Timezone = "Timezone";
 $AssignedSessionsHaveBeenUpdatedSuccessfully = "As sessões inscritas foram atualizadas";
 $AssignedCoursesHaveBeenUpdatedSuccessfully = "Os cursos inscritos foram atualizados";
 $AssignedUsersHaveBeenUpdatedSuccessfully = "Os utilizadores inscritos foram atualizados";
 $AssignUsersToX = "Alocar utilizadores a %s";
+$AssignUsersToHumanResourcesManager = "Definir utilizadores para gestor de Recursos Humanos";
+$AssignedUsersListToHumanResourcesManager = "Lista de utilizadores definidos para Gestor de Recursos Humanos";
+$AssignCoursesToX = "Definir cursos para %s";
+$SessionsListInPlatform = "Lista de sessões na plataforma";
+$AssignSessionsToHumanResourcesManager = "Definir sessões para o gestor de Recursos Humanos";
+$AssignedSessionsListToHumanResourcesManager = "Lista de sessões definidas para o gestor de Recursos Humanos";
+$SessionsInformation = "Relatório de sessões";
+$YourSessionsList = "As suas sessões";
+$TeachersInformationsList = "Relatório de professores";
+$YourTeachers = "Os seus professores";
+$StudentsInformationsList = "Relatório de alunos";
+$YourStudents = "Os seus alunos";
+$GoToThematicAdvance = "Ir para o progresso temático";
+$TeachersInformationsGraph = "Relatório gráfico dos professores";
+$StudentsInformationsGraph = "Relatório gráfico dos alunos";
+$Timezones = "Zona horária";
+$TimeSpentOnThePlatformLastWeekByDay = "Tempo dispendido na plataforma na última semana, por dia";
+$AttendancesFaults = "Faltas";
 $AttendanceSheetReport = "Relatório com lista de presenças";
 $YouDoNotHaveDoneAttendances = "Não tem presenças registadas";
 $DashboardPluginsHaveBeenUpdatedSuccessfully = "Os plugins do Painel foram atualizados com sucesso";
@@ -5223,9 +5298,14 @@ $AttachToMedia = "Anexar ao arquivo media";
 $ExamModeWithFinalScoreShowOnlyFinalScoreWithCategoriesIfAvailable = "Mostrar apenas o resultado final, com as categorias (se disponíveis)";
 $Media = "Media";
 $ForceEditingExerciseInLPWarning = "Está autorizado a editar este exercício, apesar de já ter sido utilizado na Rota de Aprendizagem. Se o editar, tente evitar alterar os resultados e objetivos previstos nos conteúdos do mesmo, de modo a evitar que afete resultados já obtidos por outros utilizadores que tenham feito o exercício em causa";
+$DashboardPluginsUpdatedSuccessfully = "Plugins do painel instalados com sucesso";
+$LoginEnter = "Login";
 $AssignSessionsToX = "Definir sessões para %s";
 $CopyExercise = "Copiar este exercício como um exercício novo";
 $CleanStudentResults = "Apagar todos os resultados dos alunos neste exercício";
+$AttendanceSheetDescription = "A folha de presenças permite-lhe especificar as datas em que regista presenças nos cursos em que está inscrito";
+$ThereAreNoRegisteredLearnersInsidetheCourse = "Não existe alunos registados no curso";
+$GoToAttendanceCalendarList = "Ir para a lista de calendário das datas das presenças";
 $AssignCoursesToSessionsAdministrator = "Atribuir cursos a sessões do administrador";
 $AssignCoursesToPlatformAdministrator = "Atribuir cursos ao administrador da plataforma";
 $AssignedCoursesListToPlatformAdministrator = "Lista de cursos atribuídos ao administrador da plataforma";
@@ -5236,16 +5316,60 @@ $AssignedSessionsListToPlatformAdministrator = "Lista de sessões atribuídas ao
 $AssignedSessionsListToSessionsAdministrator = "Lista de sessões atribuídas ao administrador das sessões";
 $EvaluationsGraph = "Gráfico das avaliações";
 $Url = "Endereço URL";
+$ToolCourseDescription = "Descrição do curso";
+$ToolDocument = "Documentos";
+$ToolLearnpath = "Percurso de Aprendizagem";
+$ToolLink = "Links";
+$ToolQuiz = "Testes";
+$ToolAnnouncement = "Anúncios";
+$ToolGradebook = "Avaliações";
+$ToolGlossary = "Glossário";
+$ToolAttendance = "Presenças";
+$ToolCalendarEvent = "Agenda";
+$ToolForum = "Fóruns";
+$ToolDropbox = "Dropbox";
+$ToolUser = "Utilizadores";
+$ToolGroup = "Grupos";
+$ToolChat = "Chat";
+$ToolStudentPublication = "Tarefas";
+$ToolSurvey = "Pesquisas";
+$ToolWiki = "Wiki";
+$ToolNotebook = "Bloco de Notas";
+$ToolBlogManagement = "Projetos";
+$ToolTracking = "Relatório";
+$ToolCourseSetting = "Definições";
+$ToolCourseMaintenance = "Backup";
+$AreYouSureToDeleteAllDates = "Tem a certeza de que deseja apagar todas as datas?";
 $ImportQtiQuiz = "Importar exrecícios Qti2";
 $ISOCode = "código ISO";
 $TheSubLanguageForThisLanguageHasBeenAdded = "Adicionado um sub-idioma a este idioma";
 $ReturnToLanguagesList = "Regressar à lista de idiomas";
+$AddADateTime = "Adicionar um horário";
 $ActivityCoach = "O instrutor da sessão terá todos os direitos e privilégios nos cursos que pertencem à sessão.";
 $AllowUserViewUserList = "Permitir que o utilizador veja a lista de utilizadores";
 $AllowUserViewUserListActivate = "Ativar lista de utilizadores";
 $AllowUserViewUserListDeactivate = "Desativar lista de utilizadores";
+$ThematicControl = "Controle de temas";
+$ThematicDetails = "Detalhes da vista temática";
+$ThematicList = "Visualizar a temática como uma lista";
+$Thematic = "Temática";
+$ThematicPlan = "Plano das temáticas";
+$EditThematicPlan = "Editar o progresso na temática";
+$EditThematicAdvance = "Editar o progresso na temática";
+$ThereIsNoStillAthematicSection = "Ainda não existe uma secção de temática";
+$NewThematicSection = "Nova secção de temática";
+$DeleteAllThematics = "Apagar todas as temáticas";
+$ThematicDetailsDescription = "Detalhes dos tópicos e o seu respetivo plano e progresso. Para indicar um tópico como concluído, selecione a data de acordo com a ordem cronológica e o sistema mostrará todas a datas anteriores como concluídas.";
+$SkillToAcquire = "Competências a adquirir";
+$Infrastructure = "Infraestrutura";
+$DurationInHours = "Duração em horas";
+$YouMustSelectAtleastAStartDate = "Tem de indicar uma data de início";
 $ReturnToLPList = "Voltar à lista";
+$AditionalNotes = "Notas adicionais";
+$StartDateCustom = "Data de início personalizada";
+$StartDateOptions = "Opções de data de início";
 $DoNotDisplayAnyAdvance = "Não mostrar o progresso";
+$ToolCourseProgress = "Progresso no curso";
 $ReUseACopyInCurrentTest = "Reutilizar uma cópia dentro do teste atual";
 $YouAlreadyInviteAllYourContacts = "Já convidou todos os seus contatos";
 $CategoriesNumber = "Categorias";
@@ -5271,6 +5395,7 @@ $LinkOpenBlank = "Abrir numa página diferente";
 $LinkOpenParent = "Abrir na janela de origem";
 $LinkOpenTop = "Abrir no topo";
 $LpPrerequisiteDescription = "Selecionar outra Rota de Aprendizagem como pré-requisito vai ocultar o atual pré-requisito até que o definido esteja completamente cumprido (100%)";
+$QualificationNumeric = "Máximo resultado";
 $ScoreAverageFromAllAttempts = "Pontuação média de todas as tentativas";
 $ExportAllCoursesList = "Exportar todos os cursos";
 $ExportSelectedCoursesFromCoursesList = "Exportar cursos selecionados da seguinte lista";
@@ -5286,10 +5411,34 @@ $CoursesInformation = "Informação dos cursos";
 $LearnpathVisible = "Rota de Aprendizagem tornada visível";
 $LinkInvisible = "Link/ligação tornado visível";
 $SpecialExportsIntroduction = "O recurso exportar especial destina-se a ajudar um instrutor a exportar todos os documentos de um curso numa única etapa. Uma outra opção deixa-o escolher os cursos que pretende exportar, e exportará igualmente os documentos das sessões destes cursos. Esta é uma operação muito pesada, que que recomendamos que não a inicie durante as horas de uso normal do seu portal. Faça-o num período mais calmo. Se não precisar do conteúdo todo de uma só vez, tente exportar os documentos dos cursos diretamente da ferramenta de manutenção dentro do próprio curso.";
+$Literal0 = "zero";
+$Literal1 = "um";
+$Literal2 = "dois";
+$Literal3 = "três";
+$Literal4 = "quatro";
+$Literal5 = "cinco";
+$Literal6 = "seis";
+$Literal7 = "sete";
+$Literal8 = "oito";
+$Literal9 = "nove";
+$Literal10 = "dez";
+$Literal11 = "onze";
+$Literal12 = "doze";
+$Literal13 = "treze";
+$Literal14 = "catorze";
+$Literal15 = "quinze";
+$Literal16 = "dezasseis";
+$Literal17 = "dezassete";
+$Literal18 = "dezoito";
+$Literal19 = "dezanove";
+$Literal20 = "vinte";
 $AllowUserCourseSubscriptionByCourseAdminTitle = "Permite a inscrição de novos utilizadores nos cursos pelo Administrador do Curso";
 $AllowUserCourseSubscriptionByCourseAdminComment = "Ativar esta opção permitirá que o administrador do curso possa inscrever utilizadores no curso";
+$DateTime = "Data e horas";
+$Item = "Item";
 $ConfigureDashboardPlugin = "Configurar Plugin do Painel";
 $EditBlocks = "Editar blocos";
+$Never = "Nunca";
 $YourAccountIsActiveYouCanLoginAndCheckYourCourses = "Caro utilizador, sua conta foi activada na plataforma. Faça o login e desfrute dos seus cursos.";
 $SessionFields = "Campos da sessão";
 $SessionCoachEndDateComment = "Data a partir da qual a sessão será encerrada para os instrutores. Um intervalo adicional de tempo será permitido de forma a que possam exportar conteúdos relevantes de acompanhamento da sessão.";
@@ -5335,6 +5484,9 @@ $ExportAllCertificatesToPDF = "Exportar todos os certificados para PDF";
 $DeleteAllCertificates = "Apagar todos os certificados";
 $ThereAreUsersUsingThisLanguageYouWantToDisableThisLanguageAndSetUsersWithTheDefaultPortalLanguage = "Existem utilizadores que utilizam este idioma. Deseja desativar este idioma e definir para todos os utilizadores o idioma padrão do portal?";
 $SessionCalendar = "Calendário das sessões";
+$ShowLinkBugNotificationTitle = "Mostrar link para reportar erro";
+$ReportABug = "Reportar erro";
+$Letters = "Letras";
 $NewHomeworkEmailAlert = "Enviar email aos utilizadores quando for criada uma atividade";
 $NewHomeworkEmailAlertEnable = "Ativar o envio de um email aos utilizadores quando um trabalho for submetido";
 $NewHomeworkEmailAlertDisable = "Desativar o envio de um email aos utilizadores quando um trabalho for submetido";
@@ -5343,15 +5495,31 @@ $HomeworkHasBeenCreatedForTheCourse = "Foi criado um trabalho/tarefa no curso";
 $PleaseCheckHomeworkPage = "Por favor confira a página dos trabalhos/tarefas";
 $ScormNotEnoughSpaceInCourseToInstallPackage = "Não existe espaço suficiente no curso para comprimir o arquivo atual.";
 $ScormPackageFormatNotScorm = "O arquivo que está a tentar enviar não parece estar no formato SCORM. Verifique se o imsmanifest.xml está dentro do arquivo ZIP que está a tentar enviar.";
+$GradebookNumberDecimals = "Número de decimais";
+$ContactInformation = "Informação de contacto";
+$PersonName = "O seu nome";
+$CompanyName = "Nome da empresa";
+$PersonRole = "Descrição de profissão";
+$CompanyCity = "Cidade da empresa";
+$SendInformation = "Enviar informação";
+$YouMustAcceptLicence = "Deve aceitar os termos de utilização";
+$SelectOne = "Selecionar um";
 $ExerciseDescriptionLabel = "Descrição";
+$CompanyActivity = "Actividade da empresa";
 $PleaseAllowUsALittleTimeToSubscribeYouToOneOfOurCourses = "Por favor, permita-nos um pouco de tempo para inscrevê-lo num de nossos cursos. Se acha que nos esquecemos de si, contacte os administradores do portal. Normalmente pode encontrar os detalhes de contato no rodapé desta página.";
+$DateUnLock = "Desbloquear data";
+$DateLock = "Bloquear data";
 $DisplayAboutNextAdvanceNotDoneAndLastDoneAdvance = "Mostrar a última etapa realizada e a próxima inacabada";
+$FillUsers = "Criar utilizadores";
+$UsersFillingReport = "Relatórios preenchidos pelos utilizadores";
 $EndDateMustBeMoreThanStartDate = "Data final dever ser posterior a data de início";
+$AllUsersAreAutomaticallyRegistered = "Todos os utilizadores são registados automaticamente";
 $YourAccountOnXHasJustBeenApprovedByOneOfOurAdministrators = "A sua conta no %s acabou de ser aprovada por um dos nossos administradores.";
 $Multipleresponse = "Respostas Multiplas";
 $YouCanNowLoginAtXUsingTheLoginAndThePasswordYouHaveProvided = "Agora você pode aceder ao %s usando o login e senha que você forneceu.";
 $AreYouSureToEditTheUserStatus = "Tem certeza que deseja editar o status do usuário?";
 $YouShouldCreateAGroup = "Deve criar um grupo";
+$AddUsersToGroup = "Adicionar utilizadores ao grupo";
 $DisplayCourseOverview = "Visão dos cursos";
 $DisplaySessionOverview = "Visão das sessões";
 $TotalNumberOfMessages = "Número total de mensagens";
@@ -5427,6 +5595,9 @@ $MultipleAnswerTrueFalse = "Resposta múltipla verdadeira/falsa/não sei";
 $MultipleAnswerCombinationTrueFalse = "Combinação verdadeira/falsa/não sei";
 $DontKnow = "Não sei";
 $ConfigLearnpath = "Configuração do Percurso de Aprendizagem";
+$SubscribeUsersToClass = "Inscrever utilizadores na aula";
+$UsersInGroup = "Utilizadores no grupo";
+$Profile = "Perfil";
 $LearnpathUpdated = "Percurso de aprendizagem actualizado";
 $RenameAndComment = "Renomeie e comente";
 $PDFWaterMarkHeader = "Marca d'água a mostrar no cabeçalho de ficheiros exportados em formato PDF";
@@ -5474,6 +5645,7 @@ $EvaluationHasBeenUnLocked = "Avaliação foi desbloqueada";
 $EvaluationHasBeenLocked = "Avaliação foi bloqueada";
 $IfYourLPsHaveAudioFilesIncludedYouShouldSelectThemFromTheDocuments = "Se os seus caminhos de aprendizagem tem arquivos de áudio incluído, você deve selecioná-los a partir dos documentos";
 $UplUploadFailedSizeIsZero = "Ocorreu um problema ao carregar o documento: o arquivo recebido tinha um tamanho de 0 bytes no servidor. Por favor, reveja o arquivo local e caso constate qualquer tipo de corrupção ou danos, tente novamente.";
+$UsersEdited = "Utilizadores actualizados";
 $Over100 = "Acima de 100";
 $UnderMin = "Abaixo do minimo";
 $SelectACourse = "Selecione um curso";
@@ -5540,6 +5712,7 @@ $QuestionComment = "Comentário à questão";
 $UnknowQuestion = "Questão desconhecida";
 $DeleteSurveyGroup = "Apagar grupo de questionários";
 $ErrorOccurred = "Ocorreu um erro";
+$UsersNotRegistered = "Utilizadores não registados";
 $DateExpiredNotBeLessDeadLine = "A data de expiração não pode ser inferior à da data limite de conclusão da tarefa/trabalho";
 $NotRevised = "Sem revisão";
 $DirExists = "Esta operação não é permitida, já existe uma pasta com este nome.";
@@ -5565,6 +5738,7 @@ $ReviewQuestions = "Rever as questões selecionadas";
 $YouTriedToResolveThisExerciseEarlier = "Já tentou resolver este exercício anteriormente";
 $ThereAreNoQuestionsForThisExercise = "Não há questões neste exercício";
 $ContinueTest = "Continuar com o teste";
+$NumWikilinks = "Número de links da Wiki";
 $XQuestionsWithTotalScoreY = "%d questões, para um resultado total (todas as questões) de  %s";
 $UploadedDocuments = "Documentos enviados";
 $QuestionLowerCase = "Questão";
@@ -5612,6 +5786,7 @@ $ExerciseProgress = "Progresso no exercício";
 $SelectGradebook = "Selecionar avaliação";
 $AllowTextAssignments = "Permitir a entrega de tarefas/trabalhos a partir do editor online";
 $YouAlreadySentAPaperYouCantUpload = "Já enviou um trabalho/tarefa, não pode enviar outro";
+$SearchUsers = "Procurar utilizadores";
 $AddAsAnnouncement = "Adicionar como anúncio";
 $RandomQuestionByCategory = "Questões aleatórias por categoria";
 $QuestionDisplayCategoryName = "Mostrar categoria de questões";
@@ -5652,6 +5827,7 @@ $CantUploadDeleteYourPaperFirst = "Não pode enviar este trabalho/tarefa. Por fa
 $StudentsWhoAreTakingTheExerciseRightNow = "Alunos que estão fazendo o exercício agora";
 $ReportByQuestion = "Relatório por questão";
 $LiveResults = "Resultados ao vivo";
+$ShowToAllUsers = "Mostrar a todos os utilizadores";
 $NumberOfPublishedExercises = "# de exercícios publicados";
 $NumberOfPublishedLps = "# de Rotas de Aprendizagem publicadas";
 $AddCourseDescription = "Adicione uma descrição do curso";
@@ -5660,6 +5836,8 @@ $UseTheMessageBelowToAddSomeComments = "Usar a seguinte mensagem para adicionar
 $SendRecord = "Enviar gravação";
 $DownloadLatestRecord = "Descarregar gravação";
 $OralExpression = "Expressão oral";
+$UsersDeleted = "Utilizadores eliminados";
+$UsersAdded = "Utilizadores adicionados";
 $CongratulationsYouPassedTheTest = "Parabéns! Passou no teste!";
 $YouDidNotReachTheMinimumScore = "Não atingiu a pontuação mínima";
 $EndTest = "Finalizar teste";
@@ -5698,4 +5876,7 @@ $casAddUserActivateLDAP = "Configuração interna de CAS";
 $UpdateUserInfoCasWithLdapTitle = "Configuração interna de CAS";
 $UpdateUserInfoCasWithLdapComment = "Configuração interna de CAS";
 $CourseDescriptions = "Descrições do curso";
+$ShowSessionDescriptionTitle = "Mostrar a descrição da sessão";
+$DocumentsDefaultVisibilityDefinedInCourseTitle = "Visibilidade do documento definida no curso";
+$DocumentsDefaultVisibilityDefinedInCourseComment = "Visibilidade do documento padrão para todos os cursos";
 ?>

+ 145 - 0
main/lang/slovenian/trad4all.inc.php

@@ -1120,6 +1120,7 @@ $DBSetting = "Nastavitve podatkovne baze MySQL";
 $MainLang = "Osnovni jezik";
 $Licence = "Licenca";
 $LastCheck = "Zadnje preverjanje pred namestitvijo";
+$AutoEvaluation = "Samo-evalvacija";
 $DbPrefixForm = "MySQL predpona";
 $DbPrefixCom = "Pusti prazno, če ni zahtevano";
 $EncryptUserPass = "Kodiranje gesla v podatkovni bazi";
@@ -2605,11 +2606,13 @@ $NoPosts = "Ni objav";
 $WithoutAchievedSkills = "Brez doseženih kompetenc";
 $TypeMessage = "Vnesite vaše sporočilo!";
 $ConfirmReset = "Želis odstraniti vsa sporočila?";
+$MailCronCourseExpirationReminderBody = "Spoštovani %s. Našo pozornost je pritegnilo dejstvo, da niste zaključili s tečajem %s čeprav je datum poteka tečaja nastavljen na %s. Pomeni da je preostanek dni za dokončanje zgolj še %s. Naj vas opomnimo, da se tečaj izvaja le enkrat letno, zato vas s tem sporočilom še enkrat vabimo, da tečaj zaključite pravočasno. V tečaj se lahko vrnete z obiskom platfome preko naslova %s. Z lepimi pozdravi, ekipa %s";
 $MailCronCourseExpirationReminderSubject = "Nujno: Opozorilo o poteku tečaja %s";
 $ExerciseAndLearningPath = "Testi in učne poti";
 $LearningPathGradebookWarning = "Opozorilo: v redovalnici je moč voditi ocene testov, ki so del učnih poti. Če je učna pot v celoti vključena v ocenjevanje, potem so v njej vsebovani testi verjetno že del ocenjevanja. Ocena učne poti bazira na odstotku dokončanosti, medtem, ko ocena samih testov bazira na doseženem točkovnem rezultatu. Ocena vprašalnika je odvisna od tega, ali je uporabnik odgovoril(1) ali ni(0). Preverite delovanje ocenjevanja pred uporabo !";
 $ChooseEitherDurationOrTimeLimit = "Izberite trajanje ali časovno omejitev";
 $ClearList = "Počisti seznam";
+$SessionBanner = "Spletna pasica (banner) seje";
 $ShortDescription = "Kratek opis";
 $TargetAudience = "Ciljna publika";
 $OpenBadgesActionCall = "Preoblikuj vaš virtulni kampus v učno izkušnjo bazirajočo na osnovi veščin oz. kompetenc";
@@ -3817,6 +3820,7 @@ $Area = "Področje";
 $InProcess = "V obdelavi";
 $CourseDescriptionUpdated = "Opis tečaja je bil ažuriran";
 $CourseDescriptionDeleted = "Opis tečaja je bil odstranjen";
+$PreventSessionAdminsToManageAllUsersComment = "Z omogočitvijo te funkcije bodo administratorji seje v upravljalnem panelu zgolj videli uporabnike, ki so jih ustvarili.";
 $InvalidId = "Vstop ni uspel. Napačno uporabniško ime ali geslo";
 $Pass = "Geslo";
 $Advises = "Nasveti";
@@ -5210,6 +5214,7 @@ $FirstUseTip = "Ko vstopate v portal prvič, je najboljši način za spoznavanje
 $Version_ = "Različica";
 $UpdateFromLMSVersion = "Nadgradi iz Chamilo";
 $PleaseSelectInstallationProcessLanguage = "Izberite jezik, ki ga želite uporabljati med namestitvijo";
+$AsciiSvgComment = "Omogoči AsciiSVG vtič v WYSIWYG urejevalniku za izris diagramov iz matematičnih funkcij";
 $HereAreTheValuesYouEntered = "Tule so vrednosti, ki ste jih vnesli";
 $PrintThisPageToRememberPassAndOthers = "Da ne bi pozabili gesla in ostalih pomembnih nastavitev, natisnite vsebino te strani in jo shranite na varno mesto";
 $TheInstallScriptWillEraseAllTables = "Namestitveni program bo nepovratno odstranil vse tabele izbrane podatkovne baze. Strogo priporočamo da pred nadaljevanjem postopka izvedete njeno popolno arhiviranje.";
@@ -5300,6 +5305,7 @@ $SendEmailToAdminComment = "Pošlji e-poštno obvestilo upravitelju platforme vs
 $UserTag = "Uporabnikova oznaka";
 $SelectSession = "Izberi sejo";
 $SpecialCourse = "Poseben tečaj";
+$UploadCorrection = "Naloži popravek";
 $MathASCIImathMLTitle = "ASCIImathML matematični urejevalnik";
 $MathASCIImathMLComment = "Omogoči ASCIImathML matematični urejevalnik";
 $YoutubeForStudentsTitle = "Dovoli tečajnikom vstavljane video iz YouTube";
@@ -5471,6 +5477,7 @@ $ViewUsersWithTask = "Prejete naloge (zadolžitve)";
 $ReminderMessage = "Pošlji opomnik";
 $DateSent = "Podatki so bili poslani";
 $ViewUsersWithoutTask = "Poglej neizvršene/manjkajoče naloge";
+$AsciiSvgTitle = "Omogoči AsciiSVG";
 $SuggestionOnlyToEnableSubLanguageFeatureOrUpgradeProcess = "Namig: zgolj v primeru, da želite omogočiti zmožnost uporabe pod-jezikov";
 $ThematicAdvance = "Tematsko napredovanje";
 $EditProfile = "Uredi profil";
@@ -6135,6 +6142,7 @@ $ChatFiles = "Zgodovina konverzacije iz klepeta";
 $Flash = "Flash";
 $Video = "Video";
 $Images = "Slike";
+$UploadCorrections = "Naloži popravke";
 $Text2AudioTitle = "Omogoči online storitve za pretvorbo besedila in zvoka.";
 $Text2AudioComment = "Online orodje za pretvorbo besedila v zvok. Uporablja sintezo govora in tehnologije za proizvajanje govora.";
 $ShowUsersFoldersTitle = "Prikaži uporabniške mape v orodju dokumentov";
@@ -7165,6 +7173,8 @@ $DataTableSearch = "Išči";
 $HideColumn = "Skrij stolpec";
 $DisplayColumn = "Prikaži stolpec";
 $LegalAgreementAccepted = "Pogoji rabe sprejeti";
+$WorkEmailAlertActivateOnlyForTeachers = "Aktiviraj e-poštno obveščanje o objavi izdelkov zgolj za učitelje";
+$WorkEmailAlertActivateOnlyForStudents = "Aktiviraj e-poštno obveščanje o objavi novih izdelkov zgolj za tečajnike";
 $Uncategorized = "Brez kategorije";
 $NaturalYear = "Naravno leto";
 $AutoWeight = "Avtomatično uteži";
@@ -7191,10 +7201,12 @@ $RequestStatus = "Zahtevaj nov status";
 $StatusRequestMessage = "Prijavljeni ste s privzetimi dovoljenji. Več pravic lahko zahtevate preko naslednjega zahtevka";
 $ReasonIsMandatory = "Polje razloga je potrebno izpolniti. Izpolnite ga pred odpošiljanjem zahtevka.";
 $RequestSubmitted = "Vaš zahtevek je bil odposlan.";
+$RequestFailed = "Trenutno nismo zmožni izpolniti vaše zahteve. Prosimo, da kontaktirate vašega upravitelja portala.";
 $InternalLogin = "Notranja prijava";
 $AlreadyLoggedIn = "Ste že prijavljeni.";
 $Draggable = "Urejanje zaporedja";
 $Incorrect = "Nepravilno";
+$YouNotYetAchievedCertificates = "Trenutno še niste pridobili nobenega certifikata. Nadaljujte z izvajanjem učne poti za njegovo pridobitev.";
 $SearchCertificates = "Poišči certifikate";
 $TheUserXNotYetAchievedCertificates = "Tečajnik %s še ni pridobil nobenega certifikata";
 $CertificatesNotPublic = "Potrdila niso javno dostopna";
@@ -7206,6 +7218,7 @@ $DefaultInstallAdminFirstname = "Janez";
 $DefaultInstallAdminLastname = "Novak";
 $AttendanceUpdated = "Prisotnost je bila ažurirana";
 $HideHomeTopContentWhenLoggedInText = "Skrije zgornjo vsebino domače strani po prijavi v sistem";
+$HideHomeTopContentWhenLoggedInComment = "Na domači strani platforme ta možnost dovoljuje, da uvodni blok ni prikazan(prikazana ostanejo samo npr. obvestila portala) za vse tiste uporabnike, ki so že prijavljeni v portal. Splošen uvodni blok bo v tem primeru prikazan zgolj trenutno neprijavljenim uporabnikom.";
 $HideGlobalAnnouncementsWhenNotLoggedInText = "Skrij globalna obvestila pred anonimnimi obiskovalci";
 $HideGlobalAnnouncementsWhenNotLoggedInComment = "Skrij obvestila platforme pred anonimnimi obiskovalci in jih prikaži zgolj prijavljenim uporabnikom.";
 $CourseCreationUsesTemplateText = "Uporabi predlogo tečaja za kreiranje novih tečajev";
@@ -7224,29 +7237,76 @@ $ShowGroupForaInGeneralToolText = "Prikaži forume skupin v splošnem forumu";
 $ShowGroupForaInGeneralToolComment = "Prikažu forume skupin v okviru forumov tečaja. Opcija je privzeto omogočena(vidnost posameznega foruma skupine je določena z nastavitvijo vidnosti dotičnega foruma skupine). V primeru, da možnost ni omogočena, so forumi dostopni zgolj preko orodjij skupine, pa če so javni ali ne.";
 $TutorsCanAssignStudentsToSessionsText = "Tutor lahko dodeli tečajnike sejam";
 $TutorsCanAssignStudentsToSessionsComment = "Omogočena možnost dovoljuje tutorjem/coache-jem vpis novih tečajnikov v seje. Sicer je opcija na voljo zgolj upraviteljem in upraviteljem sej.";
+$UniqueAnswerImagePreferredSize200x150 = "Velikost slik se bo avtomatično prilagodila na 200x150 pik (povečala ali pomanjšala). Za boljši prikav v vprašanjih priporočamo, da naložite slike, ki že imajo omenjene razsežnosti.";
 $AllowLearningPathReturnLinkTitle = "Prikaži povezavo za vrnitev iz učnih poti";
 $AllowLearningPathReturnLinkComment = "Onemogoči to možnost, če želiš skriti povezavo 'Nazaj na domačo stran tečaja' v učnih poteh.";
 $HideScormExportLinkTitle = "Skrij povezavo za izvoz SCORM vsebin";
 $HideScormExportLinkComment = "Skrij ikono izvoza za SCORM v seznamu učnih poti";
 $HideScormCopyLinkTitle = "Skrij možnost kopiranja SCORM";
+$HideScormCopyLinkComment = "Skrij ikono za kopiranje učne poti v orodjih seznama učnih poti.";
 $HideScormPdfLinkTitle = "Skrij možnost izvoza učnih poti v PDF";
 $HideScormPdfLinkComment = "Skrij ikono za izvoz učne poti v PDF preko seznama učnih poti";
+$SessionDaysBeforeCoachAccessTitle = "Št. dni za dostop učitelja pred začetkom seje";
+$SessionDaysBeforeCoachAccessComment = "Privzeto število dni, v katerih lahko učitelj dostopa do svojo seje pred uradnim začetkom seje (začetnim datumom seje).";
+$SessionDaysAfterCoachAccessTitle = "Privzeto št. dni dostopa za učitelja po koncu seje";
+$SessionDaysAfterCoachAccessComment = "Privzeto število dni, v katerih učitelj še lahko dostopa do svje seje po datumu uradnega zaključka seje (končnega datuma seje).";
 $PdfLogoHeaderTitle = "Logotip glave PDF dokumenta";
+$PdfLogoHeaderComment = "Določa, ali se uporabi slika iz css/themes/[tvoj-css]/images/pdf_logo_header.png kot logotip zaglavja PDF datoteke v vseh PDF izvozih (namesto običajnega logotipa definiranega s pdefinicijo v portalu)";
 $OrderUserListByOfficialCodeTitle = "Uredi uporabnike po uradni kodi";
+$OrderUserListByOfficialCodeComment = "Uporabite 'uradno kodo' za razvrščanje uporabnikov platforme namesto njihovih imen in priimkov.";
+$AlertManagerOnNewQuizTitle = "Privzeto e-poštno obveščanje o novih testih";
+$AlertManagerOnNewQuizComment = "Ali želite, da so upravitelji tečaja (učitelji) obveščeni o izvednih testih tečajnikov? Ta izbira je privzeta za vse novo ustvarjene tečaje, učitelji pa jo še vedno lahko spremenijo v okviru nastavitev vsakega tečaja posebej.";
 $ShowOfficialCodeInExerciseResultListTitle = "Prikaži uradno kodo v rezultatih testov";
+$ShowOfficialCodeInExerciseResultListComment = "Prikaz uporabnikove uradne kode v izvozu rezultatov testov.";
 $HidePrivateCoursesFromCourseCatalogTitle = "Ne prikaži privatnih/zaprtih tečajev v katalogu tečajev";
+$HidePrivateCoursesFromCourseCatalogComment = "Ali bodo privatni tečaji objavljeni v katalogu tečajev. Opcija ima smisel le v primeru, da katalog uproabljate pretežno za omogočanje avtomatičnega vpisa uporabnikov v tečaje.";
+$CoursesCatalogueShowSessionsTitle = "Katalog sej in tečajev";
+$CoursesCatalogueShowSessionsComment = "Prikazovanje zgolj tečajev, zgolj sej ali tečajev in sej v katalogu tečajev.";
+$AutoDetectLanguageCustomPagesTitle = "Omogoči avtomatično detekcijo jeziki na lastnih (custom) straneh portala.";
+$AutoDetectLanguageCustomPagesComment = "Če uporabljate lastne (uporabniško definirane) strani in želite na strani uporabiti detekcijo jezika, potem omogočite to možnost. Možnost izklopite v primeru, da stran želite prikazano v jeziku, privzeto definiranem za portal.";
 $LearningPathShowReducedReportTitle = "Učne poti: prikaži skrajšano poročilo";
+$LearningPathShowReducedReportComment = "Prikaz skrajšane različice napredka tečaja tečajnikom znotraj orodja učnih poti kadar tečajnik pregleduje svoj napredek.";
+$AllowSessionCourseCopyForTeachersTitle = "Dovoli učiteljem kopiranje med sejami.";
 $HideLogoutButtonTitle = "Skrij odjavni gumb";
 $HideLogoutButtonComment = "Skrije odjavni gumb. Uporaba pride v poštev v primeru, da uporabljate zunanji mehanizem za prijavo/odjavo, npr. SSO, Shibboleth, ...";
 $RedirectAdminToCoursesListTitle = "Preusmeri upravitelja na seznam tečajev";
+$CourseImagesInCoursesListTitle = "Uporabniško definirane ikone v tečajih";
+$CourseImagesInCoursesListComment = "Uporabi slike iz tečaja kot ikono tečaja (namesto privzete ikone - zelene table).";
+$StudentPublicationSelectionForGradebookTitle = "Naloge, ki pridejo v poštev za ocenjevanje v redovalnici.";
+$StudentPublicationSelectionForGradebookComment = "V orodju Naloge lahko tečajniki naložijo več kot eno datoteko. V takem primeru je potrebno določiti, katera izmed njih je tista, ki se upošteva pri ocenjevanju v redovalnici. Izbira je odvisna od vaše uporabljene metodologije. Uporabite 'prva' (upoštevanje časovnosti, prvi rezultat je relevanten rezultat,...) oz. 'zadnja' (upošteva sodelovanje, adaptivno delo,...)";
 $FilterCertificateByOfficialCodeTitle = "Certifikati filtrirani po uradni kodi";
 $FilterCertificateByOfficialCodeComment = "Dodaj filter glede tečajnikove uradne kode v seznamu certifikatov";
 $DocumentDefaultOptionIfFileExistsTitle = "Privzeti način nalaganja dokumentov";
+$DocumentDefaultOptionIfFileExistsComment = "Privzeta metoda za nalaganje v področje dokumentov tečaja. Lahko se določi/spremeni v trenutku nalaganja datoteke ob vsakokratnem nalaganju, ta vrednost pa predstavlja zgolj privzeto splošno vrednost.";
+$OpenBadgesBackpackUrlTitle = "OpenBadge URL nahrbtnika";
+$OpenBadgesBackpackUrlComment = "URL strežnika OpenBadge nahrbtnika, ki bo privzeto uporabljen za vse uporabnike, ki čakajo na izvoz svojih OpenBadge značk. Privzeto je to zastonjkarski Mozilla Foundation backpack repozitorij na naslovu: http://backpack.openbadges.org";
 $CookieWarningTitle = "Piškotki: obvestilo o zasebnosti";
+$CatalogueAllowSessionAutoSubscriptionComment = "Če je omogočena *IN* je katalog seje omogočen, se uporabniki v aktivne seje lahko brez vsakršnih omejitev vpisujejo sami preko gumba za vpis v sejo.";
+$HideCourseGroupIfNoToolAvailableTitle = "Skrij skupino tečaja brez orodij";
+$HideCourseGroupIfNoToolAvailableComment = "V primeru, da v definirani skupini ni na voljo nobenega izmed orodij in tečajnik ni dodeljen tej skupini, potem nevpisanim uporabnikom tako skupina ni vidna v seznamu skupin.";
 $CatalogueAllowSessionAutoSubscriptionTitle = "Avtomatični vpis v katalog seje";
 $SoapRegistrationDecodeUtf8Title = "Spletne storitve : dekodiraj UTF-8";
+$AttendanceDeletionEnableTitle = "Prisotnost : omogoči brisanje";
+$AttendanceDeletionEnableComment = "Privzeto obnašanje Chamilo platforme je, da 'skrije' listo prisotnosti, namesto, da bi jo odstranila, za primer, da se je učitelj izvedel brisanje po pomoti. Omogočanje brisanja dovoljuje učitelju, da dejansko trajno odstrani listo prisotnosti.";
+$SessionAdminPermissionsLimitTitle = "Omeji dovoljenja za upravitelje seje";
+$SessionAdminPermissionsLimitComment = "Če je možnost omogočena, bosta upraviteljem seje na voljo zgolj bloka: 'Uporabniki' s funkcijo 'Dodaj uporabnika' ter blok 'Seje' z možnostjo 'Seznam sej'.";
+$ShowSessionDescriptionTitle = "Prikaži opis seje";
+$ShowSessionDescriptionComment = "Prikaže opis seje, če je ta opisana (na straneh, ki se tičejo seje, v okviru sledenja sej, ...)";
 $CertificateHideExportLinkStudentTitle = "Certifikati: skrij povezavo za izvoz pred tečajniki";
+$CertificateHideExportLinkStudentComment = "V primeru, da je možnost omogočena, tečajniki ne morejo izvoziti svojih certifikator v PDF. Možnost je na voljo, ker je kvaliteta izvoza močno odvisna od natančne HTML strukture predloge certifikata. V primeru slabe kvalitete je bolje ne dopustiti uporabe takega certifikata.";
+$CertificateHideExportLinkTitle = "Certifikati : skrij povezavo do izvoza v PDF";
+$CertificateHideExportLinkComment = "Omogoči popolno odstranitev možnosti za izvoz certifikatov v PDF (za vse uporabnike). Če je možnost omogočena, vključuje skrivanje izvoza pred tečajniki.";
+$DropboxHideCourseCoachTitle = "Nabiralnik: skrij učitelja(coach) tečaja";
+$DropboxHideCourseCoachComment = "Skrije učitelja(coach) seje v seznamu naslovnikov nabiralnika pri pošiljanju dokumenta s strani učitelja tečajnikom seje.";
+$SSOForceRedirectTitle = "SSO : prisili preusmeritev";
+$SSOForceRedirectComment = "S to opcijo prisilite uporabnika v avtentifikacijo na želenem avtifikacijskem portalu, če je SSO omogočen. To možnost aktivirajte šele ko ste prepričani, da je procedura SSO-ja pravilno nastavljena, sicer se vam lahko zgodi, da se ne boste mogli več prijaviti v portal (v tem primeru spremenite nastavitve za SSO v tabeli settings_current osnovne podatkovne baze portala s pomočjo direktnega dostopa do baze).";
+$SessionCourseOrderingTitle = "Ročno razvrščanje tečajev seje";
+$SessionCourseOrderingComment = "Z izbiro te opcije omogočite upraviteljem seje razvrščanje tečajev znotraj seje v poljubnem vrstnem redu. Če opcija ni omogočena se tečaji razvrstijo v abecednem vrstnem redu glede na naziv tečaja.";
+$AddLPCategory = "Dodaj kategorijo učnih poti";
+$WithOutCategory = "Brez kategorije";
+$ItemsTheReferenceDependsOn = "Elementi od katerih je referenca odvisna";
 $UseAsReference = "Uporabi kot referenco";
+$Dependencies = "Elementi, ki so odvisni od reference";
 $SetAsRequirement = "Postavi kot zahtevo";
 $AddSequence = "Dodaj novo zaporedje";
 $ResourcesSequencing = "Zaporednost virov";
@@ -7256,11 +7316,18 @@ $SeeCourse = "Poglej tečaj";
 $XPoints = "%s točk";
 $FromXUntilY = "Od %s do %s";
 $SubscribeUsersToLp = "Vpiši tečajnike v učno pot";
+$SubscribeGroupsToLp = "Vpiši skupine v učno pot";
+$CreateForumForThisLearningPath = "Ustvari forum za to učno pot";
 $ByDate = "Po datumu";
 $ByTag = "Po oznaki";
 $GoToCourseInsideSession = "Pojdi na tečaj v seji";
 $EnableGamificationMode = "Omogoči 'igralni' način";
 $DisableGamificationMode = "Onemogoči 'igralni' način";
+$CatalogueShowOnlyCourses = "V katalogu prikaži zgolj tečaje";
+$CatalogueShowOnlySessions = "V katalogu prikaži zgolj seje";
+$CatalogueShowCoursesAndSessions = "V katalogu prikaži tako tečaje kot tudi seje";
+$AccessDates = "Datumi dostopov za tečajnike";
+$CoachDates = "Datumi dostopov za učitelje";
 $ChatWithXUser = "Klepetaj z %s";
 $StartVideoChat = "Zaženi video klic";
 $FieldTypeVideoUrl = "Video URL";
@@ -7268,6 +7335,9 @@ $InsertAValidUrl = "Vstavite veljaven URL";
 $SeeInformation = "Poglej informacijo";
 $ShareWithYourFriends = "Deli s prijatelji";
 $ChatRoomName = "Ime klepetalnice";
+$TheVideoChatRoomXNameAlreadyExists = "Video klepetalnica %s že obstaja.";
+$ChatRoomNotCreated = "Klepetalnice ni mogoče ustvariti";
+$TheXUserBrowserDoesNotSupportWebRTC = "Brskalnik %s v osnovi(privzeto) ne podpira video prenosov. Oprostite.";
 $FromDateX = "Od %s";
 $UntilDateX = "Do %s";
 $GraphDependencyTree = "Drevo odvisnosti";
@@ -7277,11 +7347,13 @@ $GradeGeneratedOnX = "Ocena je bila ustvarjena dne %s";
 $ExerciseAvailableSinceX = "Vaja je na voljo od %s";
 $ExerciseIsActivatedFromXToY = "Test je omogočen od %s do %s";
 $SelectSomeOptions = "Izberi nekaj možnosti";
+$AddCustomCourseIntro = "S klikom na ikono za urejanje lahko dodate uvodno besedilo k temu tečaju";
 $SocialGroup = "Socialna skupina";
 $RequiredSessions = "Zahtevane seje";
 $DependentSessions = "Odvisne seje";
 $ByDuration = "Po trajanju";
 $ByDates = "Po datumih";
+$SendAnnouncementCopyToDRH = "Pošlji kopijo upravitelju (HRM) človeških virov izbranih tečajnikov";
 $PoweredByX = "Ustvarjeno s pomočjo %s";
 $AnnouncementErrorNoUserSelected = "Izberite vsaj enega tečajnika. Obvestilo ni bilo shranjeno.";
 $NoDependencies = "Ni odvisnosti";
@@ -7293,6 +7365,8 @@ $FieldTypeFileImage = "Slikovna datoteka";
 $FieldTypeFloat = "Necela vrednost";
 $DocumentsDefaultVisibilityDefinedInCourseTitle = "Vidnost dokumentov definirana v tečaju";
 $DocumentsDefaultVisibilityDefinedInCourseComment = "Privzeta vidnost dokumentov za vse tečaje";
+$HtmlPurifierWikiTitle = "HTMLPurifier v področju Wiki-ja";
+$HtmlPurifierWikiComment = "Omogoči HTML Purifier v orodju Wiki (poveča se varnost, vendar je možnost zmanjšanja učinka stilov na samo besedilo)";
 $ClickOrDropFilesHere = "Kliknite ali izpustite datoteko";
 $RemoveTutorStatus = "Odstrani vlogo tutorja";
 $ImportGradebookInCourse = "Uvozi redovalnico iz osnovnega tečaja";
@@ -7302,6 +7376,77 @@ $LatestLoginInCourse = "Zadnji dostop do tečaja";
 $LatestLoginInPlatform = "Zadnja prijava v platformo";
 $FirstLoginInPlatform = "Prva prijava v platformo";
 $FirstLoginInCourse = "Prvi dostop do tečaja";
+$LoadMoreComments = "Naloži več komentarjev";
+$ShowProgress = "Prikaži napredek";
+$XPercent = "%s %%";
+$CheckRequirements = "Preveri zahteve";
+$ParentLanguageX = "Izhodiščni (nadrejeni) jezik: %s";
+$RegisterTermsOfSubLanguageForX = "Definirajte nove izraze za pod-jezik %s tako, da poiščete nekaj obstoječih izrazov, nato vsak prevod potrdite s klikom na gumb za shranjevanje. Po končanem prevodu preklopite na prevajan jezik in preverite pojavitev prevedenih izrazov.";
+$SessionRequirements = "Zahteve seje";
+$IsRequirement = "Je zahteva(no)";
+$ConsiderThisGradebookAsRequirementForASessionSequence = "Smatraj to redovalnico kot zahtevo za dokončanje tečaja (vpliva na sekvence seje)";
+$DistinctUsersLogins = "Prijave uporabnikov (razločevanje uporabnikov)";
+$AreYouSureToSubscribe = "Ste prepričani, da se želite vpisati?";
+$CheckYourEmailAndFollowInstructions = "Preverite nabiralnik svoje elektronske pošte in sledite navodilom.";
+$LinkExpired = "Povezava je potekla. Prosimo, poskusite ponovno.";
+$ResetPasswordInstructions = "Navodilo za menjavo gesla";
+$ResetPasswordCommentWithUrl = "To sporočilo ste prejeli, ker ste sami (ali pa se je nekdo predstavljal za vas) zahtevali menjavo gesla. Za nastavitev novega gesla, je tega potrebno predhodno aktivirati. Za to sledite naslednji povezavi %s. V primeru, da VI niste zahtevali te zamenjave, prosimo, da ignorirate to sporočilo. V primeru, da se to sporočilo ponavlja, vas prosimo, da kontaktirajte aupravitelja portala.";
+$CronRemindCourseExpirationFrequencyComment = "Število dni pred potekom tečaja ko se pošlje e-poštni opomnik o poteku tečaja";
+$MailCronCourseFinishedSubject = "Konec tečaja %s";
+$MailCronCourseFinishedBody = "Spoštovani %s. Zahvaljujemo se vam za sodelovanje v tečaju %s. Upamo, da ste uspeli doseči ustrezno stopnjo znanja in veščin predpisanih s cilji tečaja in da ste v njem uživali. Stanje in rezultate dosežene med izvajanje, si lahko ogledate preko povezav v razdelku Moj napredek. Uspešno še naprej. Z prisorčnimi pozdravi, ekipa %s.";
+$GenerateDefaultContent = "Generiraj privzeto vsebino";
+$ThanksForYourSubscription = "Hvala za vaš vpis";
+$XTeam = "ekipa %s.";
+$YouCanStartSubscribingToCoursesEnteringToXUrl = "Lahko pričnete z vpisom v tečaje preko povezave %s";
+$VideoUrl = "URL videa";
+$AddAttachment = "Dodaj priponko";
+$FieldTypeOnlyLetters = "zgolj črke besedila";
+$FieldTypeAlphanumeric = "zgolj alfanumerični znaki besedila";
+$OnlyLetters = "Zgolj črke";
+$RefreshBlanks = "Osveži izraze";
+$WordTofind = "Iskana beseda";
+$BlankInputSize = "Velikost vnosnega okvirčka";
+$DateFormatLongNoDayJS = "dd. MM yy";
+$TimeFormatNoSecJS = "HH:mm";
+$AtTime = "ob";
+$SendSubscriptionNotification = "Pošlji e-poštno sporočilo ob vpisu";
+$SendAnEmailWhenAUserBeingSubscribed = "Pošlje e-poštno sporočilo ob vsakem vpisu tečajnika v sejo.";
+$SelectDate = "Izberi datum";
+$OnlyLettersAndSpaces = "Zgolj črke in številke";
+$OnlyLettersAndNumbersAndSpaces = "Zgolj črke, številke in presledek";
+$FieldTypeLettersSpaces = "Besedilo iz črk in presledkov";
+$CronRemindCourseFinishedActivateTitle = "Pošlji obvestilo o zaključku tečaja";
+$FieldTypeAlphanumericSpaces = "Besedilo iz alfanumeričnih znakov in presledkov";
+$ThanksForRegisteringToSite = "Zahvaljujemo se vam za vpis v %s.";
+$AllowCoachFeedbackExercisesTitle = "Dovoli učiteljem(coach) komentiranje in pregled testov.";
+$AllowCoachFeedbackExercisesComment = "Dovoli učiteljem(coach) urejenje povratnih informacij med pregledom testov.";
+$PreventMultipleSimultaneousLoginTitle = "Prepreči sočasne (simultane) prijave.";
+$PreventMultipleSimultaneousLoginComment = "Prepreči uporabnikom da se z istim računom sočasno prijavijo več kot enkrat. To je ugodna možnost v primeru plačljivih (pay-per-access) tečajev, lahko pa se izkaže za zelo restriktivno možnost med testiranjem, ker se lahko z izbranim računom v portal prijavimo zgolj enkrat.";
+$ShowAdditionalColumnsInStudentResultsPageTitle = "Prikaži dodatne stolpce v redovalnici";
+$ShowAdditionalColumnsInStudentResultsPageComment = "Prikaže dodatne stolpce v redovalnici v načinu 'pogled tečajnikov', ki vključuje najboljše rezultate vseh tečajnikov, relativno mesto tečajnika, ki vrši vpogled, ter povprečen rezultat celotne skupine tečajnikov (primerjalni rezultati).";
+$CourseCatalogIsPublicTitle = "Objavi katalog tečajev";
+$CourseCatalogIsPublicComment = "Naredi katalog tečajev dostopen anonimnim uporabnikom (javen dostop do kataloga) brez predhodne prijave v portal.";
+$ResetPasswordTokenTitle = "Omogoči žeton za ponastavlje gesla (pass. reset token)";
+$ResetPasswordTokenComment = "Ta opcija omogoča generiranje žetona za enkratno uporabo, ki se pošlje uporabniku z e-poštnim sporočilom za omogočitev ponastavitve gesla.";
+$ResetPasswordTokenLimitTitle = "Časovna omejitev žetona za ponastavitev gesla";
+$ResetPasswordTokenLimitComment = "Število sekund pred potekom generiranega žetona; ko ta postane neuporaben in je potrebno ustvariti novega.";
+$ViewMyCoursesListBySessionTitle = "Poglej moje tečaje po sejah";
+$ViewMyCoursesListBySessionComment = "Omogoči dodatno stran 'Moji tečaji', kjer se seje pojavljajo kot del tečajev v nasprotju z obratnim (običajnim) načinom.";
+$DownloadCertificatePdf = "Prenesi certifikat v obliki PDF";
+$DownloadReportPdf = "Prenesi poročilo v obliki PDF";
+$ShowFullSkillNameOnSkillWheelTitle = "Prikaži polno ime veščine na drevesu kompetenc";
+$DBPort = "Vrata";
+$CreatedBy = "Ustvaril(a)";
+$UploadMyAssignment = "Naloži mojo nalogo";
+$Inserted = "Vstavljeno";
+$YourBroswerDoesNotSupportWebRTC = "Tvoj brskalnik ne omogoča naravnega video videokonferenčnega prenosa.";
+$OtherTeachers = "Ostali učitelji";
+$CourseCategory = "Kategorija tečaja";
+$VideoChatBetweenUserXAndUserY = "Video klepet med %s in %s";
+$Enable = "Omogoči";
+$Disable = "Onemogoči";
+$AvoidChangingPageAsThisWillCutYourCurrentVideoChatSession = "Izogibajte se menjavi strani, ker bo menjava prekinila trenutno sejo videoklepeta";
+$ConnectingToPeer = "Povezujem";
 $ConnectionEstablished = "Povezava je vzpostavljena";
 $ConnectionFailed = "Povezava ni bila uspešna";
 $ConnectionClosed = "Povezava je bila zaprta";

+ 4 - 2
main/lang/spanish/trad4all.inc.php

@@ -6250,7 +6250,7 @@ $TheLPAutoLaunchSettingIsONStudentsWillBeRedirectToAnSpecificLP = "La configurac
 $UniqueAnswerNoOption = "Respuesta única con no-se";
 $MultipleAnswerTrueFalse = "Respuestas múltiples v/f/no-se";
 $MultipleAnswerCombinationTrueFalse = "Combinación v/f/no-se";
-$DontKnow = "No se";
+$DontKnow = "No sé";
 $ExamNotAvailableAtThisTime = "Examen no disponible en este momento";
 $LoginOrEmailAddress = "Nombre de usuario o dirección e-mail";
 $EnableMathJaxTitle = "Activar MathJax";
@@ -7683,5 +7683,7 @@ $RecordAudio = "Grabar audio";
 $StartRecordingAudio = "Lanzar la grabación";
 $StopRecordingAudio = "Finalizar la grabación";
 $SaveRecordedAudio = "Guardar el audio grabado";
-$GradeFromX = "Notas para el curso: %s";
+$GradeFromX = "Libreta de notas del curso: %s";
+$TitleMandatory = "Título obligatorio";
+$NoCourseCategorySupplied = "No se ha proporcionado una categoría de curso";
 ?>

+ 11 - 18
main/survey/preview.php

@@ -42,10 +42,8 @@ if (Database::num_rows($result) > 0) {
 }
 
 // We exit here if there is no valid $_GET parameter
-if (!isset($_GET['survey_id']) || !is_numeric($_GET['survey_id'])){
-	Display::display_header(get_lang('SurveyPreview'));
-	Display::display_error_message(get_lang('InvallidSurvey'), false);
-	Display::display_footer();
+if (!isset($_GET['survey_id']) || !is_numeric($_GET['survey_id'])) {
+    api_not_allowed(true, Display::return_message(get_lang('InvallidSurvey'), 'error', false));
 	exit;
 }
 
@@ -54,17 +52,21 @@ $survey_id = intval($_GET['survey_id']);
 $survey_data = SurveyManager::get_survey($survey_id);
 
 if (empty($survey_data)) {
-	Display::display_header(get_lang('SurveyPreview'));
-	Display::display_error_message(get_lang('InvallidSurvey'), false);
-	Display::display_footer();
+    api_not_allowed(true, Display::return_message(get_lang('InvallidSurvey'), 'error', false));
 	exit;
 }
 
 $urlname = strip_tags($survey_data['title']);
 if (api_is_allowed_to_edit()) {
 	// Breadcrumbs
-	$interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'survey/survey_list.php', 'name' => get_lang('SurveyList'));
-	$interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'survey/survey.php?survey_id='.$survey_id, 'name' => $urlname);
+	$interbreadcrumb[] = array(
+        'url' => api_get_path(WEB_CODE_PATH).'survey/survey_list.php?'.api_get_cidreq(),
+        'name' => get_lang('SurveyList')
+    );
+    $interbreadcrumb[] = array(
+        'url' => api_get_path(WEB_CODE_PATH).'survey/survey.php?survey_id='.$survey_id.'&'.api_get_cidreq(),
+        'name' => $urlname,
+    );
 }
 $courseCode = isset($_GET['cidReq']) ? $_GET['cidReq'] : null;
 $surveyAnonymous = SurveyManager::get_survey($survey_id, 0, $courseCode);
@@ -81,14 +83,6 @@ Display :: display_header(get_lang('SurveyPreview'));
 
 // We exit here is the first or last question is a pagebreak (which causes errors)
 SurveyUtil::check_first_last_question($survey_id, false);
-
-// Only a course admin is allowed to preview a survey: you are NOT a course admin => error message
-
-/*
-if (!api_is_allowed_to_edit(false, true)) {
-	Display :: display_error_message(get_lang('NotAllowed'), false);
-}*/
-
 $counter_question = 0;
 // Only a course admin is allowed to preview a survey: you are a course admin
 if (api_is_course_admin() ||
@@ -235,5 +229,4 @@ if (api_is_course_admin() ||
 	Display :: display_error_message(get_lang('NotAllowed'), false);
 }
 
-// Footer
 Display :: display_footer();

+ 9 - 8
main/survey/reporting.php

@@ -24,19 +24,21 @@ $survey_data = SurveyManager::get_survey($survey_id);
 if (isset($_POST['export_report']) && $_POST['export_report']) {
     switch ($_POST['export_format']) {
         case 'xls':
+            $userId = isset($_GET['user_id']) ? $_GET['user_id'] : 0;
             $filename = 'survey_results_'.$survey_id.'.xls';
             $data = SurveyUtil::export_complete_report_xls(
                 $survey_data,
                 $filename,
-                $_GET['user_id']
+                $userId
             );
             exit;
             break;
         case 'csv':
         default:
+            $userId = isset($_GET['user_id']) ? $_GET['user_id'] : 0;
             $data = SurveyUtil::export_complete_report(
                 $survey_data,
-                $_GET['user_id']
+                $userId
             );
             $filename = 'survey_results_'.$survey_id.'.csv';
 
@@ -158,17 +160,16 @@ if (!isset($_GET['action']) ||
     $_GET['action'] == 'overview'
 ) {
     $myweb_survey_id = $survey_id;
-    echo '<div class="sectiontitle"><a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=questionreport&amp;survey_id='.$myweb_survey_id.'&amp;'.$cidReq.'&amp;single_page=1">'.
+    echo '<div class="sectiontitle"><a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=questionreport&survey_id='.$myweb_survey_id.'&'.$cidReq.'&single_page=1">'.
         Display::return_icon('survey_reporting_overall.png',get_lang('QuestionsOverallReport')).' '.get_lang('QuestionsOverallReport').'</a></div><div class="sectioncomment">'.get_lang('QuestionsOverallReportDetail').' </div>';
-    echo '<div class="sectiontitle"><a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=questionreport&amp;survey_id='.$myweb_survey_id.'&'.$cidReq.'">'.
+    echo '<div class="sectiontitle"><a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=questionreport&survey_id='.$myweb_survey_id.'&'.$cidReq.'">'.
         Display::return_icon('survey_reporting_question.gif',get_lang('DetailedReportByQuestion')).' '.get_lang('DetailedReportByQuestion').'</a></div><div class="sectioncomment">'.get_lang('DetailedReportByQuestionDetail').' </div>';
-    echo '<div class="sectiontitle"><a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=userreport&amp;survey_id='.$myweb_survey_id.'&'.$cidReq.'">'.
+    echo '<div class="sectiontitle"><a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=userreport&survey_id='.$myweb_survey_id.'&'.$cidReq.'">'.
         Display::return_icon('survey_reporting_user.gif',get_lang('DetailedReportByUser')).' '.get_lang('DetailedReportByUser').'</a></div><div class="sectioncomment">'.get_lang('DetailedReportByUserDetail').'.</div>';
-    echo '<div class="sectiontitle"><a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=comparativereport&amp;survey_id='.$myweb_survey_id.'&'.$cidReq.'">'.
+    echo '<div class="sectiontitle"><a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=comparativereport&survey_id='.$myweb_survey_id.'&'.$cidReq.'">'.
         Display::return_icon('survey_reporting_comparative.gif',get_lang('ComparativeReport')).' '.get_lang('ComparativeReport').'</a></div><div class="sectioncomment">'.get_lang('ComparativeReportDetail').'.</div>';
-    echo '<div class="sectiontitle"><a href="reporting.php?action=completereport&amp;survey_id='.$myweb_survey_id.'&'.$cidReq.'">'.
+    echo '<div class="sectiontitle"><a href="reporting.php?action=completereport&survey_id='.$myweb_survey_id.'&'.$cidReq.'">'.
         Display::return_icon('survey_reporting_complete.gif',get_lang('CompleteReport')).' '.get_lang('CompleteReport').'</a></div><div class="sectioncomment">'.get_lang('CompleteReportDetail').'</div>';
 }
 
-// Footer
 Display :: display_footer();

+ 173 - 120
main/survey/survey.lib.php

@@ -1516,6 +1516,7 @@ class SurveyManager
 
         // Deleting the options of the survey questions
         Database::query($sql);
+
         return true;
     }
 
@@ -1524,7 +1525,7 @@ class SurveyManager
      *
      * @param int $survey_id
      * @param int $question_id
-     * @param int $shared
+     * @param bool $shared
      *
      * @return bool
      *
@@ -1655,6 +1656,9 @@ class SurveyManager
         return $return;
     }
 
+    /**
+     * @return bool
+     */
     public static function survey_generation_hash_available()
     {
         if (extension_loaded('mcrypt')) {
@@ -1663,12 +1667,28 @@ class SurveyManager
         return false;
     }
 
+    /**
+     * @param int $survey_id
+     * @param int $course_id
+     * @param int $session_id
+     * @param int $group_id
+     * @return string
+     */
     public static function generate_survey_hash($survey_id, $course_id, $session_id, $group_id)
     {
         $hash = hash('sha512', api_get_security_key().'_'.$course_id.'_'.$session_id.'_'.$group_id.'_'.$survey_id);
         return $hash;
     }
 
+    /**
+     * @param int $survey_id
+     * @param int $course_id
+     * @param int $session_id
+     * @param int $group_id
+     * @param string $hash
+     *
+     * @return bool
+     */
     public static function validate_survey_hash($survey_id, $course_id, $session_id, $group_id, $hash)
     {
         $survey_generated_hash = self::generate_survey_hash($survey_id, $course_id, $session_id, $group_id);
@@ -1678,6 +1698,14 @@ class SurveyManager
         return false;
     }
 
+    /**
+     * @param int $survey_id
+     * @param int $course_id
+     * @param int $session_id
+     * @param int $group_id
+     *
+     * @return string
+     */
     public static function generate_survey_link($survey_id, $course_id, $session_id, $group_id)
     {
         $code = self::generate_survey_hash($survey_id, $course_id, $session_id, $group_id);
@@ -1699,7 +1727,7 @@ class SurveyUtil
      * @param	boolean	Optional. Whether to continue the current process or exit when breaking condition found. Defaults to true (do not break).
      * @return	void
      */
-    static function check_first_last_question($survey_id, $continue = true)
+    public static function check_first_last_question($survey_id, $continue = true)
     {
         // Table definitions
         $tbl_survey_question = Database :: get_course_table(TABLE_SURVEY_QUESTION);
@@ -1743,7 +1771,7 @@ class SurveyUtil
      * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
      * @version January 2007
      */
-    static function remove_answer($user, $survey_id, $question_id, $course_id) {
+    public static function remove_answer($user, $survey_id, $question_id, $course_id) {
         $course_id = intval($course_id);
         // table definition
         $table_survey_answer 		= Database :: get_course_table(TABLE_SURVEY_ANSWER);
@@ -1769,7 +1797,7 @@ class SurveyUtil
      * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
      * @version January 2007
      */
-    static function store_answer($user, $survey_id, $question_id, $option_id, $option_value, $survey_data)
+    public static function store_answer($user, $survey_id, $question_id, $option_id, $option_value, $survey_data)
     {
         // Table definition
         $table_survey_answer = Database :: get_course_table(TABLE_SURVEY_ANSWER);
@@ -1808,7 +1836,7 @@ class SurveyUtil
      * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
      * @version February 2007
      */
-    static function check_parameters($people_filled)
+    public static function check_parameters($people_filled)
     {
         $error = false;
 
@@ -1911,17 +1939,17 @@ class SurveyUtil
 
     /**
      * This function deletes the report of an user who wants to retake the survey
-     * @param integer survey_id
-     * @param integer user_id
+     * @param integer $survey_id
+     * @param integer $user_id
      * @return void
      * @author Christian Fasanando Flores <christian.fasanando@dokeos.com>
      * @version November 2008
      */
-    function delete_user_report($survey_id, $user_id)
+    public static function delete_user_report($survey_id, $user_id)
     {
-        $table_survey_answer 		= Database :: get_course_table(TABLE_SURVEY_ANSWER);
-        $table_survey_invitation 	= Database :: get_course_table(TABLE_SURVEY_INVITATION);
-        $table_survey 				= Database :: get_course_table(TABLE_SURVEY);
+        $table_survey_answer = Database:: get_course_table(TABLE_SURVEY_ANSWER);
+        $table_survey_invitation = Database:: get_course_table(TABLE_SURVEY_INVITATION);
+        $table_survey = Database:: get_course_table(TABLE_SURVEY);
 
         $course_id = api_get_course_int_id();
 
@@ -1967,14 +1995,16 @@ class SurveyUtil
         $table_survey_question_option = Database :: get_course_table(TABLE_SURVEY_QUESTION_OPTION);
         $table_survey_answer = Database :: get_course_table(TABLE_SURVEY_ANSWER);
 
+        $surveyId = isset($_GET['survey_id']) ? (int) $_GET['survey_id'] : 0;
+
         // Actions bar
         echo '<div class="actions">';
-        echo '<a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?survey_id='.Security::remove_XSS($_GET['survey_id']).'">'.
+        echo '<a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?survey_id='.$surveyId.'&'.api_get_cidreq().'">'.
             Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('ReportingOverview'),'',ICON_SIZE_MEDIUM).'</a>';
         if (isset($_GET['user'])) {
             if (api_is_allowed_to_edit()) {
                 // The delete link
-                echo '<a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=deleteuserreport&survey_id='.Security::remove_XSS($_GET['survey_id']).'&user='.Security::remove_XSS($_GET['user']).'" >'.
+                echo '<a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action=deleteuserreport&survey_id='.$surveyId.'&'.api_get_cidreq().'&user='.Security::remove_XSS($_GET['user']).'" >'.
                     Display::return_icon('delete.png', get_lang('Delete'),'',ICON_SIZE_MEDIUM).'</a>';
             }
 
@@ -1983,15 +2013,15 @@ class SurveyUtil
                 Display::return_icon('export_csv.png', get_lang('ExportAsCSV'),'',ICON_SIZE_MEDIUM).'</a> ';
             echo '<a href="javascript: void(0);" onclick="document.form1b.submit();">'.
                 Display::return_icon('export_excel.png', get_lang('ExportAsXLS'),'',ICON_SIZE_MEDIUM).'</a> ';
-            echo '<form id="form1a" name="form1a" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.Security::remove_XSS($_GET['survey_id']).'&user_id='.Security::remove_XSS($_GET['user']).'">';
+            echo '<form id="form1a" name="form1a" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&'.api_get_cidreq().'&user_id='.Security::remove_XSS($_GET['user']).'">';
             echo '<input type="hidden" name="export_report" value="export_report">';
             echo '<input type="hidden" name="export_format" value="csv">';
             echo '</form>';
-            echo '<form id="form1b" name="form1b" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.Security::remove_XSS($_GET['survey_id']).'&user_id='.Security::remove_XSS($_GET['user']).'">';
+            echo '<form id="form1b" name="form1b" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&'.api_get_cidreq().'&user_id='.Security::remove_XSS($_GET['user']).'">';
             echo '<input type="hidden" name="export_report" value="export_report">';
             echo '<input type="hidden" name="export_format" value="xls">';
             echo '</form>';
-            echo '<form id="form2" name="form2" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.Security::remove_XSS($_GET['survey_id']).'">';
+            echo '<form id="form2" name="form2" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&'.api_get_cidreq().'">';
         }
         echo '</div>';
 
@@ -2145,9 +2175,9 @@ class SurveyUtil
         $singlePage = isset($_GET['single_page']) ? intval($_GET['single_page']) : 0;
         $course_id = api_get_course_int_id();
         // Database table definitions
-        $table_survey_question 			= Database :: get_course_table(TABLE_SURVEY_QUESTION);
-        $table_survey_question_option 	= Database :: get_course_table(TABLE_SURVEY_QUESTION_OPTION);
-        $table_survey_answer 			= Database :: get_course_table(TABLE_SURVEY_ANSWER);
+        $table_survey_question = Database:: get_course_table(TABLE_SURVEY_QUESTION);
+        $table_survey_question_option = Database:: get_course_table(TABLE_SURVEY_QUESTION_OPTION);
+        $table_survey_answer = Database:: get_course_table(TABLE_SURVEY_ANSWER);
 
         // Determining the offset of the sql statement (the n-th question of the survey)
         $offset = !isset($_GET['question']) ? 0 : intval($_GET['question']);
@@ -2165,8 +2195,6 @@ class SurveyUtil
             $limitStatement = null;
             if (!$singlePage) {
                 echo '<div id="question_report_questionnumbers" class="pagination">';
-                /* echo '<ul><li class="disabled"><a href="#">'.get_lang('Question').'</a></li>'; */
-
                 if ($currentQuestion != 0) {
                     echo '<li><a href="' . api_get_path(WEB_CODE_PATH) . 'survey/reporting.php?action=' . $action . '&' . api_get_cidreq() . '&survey_id=' . $surveyId . '&question=' . ($offset - 1) . '">' . get_lang('PreviousQuestion') . '</a></li>';
                 }
@@ -2177,9 +2205,6 @@ class SurveyUtil
                     } else {
                         echo '<li class="disabled"s><a href="#">' . $i . '</a></li>';
                     }
-                    /*if ($i < $survey_data['number_of_questions']) {
-                        echo ' | ';
-                    }*/
                 }
                 if ($currentQuestion < ($survey_data['number_of_questions'] - 1)) {
                     echo '<li><a href="' . api_get_path(WEB_CODE_PATH) . 'survey/reporting.php?action=' . $action . '&' . api_get_cidreq() . '&survey_id=' . $surveyId . '&question=' . ($offset + 1) . '">' . get_lang('NextQuestion') . '</li></a>';
@@ -2203,20 +2228,6 @@ class SurveyUtil
             while ($row = Database::fetch_array($result)) {
                 $questions[$row['question_id']] = $row;
             }
-
-            // Navigate through the questions (next and previous)
-            /*if ($currentQuestion != 0 ) {
-                echo '<a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action='.Security::remove_XSS($_GET['action']).'&'.api_get_cidreq().'&survey_id='.Security::remove_XSS($_GET['survey_id']).'&question='.Security::remove_XSS($offset-1).'">'.
-                    Display::return_icon('action_prev.png', get_lang('PreviousQuestion'), array('align' => 'middle')).' '.get_lang('PreviousQuestion').'</a>  ';
-            } else {
-                echo Display::return_icon('action_prev.png', get_lang('PreviousQuestion'), array('align' => 'middle')).' '.get_lang('PreviousQuestion').' ';
-            }
-            echo ' | ';
-            if ($currentQuestion < ($survey_data['number_of_questions'] - 1)) {
-                echo '<a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action='.Security::remove_XSS($_GET['action']).'&'.api_get_cidreq().'&survey_id='.Security::remove_XSS($_GET['survey_id']).'&question='.Security::remove_XSS($offset+1).'">'.get_lang('NextQuestion').' '.Display::return_icon('action_next.png', get_lang('NextQuestion'), array('align' => 'middle')).'</a>';
-            } else {
-                echo get_lang('NextQuestion').' '.Display::return_icon('action_next.png', get_lang('NextQuestion'), array('align' => 'middle'));
-            }*/
         }
 
         foreach ($questions as $question) {
@@ -2302,6 +2313,7 @@ class SurveyUtil
                         if ($question['type'] == 'percentage' && empty($absolute_number)) {
                             continue;
                         }
+                        $number_of_answers[$option['question_id']] = isset($number_of_answers[$option['question_id']]) ? $number_of_answers[$option['question_id']] : 0;
                         if ($number_of_answers[$option['question_id']] == 0) {
                             $answers_number = 0;
                         } else {
@@ -2483,6 +2495,8 @@ class SurveyUtil
         $table_survey_question_option = Database :: get_course_table(TABLE_SURVEY_QUESTION_OPTION);
         $table_survey_answer = Database :: get_course_table(TABLE_SURVEY_ANSWER);
 
+        $surveyId = isset($_GET['survey_id']) ? intval($_GET['survey_id']) : 0;
+
         // Actions bar
         echo '<div class="actions">';
         echo '<a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?survey_id='.Security::remove_XSS($_GET['survey_id']).'">
@@ -2494,24 +2508,26 @@ class SurveyUtil
         echo '</div>';
 
         // The form
-        echo '<form id="form1a" name="form1a" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.Security::remove_XSS($_GET['survey_id']).'">';
+        echo '<form id="form1a" name="form1a" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&'.api_get_cidreq().'">';
         echo '<input type="hidden" name="export_report" value="export_report">';
         echo '<input type="hidden" name="export_format" value="csv">';
         echo '</form>';
-        echo '<form id="form1b" name="form1b" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.Security::remove_XSS($_GET['survey_id']).'">';
+        echo '<form id="form1b" name="form1b" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&'.api_get_cidreq().'">';
         echo '<input type="hidden" name="export_report" value="export_report">';
         echo '<input type="hidden" name="export_format" value="xls">';
         echo '</form>';
 
-        echo '<form id="form2" name="form2" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.Security::remove_XSS($_GET['survey_id']).'">';
+        echo '<form id="form2" name="form2" method="post" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&'.api_get_cidreq().'">';
 
         // The table
         echo '<br /><table class="data_table" border="1">';
         // Getting the number of options per question
         echo '	<tr>';
         echo '		<th>';
-        if (isset($_POST['submit_question_filter']) && $_POST['submit_question_filter'] ||
-            isset($_POST['export_report']) && $_POST['export_report']) {
+        if (
+            (isset($_POST['submit_question_filter']) && $_POST['submit_question_filter']) ||
+            (isset($_POST['export_report']) && $_POST['export_report'])
+        ) {
             echo '<button class="cancel" type="submit" name="reset_question_filter" value="'.get_lang('ResetQuestionFilter').'">'.get_lang('ResetQuestionFilter').'</button>';
         }
         echo '<button class="save" type="submit" name="submit_question_filter" value="'.get_lang('SubmitQuestionFilter').'">'.get_lang('SubmitQuestionFilter').'</button>';
@@ -2534,16 +2550,6 @@ class SurveyUtil
         }
 
         $course_id = api_get_course_int_id();
-
-        // Get all the questions ordered by the "sort" column
-        // <hub> modify the query to display open questions too
-        //		$sql = "SELECT q.question_id, q.type, q.survey_question, count(o.question_option_id) as number_of_options
-        //				FROM $table_survey_question q LEFT JOIN $table_survey_question_option o
-        //				ON q.question_id = o.question_id
-        //				WHERE q.question_id = o.question_id
-        //				AND q.survey_id = '".Database::escape_string($_GET['survey_id'])."'
-        //				GROUP BY q.question_id
-        //				ORDER BY q.sort ASC";
         $sql = "SELECT q.question_id, q.type, q.survey_question, count(o.question_option_id) as number_of_options
 				FROM $table_survey_question q LEFT JOIN $table_survey_question_option o
 				ON q.question_id = o.question_id
@@ -2552,16 +2558,14 @@ class SurveyUtil
 				o.c_id = $course_id
 				GROUP BY q.question_id
 				ORDER BY q.sort ASC";
-        // </hub>
         $result = Database::query($sql);
         while ($row = Database::fetch_array($result)) {
             // We show the questions if
             // 1. there is no question filter and the export button has not been clicked
             // 2. there is a quesiton filter but the question is selected for display
-            //if (!($_POST['submit_question_filter'] || $_POST['export_report']) || in_array($row['question_id'], $_POST['questions_filter'])) {
             if (!(isset($_POST['submit_question_filter']) && $_POST['submit_question_filter']) ||
-                (is_array($_POST['questions_filter']) &&
-                    in_array($row['question_id'], $_POST['questions_filter']))) {
+                (is_array($_POST['questions_filter']) && in_array($row['question_id'], $_POST['questions_filter']))
+            ) {
                 // We do not show comment and pagebreak question types
                 if ($row['type'] != 'comment' && $row['type'] != 'pagebreak') {
                     echo ' <th';
@@ -2595,15 +2599,16 @@ class SurveyUtil
         }
 
         // cells with option (none for open question)
-        $sql = "SELECT 	sq.question_id, sq.survey_id,
-						sq.survey_question, sq.display,
-						sq.sort, sq.type, sqo.question_option_id,
-						sqo.option_text, sqo.sort as option_sort
+        $sql = "SELECT 	
+                    sq.question_id, sq.survey_id,
+                    sq.survey_question, sq.display,
+                    sq.sort, sq.type, sqo.question_option_id,
+                    sqo.option_text, sqo.sort as option_sort
 				FROM $table_survey_question sq
 				LEFT JOIN $table_survey_question_option sqo
 				ON sq.question_id = sqo.question_id
 				WHERE
-				    sq.survey_id = '".Database::escape_string($_GET['survey_id'])."' AND
+				    sq.survey_id = '".intval($_GET['survey_id'])."' AND
                     sq.c_id = $course_id AND
                     sqo.c_id = $course_id
 				ORDER BY sq.sort ASC, sqo.sort ASC";
@@ -2707,7 +2712,7 @@ class SurveyUtil
      * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
      * @version February 2007 - Updated March 2008
      */
-    static function display_complete_report_row(
+    public static function display_complete_report_row(
         $survey_data,
         $possible_options,
         $answers_of_user,
@@ -2820,8 +2825,9 @@ class SurveyUtil
             // We show the questions if
             // 1. there is no question filter and the export button has not been clicked
             // 2. there is a quesiton filter but the question is selected for display
-            if (!($_POST['submit_question_filter']) ||
-                (is_array($_POST['questions_filter']) &&
+            if (!(isset($_POST['submit_question_filter'])) ||
+                (isset($_POST['submit_question_filter']) &&
+                    is_array($_POST['questions_filter']) &&
                     in_array($row['question_id'], $_POST['questions_filter']))
             ) {
                 // We do not show comment and pagebreak question types
@@ -2874,7 +2880,8 @@ class SurveyUtil
             // We show the options if
             // 1. there is no question filter and the export button has not been clicked
             // 2. there is a quesiton filter but the question is selected for display
-            if (!($_POST['submit_question_filter']) || (is_array($_POST['questions_filter']) &&
+            if (!($_POST['submit_question_filter']) || (
+                is_array($_POST['questions_filter']) &&
                 in_array($row['question_id'], $_POST['questions_filter']))
             ) {
                 // We do not show comment and pagebreak question types
@@ -2943,7 +2950,7 @@ class SurveyUtil
      * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
      * @version February 2007
      */
-    static function export_complete_report_row(
+    public static function export_complete_report_row(
         $survey_data,
         $possible_options,
         $answers_of_user,
@@ -3009,7 +3016,7 @@ class SurveyUtil
      * @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
      * @version February 2007
      */
-    static function export_complete_report_xls($survey_data, $filename, $user_id = 0)
+    public static function export_complete_report_xls($survey_data, $filename, $user_id = 0)
     {
         $spreadsheet = new PHPExcel();
         $spreadsheet->setActiveSheetIndex(0);
@@ -3055,7 +3062,7 @@ class SurveyUtil
             // We show the questions if
             // 1. there is no question filter and the export button has not been clicked
             // 2. there is a quesiton filter but the question is selected for display
-            if (!($_POST['submit_question_filter']) || (is_array($_POST['questions_filter']) &&
+            if (!(isset($_POST['submit_question_filter'])) || (isset($_POST['submit_question_filter']) && is_array($_POST['questions_filter']) &&
                 in_array($row['question_id'], $_POST['questions_filter']))
             ) {
                 // We do not show comment and pagebreak question types
@@ -3104,13 +3111,21 @@ class SurveyUtil
 
         // Getting all the questions and options (second line)
         $sql = "SELECT
-                    survey_question.question_id, survey_question.survey_id, survey_question.survey_question, survey_question.display, survey_question.sort, survey_question.type,
-                    survey_question_option.question_option_id, survey_question_option.option_text, survey_question_option.sort as option_sort
+                    survey_question.question_id, 
+                    survey_question.survey_id, 
+                    survey_question.survey_question, 
+                    survey_question.display, 
+                    survey_question.sort, 
+                    survey_question.type,
+                    survey_question_option.question_option_id, 
+                    survey_question_option.option_text, 
+                    survey_question_option.sort as option_sort
 				FROM $table_survey_question survey_question
 				LEFT JOIN $table_survey_question_option survey_question_option
 				ON survey_question.question_id = survey_question_option.question_id AND survey_question_option.c_id = $course_id
-				WHERE survey_question.survey_id = '".intval($_GET['survey_id'])."' AND
-				survey_question.c_id = $course_id
+				WHERE 
+				    survey_question.survey_id = '".intval($_GET['survey_id'])."' AND
+				    survey_question.c_id = $course_id
 				ORDER BY survey_question.sort ASC, survey_question_option.sort ASC";
         $result = Database::query($sql);
         $possible_answers = array();
@@ -3119,8 +3134,8 @@ class SurveyUtil
             // We show the options if
             // 1. there is no question filter and the export button has not been clicked
             // 2. there is a quesiton filter but the question is selected for display
-            if (!($_POST['submit_question_filter']) ||
-                (is_array($_POST['questions_filter']) && in_array($row['question_id'], $_POST['questions_filter']))
+            if (!isset($_POST['submit_question_filter']) ||
+                (isset($_POST['questions_filter']) && is_array($_POST['questions_filter']) && in_array($row['question_id'], $_POST['questions_filter']))
             ) {
                 // We do not show comment and pagebreak question types
                 if ($row['type'] != 'comment' && $row['type'] != 'pagebreak') {
@@ -3240,7 +3255,7 @@ class SurveyUtil
         if ($display_extra_user_fields) {
             //show user fields data, if any, for this user
             $user_fields_values = UserManager::get_extra_user_data(intval($user),false,false, false, true);
-            foreach($user_fields_values as $value) {
+            foreach ($user_fields_values as $value) {
                 $return[] = api_html_entity_decode(strip_tags($value), ENT_QUOTES);
             }
         }
@@ -3249,12 +3264,11 @@ class SurveyUtil
             foreach ($possible_options as $question_id => & $possible_option) {
                 if (is_array($possible_option) && count($possible_option) > 0) {
                     foreach ($possible_option as $option_id => & $value) {
-                        $my_answers_of_user = ($answers_of_user[$question_id]==null) ? array() : $answers_of_user[$question_id];
+                        $my_answers_of_user = isset($answers_of_user[$question_id]) ? $answers_of_user[$question_id] : [];
                         $key = array_keys($my_answers_of_user);
-                        if (substr($key[0], 0, 4) == 'open') {
+                        if (isset($key[0]) && substr($key[0], 0, 4) == 'open') {
                             $return[] = api_html_entity_decode(strip_tags($answers_of_user[$question_id][$key[0]]['option_id']), ENT_QUOTES);
                         } elseif (!empty($answers_of_user[$question_id][$option_id])) {
-                            //$return .= 'v';
                             if ($answers_of_user[$question_id][$option_id]['value'] != 0) {
                                 $return[] = $answers_of_user[$question_id][$option_id]['value'];
                             } else {
@@ -3290,15 +3304,17 @@ class SurveyUtil
             'multipleresponse',
             'dropdown',
             'percentage',
-            'score',
+            'score'
         );
 
+        $surveyId = isset($_GET['survey_id']) ? (int) $_GET['survey_id'] : 0;
+
         // Getting all the questions
-        $questions = SurveyManager::get_questions($_GET['survey_id']);
+        $questions = SurveyManager::get_questions($surveyId);
 
         // Actions bar
         echo '<div class="actions">';
-        echo '<a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?survey_id='.intval($_GET['survey_id']).'">'.
+        echo '<a href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?survey_id='.$surveyId.'&'.api_get_cidreq().'">'.
                 Display::return_icon('back.png', get_lang('BackTo').' '.get_lang('ReportingOverview'),'',ICON_SIZE_MEDIUM).'</a>';
         echo '</div>';
 
@@ -3306,10 +3322,10 @@ class SurveyUtil
         Display::display_normal_message(get_lang('OnlyQuestionsWithPredefinedAnswers'), false);
 
         // The form for selecting the axis of the table
-        echo '<form id="form1" name="form1" method="get" action="'.api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&survey_id='.intval($_GET['survey_id']).'&xaxis='.Security::remove_XSS($_GET['xaxis']).'&y='.Security::remove_XSS($_GET['yaxis']).'">';
+        echo '<form id="form1" name="form1" method="get" action="'.api_get_self().'?'.api_get_cidreq().'&action='.Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&xaxis='.Security::remove_XSS($_GET['xaxis']).'&y='.Security::remove_XSS($_GET['yaxis']).'">';
         // Survey_id
         echo '<input type="hidden" name="action" value="'.Security::remove_XSS($_GET['action']).'"/>';
-        echo '<input type="hidden" name="survey_id" value="'.Security::remove_XSS($_GET['survey_id']).'"/>';
+        echo '<input type="hidden" name="survey_id" value="'.$surveyId.'"/>';
         // X axis
         echo get_lang('SelectXAxis').': ';
         echo '<select name="xaxis">';
@@ -3356,8 +3372,8 @@ class SurveyUtil
 
         if (isset($_GET['xaxis']) && is_numeric($_GET['xaxis']) && isset($_GET['yaxis']) && is_numeric($_GET['yaxis'])) {
             // Getting the answers of the two questions
-            $answers_x = SurveyUtil::get_answers_of_question_by_user($_GET['survey_id'], $_GET['xaxis']);
-            $answers_y = SurveyUtil::get_answers_of_question_by_user($_GET['survey_id'], $_GET['yaxis']);
+            $answers_x = SurveyUtil::get_answers_of_question_by_user($surveyId, $_GET['xaxis']);
+            $answers_y = SurveyUtil::get_answers_of_question_by_user($surveyId, $_GET['yaxis']);
 
             // Displaying the table
             $tableHtml = '<table border="1" class="data_table">';
@@ -3461,7 +3477,14 @@ class SurveyUtil
                                     break;
                                 } else {
                                     $tableHtml .=  '		<td align="center">';
-                                    $votes =  SurveyUtil::comparative_check($answers_x, $answers_y, $question_x['answersid'][($ii-1)], $question_y['answersid'][($ij)], $x, 0);
+                                    $votes =  SurveyUtil::comparative_check(
+                                        $answers_x,
+                                        $answers_y,
+                                        $question_x['answersid'][($ii-1)],
+                                        $question_y['answersid'][($ij)],
+                                        $x,
+                                        0
+                                    );
                                     $tableHtml .= $votes;
                                     array_push(
                                         $chartData,
@@ -3524,6 +3547,7 @@ class SurveyUtil
                 AND question_id='".intval($question_id)."'
                 ORDER BY USER ASC";
         $result = Database::query($sql);
+        $return = [];
         while ($row = Database::fetch_array($result)) {
             if ($row['value'] == 0) {
                 $return[$row['user']][] = $row['option_id'];
@@ -3531,6 +3555,7 @@ class SurveyUtil
                 $return[$row['user']][] = $row['option_id'].'*'.$row['value'];
             }
         }
+
         return $return;
     }
 
@@ -4331,7 +4356,7 @@ class SurveyUtil
     public static function get_number_of_surveys_for_coach()
     {
         $survey_tree = new SurveyTree();
-        return count($survey_tree->get_last_children_from_branch($survey_tree->surveylist));
+        return count($survey_tree->surveylist);
     }
 
     /**
@@ -4438,10 +4463,18 @@ class SurveyUtil
         return $surveys;
     }
 
+    /**
+     * @param $from
+     * @param $number_of_items
+     * @param $column
+     * @param $direction
+     * @return array
+     */
     public static function get_survey_data_for_coach($from, $number_of_items, $column, $direction)
     {
         $survey_tree = new SurveyTree();
-        $last_version_surveys = $survey_tree->get_last_children_from_branch($survey_tree->surveylist);
+        //$last_version_surveys = $survey_tree->get_last_children_from_branch($survey_tree->surveylist);
+        $last_version_surveys = $survey_tree->surveylist;
         $list = array();
         foreach ($last_version_surveys as & $survey) {
             $list[]=$survey['id'];
@@ -4465,22 +4498,22 @@ class SurveyUtil
 
         $course_id = api_get_course_int_id();
 
-        $sql = "SELECT ".
-            "survey.survey_id							AS col0, ".
-            "survey.title	                            AS col1, ".
-            "survey.code									AS col2, ".
-            "count(survey_question.question_id)			AS col3, ".
-            (api_is_western_name_order() ? "CONCAT(user.firstname, ' ', user.lastname)" : "CONCAT(user.lastname, ' ', user.firstname)")."	AS col4, ".
-            "survey.avail_from							AS col5, ".
-            "survey.avail_till							AS col6, ".
-            "CONCAT('<a href=\"survey_invitation.php?view=answered&survey_id=',survey.survey_id,'\">',survey.answered,'</a> / <a href=\"survey_invitation.php?view=invited&survey_id=',survey.survey_id,'\">',survey.invited, '</a>')	AS col7, ".
-            "survey.anonymous							AS col8, ".
-            "survey.survey_id							AS col9  ".
-            "FROM $table_survey survey ".
-            "LEFT JOIN $table_survey_question survey_question
-             ON (survey.survey_id = survey_question.survey_id AND survey.c_id = survey_question.c_id) ".
-            ", $table_user user
-               WHERE survey.author = user.user_id AND survey.c_id = $course_id $list_condition ";
+        $sql = "SELECT 
+            survey.survey_id							AS col0, 
+            survey.title AS col1, 
+            survey.code AS col2, 
+            count(survey_question.question_id)			AS col3, 
+            ".(api_is_western_name_order() ? "CONCAT(user.firstname, ' ', user.lastname)" : "CONCAT(user.lastname, ' ', user.firstname)")."	AS col4,
+            survey.avail_from AS col5,
+            survey.avail_till AS col6,
+            CONCAT('<a href=\"survey_invitation.php?view=answered&survey_id=',survey.survey_id,'\">',survey.answered,'</a> / <a href=\"survey_invitation.php?view=invited&survey_id=',survey.survey_id,'\">',survey.invited, '</a>') AS col7,
+            survey.anonymous AS col8,
+            survey.survey_id AS col9
+            FROM $table_survey survey
+            LEFT JOIN $table_survey_question survey_question
+            ON (survey.survey_id = survey_question.survey_id AND survey.c_id = survey_question.c_id),
+            $table_user user
+            WHERE survey.author = user.user_id AND survey.c_id = $course_id $list_condition ";
         $sql .= " GROUP BY survey.survey_id";
         $sql .= " ORDER BY col$column $direction ";
         $sql .= " LIMIT $from,$number_of_items";
@@ -4752,15 +4785,17 @@ class SurveyUtil
     /**
      * @author Isaac Flores Paz <florespaz@bidsoftperu.com>
      * @param int $user_id - User ID
+     * @param string $survey_code
      * @param int $user_id_answer - User in survey answer table (user id or anonymus)
+     *
      * @return boolean
      */
     public static function show_link_available($user_id, $survey_code, $user_answer)
     {
-        $table_survey             = Database :: get_course_table(TABLE_SURVEY);
-        $table_survey_invitation  = Database :: get_course_table(TABLE_SURVEY_INVITATION);
-        $table_survey_answer      = Database :: get_course_table(TABLE_SURVEY_ANSWER);
-        $table_survey_question    = Database :: get_course_table(TABLE_SURVEY_QUESTION);
+        $table_survey = Database:: get_course_table(TABLE_SURVEY);
+        $table_survey_invitation = Database:: get_course_table(TABLE_SURVEY_INVITATION);
+        $table_survey_answer = Database:: get_course_table(TABLE_SURVEY_ANSWER);
+        $table_survey_question = Database:: get_course_table(TABLE_SURVEY_QUESTION);
 
         $survey_code = Database::escape_string($survey_code);
         $user_id = intval($user_id);
@@ -4770,14 +4805,29 @@ class SurveyUtil
 
         $sql = 'SELECT COUNT(*) as count
                 FROM '.$table_survey_invitation.'
-		        WHERE user='.$user_id.' AND survey_code="'.$survey_code.'" AND answered="1" AND c_id = '.$course_id.' ';
-
-        $sql2 = 'SELECT COUNT(*) as count FROM '.$table_survey.' s INNER JOIN '.$table_survey_question.' q ON s.survey_id=q.survey_id
-				 WHERE s.code="'.$survey_code.'" AND q.type NOT IN("pagebreak","comment") AND s.c_id = '.$course_id.' AND q.c_id = '.$course_id.' ';
-
-        $sql3 = 'SELECT COUNT(DISTINCT question_id) as count FROM '.$table_survey_answer.'
-				 WHERE survey_id=(SELECT survey_id FROM '.$table_survey.'
-				 WHERE code="'.$survey_code.'" AND c_id = '.$course_id.' ) AND user="'.$user_answer.'" AND c_id = '.$course_id.' ';
+		        WHERE
+		            user='.$user_id.' AND
+		            survey_code="'.$survey_code.'" AND 
+		            answered="1" AND 
+		            c_id = '.$course_id;
+
+        $sql2 = 'SELECT COUNT(*) as count FROM '.$table_survey.' s 
+                 INNER JOIN '.$table_survey_question.' q 
+                 ON s.survey_id=q.survey_id
+				 WHERE 
+				    s.code="'.$survey_code.'" AND 
+				    q.type NOT IN("pagebreak","comment") AND s.c_id = '.$course_id.' AND q.c_id = '.$course_id.' ';
+
+        $sql3 = 'SELECT COUNT(DISTINCT question_id) as count 
+                 FROM '.$table_survey_answer.'
+				 WHERE survey_id=(
+				    SELECT survey_id FROM '.$table_survey.'
+				    WHERE 
+				        code = "'.$survey_code.'" AND 
+				        c_id = '.$course_id.' 
+                    )  AND 
+                user="'.$user_answer.'" AND 
+                c_id = '.$course_id;
 
         $result  = Database::query($sql);
         $result2 = Database::query($sql2);
@@ -4788,6 +4838,7 @@ class SurveyUtil
         $row3 = Database::fetch_array($result3, 'ASSOC');
 
         if ($row['count'] == 1 && $row3['count'] != $row2['count']) {
+
             return true;
         } else {
             return false;
@@ -4796,9 +4847,10 @@ class SurveyUtil
 
     /**
      * Display survey question chart
-     * @param	array	Chart data
-     * @param	boolean	Tells if the chart has a serie. False by default
-     * @return	void 	(direct output)
+     * @param   array	$chartData
+     * @param   boolean	$hasSerie Tells if the chart has a serie. False by default
+     * @param   string $chartContainerId
+     * @return	string 	(direct output)
      */
     public static function drawChart($chartData, $hasSerie = false, $chartContainerId = 'chartContainer')
     {
@@ -4853,6 +4905,7 @@ class SurveyUtil
             $htmlChart .= 'myChart.draw();
                 </script>';
         }
+
         return $htmlChart;
     }
 

+ 2 - 4
main/survey/survey.php

@@ -30,10 +30,8 @@ if ($isDrhOfCourse) {
 }
 if (!api_is_allowed_to_edit(false, true) ||
     (api_is_course_coach() && $extend_rights_for_coachs == 'false')
-) {
-	Display :: display_header(get_lang('ToolSurvey'));
-	Display :: display_error_message(get_lang('NotAllowed'), false);
-	Display :: display_footer();
+) {    
+    api_not_allowed(true);
 	exit;
 }
 

+ 1 - 4
main/survey/survey_list.php

@@ -175,8 +175,7 @@ if (api_is_course_coach() && $extend_rights_for_coachs == 'false') {
     SurveyUtil::display_survey_list();
 }
 
-// Footer
-Display :: display_footer();
+Display::display_footer();
 
 /* Bypass functions to make direct use from SortableTable possible */
 
@@ -223,5 +222,3 @@ function get_survey_data_drh($from, $number_of_items, $column, $direction)
 {
     return SurveyUtil::get_survey_data($from, $number_of_items, $column, $direction, true);
 }
-
-

+ 7 - 0
main/template/default/layout/footer.tpl

@@ -1,3 +1,10 @@
+{#  Plugins for pref footer section #}
+{% if plugin_pre_footer is not null %}
+    <div id="plugin_pre_footer">
+        {{ plugin_pre_footer }}
+    </div>
+{% endif %}
+
 <footer> <!-- start of #footer section -->
     <div class="container">
         <div class="row">

+ 3 - 6
main/template/default/layout/header.js.tpl

@@ -77,15 +77,12 @@ $(document).ready(function(){
     $("#closed-view-list").click(function(){
         $("#student-list-work").fadeOut(300);
     });
-
     check_brand();
-    //if exists the toolbar admin
-
-    if($('#toolbar-admin').length){
+    /* if($('#toolbar-admin').length){
         var heigthToolBar= $('#toolbar-admin').height();
         $('header').css('margin-top', heigthToolBar+'px');
         $('#page-back').css('padding-top', heigthToolBar+20+'px');
-    }
+    } */
 
     // Removes the yellow input in Chrome
     if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
@@ -171,7 +168,7 @@ $(document).ready(function(){
         'marginLeft':'50px'
     },1000);
 
-    $('#navigation > li').hover(
+    $('#navigation div').hover(
         function () {
             $('a',$(this)).stop().animate({
                 'marginLeft':'1px'

+ 20 - 34
main/template/default/layout/main_header.tpl

@@ -13,10 +13,7 @@
 
 <!-- Display the Chamilo Uses Cookies Warning Validation if needed -->
 {% if displayCookieUsageWarning == true %}
-    <!-- If toolbar is displayed, we have to display this block bellow it -->
-    {% if toolBarDisplayed == true %}
-        <div class="displayUnderToolbar" >&nbsp;</div>
-    {% endif %}
+<div class="toolbar-cookie alert-warning">
     <form onSubmit="$(this).toggle('slow')" action="" method="post">
         <input value=1 type="hidden" name="acceptCookies"/>
         <div class="cookieUsageValidation">
@@ -32,29 +29,19 @@
             </span>
         </div>
     </form>
+</div>
 {% endif %}
-
-
 {% if show_header == true %}
-
 <div id="page-wrap"><!-- page section -->
-    {# Bug and help notifications #}
-    {% block help_notifications %}
-    <ul id="navigation" class="notification-panel">
+    <div id="navigation" class="notification-panel">
         {{ help_content }}
-        {{ bug_notification_link }}
-    </ul>
-    {% endblock %}
-
-    {# topbar #}
+        {{ bug_notification }}
+    </div>
     {% block topbar %}
         {% include template ~ "/layout/topbar.tpl" %}
-        {% if show_toolbar == 1 %}
-            <div class="clear-header"></div>
-        {% endif %}
     {% endblock %}
+    <div class="extra-header">{{ header_extra_content }}</div>
         <header>
-            <div class="extra-header">{{ header_extra_content }}</div>
             <section id="main" class="container">
                 {% if plugin_header_main %}
                 <div class="row">
@@ -100,23 +87,22 @@
                     </div>
                 </div>
             </section>
-            <section id="menu-bar">
-                {# menu #}
-                {% block menu %}
-                {% include template ~ "/layout/menu.tpl" %}
-                {% endblock %}
-            </section>
-            <section id="breadcrumb-bar">
-                <div class="container">
-                    {# breadcrumb #}
-                    {% block breadcrumb %}
-                    {{ breadcrumb }}
-                    {% endblock %}
-                </div>
-            </section>
         </header>
+<section id="menu-bar">
+    {# menu #}
+    {% block menu %}
+        {% include template ~ "/layout/menu.tpl" %}
+    {% endblock %}
+</section>
+<section id="breadcrumb-bar">
+    <div class="container">
+        {# breadcrumb #}
+        {% block breadcrumb %}
+            {{ breadcrumb }}
+        {% endblock %}
+    </div>
+</section>
     <div id="top_main_content" class="container">
     <div class="row">
-    {# course navigation links/shortcuts need to be activated by the admin #}
     {% include template ~ "/layout/course_navigation.tpl" %}
 {% endif %}

+ 4 - 2
main/template/default/layout/menu.tpl

@@ -22,11 +22,13 @@
                <li><a href="{{ message_url }}">{{ user_notifications }}</a></li>
                {% endif %}
                {% if _u.status != 6 %}
-                <li class="dropdown">
+                <li class="dropdown avatar-user">
                     <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
-                        {{ _u.complete_name }} <span class="caret"></span>
+                        <img class="img-circle" src="{{ _u.avatar_small }}" alt="{{ _u.complete_name }}" />  <span class="caret"></span>
                     </a>
                     <ul class="dropdown-menu" role="menu">
+                        <li class="username">{{ _u.complete_name }}</li>
+                        <li role="separator" class="divider"></li>
                         <li>
                             {{ profile_link }}
                             {{ message_link }}

+ 2 - 15
main/template/default/layout/topbar.tpl

@@ -1,8 +1,7 @@
 <!-- Topbar -->
 {% if show_toolbar == 1 %}
-    <nav id="toolbar-admin" class="navbar navbar-inverse navbar-fixed-top">
+    <nav id="toolbar-admin" class="navbar navbar-inverse">
         <div class="container-fluid">
-
             <div class="navbar-header">
                 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#toolbar">
                     <span class="sr-only">Toggle navigation</span>
@@ -11,23 +10,13 @@
                     <span class="icon-bar"></span>
                 </button>
                 <a class="navbar-brand" href="{{ _p.web }}">
-                    {{ "siteName" | get_setting }}
+                    <img src="{{ "icon-chamilo.png"|icon(22) }}" title="{{ "siteName" | get_setting }}">
                 </a>
             </div>
-
             {% if _u.logged %}
                 <div class="collapse navbar-collapse" id="toolbar">
                     <ul class="nav navbar-nav">
                         <li class="active"><a href="{{ _p.web }}user_portal.php"> {{ "MyCourses"|get_lang }}</a></li>
-                        {#
-                        <li class="dropdown">
-                            <a class="dropdown-toggle" data-toggle="dropdown" href="#">{{'Teaching'|get_lang }}<b class="caret"></b></a>
-                            <ul class="dropdown-menu">
-                                <li><a href="{{ _p.web_main }}create_course/add_course.php">{{ "AddCourse"|get_lang }}</a></li>
-                                <li><a href="{{ _p.web_main }}auth/courses.php">{{ "Catalog"|get_lang }}</a></li>
-                            </ul>
-                        </li>
-                        #}
                         <li class="dropdown">
                             <a class="dropdown-toggle" data-toggle="dropdown" href="#">{{'Tracking'|get_lang }}<b class="caret"></b></a>
                             <ul class="dropdown-menu">
@@ -80,8 +69,6 @@
                                 <li><a href="{{ _p.web_main }}calendar/agenda_js.php?type=personal">{{ "MyAgenda"|get_lang }}</a></li>
                                 <li><a href="{{ _p.web_main }}messages/inbox.php">{{ "Inbox"|get_lang }}</a></li>
                                 <li><a href="{{ _p.web_main }}auth/my_progress.php">{{ "MyReporting"|get_lang }}</a></li>
-                                <!--<li class="divider"></li>
-                                <li><a href="{{ _p.web_main }}social/invitations.php">{{ "PendingInvitations"|get_lang }}</a></li> -->
                             </ul>
                         </li>
                         <li><a href="{{  _p.web }}index.php?logout=logout&uid={{_u.user_id}}">{{ "Logout"|get_lang }}</a></li>

+ 10 - 6
main/template/default/user_portal/session.tpl → main/template/default/user_portal/classic_session.tpl

@@ -40,9 +40,11 @@
                     {{ row.description }}
                 {% endif %}
                 <div class="info-session">
-                    <span><i class="fa fa-user" aria-hidden="true"></i>
-                    {{ row.coach_name }}
-                    </span>
+                    {% if row.coach_name  != '' %}
+                        <span><i class="fa fa-user" aria-hidden="true"></i>
+                        {{ row.coach_name }}
+                        </span>
+                    {% endif %}
                     <span><i class="fa fa-calendar" aria-hidden="true"></i>
                     {{ row.date }}
                     </span>
@@ -68,9 +70,11 @@
                     {{ row.description }}
                 {% endif %}
                 <div class="info-session">
-                    <span><i class="fa fa-user" aria-hidden="true"></i>
-                    {{ row.coach_name }}
-                    </span>
+                    {% if row.coach_name  != '' %}
+                        <span><i class="fa fa-user" aria-hidden="true"></i>
+                        {{ row.coach_name }}
+                        </span>
+                    {% endif %}
                     <span><i class="fa fa-calendar" aria-hidden="true"></i>
                     {{ row.date }}
                     </span>

+ 6 - 3
main/template/default/user_portal/grid_session.tpl

@@ -16,8 +16,11 @@
             {{ row.description }}
         {% endif %}
         <div class="info-session">
-            <span><i class="fa fa-user" aria-hidden="true"></i>
-            {{ row.coach_name }}
+            {% if row.coach_name  != '' %}
+                <span><i class="fa fa-user" aria-hidden="true"></i>
+                    {{ row.coach_name }}
+                </span>
+            {% endif %}
             </span>
             <span><i class="fa fa-calendar" aria-hidden="true"></i>
             {{ row.date }}
@@ -29,7 +32,7 @@
             <div class="col-md-4 col-sm-4 col-xs-6">
                 <div class="items">
                     <div class="image">
-                        <img src="{{ item.icon }}" class="img-responsive">
+                        <img src="{{ item.image }}" class="img-responsive">
                         {% if item.category != '' %}
                         <span class="category">{{ item.category }}</span>
                         <div class="cribbon"></div>

+ 8 - 0
plugin/courseblock/CourseBlockPlugin.php

@@ -10,6 +10,10 @@ class CourseBlockPlugin extends Plugin
 
     // When creating a new course this settings are added to the course
     public $course_settings = array(
+         array(
+            'name' => 'course_block_pre_footer',
+            'type' => 'textarea'
+        ),
         array(
             'name' => 'course_block_footer_left',
             'type' => 'textarea'
@@ -81,6 +85,10 @@ class CourseBlockPlugin extends Plugin
                 $content = api_get_course_setting('course_block_footer_right');
                 $content = $content === -1 ? '' : $content;
                 break;
+            case 'pre_footer':
+                $content = api_get_course_setting('course_block_pre_footer');
+                $content = $content === -1 ? '' : $content;
+                break;
         }
         return $content;
     }

+ 1 - 0
plugin/courseblock/lang/english.php

@@ -8,4 +8,5 @@ $strings['tool_enable_help'] = 'Once enabled, you will have to configure the plu
 $strings['course_block_footer_left'] = 'Footer left';
 $strings['course_block_footer_center'] = 'Footer center';
 $strings['course_block_footer_right'] = 'Footer right';
+$strings['course_block_pre_footer'] = 'Pre footer';
 

+ 1 - 1
plugin/ticket/src/categories.php

@@ -147,7 +147,7 @@ Display::display_header($toolName);
 $items = [
     [
         'url' => 'categories.php?action=add',
-        'content' => Display::return_icon('new_folder.png', null, null, ICON_SIZE_MEDIUM),
+        'content' => Display::return_icon('new_folder.png', null, null, ICON_SIZE_MEDIUM)
     ]
 ];
 

+ 1 - 61
plugin/tour/intro.js/introjs.min.css

@@ -236,70 +236,14 @@
   left: 50%;
   top: 50%
 }
-@font-face {
-  font-family: 'Lato';
-  font-style: normal;
-  font-weight: 900;
-
-  src: url('../fonts/lato-black.eot');
-  src: url('../fonts/lato-black.eot?#iefix') format('embedded-opentype'), url('../fonts/lato/lato-black.woff') format('woff'), url('../fonts/lato/lato-black.ttf') format('truetype'), url('../fonts/lato/lato-black.svg#latoblack') format('svg');
-}
-@font-face {
-  font-family: 'Lato';
-  font-style: normal;
-  font-weight: bold;
-
-  src: url('../fonts/lato-bold.eot');
-  src: url('../fonts/lato-bold.eot?#iefix') format('embedded-opentype'), url('../fonts/lato/lato-bold.woff') format('woff'), url('../fonts/lato/lato-bold.ttf') format('truetype'), url('../fonts/lato/lato-bold.svg#latobold') format('svg');
-}
-@font-face {
-  font-family: 'Lato';
-  font-style: italic;
-  font-weight: bold;
-
-  src: url('../fonts/lato-bolditalic.eot');
-  src: url('../fonts/lato-bolditalic.eot?#iefix') format('embedded-opentype'), url('../fonts/lato/lato-bolditalic.woff') format('woff'), url('../fonts/lato/lato-bolditalic.ttf') format('truetype'), url('../fonts/lato/lato-bolditalic.svg#latobold-italic') format('svg');
-}
-@font-face {
-  font-family: 'Lato';
-  font-style: italic;
-  font-weight: normal;
-
-  src: url('../fonts/lato-italic.eot');
-  src: url('../fonts/lato-italic.eot?#iefix') format('embedded-opentype'), url('../fonts/lato/lato-italic.woff') format('woff'), url('../fonts/lato/lato-italic.ttf') format('truetype'), url('../fonts/lato/lato-italic.svg#latoitalic') format('svg');
-}
-@font-face {
-  font-family: 'Lato';
-  font-style: normal;
-  font-weight: 300;
-
-  src: url('../fonts/lato-light.eot');
-  src: url('../fonts/lato-light.eot?#iefix') format('embedded-opentype'), url('../fonts/lato/lato-light.woff') format('woff'), url('../fonts/lato/lato-light.ttf') format('truetype'), url('../fonts/lato/lato-light.svg#latolight') format('svg');
-}
-@font-face {
-  font-family: 'Lato';
-  font-style: normal;
-  font-weight: normal;
-
-  src: url('../fonts/lato-regular.eot');
-  src: url('../fonts/lato-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/lato/lato-regular.woff') format('woff'), url('../fonts/lato/lato-regular.ttf') format('truetype'), url('../fonts/lato/lato-regular.svg#latoregular') format('svg');
-}
-
 .tour-warning {
   color: #fff;
   font-weight: 400;
   background-color: #E95D4E;
   border: none;
-  -webkit-border-radius: 10px;
-  -moz-border-radius: 10px;
   border-radius: 10px;
-  font-size: 18px;
+  font-size: 14px;
   line-height: 1.72222;
-  padding-left: 1em;
-  padding-right: 1em;
-  border-bottom: 2px solid #C0392B;
-  border-right: 2px solid #C0392B;
-  font-family: "Lato",Helvetica,Arial,sans-serif;
 }
 .tour-warning img{
   padding-right: .5em;
@@ -312,15 +256,11 @@
 .open > .dropdown-toggle.btn-warning {
   color: #fff;
   background-color: #EC7063;
-  border-bottom: 2px solid #C0392B;
-  border-right: 2px solid #C0392B;
 }
 .tour-warning:active,
 .tour-warning.active,
 .open > .dropdown-toggle.tour-warning {
   background: #EC7063;
-  border-bottom: 2px solid #C0392B;
-  border-right: 2px solid #C0392B;
 }
 .tour-warning.disabled,
 .tour-warning[disabled],

+ 1 - 1
src/Chamilo/CoreBundle/Entity/SkillRelUserComment.php

@@ -21,7 +21,7 @@ use Doctrine\ORM\Mapping as ORM;
  *      @ORM\Index(name="idx_select_su_giver", columns={"skill_rel_user_id", "feedback_giver_id"})
  *  }
  * )
- * @ORM\Entity(repositoryClass="Chamilo\CoreBundle\Entity\Repository\SkillRelUserCommentRepository")
+ * @ORM\Entity
  */
 class SkillRelUserComment
 {

+ 7 - 1
src/Chamilo/SkillBundle/Entity/Level.php

@@ -1,6 +1,12 @@
 <?php
 /* For licensing terms, see /license.txt */
 
+/**
+ * Profile Level
+ *
+ * @package chamilo.skill
+ */
+
 namespace Chamilo\SkillBundle\Entity;
 
 use Gedmo\Mapping\Annotation as Gedmo;
@@ -10,7 +16,7 @@ use Doctrine\ORM\Mapping as ORM;
  * Level
  *
  * @ORM\Table(
- *  name="skill_level",
+ *  name="skill_level"
  * )
  * @ORM\Entity
  */

+ 1 - 1
src/Chamilo/SkillBundle/Entity/Profile.php

@@ -16,7 +16,7 @@ use Doctrine\ORM\Mapping as ORM;
  * Profile
  *
  * @ORM\Table(
- *  name="skill_level_profile",
+ *  name="skill_level_profile"
  * )
  * @ORM\Entity
  */

+ 57 - 0
src/Chamilo/TicketBundle/Entity/AssignedLog.php

@@ -0,0 +1,57 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\TicketBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+
+/**
+ * Class AssignedLog
+ * @ORM\Table(
+ *  name="ticket_assigned_log",
+ * )
+ * @ORM\Entity
+ * @package Chamilo\TicketBundle\Entity
+ */
+class AssignedLog
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     */
+    protected $id;
+
+    /**
+     * @var Ticket
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\TicketBundle\Entity\Ticket")
+     * @ORM\JoinColumn(name="ticket_id", referencedColumnName="id")
+     **/
+    protected $ticket;
+
+    /**
+     * @var Ticket
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\UserBundle\Entity\User")
+     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
+     **/
+    protected $user;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_insert_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $insertUserId;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="assigned_date", type="datetime", nullable=false, unique=false)
+     */
+    protected $assignedDate;
+}

+ 91 - 0
src/Chamilo/TicketBundle/Entity/Category.php

@@ -0,0 +1,91 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\TicketBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+use Chamilo\CoreBundle\Entity\Course;
+use Chamilo\CoreBundle\Entity\Session;
+
+/**
+ * Category
+ *
+ * @ORM\Table(name="ticket_category")
+ * @ORM\Entity
+ */
+class Category
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     */
+    protected $id;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="name", type="string", length=255, nullable=false)
+     */
+    protected $name;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="description", type="text", nullable=true)
+     */
+    protected $description;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="total_tickets", type="integer", nullable=false)
+     */
+    protected $totalTickets;
+
+    /**
+     * @var bool
+     *
+     * @ORM\Column(name="course_required", type="boolean", nullable=false)
+     */
+    protected $courseRequired;
+
+    /**
+     * @var Project
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\TicketBundle\Entity\Project")
+     * @ORM\JoinColumn(name="project_id", referencedColumnName="id")
+     **/
+    protected $project;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_insert_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $insertUserId;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_insert_datetime", type="datetime", nullable=false, unique=false)
+     */
+    protected $insertDateTime;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_lastedit_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $lastEditUserId;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_lastedit_datetime", type="datetime", nullable=true, unique=false)
+     */
+    protected $lastEditDateTime;
+}

+ 44 - 0
src/Chamilo/TicketBundle/Entity/CategoryRelUser.php

@@ -0,0 +1,44 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\TicketBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+use Chamilo\TicketBundle\Entity\Category;
+use Chamilo\UserBundle\Entity\User;
+
+/**
+ * CategoryRelUser
+ *
+ * @ORM\Table(name="ticket_category_rel_user")
+ * @ORM\Entity
+ */
+class CategoryRelUser
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     */
+    protected $id;
+
+    /**
+     * @var Category
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\TicketBundle\Entity\Category")
+     * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
+     **/
+    protected $category;
+
+    /**
+     * @var Category
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\UserBundle\Entity\User")
+     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
+     **/
+    protected $user;
+
+}

+ 83 - 0
src/Chamilo/TicketBundle/Entity/Message.php

@@ -0,0 +1,83 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\TicketBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+use Chamilo\CoreBundle\Entity\Course;
+use Chamilo\CoreBundle\Entity\Session;
+
+/**
+ * Message
+ *
+ * @ORM\Table(name="ticket_message")
+ * @ORM\Entity
+ */
+class Message
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     */
+    protected $id;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="subject", type="string", length=255, nullable=false)
+     */
+    protected $subject;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="message", type="text", nullable=true)
+     */
+    protected $message;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="status", type="string", nullable=false)
+     */
+    protected $status;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="ip_address", type="string", nullable=false)
+     */
+    protected $ipAddress;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_insert_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $insertUserId;
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_insert_datetime", type="datetime", nullable=false, unique=false)
+     */
+    protected $insertDateTime;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_lastedit_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $lastEditUserId;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_lastedit_datetime", type="datetime", nullable=true, unique=false)
+     */
+    protected $lastEditDateTime;
+
+}

+ 93 - 0
src/Chamilo/TicketBundle/Entity/MessageAttachment.php

@@ -0,0 +1,93 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\TicketBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+use Chamilo\CoreBundle\Entity\Course;
+use Chamilo\CoreBundle\Entity\Session;
+
+/**
+ * MessageAttachment
+ *
+ * @ORM\Table(name="ticket_message_attachments")
+ * @ORM\Entity
+ */
+class MessageAttachment
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     */
+    protected $id;
+
+    /**
+     * @var Ticket
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\TicketBundle\Entity\Ticket")
+     * @ORM\JoinColumn(name="ticket_id", referencedColumnName="id")
+     **/
+    protected $ticket;
+
+    /**
+     * @var Message
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\TicketBundle\Entity\Message")
+     * @ORM\JoinColumn(name="message_id", referencedColumnName="id")
+     **/
+    protected $message;
+
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="path", type="string", length=255, nullable=false)
+     */
+    protected $path;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="filename", type="text", nullable=false)
+     */
+    protected $filename;
+
+   /**
+     * @var integer
+     *
+     * @ORM\Column(name="size", type="integer", nullable=false, unique=false)
+     */
+    protected $size;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_insert_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $insertUserId;
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_insert_datetime", type="datetime", nullable=false, unique=false)
+     */
+    protected $insertDateTime;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_lastedit_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $lastEditUserId;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_lastedit_datetime", type="datetime", nullable=true, unique=false)
+     */
+    protected $lastEditDateTime;
+
+}

+ 82 - 0
src/Chamilo/TicketBundle/Entity/Priority.php

@@ -0,0 +1,82 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\TicketBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+use Chamilo\CoreBundle\Entity\Course;
+use Chamilo\CoreBundle\Entity\Session;
+
+/**
+ * Priority
+ *
+ * @ORM\Table(name="ticket_priority")
+ * @ORM\Entity
+ */
+class Priority
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     */
+    protected $id;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="name", type="string", length=255, nullable=false)
+     */
+    protected $name;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="description", type="text", nullable=true)
+     */
+    protected $description;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="color", type="string", nullable=false)
+     */
+    protected $color;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="urgency", type="string", nullable=false)
+     */
+    protected $urgency;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_insert_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $insertUserId;
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_insert_datetime", type="datetime", nullable=false, unique=false)
+     */
+    protected $insertDateTime;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_lastedit_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $lastEditUserId;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_lastedit_datetime", type="datetime", nullable=true, unique=false)
+     */
+    protected $lastEditDateTime;
+}

+ 83 - 0
src/Chamilo/TicketBundle/Entity/Project.php

@@ -0,0 +1,83 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\TicketBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+use Chamilo\CoreBundle\Entity\Course;
+use Chamilo\CoreBundle\Entity\Session;
+
+/**
+ * Project
+ *
+ * @ORM\Table(name="ticket_project")
+ * @ORM\Entity
+ */
+class Project
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     */
+    protected $id;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="name", type="string", length=255, nullable=false)
+     */
+    protected $name;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="description", type="text", nullable=true)
+     */
+    protected $description;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="email", type="string", nullable=true)
+     */
+    protected $email;
+
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="other_area", type="integer", nullable=true)
+     */
+    protected $otherArea;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_insert_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $insertUserId;
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_insert_datetime", type="datetime", nullable=false, unique=false)
+     */
+    protected $insertDateTime;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_lastedit_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $lastEditUserId;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_lastedit_datetime", type="datetime", nullable=true, unique=false)
+     */
+    protected $lastEditDateTime;
+}

+ 41 - 0
src/Chamilo/TicketBundle/Entity/Status.php

@@ -0,0 +1,41 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\TicketBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+use Chamilo\CoreBundle\Entity\Course;
+use Chamilo\CoreBundle\Entity\Session;
+
+/**
+ * Status
+ *
+ * @ORM\Table(name="ticket_status")
+ * @ORM\Entity
+ */
+class Status
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     */
+    protected $id;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="name", type="string", length=255, nullable=false)
+     */
+    protected $name;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="description", type="text", nullable=true)
+     */
+    protected $description;
+}

+ 167 - 0
src/Chamilo/TicketBundle/Entity/Ticket.php

@@ -0,0 +1,167 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\TicketBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+use Chamilo\CoreBundle\Entity\Course;
+use Chamilo\CoreBundle\Entity\Session;
+use Chamilo\TicketBundle\Entity\Project;
+use Chamilo\TicketBundle\Entity\Priority;
+
+/**
+ * Ticket
+ *
+ * @ORM\Table(name="ticket_ticket")
+ * @ORM\Entity
+ */
+class Ticket
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     */
+    protected $id;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="ticket_code", type="string", length=255, nullable=false)
+     */
+    protected $code;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="subject", type="string", length=255, nullable=false)
+     */
+    protected $subject;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="message", type="text", nullable=true)
+     */
+    protected $message;
+
+    /**
+     * @var Project
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\TicketBundle\Entity\Project")
+     * @ORM\JoinColumn(name="project_id", referencedColumnName="id")
+     **/
+    protected $project;
+
+    /**
+     * @var Priority
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\TicketBundle\Entity\Priority")
+     * @ORM\JoinColumn(name="priority_id", referencedColumnName="id")
+     **/
+    protected $priority;
+
+    /**
+     * @var Course
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Course")
+     * @ORM\JoinColumn(name="course_id", referencedColumnName="id")
+     **/
+    protected $course;
+
+    /**
+     * @var Session
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Session")
+     * @ORM\JoinColumn(name="session_id", referencedColumnName="id")
+     **/
+    protected $session;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="personal_email", type="string", length=255, nullable=false)
+     */
+    protected $personalEmail;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="assigned_last_user", type="integer", nullable=true)
+     */
+    protected $assignedLastUser;
+
+     /**
+     * @var Status
+     *
+     * @ORM\ManyToOne(targetEntity="Chamilo\TicketBundle\Entity\Status")
+     * @ORM\JoinColumn(name="status_id", referencedColumnName="id")
+     **/
+    protected $status;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="total_messages", type="integer", nullable=false)
+     */
+    protected $totalMessages;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="keyword", type="string", length=255, nullable=true)
+     */
+    protected $keyword;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="source", type="string", length=255, nullable=true)
+     */
+    protected $source;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="start_date", type="datetime", nullable=true, unique=false)
+     */
+    protected $startDate;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="end_date", type="datetime", nullable=true, unique=false)
+     */
+    protected $endDate;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_insert_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $insertUserId;
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_insert_datetime", type="datetime", nullable=false, unique=false)
+     */
+    protected $insertDateTime;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="sys_lastedit_user_id", type="integer", nullable=false, unique=false)
+     */
+    protected $lastEditUserId;
+
+    /**
+     * @var \DateTime
+     *
+     * @ORM\Column(name="sys_lastedit_datetime", type="datetime", nullable=true, unique=false)
+     */
+    protected $lastEditDateTime;
+
+}

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