Browse Source

Teachers can add users by class (class must be defined first by the admin) see #5514

Julio Montoya 12 years ago
parent
commit
7ea641e631

+ 1 - 1
main/admin/add_courses_to_usergroup.php

@@ -42,7 +42,7 @@ if(isset($_REQUEST['add_type']) && $_REQUEST['add_type']!=''){
 
 $htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/');
 $htmlHeadXtra[] = '
-<script type="text/javascript">
+<script>
 function add_user_to_session (code, content) {
 
     document.getElementById("user_to_add").value = "";

+ 41 - 5
main/inc/ajax/model.ajax.php

@@ -20,9 +20,14 @@ $sord   = $_REQUEST['sord'];         //asc or desc
 if (!in_array($sord, array('asc','desc'))) {
     $sord = 'desc'; 
 }
-	
 
-if (!in_array($action, array('get_exercise_results', 'get_hotpotatoes_exercise_results', 'get_work_user_list', 'get_timelines', 'get_user_skill_ranking'))) {
+if (!in_array($action, array(
+        'get_exercise_results', 
+        'get_hotpotatoes_exercise_results', 
+        'get_work_user_list', 
+        'get_timelines', 
+        'get_user_skill_ranking'))
+    ) {
 	api_protect_admin_script(true);
 }
 
@@ -155,7 +160,8 @@ switch ($action) {
         $obj        = new GradeModel();
         $count      = $obj->get_count();
         break;
-    case 'get_usergroups':        
+    case 'get_usergroups':
+    case 'get_usergroups_teacher':
         $obj        = new UserGroup();
         $count      = $obj->get_count();
         break;
@@ -387,7 +393,36 @@ switch ($action) {
         }
         //Multidimensional sort
         msort($result, $sidx);
-        break;      
+        break;   
+    case 'get_usergroups_teacher':
+        $columns = array('name', 'users', 'actions');
+        $result     = Database::select('*', $obj->table, array('order'=>"name $sord", 'LIMIT'=> "$start , $limit"));
+        $new_result = array();
+        $course_id = api_get_course_int_id();
+        
+        if (!empty($result)) {
+            foreach ($result as $group) {                
+                $group['users']      = count($obj->get_users_by_usergroup($group['id']));
+                
+                if ($obj->usergroup_was_added_in_course($group['id'], $course_id)) {
+                    $url  = 'class.php?action=remove_class_from_course&id='.$group['id'];
+                    $icon = Display::return_icon('delete.png', get_lang('Remove'));
+                } else {
+                    $url  = 'class.php?action=add_class_to_course&id='.$group['id'];
+                    $icon = Display::return_icon('add.png', get_lang('Add'));                    
+                }
+                $group['actions']    = Display::url($icon, $url);
+                    
+                $new_result[]        = $group;
+            }
+            $result = $new_result;
+        }                    
+        if(!in_array($sidx, $columns)) {
+            $sidx = 'name';
+        }
+        //Multidimensional sort
+        msort($result, $sidx);        
+        break;
     default:    
         exit;            
 }
@@ -395,7 +430,8 @@ switch ($action) {
 
 $allowed_actions = array('get_careers', 
                          'get_promotions', 
-                         'get_usergroups', 
+                         'get_usergroups',
+                         'get_usergroups_teacher',
                          'get_gradebooks', 
                          'get_sessions', 
                          'get_exercise_results', 

+ 35 - 14
main/inc/lib/usergroup.lib.php

@@ -50,6 +50,11 @@ class UserGroup extends Model {
         echo '</div>';
         echo Display::grid_html('usergroups');
     }
+    
+    function display_teacher_view() {
+        // action links        
+        echo Display::grid_html('usergroups');
+    }
 
      /**
      * Gets a list of course ids by user group
@@ -77,6 +82,15 @@ class UserGroup extends Model {
         }
         return $array;
     }
+    
+    public function usergroup_was_added_in_course($usergroup_id, $course_id) {
+         $results = Database::select('usergroup_id', $this->usergroup_rel_course_table, array('where'=>array('course_id = ? AND usergroup_id = ?'=> array($course_id, $usergroup_id))));
+         if (empty($results)) {
+             return false;
+         }
+         return true;
+       
+    }
 
     /**
      * Gets a list of session ids by user group
@@ -197,7 +211,7 @@ class UserGroup extends Model {
     /**
      * Subscribes courses to a group (also adding the members of the group in the course)
      * @param   int     usergroup id
-     * @param   array   list of course ids
+     * @param   array   list of course ids (integers)
      */
     function subscribe_courses_to_usergroup($usergroup_id, $list) {
 
@@ -212,6 +226,7 @@ class UserGroup extends Model {
                 }
             }
         }
+        
         if (!empty($current_list)) {
             foreach($current_list as $id) {
                 if (!in_array($id, $list)) {
@@ -220,22 +235,11 @@ class UserGroup extends Model {
             }
         }
 
-        //Deleting items
-        if (!empty($delete_items)) {
-            foreach($delete_items as $course_id) {
-                $course_info = api_get_course_info_by_id($course_id);
-                if (!empty($user_list)) {
-                    foreach($user_list as $user_id) {
-                        CourseManager::unsubscribe_user($user_id, $course_info['code']);
-                    }
-                }
-                Database::delete($this->usergroup_rel_course_table, array('usergroup_id = ? AND course_id = ?'=>array($usergroup_id, $course_id)));
-            }
-        }
+        self::unsubscribe_courses_from_usergroup($usergroup_id, $delete_items);
 
         //Addding new relationships
         if (!empty($new_items)) {
-            foreach($new_items as $course_id) {
+            foreach ($new_items as $course_id) {
                 $course_info = api_get_course_info_by_id($course_id);
                 if (!empty($user_list)) {
                     foreach($user_list as $user_id) {
@@ -247,6 +251,23 @@ class UserGroup extends Model {
                 Database::insert($this->usergroup_rel_course_table, $params);
             }
         }
+    }
+    
+    function unsubscribe_courses_from_usergroup($usergroup_id, $delete_items) {
+        //Deleting items
+        if (!empty($delete_items)) {
+            $user_list    = self::get_users_by_usergroup($usergroup_id);
+            foreach ($delete_items as $course_id) {
+                $course_info = api_get_course_info_by_id($course_id);
+                if (!empty($user_list)) {
+                    foreach ($user_list as $user_id) {
+                        CourseManager::unsubscribe_user($user_id, $course_info['code']);
+                    }
+                }
+                Database::delete($this->usergroup_rel_course_table, array('usergroup_id = ? AND course_id = ?'=>array($usergroup_id, $course_id)));
+            }
+        }
+        
     }
 
      /**

+ 63 - 107
main/user/class.php

@@ -15,126 +15,82 @@ $this_section = SECTION_COURSES;
  */
 api_protect_course_script();
 
-api_not_allowed();
-
 $tool_name = get_lang("Classes");
+
+$htmlHeadXtra[] = api_get_jqgrid_js();
+
 //extra entries in breadcrumb
 $interbreadcrumb[] = array ("url" => "user.php", "name" => get_lang("ToolUser"));
 Display :: display_header($tool_name, "User");
 
-api_display_tool_title($tool_name);
+echo Display::page_header($tool_name);
+
+$usergroup = new UserGroup();
+
 if (api_is_allowed_to_edit()) {
-	echo '<a class="btn" href="subscribe_class.php?'.api_get_cidreq().'">'.get_lang("AddClassesToACourse").'</a><br />';
+	//echo '<a class="btn" href="subscribe_class.php?'.api_get_cidreq().'">'.get_lang("AddClassesToACourse").'</a><br />';
 }
 
-/*		MAIN SECTION*/
-
-if(api_is_allowed_to_edit()) {
-	if (isset ($_GET['unsubscribe'])) {
-		ClassManager::unsubscribe_from_course($_GET['class_id'],$_course['sysCode']);
-		Display::display_normal_message(get_lang('ClassesUnSubscribed'));
-	}
-	if (isset ($_POST['action'])) {
-		switch ($_POST['action']) {
-			case 'unsubscribe' :
-				if (is_array($_POST['class']))
-				{
-					foreach ($_POST['class'] as $index => $class_id)
-					{
-						ClassManager::unsubscribe_from_course($class_id,$_course['sysCode']);
-					}
-					Display::display_normal_message(get_lang('ClassesUnSubscribed'));
-				}
-				break;
-		}
-	}
+if (api_is_allowed_to_edit()) {
+    $action = isset($_GET['action']) ? $_GET['action'] : null;
+    switch ($action) {
+        case 'add_class_to_course':
+            $id = $_GET['id'];
+            if (!empty($id)) {
+                $usergroup->subscribe_courses_to_usergroup($id, array(api_get_course_int_id()));
+            }
+            break;
+        case 'remove_class_from_course':
+            $id = $_GET['id'];            
+            if (!empty($id)) {
+                $usergroup->unsubscribe_courses_from_usergroup($id, array(api_get_course_int_id()));
+            }
+            break;
+    }
 }
 /*
 		SHOW LIST OF CLASSES
 */
 
-/**
- *  * Get the number of classes to display on the current page.
- */
-function get_number_of_classes()
-{
-	$class_table = Database :: get_main_table(TABLE_MAIN_CLASS);
-	$course_class_table = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
-	$sql = "SELECT c.id	FROM $class_table c, $course_class_table cc WHERE cc.class_id = c.id AND cc.course_code ='".$_SESSION['_course']['id']."'";
-	if (isset ($_GET['keyword']))
-	{
-		$keyword = Database::escape_string(trim($_GET['keyword']));
-		$sql .= " AND (c.name LIKE '%".$keyword."%')";
-	}
-	$res = Database::query($sql);
-	$result = Database::num_rows($res);
-	return $result;
-}
-/**
- * Get the classes to display on the current page.
- */
-function get_class_data($from, $number_of_items, $column, $direction)
-{
-	$class_table = Database :: get_main_table(TABLE_MAIN_CLASS);
-	$course_class_table = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
-	$class_user_table = Database :: get_main_table(TABLE_MAIN_CLASS_USER);
-	$sql = "SELECT c.id AS col0, c.name   AS col1, COUNT(cu.user_id) AS col2";
-	if (api_is_allowed_to_edit()) {
-		$sql .=	" ,c.id AS col3";
-	}
-	// '(' and ')' in next query is necessary (see http://bugs.mysql.com/bug.php?id=19053)
-	$sql .= " FROM ($class_table c, $course_class_table cc)";
-	$sql .= " LEFT JOIN $class_user_table cu ON cu.class_id = c.id";
-	$sql .= " WHERE c.id = cc.class_id AND cc.course_code = '".$_SESSION['_course']['id']."'";
-	if (isset ($_GET['keyword']))
-	{
-		$keyword = Database::escape_string(trim($_GET['keyword']));
-		$sql .= " AND (c.name LIKE '%".$keyword."%')";
-	}
-	$sql .= " GROUP BY c.id, c.name ";
-	$sql .= " ORDER BY col$column $direction ";
-	$sql .= " LIMIT $from,$number_of_items";
-	$res = Database::query($sql);
-	$classes = array ();
-	while ($class = Database::fetch_row($res))
-	{
-		$classes[] = $class;
-	}
-	return $classes;
-}
-/**
- * Build the reg-column of the table
- * @param int $class_id The class id
- * @return string Some HTML-code
- */
-function reg_filter($class_id) {
-	global $charset;
-	$result = '<a href="'.api_get_self().'?'.api_get_cidreq().'&unsubscribe=yes&amp;class_id='.$class_id.'" onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang('ConfirmYourChoice'),ENT_QUOTES,$charset)).'\')) return false;"><img src="../img/delete.gif"/></a>';
-	return $result;
-}
-// Build search-form
-$form = new FormValidator('search_class', 'get','','', array('class' => 'well form-inline'),false);
-$form->add_textfield('keyword', '', false);
-$form->addElement('button', 'submit', get_lang('SearchButton'));
-
-// Build table
-$table = new SortableTable('user_class', 'get_number_of_classes', 'get_class_data', 1);
-$parameters['keyword'] = $_GET['keyword'];
-$table->set_additional_parameters($parameters);
-$col = 0;
-$table->set_header($col ++, '', false);
-$table->set_header($col ++, get_lang('ClassName'));
-$table->set_header($col ++, get_lang('NumberOfUsers'));
-if (api_is_allowed_to_edit()) {
-	$table->set_header($col ++, '', false);
-	$table->set_column_filter($col -1, 'reg_filter');
-	$table->set_form_actions(array ('unsubscribe' => get_lang('Unreg')), 'class');
-}
 
-// Display form & table
-echo '<br />';
-$form->display();
-echo '<br />';
-$table->display();
+
+//jqgrid will use this URL to do the selects
+
+$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_usergroups_teacher';
+
+//The order is important you need to check the the $column variable in the model.ajax.php file
+$columns = array(get_lang('Name'), get_lang('Users'), get_lang('Actions'));
+
+//Column config
+$column_model = array(
+                    array('name'=>'name',           'index'=>'name',        'width'=>'35',   'align'=>'left'),                        
+                    array('name'=>'users',    		'index'=>'users', 		'width'=>'15',  'align'=>'left'),                                                
+                    array('name'=>'actions',        'index'=>'actions',     'width'=>'20',  'align'=>'left','sortable'=>'false'),
+);
+//Autowidth
+$extra_params['autowidth'] = 'true';
+//height auto
+$extra_params['height'] = 'auto';
+$extra_params['rowList'] = array(50, 100, 500, 1000, 2000, 5000);
+
+
+//With this function we can add actions to the jgrid
+$action_links = 'function action_formatter (cellvalue, options, rowObject) {
+                    return \''
+                    .' <a href="class.php?action=add_class&id=\'+options.rowId+\'"><img src="../img/icons/22/user_to_class.png" title="'.get_lang('SubscribeUsersToClass').'"></a>'                    
+                    .' <a onclick="javascript:if(!confirm('."\'".addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES))."\'".')) return false;"  href="?action=delete&id=\'+options.rowId+\'"><img title="'.get_lang('Delete').'" src="../img/delete.png"></a>\';
+                 }';
+?>
+<script>
+$(function() {
+<?php
+    // grid definition see the $usergroup>display() function
+    echo Display::grid_js('usergroups',  $url, $columns, $column_model, $extra_params, array(), $action_links, true);
+?>
+});
+</script>
+<?php
+
+$usergroup->display_teacher_view();
 
 Display :: display_footer();

+ 3 - 1
main/user/classes.php

@@ -24,9 +24,11 @@ if (isset($_GET['id'])) {
 }
 
 if (api_get_setting('show_groups_to_users') == 'false') {
-    api_not_allowed();    
+    
 }
 
+
+
 Display :: display_header($tool_name, 'Classes');
 
 $usergroup = new Usergroup();

+ 93 - 118
main/user/subscribe_class.php

@@ -1,173 +1,148 @@
 <?php
+
 /* For licensing terms, see /license.txt */
 /**
-*	@package chamilo.user
-*/
+ * 	@package chamilo.user
+ */
 /**
  * Code
  */
-
 // name of the language file that needs to be included
-$language_file = array('registration','admin');
+$language_file = array('registration', 'admin');
 include ('../inc/global.inc.php');
 $this_section = SECTION_COURSES;
-if (!api_is_allowed_to_edit()) api_not_allowed(true);
 
-api_not_allowed(true);
 
+if (!api_is_allowed_to_edit()) {
+    api_not_allowed();
+    exit;
+}
 
 /*
-	MAIN CODE
-*/
+  MAIN CODE
+ */
 $tool_name = get_lang("AddClassesToACourse");
 //extra entries in breadcrumb
-$interbreadcrumb[] = array ("url" => "user.php", "name" => get_lang("ToolUser"));
-$interbreadcrumb[] = array ("url" => "class.php", "name" => get_lang("Classes"));
+$interbreadcrumb[] = array("url" => "user.php", "name" => get_lang("ToolUser"));
+$interbreadcrumb[] = array("url" => "class.php", "name" => get_lang("Classes"));
 Display :: display_header($tool_name, "User");
 
-api_display_tool_title($tool_name);
-
-/*
-		MAIN SECTION
-*/
+echo Display::page_header($tool_name);
 
-if (!api_is_allowed_to_edit())
-{
-	api_not_allowed();
-	exit;
+if (isset($_GET['register'])) {
+    ClassManager::subscribe_to_course($_GET['class_id'], $_course['sysCode']);
+    Display::display_normal_message(get_lang('ClassesSubscribed'));
 }
-
-
-if (isset ($_GET['register']))
-{
-	ClassManager::subscribe_to_course($_GET['class_id'],$_course['sysCode']);
-	Display::display_normal_message(get_lang('ClassesSubscribed'));
-}
-if (isset ($_POST['action']))
-{
-	switch ($_POST['action'])
-	{
-		case 'subscribe' :
-			if (is_array($_POST['class']))
-			{
-				foreach ($_POST['class'] as $index => $class_id)
-				{
-					ClassManager::subscribe_to_course($class_id,$_course['sysCode']);
-				}
-				Display::display_normal_message(get_lang('ClassesSubscribed'));
-			}
-			break;
-	}
+if (isset($_POST['action'])) {
+    switch ($_POST['action']) {
+        case 'subscribe' :
+            if (is_array($_POST['class'])) {
+                foreach ($_POST['class'] as $index => $class_id) {
+                    ClassManager::subscribe_to_course($class_id, $_course['sysCode']);
+                }
+                Display::display_normal_message(get_lang('ClassesSubscribed'));
+            }
+            break;
+    }
 }
 
 /*
-		SHOW LIST OF USERS
-*/
+  SHOW LIST OF USERS
+ */
 
 /**
  *  * Get the number of classes to display on the current page.
  */
-function get_number_of_classes()
-{
-	$class_table = Database :: get_main_table(TABLE_MAIN_CLASS);
-	$course_class_table = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
-	$sql = "SELECT * FROM $course_class_table WHERE course_code = '".$_SESSION['_course']['id']."'";
-	$res = Database::query($sql);
-	$subscribed_classes = array();
-	while($obj = Database::fetch_object($res))
-	{
-		$subscribed_classes[] = $obj->class_id;
-	}
-	$sql = "SELECT c.id	FROM $class_table c WHERE 1 = 1";
-	if (isset ($_GET['keyword']))
-	{
-		$keyword = Database::escape_string(trim($_GET['keyword']));
-		$sql .= " AND (c.name LIKE '%".$keyword."%')";
-	}
-	if( count($subscribed_classes) > 0)
-	{
-		$sql .= " AND c.id NOT IN ('".implode("','",$subscribed_classes)."')";
-	}
-	$res = Database::query($sql);
-	$result = Database::num_rows($res);
-	return $result;
+function get_number_of_classes() {
+    $class_table = Database :: get_main_table(TABLE_MAIN_CLASS);
+    $course_class_table = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
+    $sql = "SELECT * FROM $course_class_table WHERE course_code = '" . $_SESSION['_course']['id'] . "'";
+    $res = Database::query($sql);
+    $subscribed_classes = array();
+    while ($obj = Database::fetch_object($res)) {
+        $subscribed_classes[] = $obj->class_id;
+    }
+    $sql = "SELECT c.id	FROM $class_table c WHERE 1 = 1";
+    if (isset($_GET['keyword'])) {
+        $keyword = Database::escape_string(trim($_GET['keyword']));
+        $sql .= " AND (c.name LIKE '%" . $keyword . "%')";
+    }
+    if (count($subscribed_classes) > 0) {
+        $sql .= " AND c.id NOT IN ('" . implode("','", $subscribed_classes) . "')";
+    }
+    $res = Database::query($sql);
+    $result = Database::num_rows($res);
+    return $result;
 }
+
 /**
  * Get the classes to display on the current page.
  */
-function get_class_data($from, $number_of_items, $column, $direction)
-{
-	$class_table = Database :: get_main_table(TABLE_MAIN_CLASS);
-	$course_class_table = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
-	$class_user_table = Database :: get_main_table(TABLE_MAIN_CLASS_USER);
-	$sql = "SELECT * FROM $course_class_table WHERE course_code = '".$_SESSION['_course']['id']."'";
-	$res = Database::query($sql);
-	$subscribed_classes = array();
-	while($obj = Database::fetch_object($res))
-	{
-		$subscribed_classes[] = $obj->class_id;
-	}
-	$sql = "SELECT
+function get_class_data($from, $number_of_items, $column, $direction) {
+    $class_table = Database :: get_main_table(TABLE_MAIN_CLASS);
+    $course_class_table = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
+    $class_user_table = Database :: get_main_table(TABLE_MAIN_CLASS_USER);
+    $sql = "SELECT * FROM $course_class_table WHERE course_code = '" . $_SESSION['_course']['id'] . "'";
+    $res = Database::query($sql);
+    $subscribed_classes = array();
+    while ($obj = Database::fetch_object($res)) {
+        $subscribed_classes[] = $obj->class_id;
+    }
+    $sql = "SELECT
 							c.id AS col0,
 							c.name   AS col1,
 							COUNT(cu.user_id) AS col2,
 							c.id AS col3
 						FROM $class_table c
 						";
-	$sql .= " LEFT JOIN $class_user_table cu ON cu.class_id = c.id";
-	$sql .= " WHERE 1 = 1";
-	if (isset ($_GET['keyword']))
-	{
-		$keyword = Database::escape_string(trim($_GET['keyword']));
-		$sql .= " AND (c.name LIKE '%".$keyword."%')";
-	}
-	if( count($subscribed_classes) > 0)
-	{
-		$sql .= " AND c.id NOT IN ('".implode("','",$subscribed_classes)."')";
-	}
-	$sql .= " GROUP BY c.id, c.name ";
-	$sql .= " ORDER BY col$column $direction ";
-	$sql .= " LIMIT $from,$number_of_items";
-	$res = Database::query($sql);
-	$classes = array ();
-	while ($class = Database::fetch_row($res))
-	{
-		$classes[] = $class;
-	}
-	return $classes;
+    $sql .= " LEFT JOIN $class_user_table cu ON cu.class_id = c.id";
+    $sql .= " WHERE 1 = 1";
+    if (isset($_GET['keyword'])) {
+        $keyword = Database::escape_string(trim($_GET['keyword']));
+        $sql .= " AND (c.name LIKE '%" . $keyword . "%')";
+    }
+    if (count($subscribed_classes) > 0) {
+        $sql .= " AND c.id NOT IN ('" . implode("','", $subscribed_classes) . "')";
+    }
+    $sql .= " GROUP BY c.id, c.name ";
+    $sql .= " ORDER BY col$column $direction ";
+    $sql .= " LIMIT $from,$number_of_items";
+    $res = Database::query($sql);
+    $classes = array();
+    while ($class = Database::fetch_row($res)) {
+        $classes[] = $class;
+    }
+    return $classes;
 }
+
 /**
  * Build the reg-column of the table
  * @param int $class_id The class id
  * @return string Some HTML-code
  */
-function reg_filter($class_id)
-{
-	$result = "<a href=\"".api_get_self()."?register=yes&amp;class_id=".$class_id."\">".get_lang("reg")."</a>";
-	return $result;
+function reg_filter($class_id) {
+    $result = "<a href=\"" . api_get_self() . "?register=yes&amp;class_id=" . $class_id . "\">" . get_lang("reg") . "</a>";
+    return $result;
 }
+
 // Build search-form
-$form = new FormValidator('search_class', 'get','','',null,false);
-$renderer = & $form->defaultRenderer();
-$renderer->setElementTemplate('<span>{element}</span> ');
+$form = new FormValidator('search_class', 'get', '', '', null, false);
 $form->add_textfield('keyword', '', false);
-$form->addElement('submit', 'submit', get_lang('SearchButton'));
+$form->addElement('button', 'submit', get_lang('SearchButton'));
 
 // Build table
 $table = new SortableTable('users', 'get_number_of_classes', 'get_class_data', 1);
 $parameters['keyword'] = Security::remove_XSS($_GET['keyword']);
 $table->set_additional_parameters($parameters);
 $col = 0;
-$table->set_header($col ++, '', false);
-$table->set_header($col ++, get_lang('ClassName'));
-$table->set_header($col ++, get_lang('NumberOfUsers'));
-$table->set_header($col ++, get_lang('reg'), false);
-$table->set_column_filter($col -1, 'reg_filter');
-$table->set_form_actions(array ('subscribe' => get_lang('reg')), 'class');
+$table->set_header($col++, '', false);
+$table->set_header($col++, get_lang('ClassName'));
+$table->set_header($col++, get_lang('NumberOfUsers'));
+$table->set_header($col++, get_lang('reg'), false);
+$table->set_column_filter($col - 1, 'reg_filter');
+$table->set_form_actions(array('subscribe' => get_lang('reg')), 'class');
 
 // Display form & table
 $form->display();
-echo '<br />';
 $table->display();
-
-Display :: display_footer();
+Display :: display_footer();

+ 2 - 0
main/user/user.php

@@ -407,6 +407,8 @@ if ( api_is_allowed_to_edit(null, true)) {
     $actions .= '<a href="user_import.php?'.api_get_cidreq().'&action=import">'.Display::return_icon('import_csv.png', get_lang('ImportUsersToACourse'),'',ICON_SIZE_MEDIUM).'</a> ';
     $actions .= '<a href="user.php?'.api_get_cidreq().'&action=export&type=pdf">'.Display::return_icon('pdf.png', get_lang('ExportToPDF'),'',ICON_SIZE_MEDIUM).'</a> ';
     $actions .= "<a href=\"../group/group.php?".api_get_cidreq()."\">".Display::return_icon('group.png', get_lang("GroupUserManagement"),'',ICON_SIZE_MEDIUM)."</a>";
+    
+    $actions .= ' <a class="btn" href="class.php?'.api_get_cidreq().'">'.get_lang('Classes').'</a>';
 		
 	// Build search-form
 	$form = new FormValidator('search_user', 'get', '', '', null, false);