Browse Source

merge from 1.11.x

jmontoya 9 years ago
parent
commit
3ee9ab66ec

+ 17 - 9
main/admin/access_urls.php

@@ -65,7 +65,10 @@ if (isset ($_GET['action'])) {
                                 $url_str.=$my_url['url'].' <br />';
                             }
                         }
-                        Display :: display_normal_message(get_lang('AdminUserRegisteredToThisURL').': '.$url_str.'<br />',false);
+                        Display:: display_normal_message(
+                            get_lang('AdminUserRegisteredToThisURL').': '.$url_str.'<br />',
+                            false
+                        );
                     }
                 }
                 break;
@@ -76,8 +79,7 @@ if (isset ($_GET['action'])) {
 
 $parameters['sec_token'] = Security::get_token();
 
-// checking if the admin is registered in all sites
-
+// Checking if the admin is registered in all sites
 $url_string='';
 $my_user_url_list = api_get_access_url_from_user(api_get_user_id());
 foreach ($url_list as $my_url) {
@@ -106,10 +108,18 @@ if ($current_access_url_id==-1) {
 
 // action menu
 echo '<div class="actions">';
-echo Display::url(Display::return_icon('new_link.png',  get_lang('AddUrl'), array(), ICON_SIZE_MEDIUM),          api_get_path(WEB_CODE_PATH).'admin/access_url_edit.php');
-echo Display::url(Display::return_icon('user.png',      get_lang('ManageUsers'), array(), ICON_SIZE_MEDIUM),     api_get_path(WEB_CODE_PATH).'admin/access_url_edit_users_to_url.php');
-echo Display::url(Display::return_icon('course.png',    get_lang('ManageCourses'), array(), ICON_SIZE_MEDIUM),   api_get_path(WEB_CODE_PATH).'admin/access_url_edit_courses_to_url.php');
-//echo Display::url(Display::return_icon('session.png',   get_lang('ManageSessions'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH).'admin/access_url_edit_sessions_to_url.php');
+echo Display::url(
+    Display::return_icon('new_link.png', get_lang('AddUrl'), array(), ICON_SIZE_MEDIUM),
+    api_get_path(WEB_CODE_PATH).'admin/access_url_edit.php'
+);
+echo Display::url(
+    Display::return_icon('user.png', get_lang('ManageUsers'), array(), ICON_SIZE_MEDIUM),
+    api_get_path(WEB_CODE_PATH).'admin/access_url_edit_users_to_url.php'
+);
+echo Display::url(
+    Display::return_icon('course.png', get_lang('ManageCourses'), array(), ICON_SIZE_MEDIUM),
+    api_get_path(WEB_CODE_PATH).'admin/access_url_edit_courses_to_url.php'
+);
 
 $userGroup = new UserGroup();
 if ($userGroup->getUseMultipleUrl()) {
@@ -166,8 +176,6 @@ foreach ($sortable_data as $row)  {
 
 $table = new SortableTableFromArrayConfig($urls, 2, 50, 'urls');
 $table->set_additional_parameters($parameters);
-
-//$table->set_header(0, '');
 $table->set_header(0, 'URL');
 $table->set_header(1, get_lang('Description'));
 $table->set_header(2, get_lang('Active'));

+ 10 - 3
main/admin/careers.php

@@ -1,10 +1,11 @@
 <?php
 /* For licensing terms, see /license.txt */
 
+use ChamiloSession as Session;
+
 /**
  *  @package chamilo.admin
  */
-use ChamiloSession as Session;
 
 $cidReset = true;
 
@@ -146,9 +147,15 @@ switch ($action) {
                 if ($res) {
                     Display::display_confirmation_message(get_lang('CareerUpdated'));
                     if ($values['status'] && !$old_status) {
-                        Display::display_confirmation_message(sprintf(get_lang('CareerXUnarchived'), $values['name']), false);
+                        Display::display_confirmation_message(
+                            sprintf(get_lang('CareerXUnarchived'), $values['name']),
+                            false
+                        );
                     } elseif (!$values['status'] && $old_status) {
-                        Display::display_confirmation_message(sprintf(get_lang('CareerXArchived'), $values['name']), false);
+                        Display::display_confirmation_message(
+                            sprintf(get_lang('CareerXArchived'), $values['name']),
+                            false
+                        );
                     }
                 }
             }

+ 1 - 1
main/admin/index.php

@@ -133,7 +133,7 @@ $blocks['users']['extra'] = null;
 if (api_is_platform_admin()) {
     /* Courses */
     $blocks['courses']['icon'] = Display::return_icon(
-        'course.gif',
+        'course.png',
         get_lang('Courses'),
         array(),
         ICON_SIZE_MEDIUM,

+ 1 - 1
main/admin/ldap_import_students.php

@@ -202,7 +202,7 @@ elseif(!empty($annee) && empty($course))
 {
 	Display::display_header($tool_name);
 	echo '<div style="align:center">';
-	echo Display::return_icon('course.gif', get_lang('SelectCourseToImportUsersTo')).' '.get_lang('SelectCourseToImportUsersTo').'<br />';
+	echo Display::return_icon('course.png', get_lang('SelectCourseToImportUsersTo')).' '.get_lang('SelectCourseToImportUsersTo').'<br />';
 	echo '<form method="post" action="'.api_get_self().'?annee='.Security::remove_XSS($annee).'"><br />';
 	echo '<select name="course">';
 	$courses = CourseManager::get_courses_list();

+ 3 - 1
main/admin/ldap_import_students_to_session.php

@@ -68,7 +68,9 @@ elseif(!empty($annee) && empty($id_session))
 {
 	Display::display_header($tool_name);
 	echo '<div style="align:center">';
-	echo Display::return_icon('course.gif', get_lang('SelectSessionToImportUsersTo')).' '.get_lang('SelectSessionToImportUsersTo').'<br />';
+	echo Display::return_icon(
+			'course.png',
+			get_lang('SelectSessionToImportUsersTo')).' '.get_lang('SelectSessionToImportUsersTo').'<br />';
 	echo '<form method="post" action="'.api_get_self().'?annee='.Security::remove_XSS($annee).'"><br />';
 	echo '<select name="id_session">';
 

+ 2 - 2
main/admin/skills_import.php

@@ -18,7 +18,6 @@ $cidReset = true;
 function validate_data($skills)
 {
     $errors = array();
-    $skills = array();
     // 1. Check if mandatory fields are set.
     $mandatory_fields = array('id', 'parent_id', 'name');
     foreach ($skills as $index => $skill) {
@@ -86,6 +85,7 @@ function parse_csv_data($file)
 	foreach ($skills as $index => $skill) {
 		$skills[$index] = $skill;
 	}
+
 	return $skills;
 }
 
@@ -194,7 +194,7 @@ if (!empty($_POST['formSent']) && $_FILES['import_file']['size'] !== 0) {
 		$error_kind_file = true;
 	}
 
-	// List skill id whith error.
+	// List skill id with error.
 	$skills_to_insert = $skill_id_error = array();
 	if (is_array($errors)) {
 		foreach ($errors as $my_errors) {

+ 8 - 9
main/admin/user_import.php

@@ -421,16 +421,15 @@ if (isset($_POST['formSent']) && $_POST['formSent'] AND
         $warning_message .= '</ul>';
     }
 
+    // if the warning message is too long then we display the warning message trough a session
+
+    $_SESSION['session_message_import_users'] = $warning_message;
+    $warning_message = 'session_message';
+
     if ($error_kind_file) {
-        Display::addFlash(
-            Display::return_message(
-                get_lang('YouMustImportAFileAccordingToSelectedOption'),
-                'warning'
-            )
-        );
+        $error_message = get_lang('YouMustImportAFileAccordingToSelectedOption');
     } else {
-        Display::addFlash(Display::return_message($warning_message));
-        header('Location: '.api_get_path(WEB_CODE_PATH).'admin/user_list.php?sec_token='.$tok);
+        header('Location: '.api_get_path(WEB_CODE_PATH).'admin/user_list.php?action=show_message&warn='.urlencode($warning_message).'&message='.urlencode($see_message_import).'&sec_token='.$tok);
         exit;
     }
 }
@@ -441,7 +440,7 @@ if (!empty($error_message)) {
     Display::display_error_message($error_message);
 }
 
-$form = new FormValidator('user_import','post','user_import.php');
+$form = new FormValidator('user_import', 'post', api_get_self());
 $form->addElement('header', '', $tool_name);
 $form->addElement('hidden', 'formSent');
 $form->addElement('file', 'import_file', get_lang('ImportFileLocation'));

+ 26 - 23
main/admin/user_list.php

@@ -2,9 +2,9 @@
 /* For licensing terms, see /license.txt */
 
 /**
-	@author Bart Mollet
-	@author Julio Montoya <gugli100@gmail.com> BeezNest 2011
-*	@package chamilo.admin
+ * @author Bart Mollet
+ * @author Julio Montoya <gugli100@gmail.com> BeezNest 2011
+ * @package chamilo.admin
 */
 
 use ChamiloSession as Session;
@@ -42,7 +42,8 @@ function load_course_list (div_course,my_user_id) {
 		}
 	});
 }
-function load_session_list (div_session,my_user_id) {
+
+function load_session_list(div_session, my_user_id) {
 	 $.ajax({
 		contentType: "application/x-www-form-urlencoded",
 		beforeSend: function(objeto) {
@@ -73,21 +74,21 @@ function active_user(element_div) {
 		 $.ajax({
 			contentType: "application/x-www-form-urlencoded",
 			beforeSend: function(objeto) {
-				$(ident).attr("src","'.api_get_path(WEB_IMG_PATH).'loading1.gif'.'"); }, //candy eye stuff
+				$(ident).attr("src","'.Display::returnIconPath('loading1.gif').'"); }, //candy eye stuff
 			type: "GET",
 			url: "'.api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?a=active_user",
 			data: "user_id="+user_id[1]+"&status="+status,
 			success: function(data) {
 				if (data == 1) {
-					$(ident).attr("src","'.api_get_path(WEB_IMG_PATH).'icons/16/accept.png'.'");
+					$(ident).attr("src", "'.Display::returnIconPath('accept.png').'");
 					$(ident).attr("title","'.get_lang('Lock').'");
 				}
                 if (data == 0) {
-					$(ident).attr("src","'.api_get_path(WEB_IMG_PATH).'icons/16/error.png'.'");
+					$(ident).attr("src","'.Display::returnIconPath('error.png').'");
 					$(ident).attr("title","'.get_lang('Unlock').'");
 				}
                 if (data == -1) {
-                    $(ident).attr("src","'.api_get_path(WEB_IMG_PATH).'icons/16/warning.png'.'");
+                    $(ident).attr("src", "'.Display::returnIconPath('warning.png').'");
 					$(ident).attr("title","'.get_lang('ActionNotAllowed').'");
                 }
 			}
@@ -157,7 +158,8 @@ api_protect_admin_script(true);
  * @param boolean $is_count Whether to count, or get data
  * @return string SQL query
  */
-function prepare_user_sql_query($is_count) {
+function prepare_user_sql_query($is_count)
+{
     $sql = "";
     $user_table = Database::get_main_table(TABLE_MAIN_USER);
     $admin_table = Database::get_main_table(TABLE_MAIN_ADMIN);
@@ -186,7 +188,7 @@ function prepare_user_sql_query($is_count) {
 
     // adding the filter to see the user's only of the current access_url
     if ((api_is_platform_admin() || api_is_session_admin()) && api_get_multiple_access_url()) {
-        $access_url_rel_user_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
+        $access_url_rel_user_table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
         $sql.= " INNER JOIN $access_url_rel_user_table url_rel_user ON (u.id=url_rel_user.user_id)";
     }
 
@@ -240,8 +242,8 @@ function prepare_user_sql_query($is_count) {
         if (isset($keywordListValues['keyword_status']) &&
             $keywordListValues['keyword_status'] == PLATFORM_ADMIN
         ) {
-           $query_admin_table = " , $admin_table a ";
-           $keyword_admin = ' AND a.user_id = u.id ';
+            $query_admin_table = " , $admin_table a ";
+            $keyword_admin = ' AND a.user_id = u.id ';
             $keywordListValues['keyword_status'] = '%';
         }
 
@@ -265,7 +267,7 @@ function prepare_user_sql_query($is_count) {
 
         if (isset($keyword_active) && !isset($keyword_inactive)) {
             $sql .= " AND u.active='1'";
-        } elseif(isset($keyword_inactive) && !isset($keyword_active)) {
+        } elseif (isset($keyword_inactive) && !isset($keyword_active)) {
             $sql .= " AND u.active='0'";
         }
         $sql .= " ) ";
@@ -282,14 +284,14 @@ function prepare_user_sql_query($is_count) {
 }
 
 /**
-*	Make sure this function is protected because it does NOT check password!
-*
-*	This function defines globals.
-*   @param  int     $userId
+ * Make sure this function is protected because it does NOT check password!
  *
-*   @return bool    False on failure, redirection on success
-*	@author Evie Embrechts
-*   @author Yannick Warnier <yannick.warnier@dokeos.com>
+ * This function defines globals.
+ * @param  int $userId
+ *
+ * @return bool    False on failure, redirection on success
+ * @author Evie Embrechts
+ * @author Yannick Warnier <yannick.warnier@dokeos.com>
 */
 function loginUser($userId)
 {
@@ -308,7 +310,7 @@ function loginUser($userId)
     $lastname = $userInfo['lastname'];
 
 	if (api_is_western_name_order()) {
-		$message = sprintf(get_lang('AttemptingToLoginAs'),$firstname,$lastname, $userId);
+		$message = sprintf(get_lang('AttemptingToLoginAs'),$firstname, $lastname, $userId);
 	} else {
 		$message = sprintf(get_lang('AttemptingToLoginAs'), $lastname, $firstname, $userId);
 	}
@@ -356,7 +358,8 @@ function loginUser($userId)
  * Get the total number of users on the platform
  * @see SortableTable#get_total_number_of_items()
  */
-function get_number_of_users() {
+function get_number_of_users()
+{
     $sql = prepare_user_sql_query(true);
 
     $res = Database::query($sql);
@@ -696,7 +699,7 @@ if (!empty($action)) {
 					}
 				}
 				break;
-            case 'delete' :
+            case 'delete':
 				if (api_is_platform_admin()) {
 					$number_of_selected_users = count($_POST['id']);
 					$number_of_deleted_users = 0;

+ 1 - 1
main/admin/user_update_import.php

@@ -418,7 +418,7 @@ if (isset($_POST['formSent']) && $_POST['formSent'] AND $_FILES['import_file']['
 Display :: display_header($tool_name);
 
 $form = new FormValidator('user_update_import', 'post', api_get_self());
-$form->addElement('header', '', $tool_name);
+$form->addElement('header', $tool_name);
 $form->addElement('hidden', 'formSent');
 $form->addElement('file', 'import_file', get_lang('ImportFileLocation'));
 

+ 121 - 29
main/announcements/announcements.php

@@ -76,16 +76,15 @@ $interbreadcrumb[] = array("url"=>'announcements.php?'.api_get_cidreq(), "name"=
 switch ($action) {
     case 'move':
         /* Move announcement up/down */
-        if (isset($_GET['sec_token']) && $ctok == $_GET['sec_token']) {
-            if (!empty($_GET['down'])) {
-                $thisAnnouncementId = intval($_GET['down']);
-                $sortDirection = "DESC";
-            }
 
-            if (!empty($_GET['up'])) {
-                $thisAnnouncementId = intval($_GET['up']);
-                $sortDirection = "ASC";
-            }
+        if (!empty($_GET['down'])) {
+            $thisAnnouncementId = intval($_GET['down']);
+            $sortDirection = "DESC";
+        }
+
+        if (!empty($_GET['up'])) {
+            $thisAnnouncementId = intval($_GET['up']);
+            $sortDirection = "ASC";
         }
 
         if (!empty($sortDirection)) {
@@ -137,7 +136,101 @@ switch ($action) {
         $content = AnnouncementManager::display_announcement($announcement_id);
         break;
     case 'list':
-        $content = AnnouncementManager::getAnnouncements($stok, $announcement_number);
+
+        $htmlHeadXtra[] = api_get_jqgrid_js();
+
+        // jqgrid will use this URL to do the selects
+        $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_course_announcements&'.api_get_cidreq();
+        $deleteUrl = api_get_path(WEB_AJAX_PATH).'announcement.ajax.php?a=delete_item&'.api_get_cidreq();
+        $columns = array(get_lang('Title'), get_lang('By'), get_lang('LastUpdateDate'), get_lang('Actions'));
+
+        // Column config
+        $columnModel = array(
+            array(
+                'name' => 'title',
+                'index' => 'title',
+                'width' => '300',
+                'align' => 'left',
+                'sortable' => 'false',
+            ),
+            array(
+                'name' => 'username',
+                'index' => 'username',
+                'width' => '100',
+                'align' => 'left',
+                'sortable' => 'false',
+            ),
+            array(
+                'name' => 'insert_date',
+                'index' => 'insert_date',
+                'width' => '200',
+                'align' => 'left',
+                'sortable' => 'false',
+            ),
+            array(
+                'name' => 'actions',
+                'index' => 'actions',
+                'width' => '150',
+                'align' => 'left',
+                //'formatter' => 'action_formatter',
+                'sortable' => 'false',
+            ),
+        );
+
+        // Autowidth
+        $extra_params['autowidth'] = 'true';
+        // height auto
+        $extra_params['height'] = 'auto';
+
+        $editOptions = '';
+
+        if (api_is_allowed_to_edit()) {
+            $extra_params['multiselect'] = true;
+            $editOptions = '
+            $("#announcements").jqGrid(
+                "navGrid",
+                "#announcements_pager",
+                { edit: false, add: false, del: true },
+                { height:280, reloadAfterSubmit:false }, // edit options
+                { height:280, reloadAfterSubmit:false }, // add options
+                { reloadAfterSubmit:false, url: "'.$deleteUrl.'" }, // del options
+                { width:500 } // search options
+            );
+            ';
+        }
+
+        $content = '<script>
+        $(function() {'.
+        Display::grid_js('announcements', $url, $columns, $columnModel, $extra_params, array(), '', true).$editOptions.'
+        });
+        </script>';
+
+        $count = AnnouncementManager::getAnnouncements($stok, $announcement_number, true);
+
+        if (empty($count)) {
+            $html = '';
+            if ((api_is_allowed_to_edit(false, true) ||
+                    (api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())) &&
+                (empty($_GET['origin']) || $_GET['origin'] !== 'learnpath')
+            ) {
+                $html .= '<div id="no-data-view">';
+                $html .= '<h3>' . get_lang('Announcements') . '</h3>';
+                $html .= Display::return_icon('valves.png', '', array(), 64);
+                $html .= '<div class="controls">';
+                $html .= Display::url(
+                    get_lang('AddAnnouncement'),
+                    api_get_self() . "?" . api_get_cidreq() . "&action=add",
+                    array('class' => 'btn btn-primary')
+                );
+                $html .= '</div>';
+                $html .= '</div>';
+            } else {
+                $html = Display::return_message(get_lang('NoAnnouncements'), 'warning');
+            }
+            $content = $html;
+        } else {
+            $content .= Display::grid_html('announcements');
+        }
         break;
     case 'delete':
         /* Delete announcement */
@@ -147,11 +240,10 @@ switch ($action) {
         }
 
         if (!api_is_course_coach() || api_is_element_in_the_session(TOOL_ANNOUNCEMENT, $id)) {
-            // tooledit : visibility = 2 : only visible for platform administrator
-            if ($ctok == $_GET['sec_token']) {
-                AnnouncementManager::delete_announcement($_course, $id);
-                Display::addFlash(Display::return_message(get_lang('AnnouncementDeleted')));
-            }
+
+            AnnouncementManager::delete_announcement($_course, $id);
+            Display::addFlash(Display::return_message(get_lang('AnnouncementDeleted')));
+
         }
         header('Location: '.$homeUrl);
         exit;
@@ -166,17 +258,17 @@ switch ($action) {
         break;
     case 'delete_attachment':
         $id = $_GET['id_attach'];
-        if ($ctok == $_GET['sec_token']) {
-            if (api_is_allowed_to_edit()) {
-                AnnouncementManager::delete_announcement_attachment_file($id);
-            }
+
+        if (api_is_allowed_to_edit()) {
+            AnnouncementManager::delete_announcement_attachment_file($id);
         }
+
         header('Location: '.$homeUrl);
         exit;
         break;
     case 'showhide':
         if (!isset($_GET['isStudentView']) || $_GET['isStudentView'] != 'false') {
-            if (isset($_GET['id']) AND $_GET['id']) {
+            if (isset($_GET['id']) && $_GET['id']) {
                 if (api_get_session_id() != 0 &&
                     api_is_allowed_to_session_edit(false, true) == false) {
                     api_not_allowed();
@@ -185,15 +277,15 @@ switch ($action) {
                 if (!api_is_course_coach() ||
                     api_is_element_in_the_session(TOOL_ANNOUNCEMENT, $_GET['id'])
                 ) {
-                    if ($ctok == $_GET['sec_token']) {
-                        AnnouncementManager::change_visibility_announcement(
-                            $_course,
-                            $_GET['id']
-                        );
-                        Display::addFlash(Display::return_message(get_lang('VisibilityChanged')));
-                        header('Location: '.$homeUrl);
-                        exit;
-                    }
+
+                    AnnouncementManager::change_visibility_announcement(
+                        $_course,
+                        $_GET['id']
+                    );
+                    Display::addFlash(Display::return_message(get_lang('VisibilityChanged')));
+                    header('Location: '.$homeUrl);
+                    exit;
+                    
                 }
             }
         }

+ 3 - 3
main/calendar/agenda_js.php

@@ -152,9 +152,9 @@ if ($region_value == 'en') {
 }
 $tpl->addGlobal('region_value', $region_value);
 
-$export_icon = api_get_path(WEB_IMG_PATH).'img/export.png';
-$export_icon_low = api_get_path(WEB_IMG_PATH).'img/export_low_fade.png';
-$export_icon_high = api_get_path(WEB_IMG_PATH).'img/export_high_fade.png';
+$export_icon = Display::return_icon('export.png', null, null, null, null, true, false);
+$export_icon_low = Display::return_icon('export_low_fade.png', null, null, null, null, true, false);
+$export_icon_high = Display::return_icon('export_high_fade.png', null, null, null, null, true, false);
 
 $tpl->addGlobal(
     'export_ical_confidential_icon',

+ 3 - 3
main/course_progress/index.php

@@ -1,5 +1,8 @@
 <?php
 /* For licensing terms, see /license.txt */
+
+use ChamiloSession as Session;
+
 /**
  * Template (front controller in MVC pattern) used for distpaching to the controllers depend on the current action
  * @author Christian Fasanando <christian1827@gmail.com>
@@ -7,9 +10,6 @@
  * @package chamilo.course_progress
  */
 
-use ChamiloSession as Session;
-
-////require_once '../inc/global.inc.php';
 require_once 'thematic_controller.php';
 
 // current section

+ 4 - 3
main/document/slideshow.php

@@ -72,11 +72,12 @@ if ($slide_id != 'all') {
 		// Back forward buttons
 		if ($slide == 0) {
 			$imgp = 'action_prev_na.png';
-			$first = '<img src="'.api_get_path(WEB_IMG_PATH).'action_first_na.png">';
+			$first = Display::return_icon('action_first_na.png');
 		} else {
 			$imgp = 'action_prev.png';
 			$first = '<a href="slideshow.php?slide_id=0&curdirpath='.$pathurl.'">
-			          <img src="'.api_get_path(WEB_IMG_PATH).'action_first.png" title="'.get_lang('FirstSlide').'" alt="'.get_lang('FirstSlide').'"></a>';
+			          '.Display::return_icon('action_first.png', get_lang('FirstSlide')).'
+			          </a>';
 		}
 
 		// First slide
@@ -176,7 +177,7 @@ if ($slide_id == 'all') {
 	$jpg_quality  	         = 75;//from 0 to 100 (default is 75). More quality less compression
 
 	$directory_thumbnails = $sys_course_path.$_course['path'].'/document'.$folder.'.thumbs/';
-        
+
 	//Other parameters only for show tumbnails
 	$row_items 			     = 4;//only in slideshow.php
 	$number_image 			 = 7;//num icons cols to show

+ 1 - 6
main/group/group.php

@@ -168,12 +168,7 @@ $actionsLeft = '';
 if (api_is_allowed_to_edit(false, true)) {
 
     $actionsLeft .= '<a href="group_creation.php?'.api_get_cidreq().'">'.
-        Display::return_icon(
-            'add.png',
-            get_lang('NewGroupCreate'),
-            '',
-            ICON_SIZE_MEDIUM
-        ).'</a>';
+        Display::return_icon('add-groups.png', get_lang('NewGroupCreate'), '', ICON_SIZE_MEDIUM).'</a>';
 
     if (api_get_setting('group.allow_group_categories') == 'true') {
         $actionsLeft .=  '<a href="group_category.php?'.api_get_cidreq().'&action=add_category">'.

+ 1 - 1
main/help/faq.php

@@ -15,7 +15,7 @@ $help_name = isset($_GET['open']) ? Security::remove_XSS($_GET['open']) : null;
 Display :: display_header(get_lang('Faq'));
 
 if (api_is_platform_admin()) {
-    echo '&nbsp;<a href="faq.php?edit=true"><img src="'.api_get_path(WEB_IMG_PATH).'edit.png" /></a>';
+    echo '&nbsp;<a href="faq.php?edit=true">'.Display::return_icon('edit.png').'</a>';
 }
 
 echo Display::page_header(get_lang('Faq'));

+ 37 - 0
main/inc/ajax/announcement.ajax.php

@@ -0,0 +1,37 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+/**
+ * Responses to AJAX calls
+ */
+
+require_once '../global.inc.php';
+
+$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null;
+$isAllowedToEdit = api_is_allowed_to_edit();
+$courseInfo = api_get_course_info();
+
+switch ($action) {
+    case 'delete_item':
+        if ($isAllowedToEdit) {
+            if (empty($_REQUEST['id'])) {
+                return false;
+            }
+
+            if (api_get_session_id() != 0 && api_is_allowed_to_session_edit(false, true) == false) {
+                return false;
+            }
+
+            $list = explode(',', $_REQUEST['id']);
+            foreach ($list as $itemId) {
+                if (!api_is_course_coach() || api_is_element_in_the_session(TOOL_ANNOUNCEMENT, $itemId)) {
+                    AnnouncementManager::delete_announcement($courseInfo, $itemId);
+                }
+            }
+        }
+        break;
+    default:
+        echo '';
+        break;
+}
+exit;

+ 55 - 33
main/inc/ajax/model.ajax.php

@@ -46,7 +46,8 @@ if (!in_array(
         'get_user_course_report_resumed',
         'get_user_course_report',
         'get_sessions_tracking',
-        'get_sessions'
+        'get_sessions',
+        'get_course_announcements'
     )
 ) && !isset($_REQUEST['from_course_session'])) {
     api_protect_admin_script(true);
@@ -329,6 +330,9 @@ switch ($action) {
         $skill = new Skill();
         $count = $skill->get_user_list_skill_ranking_count();
         break;
+    case 'get_course_announcements':
+        $count = AnnouncementManager::getAnnouncements(null, null, true);
+        break;
     case 'get_work_teacher':
         require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
         $count = getWorkListTeacher(0, $limit, $sidx, $sord, $whereCondition, true);
@@ -754,6 +758,17 @@ switch ($action) {
                 $item['currently_learning'] = !empty($count_skill_by_course) ? array_sum($count_skill_by_course) : 0;
             }
         }
+        break;
+    case 'get_course_announcements':
+        $columns = array(
+            'title',
+            'username',
+            'insert_date',
+            'actions'
+        );
+
+        $result = AnnouncementManager::getAnnouncements(null, null, false, $start, $limit, $sidx, $sord);
+
         break;
     case 'get_work_teacher':
         $columns = array(
@@ -1086,11 +1101,15 @@ switch ($action) {
         }
         $columns[] = 'total';
 
-        $result = SessionManager::get_session_lp_progress($sessionId, $courseId, $date_from, $date_to,
+        $result = SessionManager::get_session_lp_progress(
+            $sessionId,
+            $courseId,
+            $date_from,
+            $date_to,
             array(
                 'where' => $whereCondition,
                 'order' => "$sidx $sord",
-                'limit'=> "$start , $limit"
+                'limit' => "$start , $limit",
             )
         );
         break;
@@ -1118,16 +1137,20 @@ switch ($action) {
 
         $questions = SurveyManager::get_questions($surveyId, $courseId);
 
-        foreach ($questions as $question_id => $question)
-        {
+        foreach ($questions as $question_id => $question) {
             $columns[] = $question_id;
         }
 
-        $result = SessionManager::get_survey_overview($sessionId, $courseId, $surveyId, $date_from, $date_to,
+        $result = SessionManager::get_survey_overview(
+            $sessionId,
+            $courseId,
+            $surveyId,
+            $date_from,
+            $date_to,
             array(
                 'where' => $whereCondition,
                 'order' => "$sidx $sord",
-                'limit'=> "$start , $limit"
+                'limit' => "$start , $limit",
             )
         );
         break;
@@ -1146,25 +1169,25 @@ switch ($action) {
             'wikis',
             'surveys',
             //exercises
-            'lessons_total' ,
-            'lessons_done' ,
-            'lessons_left' ,
+            'lessons_total',
+            'lessons_done',
+            'lessons_left',
             'lessons_progress',
             //exercises
-            'exercises_total' ,
-            'exercises_done' ,
-            'exercises_left' ,
-            'exercises_progress' ,
+            'exercises_total',
+            'exercises_done',
+            'exercises_left',
+            'exercises_progress',
             //forums
-            'forums_total' ,
-            'forums_done' ,
-            'forums_left' ,
-            'forums_progress' ,
+            'forums_total',
+            'forums_done',
+            'forums_left',
+            'forums_progress',
             //assignments
-            'assignments_total' ,
-            'assignments_done' ,
-            'assignments_left' ,
-            'assignments_progress' ,
+            'assignments_total',
+            'assignments_done',
+            'assignments_left',
+            'assignments_progress',
             //Wiki
             'wiki_total',
             'wiki_revisions',
@@ -1172,11 +1195,11 @@ switch ($action) {
             'wiki_unread',
             'wiki_progress',
             //surveys
-            'surveys_total' ,
-            'surveys_done' ,
-            'surveys_left' ,
-            'surveys_progress' ,
-            );
+            'surveys_total',
+            'surveys_done',
+            'surveys_left',
+            'surveys_progress',
+        );
         $sessionId = 0;
         if (!empty($_GET['course_id']) && !empty($_GET['session_id'])) {
             $sessionId = intval($_GET['session_id']);
@@ -1356,7 +1379,7 @@ switch ($action) {
         if (!in_array($sidx, $columns)) {
             $sidx = 'name';
         }
-        $result     = Database::select('*', "$obj->table ", array('order' =>"$sidx $sord", 'LIMIT'=> "$start , $limit"));
+        $result = Database::select('*', "$obj->table ", array('order' => "$sidx $sord", 'LIMIT' => "$start , $limit"));
         $new_result = array();
         foreach ($result as $item) {
             $new_result[] = $item;
@@ -1441,7 +1464,7 @@ switch ($action) {
 
         $quizIds = array();
         if (!empty($exercises)) {
-            foreach($exercises as $exercise) {
+            foreach ($exercises as $exercise) {
                 $quizIds[] = $exercise['id'];
             }
         }
@@ -1451,7 +1474,7 @@ switch ($action) {
 
         $usersId = array_keys($listUserSess);
 
-        $users = UserManager::get_user_list_by_ids($usersId, null, "lastname, firstname",  "$start , $limit");
+        $users = UserManager::get_user_list_by_ids($usersId, null, "lastname, firstname", "$start , $limit");
         $exeResults = $objExercise->getExerciseAndResult($_GET['course_id'], $_GET['session_id'], $quizIds);
 
         $arrGrade = array();
@@ -1541,9 +1564,7 @@ switch ($action) {
                 }
 
                 $role = $obj->getUserRoleToString(api_get_user_id(), $group['id']);
-
                 $group['status'] = $role;
-
                 $group['actions'] = Display::url($icon, $url);
                 $new_result[] = $group;
             }
@@ -1591,7 +1612,8 @@ $allowed_actions = array(
     'get_user_course_report',
     'get_user_course_report_resumed',
     'get_exercise_grade',
-    'get_group_reporting'
+    'get_group_reporting',
+    'get_course_announcements'
 );
 
 //5. Creating an obj to return a json

+ 78 - 91
main/inc/lib/AnnouncementManager.php

@@ -1390,8 +1390,14 @@ class AnnouncementManager
     /**
      * @param $stok
      * @param $announcement_number
+     * @param bool $getCount
+     * @param null $start
+     * @param null $limit
+     * @param string $sidx
+     * @param string $sord
+     * @return array
      */
-    public static function getAnnouncements($stok, $announcement_number)
+    public static function getAnnouncements($stok, $announcement_number, $getCount = false, $start = null, $limit = null, $sidx = '', $sord = '')
     {
         $tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT);
         $tbl_item_property = Database::get_course_table(TABLE_ITEM_PROPERTY);
@@ -1408,6 +1414,11 @@ class AnnouncementManager
             'announcement.allow_user_edit_announcement'
         );
 
+        $select = ' DISTINCT announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.insert_date';
+        if ($getCount) {
+            $select = ' COUNT(announcement.iid) count';
+        }
+
         if (api_is_allowed_to_edit(false, true) ||
             ($allowUserEditSetting && !api_is_anonymous())
         ) {
@@ -1417,7 +1428,7 @@ class AnnouncementManager
             //if (!empty($user_id)) {
             if (0) {
                 if (is_array($group_memberships) && count($group_memberships) > 0 ) {
-                    $sql = "SELECT announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.insert_date
+                    $sql = "SELECT $select
                             FROM $tbl_announcement announcement, $tbl_item_property ip
                             WHERE
                                 announcement.c_id = $course_id AND
@@ -1433,7 +1444,7 @@ class AnnouncementManager
                                 $condition_session
                             ORDER BY display_order DESC";
                 } else {
-                    $sql = "SELECT announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.insert_date
+                    $sql = "SELECT $select
                             FROM $tbl_announcement announcement, $tbl_item_property ip
                             WHERE
                                 announcement.c_id = $course_id AND
@@ -1448,57 +1459,55 @@ class AnnouncementManager
             } elseif ($group_id != 0) {
                 // A.2. you are a course admin with a GROUP filter
                 // => see only the messages of this specific group
-                $sql = "SELECT announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.insert_date
-                        FROM $tbl_announcement announcement, $tbl_item_property ip
+                $sql = "SELECT $select
+                        FROM $tbl_announcement announcement INNER JOIN $tbl_item_property ip
+                        ON (announcement.id = ip.ref AND ip.tool='announcement')
                         WHERE
                             announcement.c_id = $course_id AND
                             ip.c_id = $course_id AND
-                            announcement.id = ip.ref
-                            AND ip.tool='announcement'
-                            AND ip.visibility<>'2'
-                            AND (ip.to_group_id = $group_id OR ip.to_group_id='0' OR ip.to_group_id IS NULL)
+                            ip.visibility<>'2' AND
+                            (ip.to_group_id = $group_id OR ip.to_group_id='0' OR ip.to_group_id IS NULL)
                             $condition_session
-                        GROUP BY ip.ref
+
                         ORDER BY display_order DESC";
+                //GROUP BY ip.ref
             } else {
 
                 // A.3 you are a course admin without any group or user filter
                 // A.3.a you are a course admin without user or group filter but WITH studentview
                 // => see all the messages of all the users and groups without editing possibilities
-                if (isset($isStudentView) and $isStudentView=="true") {
-                    $sql="SELECT
-                        announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.insert_date
-                        FROM $tbl_announcement announcement, $tbl_item_property ip
+                if (isset($isStudentView) && $isStudentView == "true") {
+                    $sql = "SELECT $select
+                        FROM $tbl_announcement announcement INNER JOIN $tbl_item_property ip
+                        ON (announcement.id = ip.ref AND ip.tool='announcement')
                         WHERE
                             announcement.c_id = $course_id AND
                             ip.c_id = $course_id AND
-                            announcement.id = ip.ref
-                            AND ip.tool='announcement'
-                            AND ip.visibility='1'
+                            ip.tool='announcement' AND
+                            ip.visibility='1'
                             $condition_session
-                        GROUP BY ip.ref
                         ORDER BY display_order DESC";
+
+                    //GROUP BY ip.ref
                 } else {
                     // A.3.a you are a course admin without user or group filter and WTIHOUT studentview (= the normal course admin view)
                     // => see all the messages of all the users and groups with editing possibilities
-                    $sql = "SELECT announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.insert_date
-                            FROM $tbl_announcement announcement, $tbl_item_property ip
+                    $sql = "SELECT $select
+                            FROM $tbl_announcement announcement INNER JOIN $tbl_item_property ip
+                            ON (announcement.id = ip.ref AND ip.tool='announcement')
                             WHERE
                                 announcement.c_id = $course_id AND
                                 ip.c_id = $course_id AND
-                                announcement.id = ip.ref
-                                AND ip.tool='announcement'
-                                AND (ip.visibility='0' or ip.visibility='1')
+                                (ip.visibility='0' or ip.visibility='1')
                                 $condition_session
-                            GROUP BY ip.ref
                             ORDER BY display_order DESC";
+                    //GROUP BY ip.ref
                 }
             }
         } else {
             // STUDENT
             if (is_array($group_memberships) && count($group_memberships)>0) {
                 if ($allowUserEditSetting && !api_is_anonymous()) {
-
                     if (api_get_group_id() == 0) {
                         // No group
                         $cond_user_id = " AND (
@@ -1525,12 +1534,7 @@ class AnnouncementManager
                     }
                 }
 
-                $sql = "SELECT
-                            announcement.*,
-                            ip.visibility,
-                            ip.to_group_id,
-                            ip.insert_user_id,
-                            ip.insert_date
+                $sql = "SELECT $select
                         FROM $tbl_announcement announcement,
                         $tbl_item_property ip
                         WHERE
@@ -1553,7 +1557,7 @@ class AnnouncementManager
                         $cond_user_id = " AND (ip.to_user_id='".$user_id."' AND (ip.to_group_id='0' OR ip.to_group_id IS NULL) ) ";
                     }
 
-                    $sql = "SELECT announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.insert_date
+                    $sql = "SELECT $select
 						FROM $tbl_announcement announcement, $tbl_item_property ip
 						WHERE
     						announcement.c_id = $course_id AND
@@ -1575,7 +1579,7 @@ class AnnouncementManager
                         $cond_user_id = " AND ip.to_group_id='0' OR ip.to_group_id IS NULL ";
                     }
 
-                    $sql = "SELECT announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.insert_date
+                    $sql = "SELECT $select
 						FROM $tbl_announcement announcement, $tbl_item_property ip
 						WHERE
                             announcement.c_id = $course_id AND
@@ -1589,54 +1593,31 @@ class AnnouncementManager
                 }
             }
         }
-
+        if (!is_null($start) && !is_null($limit)) {
+            $start = intval($start);
+            $limit = intval($limit);
+            $sql .= " LIMIT $start, $limit";
+        }
         $result = Database::query($sql);
-        $num_rows = Database::num_rows($result);
-        $html = null;
+        if ($getCount) {
+            $result = Database::fetch_array($result, 'ASSOC');
 
-        if ($num_rows == 0) {
-            if ((api_is_allowed_to_edit(false, true) OR
-                    (api_get_course_setting(
-                            'announcement.allow_user_edit_announcement'
-                        ) && !api_is_anonymous())) and
-                (empty($_GET['origin']) or $_GET['origin'] !== 'learnpath')
-            ) {
-                $html .= '<div id="no-data-view">';
-                $html .= '<h3>' . get_lang('Announcements') . '</h3>';
-                $html .= Display::return_icon('valves.png', '', array(), 64);
-                $html .= '<div class="controls">';
-                $html .= Display::url(
-                    get_lang('AddAnnouncement'),
-                    api_get_self() . "?" . api_get_cidreq() . "&action=add",
-                    array('class' => 'btn btn-primary')
-                );
-                $html .= '</div>';
-                $html .= '</div>';
-            } else {
-                $html = Display::return_message(get_lang('NoAnnouncements'), 'warning');
-            }
-            return $html;
+            return $result['count'];
         }
 
         $iterator = 1;
         $bottomAnnouncement = $announcement_number;
         $origin = null;
 
-        $html .= '<table width="100%" class="data_table announcements-list">';
-        $ths = Display::tag('th', get_lang('Title'));
-        $ths .= Display::tag('th', get_lang('By') );
-        $ths .= Display::tag('th', get_lang('LastUpdateDate') );
-        if (api_is_allowed_to_edit(false,true) OR (api_is_course_coach() &&
+        /*if (api_is_allowed_to_edit(false,true) OR (api_is_course_coach() &&
             api_is_element_in_the_session(TOOL_ANNOUNCEMENT, $myrow['id']))
-            OR (api_get_course_setting(
-                    'announcement.allow_user_edit_announcement'
-                ) && !api_is_anonymous())
-        ) {
+            OR (api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())) {
             $ths .= Display::tag('th', get_lang('Modify'));
-        }
+        }*/
 
-        $html .= Display::tag('tr', $ths);
-        $displayed = array();
+        $displayed = [];
+        $results = [];
+        $actionUrl = api_get_path(WEB_CODE_PATH).'announcements/announcements.php?'.api_get_cidreq();
         while ($myrow = Database::fetch_array($result, 'ASSOC')) {
             if (!in_array($myrow['id'], $displayed)) {
                 $sent_to_icon = '';
@@ -1656,8 +1637,6 @@ class AnnouncementManager
                     $style = '';
                 }
 
-                $html .= '<tr class="announcements-list-line">';
-
                 // show attachment list
                 $attachment_list = AnnouncementManager::get_attachment($myrow['id']);
 
@@ -1670,22 +1649,18 @@ class AnnouncementManager
                 $user_info = api_get_user_info($myrow['insert_user_id']);
                 $username = sprintf(get_lang("LoginX"), $user_info['username']);
                 $username_span = Display::tag('span', api_get_person_name($user_info['firstName'], $user_info['lastName']), array('title'=>$username));
-                $title = Display::url($title.$attachment_icon, api_get_self().'?'.api_get_cidreq().'&action=view&id='.$myrow['id']);
-
-                $html .= Display::tag('td', Security::remove_XSS($title), array('class' => 'announcements-list-line-title '.$style));
-                $html .= Display::tag('td', $username_span, array('class' => 'announcements-list-line-by-user'));
-                $html .= Display::tag('td', api_convert_and_format_date($myrow['insert_date'], DATE_TIME_FORMAT_LONG), array('class' => 'announcements-list-line-datetime'));
+                $title = Display::url($title.$attachment_icon, $actionUrl.'&action=view&id='.$myrow['id']);
+                //$html .= Display::tag('td', $username_span, array('class' => 'announcements-list-line-by-user'));
+                //$html .= Display::tag('td', api_convert_and_format_date($myrow['insert_date'], DATE_TIME_FORMAT_LONG), array('class' => 'announcements-list-line-datetime'));
 
+                $modify_icons = '';
                 // we can edit if : we are the teacher OR the element belongs to
                 // the session we are coaching OR the option to allow users to edit is on
-                if (api_is_allowed_to_edit(false,true) OR
+                if (api_is_allowed_to_edit(false, true) ||
                     (api_is_course_coach() && api_is_element_in_the_session(TOOL_ANNOUNCEMENT, $myrow['id']))
-                    OR (api_get_course_setting(
-                            'announcement.allow_user_edit_announcement'
-                        ) && !api_is_anonymous())
+                    || (api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())
                 ) {
-
-                    $modify_icons = "<a href=\"".api_get_self()."?".api_get_cidreq()."&action=modify&id=".$myrow['id']."\">".
+                    $modify_icons = "<a href=\"".$actionUrl."&action=modify&id=".$myrow['id']."\">".
                         Display::return_icon('edit.png', get_lang('Edit'),'',ICON_SIZE_SMALL)."</a>";
                     if ($myrow['visibility']==1) {
                         $image_visibility="visible";
@@ -1694,37 +1669,49 @@ class AnnouncementManager
                         $image_visibility="invisible";
                         $alt_visibility=get_lang('Visible');
                     }
-                    $modify_icons .=  "<a href=\"".api_get_self()."?".api_get_cidreq()."&origin=".$origin."&action=showhide&id=".$myrow['id']."&sec_token=".$stok."\">".
+                    $modify_icons .=  "<a href=\"".$actionUrl."&origin=".$origin."&action=showhide&id=".$myrow['id']."&sec_token=".$stok."\">".
                         Display::return_icon($image_visibility.'.png', $alt_visibility,'',ICON_SIZE_SMALL)."</a>";
 
                     // DISPLAY MOVE UP COMMAND only if it is not the top announcement
                     if ($iterator != 1) {
-                        $modify_icons .= "<a href=\"".api_get_self()."?".api_get_cidreq()."&action=move&up=".$myrow["id"]."&sec_token=".$stok."\">".
+                        $modify_icons .= "<a href=\"".$actionUrl."&action=move&up=".$myrow["id"]."&sec_token=".$stok."\">".
                             Display::return_icon('up.gif', get_lang('Up'))."</a>";
                     } else {
                         $modify_icons .= Display::return_icon('up_na.gif', get_lang('Up'));
                     }
                     if ($iterator < $bottomAnnouncement) {
-                        $modify_icons .= "<a href=\"".api_get_self()."?".api_get_cidreq()."&action=move&down=".$myrow["id"]."&sec_token=".$stok."\">".
+                        $modify_icons .= "<a href=\"".$actionUrl."&action=move&down=".$myrow["id"]."&sec_token=".$stok."\">".
                             Display::return_icon('down.gif', get_lang('Down'))."</a>";
                     } else {
                         $modify_icons .= Display::return_icon('down_na.gif', get_lang('Down'));
                     }
                     if (api_is_allowed_to_edit(false,true)) {
-                        $modify_icons .= "<a href=\"".api_get_self()."?".api_get_cidreq()."&action=delete&id=".$myrow['id']."&sec_token=".$stok."\" onclick=\"javascript:if(!confirm('".addslashes(api_htmlentities(get_lang('ConfirmYourChoice'),ENT_QUOTES,api_get_system_encoding()))."')) return false;\">".
+                        $modify_icons .= "<a href=\"".$actionUrl."&action=delete&id=".$myrow['id']."&sec_token=".$stok."\" onclick=\"javascript:if(!confirm('".addslashes(api_htmlentities(get_lang('ConfirmYourChoice'),ENT_QUOTES,api_get_system_encoding()))."')) return false;\">".
                             Display::return_icon('delete.png', get_lang('Delete'),'',ICON_SIZE_SMALL).
                             "</a>";
                     }
                     $iterator ++;
-                    $html .= Display::tag('td', $modify_icons, array('class' => 'announcements-list-line-actions'));
+                } else {
+                    $modify_icons = Display::url(
+                        Display::return_icon('default.png'),
+                        $actionUrl.'&action=view&id='.$myrow['id']
+                    );
                 }
-                $html .= "</tr>";
+
+                $announcement = [
+                    'id' => $myrow["id"],
+                    'title' => $title,
+                    'username' => $username_span,
+                    'insert_date' => api_convert_and_format_date($myrow['insert_date'], DATE_TIME_FORMAT_LONG),
+                    'actions' => $modify_icons
+                ];
+
+                $results[] = $announcement;
             }
             $displayed[] = $myrow['id'];
         }
-        $html .= "</table>";
 
-        return $html;
+        return $results;
     }
 
     /**

+ 2 - 5
main/inc/lib/api.lib.php

@@ -1874,17 +1874,14 @@ function api_format_course_array($course_data)
     $_course['language'] = $course_data['course_language'];
     $_course['extLink']['url'] = $course_data['department_url'];
     $_course['extLink']['name'] = $course_data['department_name'];
-
     $_course['categoryCode'] = $course_data['faCode'];
     $_course['categoryName'] = $course_data['faName'];
-
     $_course['visibility'] = $course_data['visibility'];
     $_course['subscribe_allowed'] = $course_data['subscribe'];
     $_course['subscribe'] = $course_data['subscribe'];
     $_course['unsubscribe'] = $course_data['unsubscribe'];
-
     $_course['course_language'] = $course_data['course_language'];
-    $_course['activate_legal'] = isset($course_data['activate_legal']) ? $course_data['activate_legal'] : false;;
+    $_course['activate_legal'] = isset($course_data['activate_legal']) ? $course_data['activate_legal'] : false;
     $_course['legal'] = $course_data['legal'];
     $_course['show_score'] = $course_data['show_score']; //used in the work tool
     $_course['department_name'] = $course_data['department_name'];
@@ -1909,7 +1906,7 @@ function api_format_course_array($course_data)
     if (file_exists(api_get_path(SYS_COURSE_PATH).$course_data['directory'].'/course-pic.png')) {
         $url_image = api_get_path(WEB_COURSE_PATH).$course_data['directory'].'/course-pic.png';
     } else {
-        $url_image = Display::return_icon('session_default.png',null,null,null,null,true);
+        $url_image = Display::returnIconPath('session_default.png');
     }
     $_course['course_image_large'] = $url_image;
 

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

@@ -96,7 +96,7 @@ class Career extends Model
      * @todo the form should be auto generated
      * @param   string  $url
      * @param   string  $action add, edit
-     * @return  obj     form validator obj
+     * @return  FormValidator
      */
     public function return_form($url, $action)
     {
@@ -130,9 +130,9 @@ class Career extends Model
             $form->freeze('created_at');
         }
         if ($action == 'edit') {
-            $form->addButtonSave(get_lang('Modify'),'submit');
+            $form->addButtonSave(get_lang('Modify'), 'submit');
         } else {
-            $form->addButtonCreate(get_lang('Add'),'submit');
+            $form->addButtonCreate(get_lang('Add'), 'submit');
         }
 
         // Setting the defaults

+ 10 - 5
main/inc/lib/diagnoser.lib.php

@@ -352,7 +352,16 @@ class Diagnoser
     /**
      * Additional functions needed for fast integration
      */
-    public function build_setting($status, $section, $title, $url, $current_value, $expected_value, $formatter, $comment, $img_path = null) {
+    public function build_setting(
+        $status,
+        $section,
+        $title,
+        $url,
+        $current_value,
+        $expected_value,
+        $formatter,
+        $comment
+    ) {
         switch ($status) {
             case self :: STATUS_OK :
                 $img = 'bullet_green.png';
@@ -368,11 +377,7 @@ class Diagnoser
                 break;
         }
 
-        if (! $img_path) {
-            $img_path = api_get_path(WEB_IMG_PATH);
-        }
         $image = Display::return_icon($img, $status);
-        //$image = '<img src="' . $img_path . $img . '" alt="' . $status . '" />';
         $url = $this->get_link($title, $url);
 
         $formatted_current_value = $current_value;

+ 15 - 0
main/inc/lib/display.lib.php

@@ -697,6 +697,10 @@ class Display
      */
     public static function return_message($message, $type = 'normal', $filter = true)
     {
+        if (empty($message)) {
+            return '';
+        }
+
         if ($filter) {
         	$message = api_htmlentities($message, ENT_QUOTES, api_is_xml_http_request() ? 'UTF-8' : api_get_system_encoding());
         }
@@ -869,6 +873,17 @@ class Display
         echo self::return_icon($image, $alt_text, $additional_attributes, $size);
     }
 
+    /**
+     * Gets the path of an icon
+     * 
+     * @param string $icon
+     * @return string
+     */
+    public static function returnIconPath($icon)
+    {
+        return Display::return_icon($icon, null, null, null, null, true, false);
+    }
+
     /**
      * This public function returns the htmlcode for an icon
      *

+ 6 - 5
main/inc/lib/formvalidator/FormValidator.class.php

@@ -854,8 +854,8 @@ EOT;
             $label = get_lang('PleaseStandBy');
         }
         $this->with_progress_bar = true;
-        $this->updateAttributes("onsubmit=\"javascript: myUpload.start('dynamic_div','" . api_get_path(WEB_IMG_PATH) . "progress_bar.gif','" . $label . "','" . $this->getAttribute('id') . "')\"");
-        //$this->addElement('html', '<script language="javascript" src="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/upload.js" type="text/javascript"></script>');
+        $this->updateAttributes("onsubmit=\"javascript: myUpload.start('dynamic_div','".Display::returnIconPath('progress_bar.gif')."','" . $label . "','" . $this->getAttribute('id') . "')\"");
+        $this->addElement('html', '<script language="javascript" src="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/upload.js" type="text/javascript"></script>');
         $this->addElement('html', '<script type="text/javascript">var myUpload = new upload(' . (abs(intval($delay)) * 1000) . ');</script>');
     }
 
@@ -887,10 +887,11 @@ EOT;
         $this->addElement('html', '
                 		<div id="dynamic_div_container" style="display:none">
                 			<div id="dynamic_div_label">' . get_lang('UploadFile') . '</div>
-                			<div id="dynamic_div_frame" style="width:214px; height:12px; border:1px solid grey; background-image:url(' . api_get_path(WEB_IMG_PATH) . 'real_upload_frame.gif);">
+                <div id="dynamic_div_frame" style="width:214px; height:12px; border:1px solid grey; background-image:url(' . Display::returnIconPath('real_upload_frame.gif').');">
                 				<div id="dynamic_div_filled" style="width:0%;height:100%;background-image:url(' . api_get_path(WEB_IMG_PATH) . 'real_upload_step.gif);background-repeat:repeat-x;background-position:center;"></div>
                 			</div>
-                		</div>');
+            </div>'
+        );
 
         if ($wait_after_upload) {
             $this->addElement('html', '
@@ -899,7 +900,7 @@ EOT;
 					' . get_lang('SlideshowConversion') . '
 				</div>
 				<div id="dynamic_div_waiter_frame">
-					<img src="' . api_get_path(WEB_IMG_PATH) . 'real_upload_frame.gif" />
+					'.Display::return_icon('real_upload_frame.gif').'
 				</div>
 			</div>
 		');

+ 10 - 7
main/inc/lib/myspace.lib.php

@@ -463,7 +463,9 @@ class MySpace
             $table_row[] = $nb_students;
             $table_row[] = $nb_courses;
             $table_row[] = $nb_sessions;
-            $table_row[] = '<a href="session.php?id_coach='.$coaches['user_id'].'"><img src="'.api_get_path(WEB_IMG_PATH).'icons/22/2rightarrow.png" border="0" /></a>';
+            $table_row[] = '<a href="session.php?id_coach='.$coaches['user_id'].'">
+                '.Display::return_icon('2rightarrow.png').'
+            </a>';
             $all_datas[] = $table_row;
 
             if ($is_western_name_order) {
@@ -2167,7 +2169,8 @@ class MySpace
 
             //set the "from" value to know if I access the Reporting by the chamilo tab or the course link
             $table_row[] = '<center><a href="../../tracking/courseLog.php?cidReq=' .$course_code.'&from=myspace&id_session='.$session_id.'">
-                             <img src="'.api_get_path(WEB_IMG_PATH).'icons/22/2rightarrow.png" border="0" /></a>
+                             '.Display::return_icon('2rightarrow.png').'
+                             </a>
                             </center>';
             $csv_content[] = array(
                 api_html_entity_decode($row_course[1], ENT_QUOTES, $charset),
@@ -2911,9 +2914,9 @@ class MySpace
         }
 
         //TODO add course name
-        $sql = "SELECT 
+        $sql = "SELECT
                 a.login_course_date as col0,
-                u.username as col1, 
+                u.username as col1,
                 " . (
                     $is_western_name_order ? "
                         u.firstname AS col2,
@@ -2923,8 +2926,8 @@ class MySpace
                         u.firstname AS col3,
                 " ) . "
                 a.logout_course_date,
-                c.title, 
-                c.code, 
+                c.title,
+                c.code,
                 u.user_id
             FROM $track_e_course_access a
             INNER JOIN $user u ON a.user_id = u.user_id
@@ -2939,7 +2942,7 @@ class MySpace
         $sql .= " LIMIT $from,$numberItems";
         $result = Database::query($sql);
 
-        //$clicks = Tracking::get_total_clicks_by_session();  
+        //$clicks = Tracking::get_total_clicks_by_session();
         $data = array();
 
         while ($user = Database::fetch_assoc($result)) {

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

@@ -3157,7 +3157,7 @@ class SessionManager
         if (Database::num_rows($result) > 0) {
             $sysUploadPath = api_get_path(SYS_UPLOAD_PATH). 'sessions/';
             $webUploadPath = api_get_path(WEB_UPLOAD_PATH). 'sessions/';
-            $imgPath = api_get_path(WEB_IMG_PATH) . 'session_default_small.png';
+            $imgPath = Display::returnIconPath('session_default_small.png');
 
             $tableExtraFields = Database::get_main_table(TABLE_EXTRA_FIELD);
             $sql = "SELECT id FROM " . $tableExtraFields . "

+ 7 - 6
main/inc/lib/tracking.lib.php

@@ -955,22 +955,22 @@ class Tracking
                                             if ($origin != 'tracking') {
                                                 if (!$is_allowed_to_edit && $result_disabled_ext_all) {
                                                     $output .= '<td>
-                                                            <img src="' . api_get_path(WEB_IMG_PATH) . 'quiz_na.gif" alt="' . get_lang('ShowAttempt') . '" title="' . get_lang('ShowAttempt') . '">
+                                                            <img src="' . Display::returnIconPath('quiz_na.gif').'" alt="' . get_lang('ShowAttempt') . '" title="' . get_lang('ShowAttempt') . '">
                                                             </td>';
                                                 } else {
                                                     $output .= '<td>
                                                             <a href="../exercice/exercise_show.php?origin=' . $origin . '&id=' . $my_exe_id . '&cidReq=' . $courseCode . '" target="_parent">
-                                                            <img src="' . api_get_path(WEB_IMG_PATH) . 'quiz.gif" alt="' . get_lang('ShowAttempt') . '" title="' . get_lang('ShowAttempt') . '">
+                                                            <img src="' . Display::returnIconPath('quiz.gif').'" alt="' . get_lang('ShowAttempt') . '" title="' . get_lang('ShowAttempt') . '">
                                                             </a></td>';
                                                 }
                                             } else {
                                                 if (!$is_allowed_to_edit && $result_disabled_ext_all) {
                                                     $output .= '<td>
-                                                                <img src="' . api_get_path(WEB_IMG_PATH) . 'quiz_na.gif" alt="' . get_lang('ShowAndQualifyAttempt') . '" title="' . get_lang('ShowAndQualifyAttempt') . '"></td>';
+                                                                <img src="' . Display::returnIconPath('quiz_na.gif').'" alt="' . get_lang('ShowAndQualifyAttempt') . '" title="' . get_lang('ShowAndQualifyAttempt') . '"></td>';
                                                 } else {
                                                     $output .= '<td>
                                                                     <a href="../exercice/exercise_show.php?cidReq=' . $courseCode . '&origin=correct_exercise_in_lp&id=' . $my_exe_id . '" target="_parent">
-                                                                    <img src="' . api_get_path(WEB_IMG_PATH) . 'quiz.gif" alt="' . get_lang('ShowAndQualifyAttempt') . '" title="' . get_lang('ShowAndQualifyAttempt') . '"></a></td>';
+                                                                    <img src="' . Display::returnIconPath('quiz.gif').'" alt="' . get_lang('ShowAndQualifyAttempt') . '" title="' . get_lang('ShowAndQualifyAttempt') . '"></a></td>';
                                                 }
                                             }
                                         }
@@ -1578,8 +1578,9 @@ class Tracking
     				if ($convert_date) {
                         $last_login_date = api_convert_and_format_date($last_login_date, DATE_FORMAT_SHORT);
                         $icon = api_is_allowed_to_edit() ?
-                            '<a href="'.api_get_path(WEB_CODE_PATH).'announcements/announcements.php?action=add&remind_inactive='.$student_id.'&cidReq='.$courseInfo['code'].'" title="'.get_lang('RemindInactiveUser').'">
-                             <img src="'.api_get_path(WEB_IMG_PATH).'messagebox_warning.gif" /> </a>'
+                            '<a href="'.api_get_path(REL_CODE_PATH).'announcements/announcements.php?action=add&remind_inactive='.$student_id.'&cidReq='.$courseInfo['code'].'" title="'.get_lang('RemindInactiveUser').'">
+                              '.Display::return_icon('messagebox_warning.gif').'
+                             </a>'
                             : null;
     					return $icon. Display::label($last_login_date, 'warning');
     				} else {

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

@@ -1371,7 +1371,7 @@ class UserGroup extends Model
         $picture = array();
         $picture['style'] = $style;
         if ($picture_file == 'unknown.jpg') {
-            $picture['file'] = api_get_path(WEB_IMG_PATH).$picture_file;
+            $picture['file'] = Display::returnIconPath($picture_file);
             return $picture;
         }
 
@@ -1409,7 +1409,7 @@ class UserGroup extends Model
             if (file_exists($file) && !is_dir($file)) {
                 $picture['file'] = $image_array['dir'].$picture_file;
             } else {
-                $picture['file'] = api_get_path(WEB_IMG_PATH).'unknown_group.png';
+                $picture['file'] = Display::returnIconPath('unknown_group.png');
             }
         }
         return $picture;

+ 2 - 1
main/mySpace/myStudents.php

@@ -1085,7 +1085,8 @@ if (!empty($student_id)) {
                     $id_last_attempt = Database :: result($result_last_attempt, 0, 0);
                     if ($count_attempts > 0)
                         echo '<a href="../exercice/exercise_show.php?id=' . $id_last_attempt . '&cidReq='.$course_code.'&session_id='.$sessionId.'&student='.$student_id.'&origin='.(empty($origin)?'tracking':$origin).'">
-                        <img src="' . api_get_path(WEB_IMG_PATH) . 'quiz.gif" border="0" /> </a>';
+                        '.Display::return_icon('quiz.gif').'
+                     </a>';
                 }
                 echo '</td>';
 

+ 2 - 2
main/mySpace/student.php

@@ -159,10 +159,10 @@ function get_users($from, $limit, $column, $direction)
 
         if (isset($_GET['id_coach']) && intval($_GET['id_coach']) != 0) {
             $detailsLink = '<a href="myStudents.php?student='.$student_id.'&id_coach='.$coach_id.'&id_session='.$_GET['id_session'].'">
-				          <img src="'.api_get_path(WEB_IMG_PATH).'icons/22/2rightarrow.png" border="0" /></a>';
+				            '.Display::return_icon('2rightarrow.png').'</a>';
         } else {
             $detailsLink =  '<a href="myStudents.php?student='.$student_id.'">
-				             <img src="'.api_get_path(WEB_IMG_PATH).'icons/22/2rightarrow.png" border="0" /></a>';
+				             '.Display::return_icon('2rightarrow.png').'</a>';
         }
 
         $lostPasswordLink = '';

+ 1 - 1
main/session/resume_session.php

@@ -300,7 +300,7 @@ if (!empty($userList)) {
         );
 
         $courseUserLink = Display::url(
-            Display::return_icon('course.gif', get_lang('BlockCoursesForThisUser')),
+            Display::return_icon('course.png', get_lang('BlockCoursesForThisUser')),
             api_get_path(WEB_CODE_PATH).'session/session_course_user.php?id_user='.$user['user_id'].'&id_session='.$sessionId
         );
 

+ 1 - 1
main/social/group_topics.php

@@ -134,7 +134,7 @@ function add_image_form() {
 	filepaths.appendChild(elem1);
 	id_elem1 = "filepath_"+counter_image;
 	id_elem1 = "\'"+id_elem1+"\'";
-	document.getElementById("filepath_"+counter_image).innerHTML = "<input type=\"file\" name=\"attach_"+counter_image+"\"  size=\"20\" />&nbsp;<a href=\"javascript:remove_image_form("+id_elem1+")\"><img src=\"'.api_get_path(WEB_IMG_PATH).'delete.gif\"></a>";
+	document.getElementById("filepath_"+counter_image).innerHTML = "<input type=\"file\" name=\"attach_"+counter_image+"\"  size=\"20\" />&nbsp;<a href=\"javascript:remove_image_form("+id_elem1+")\"><img src=\"'.Display::returnIconPath('delete.gif').'\"></a>";
 
 	if (filepaths.childNodes.length == 3) {
 		var link_attach = document.getElementById("link-more-attach");

+ 1 - 1
main/social/group_view.php

@@ -65,7 +65,7 @@ function add_image_form() {
 	document.getElementById("filepath_"+counter_image).innerHTML = "\n\
         <input type=\"file\" name=\"attach_"+counter_image+"\"  size=\"20\" />\n\
         <a href=\"javascript:remove_image_form("+id_elem1+")\">\n\
-            <img src=\"' . api_get_path(WEB_IMG_PATH) . 'delete.gif\">\n\
+            <img src=\"' . Display::returnIconPath('delete.gif').'\">\n\
         </a>\n\
     ";
 

+ 2 - 1
main/template/default/auth/courses_categories.php

@@ -298,7 +298,8 @@ function return_thumbnail($course, $icon_title)
     if (file_exists($course_path.'/course-pic.png')) {
         $course_medium_image = api_get_path(WEB_COURSE_PATH).$course['directory'].'/course-pic.png'; // redimensioned image 85x85
     } else {
-        $course_medium_image = api_get_path(WEB_IMG_PATH).'session_default.png'; // without picture
+        // without picture
+        $course_medium_image = Display::returnIconPath('session_default.png');
     }
 
     // course image

+ 1 - 1
main/upload/form.scorm.php

@@ -59,7 +59,7 @@ $form = new FormValidator(
     )
 );
 $form->addElement('header', $nameTools);
-$form->addLabel(null, Display::img(api_get_path(WEB_IMG_PATH).'scorm_logo.jpg'));
+$form->addLabel(null, Display::return_icon('scorm_logo.jpg', null, ['style' => 'width:230px;height:100px']));
 $form->addElement('hidden', 'curdirpath', $path);
 $form->addElement('hidden', 'tool', $my_tool);
 $form->addElement('file', 'user_file', get_lang('FileToUpload'));

+ 4 - 2
main/upload/upload_word.php

@@ -112,10 +112,12 @@ $s_style_error="border-width: 1px;
          color: #000;";
 
 
-echo '<div style="'.$s_style.'"><div style="float:left; margin-right:10px;"><img src="'.api_get_path(WEB_IMG_PATH)."message_normal.gif".'" alt="'.$alt_text.'" '.$attribute_list.'  /></div><div style="margin-left: 43px">'.$message.'</div></div>';
+echo '<div style="'.$s_style.'"><div style="float:left; margin-right:10px;">
+<img src="'.Display::returnIconPath('message_normal.gif').'" alt="'.$alt_text.'" '.$attribute_list.'  /></div><div style="margin-left: 43px">'.$message.'</div></div>';
 
 if (!empty($errorMessage)) {
-    echo '<div style="'.$s_style_error.'"><div style="float:left; margin-right:10px;"><img src="'.api_get_path(WEB_IMG_PATH)."message_error.gif".'" alt="'.$alt_text.'" '.$attribute_list.'  /></div><div style="margin-left: 43px">'.$errorMessage.'</div></div>';
+    echo '<div style="'.$s_style_error.'"><div style="float:left; margin-right:10px;">
+    <img src="'.Display::returnIconPath('message_error.gif').'" alt="'.$alt_text.'" '.$attribute_list.'  /></div><div style="margin-left: 43px">'.$errorMessage.'</div></div>';
 }
 
 $form = new FormValidator('update_course', 'POST', '', '', 'style="margin: 0;"');

+ 6 - 3
main/user/resume_session.php

@@ -355,9 +355,12 @@ if ($allowTutors == 'true') {
                         '.$user_link.'
                     </td>
                     <td>
-                        <a href="../mySpace/myStudents.php?student='.$user['user_id'].''.$orig_param.'">'.Display::return_icon('statistics.gif', get_lang('Reporting')).'</a>&nbsp;
-                        <a href="session_course_user.php?id_user='.$user['user_id'].'&id_session='.$id_session.'">'.Display::return_icon('course.gif', get_lang('BlockCoursesForThisUser')).'</a>&nbsp;
-                        <a href="'.api_get_self().'?id_session='.$id_session.'&action=delete&user='.$user['user_id'].'" onclick="javascript:if(!confirm(\''.get_lang('ConfirmYourChoice').'\')) return false;">'.Display::return_icon('delete.png', get_lang('Delete')).'</a>
+                        <a href="../mySpace/myStudents.php?student='.$user['user_id'].''.$orig_param.'">'.
+                        Display::return_icon('statistics.gif', get_lang('Reporting')).'</a>&nbsp;
+                        <a href="session_course_user.php?id_user='.$user['user_id'].'&id_session='.$id_session.'">'.
+                        Display::return_icon('course.png', get_lang('BlockCoursesForThisUser')).'</a>&nbsp;
+                        <a href="'.api_get_self().'?id_session='.$id_session.'&action=delete&user='.$user['user_id'].'" onclick="javascript:if(!confirm(\''.get_lang('ConfirmYourChoice').'\')) return false;">'.
+                        Display::return_icon('delete.png', get_lang('Delete')).'</a>
                         '.$link_to_add_user_in_url.'
                     </td>
                     </tr>';

+ 1 - 0
main/work/work.lib.php

@@ -1512,6 +1512,7 @@ function getWorkListTeacher(
 
         if ($getCount) {
             $row = Database::fetch_array($result);
+
             return $row['count'];
         }
         $url = api_get_path(WEB_CODE_PATH).'work/work_list_all.php?'.api_get_cidreq();