diff --git a/main/admin/class_add.php b/main/admin/class_add.php index 039862da4f..3345ccbd98 100644 --- a/main/admin/class_add.php +++ b/main/admin/class_add.php @@ -24,6 +24,7 @@ api_protect_admin_script(); // Setting breadcrumbs. $interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); +$interbreadcrumb[] = array ('url' => 'class_list.php', 'name' => get_lang('Classes')); // Setting the name of the tool. $tool_name = get_lang("AddClasses"); @@ -44,4 +45,4 @@ Display :: display_header($tool_name); $form->display(); // Displaying the footer. -Display :: display_footer(); +Display :: display_footer(); \ No newline at end of file diff --git a/main/admin/class_edit.php b/main/admin/class_edit.php old mode 100755 new mode 100644 index 655a53896e..14f93fd781 --- a/main/admin/class_edit.php +++ b/main/admin/class_edit.php @@ -13,9 +13,8 @@ $language_file = 'admin'; $cidReset = true; // Including some necessary dokeos files. -include '../inc/global.inc.php'; +require_once '../inc/global.inc.php'; require_once api_get_path(LIBRARY_PATH).'classmanager.lib.php'; -require_once api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php'; // Setting the section (for the tabs). $this_section = SECTION_PLATFORM_ADMIN; @@ -27,6 +26,7 @@ api_protect_admin_script(); $interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); $interbreadcrumb[] = array ('url' => 'class_list.php', 'name' => get_lang('AdminClasses')); + // Setting the name of the tool. $tool_name = get_lang('AddClasses'); diff --git a/main/admin/class_import.php b/main/admin/class_import.php old mode 100755 new mode 100644 index c137deea26..4ed47d9c34 --- a/main/admin/class_import.php +++ b/main/admin/class_import.php @@ -57,7 +57,6 @@ include '../inc/global.inc.php'; require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php'; require_once api_get_path(LIBRARY_PATH).'classmanager.lib.php'; require_once api_get_path(LIBRARY_PATH).'import.lib.php'; -require_once api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php'; // Setting the section (for the tabs). $this_section = SECTION_PLATFORM_ADMIN; @@ -67,6 +66,7 @@ api_protect_admin_script(); // setting breadcrumbs $interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); +$interbreadcrumb[] = array ('url' => 'class_list.php', 'name' => get_lang('Classes')); // Database Table Definitions @@ -103,10 +103,9 @@ if ($form->validate()) { } $form->display(); - ?>

:

-
+
   ClassName
   1A
@@ -114,8 +113,7 @@ $form->display();
   2A group 1
   2A group 2
  
-
'.get_lang('Users').''; -echo '
'; $users = ClassManager::get_users($class_id); if (count($users) > 0) { $is_western_name_order = api_is_western_name_order(); @@ -67,14 +66,13 @@ if (count($users) > 0) { } $row[] = Display :: encrypted_mailto_link($user['email'], $user['email']); $row[] = $user['status'] == 5 ? get_lang('Student') : get_lang('Teacher'); - $row[] = ''.Display::return_icon('synthese_view.gif').''; + $row[] = ''.Display::return_icon('synthese_view.gif', get_lang('Info')).''; $data[] = $row; } Display::display_sortable_table($table_header,$data,array(),array(),array('id'=>$_GET['id'])); } else { echo get_lang('NoUsersInClass'); } -echo '
'; /** * Show all courses in which this class is subscribed. diff --git a/main/admin/class_list.php b/main/admin/class_list.php old mode 100755 new mode 100644 index f3a4530512..0c74e3f5c4 --- a/main/admin/class_list.php +++ b/main/admin/class_list.php @@ -63,20 +63,19 @@ function get_class_data($from, $number_of_items, $column, $direction) { function modify_filter($class_id) { $class_id = Security::remove_XSS($class_id); $result = ''.Display::return_icon('synthese_view.gif', get_lang('Info')).''; - $result .= ''.Display::return_icon('edit.gif', get_lang('Edit')).''; - $result .= ''.Display::return_icon('delete.gif', get_lang('Delete')).''; - $result .= ''.Display::return_icon('add_multiple_users.gif', get_lang('AddUsersToAClass')).''; + $result .= ' '.Display::return_icon('edit.gif', get_lang('Edit')).''; + $result .= ' '.Display::return_icon('add_multiple_users.gif', get_lang('AddUsersToAClass')).''; + $result .= ' '.Display::return_icon('delete.gif', get_lang('Delete')).''; return $result; } require api_get_path(LIBRARY_PATH).'fileManage.lib.php'; require api_get_path(LIBRARY_PATH).'classmanager.lib.php'; -require_once api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php'; $tool_name = get_lang('ClassList'); $interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); -Display :: display_header($tool_name); +//Display :: display_header($tool_name); //api_display_tool_title($tool_name); if (isset($_POST['action'])) { @@ -88,7 +87,7 @@ if (isset($_POST['action'])) { foreach ($classes as $index => $class_id) { ClassManager :: delete_class($class_id); } - Display :: display_normal_message(get_lang('ClassesDeleted')); + $message = Display :: return_message(get_lang('ClassesDeleted')); } break; } @@ -98,10 +97,10 @@ if (isset($_GET['action'])) { switch ($_GET['action']) { case 'delete_class': ClassManager :: delete_class($_GET['class_id']); - Display :: display_normal_message(get_lang('ClassDeleted')); + $message = Display :: return_message(get_lang('ClassDeleted')); break; case 'show_message': - Display :: display_normal_message(Security::remove_XSS(stripslashes($_GET['message']))); + $message = Display :: return_message(Security::remove_XSS(stripslashes($_GET['message']))); break; } } @@ -112,7 +111,7 @@ $renderer =& $form->defaultRenderer(); $renderer->setElementTemplate('{element} '); $form->addElement('text', 'keyword', get_lang('keyword')); $form->addElement('submit', 'submit', get_lang('Search')); -$form->display(); +$content .= $form->return_form(); // Create the sortable table with class information $table = new SortableTable('classes', 'get_number_of_classes', 'get_class_data', 1); @@ -123,7 +122,15 @@ $table->set_header(2, get_lang('NumberOfUsers')); $table->set_header(3, '', false); $table->set_column_filter(3, 'modify_filter'); $table->set_form_actions(array ('delete_classes' => get_lang('DeleteSelectedClasses')), 'class'); -$table->display(); -// Displaying the footer. -Display :: display_footer(); +$content .= $table->return_table(); + +$actions .= Display::url(Display::return_icon('add.png', get_lang('Add'), array(), 32), 'class_add.php'); +$actions .= Display::url(Display::return_icon('import_csv.png', get_lang('AddUsersToAClass'), array(), 32), 'class_user_import.php'); +$actions .= Display::url(Display::return_icon('import_csv.png', get_lang('ImportClassListCSV'), array(), 32), 'class_import.php'); + +$tpl = new Template($tool_name); +$tpl->assign('content', $content); +$tpl->assign('actions', $actions); +$tpl->assign('message', $message); +$tpl->display_one_col_template(); \ No newline at end of file diff --git a/main/admin/class_user_import.php b/main/admin/class_user_import.php index eed4e20ce5..b8f90a97bf 100644 --- a/main/admin/class_user_import.php +++ b/main/admin/class_user_import.php @@ -16,26 +16,34 @@ function validate_data($user_classes) { global $purification_option_for_usernames; $errors = array (); $classcodes = array (); + + if (!isset($_POST['subscribe']) && !isset($_POST['subscribe'])) { + $user_class['error'] = get_lang('SelectAnAction'); + $errors[] = $user_class; + return $errors; + } foreach ($user_classes as $index => $user_class) { $user_class['line'] = $index + 1; // 1. Check whether mandatory fields are set. $mandatory_fields = array ('UserName', 'ClassName'); - foreach ($mandatory_fields as $key => $field) { - if (!isset ($user_class[$field]) || strlen($user_class[$field]) == 0) { + + foreach ($mandatory_fields as $key => $field) { + if (!isset ($user_class[$field]) || strlen($user_class[$field]) == 0) { $user_class['error'] = get_lang($field.'Mandatory'); $errors[] = $user_class; } } + // 2. Check whether classcode exists. if (isset ($user_class['ClassName']) && strlen($user_class['ClassName']) != 0) { // 2.1 Check whether code has been allready used in this CVS-file. if (!isset ($classcodes[$user_class['ClassName']])) { // 2.1.1 Check whether code exists in DB. - $class_table = Database :: get_main_table(TABLE_MAIN_CLASS); + $class_table = Database :: get_main_table(TABLE_MAIN_CLASS); $sql = "SELECT * FROM $class_table WHERE name = '".Database::escape_string($user_class['ClassName'])."'"; $res = Database::query($sql); if (Database::num_rows($res) == 0) { - $user_class['error'] = get_lang('CodeDoesNotExists'); + $user_class['error'] = get_lang('CodeDoesNotExists').': '.$user_class['ClassName']; $errors[] = $user_class; } else { $classcodes[$user_class['CourseCode']] = 1; @@ -49,7 +57,7 @@ function validate_data($user_classes) { $user_class['error'] = get_lang('UserNameTooLong').': '.$user_class['UserName']; $errors[] = $user_class; } - $username = UserManager::purify_username($user_class['UserName'], $purification_option_for_usernames); + $username = UserManager::purify_username($user_class['UserName'], $purification_option_for_usernames); // 3.2. Check whether username exists. if (UserManager::is_username_available($username)) { $user_class['error'] = get_lang('UnknownUser').': '.$username; @@ -75,6 +83,7 @@ function save_data($users_classes) { // Data parsing: purification + conversion (UserName, ClassName) --> (user_is, class_id) $csv_data = array (); foreach ($users_classes as $index => $user_class) { + $sql1 = "SELECT user_id FROM $user_table WHERE username = '".Database::escape_string(UserManager::purify_username($user_class['UserName'], $purification_option_for_usernames))."'"; $res1 = Database::query($sql1); $obj1 = Database::fetch_object($res1); @@ -85,7 +94,7 @@ function save_data($users_classes) { $csv_data[$obj1->user_id][$obj2->id] = 1; } } - + // Logic for processing the request (data + UI options). $db_subscriptions = array(); foreach ($csv_data as $user_id => $csv_subscriptions) { @@ -94,8 +103,9 @@ function save_data($users_classes) { while ($obj = Database::fetch_object($res)) { $db_subscriptions[$obj->class_id] = 1; } - $to_subscribe = array_diff(array_keys($csv_subscriptions), array_keys($db_subscriptions)); + $to_subscribe = array_diff(array_keys($csv_subscriptions), array_keys($db_subscriptions)); $to_unsubscribe = array_diff(array_keys($db_subscriptions), array_keys($csv_subscriptions)); + // Subscriptions for new classes. if ($_POST['subscribe']) { foreach ($to_subscribe as $class_id) { @@ -122,10 +132,9 @@ function parse_csv_data($file) { } $language_file = array('admin', 'registration'); - $cidReset = true; -include '../inc/global.inc.php'; +require_once '../inc/global.inc.php'; $this_section = SECTION_PLATFORM_ADMIN; api_protect_admin_script(true); @@ -137,6 +146,7 @@ require_once api_get_path(LIBRARY_PATH).'classmanager.lib.php'; $tool_name = get_lang('AddUsersToAClass').' CSV'; $interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); +$interbreadcrumb[] = array ('url' => 'class_list.php', 'name' => get_lang('Classes')); // Set this option to true to enforce strict purification for usenames. $purification_option_for_usernames = false; @@ -148,10 +158,12 @@ $form->addElement('file', 'import_file', get_lang('ImportFileLocation')); $form->addElement('checkbox', 'subscribe', get_lang('Action'), get_lang('SubscribeUserIfNotAllreadySubscribed')); $form->addElement('checkbox', 'unsubscribe', '', get_lang('UnsubscribeUserIfSubscriptionIsNotInFile')); $form->addElement('style_submit_button', 'submit', get_lang('Import'), 'class="save"'); + if ($form->validate()) { $users_classes = parse_csv_data($_FILES['import_file']['tmp_name']); + $errors = validate_data($users_classes); - if (count($errors) == 0) { + if (count($errors) == 0) { save_data($users_classes); header('Location: class_list.php?action=show_message&message='.urlencode(get_lang('FileImported'))); exit(); @@ -164,28 +176,19 @@ api_display_tool_title($tool_name); if (count($errors) != 0) { $error_message = "\n"; foreach ($errors as $index => $error_class_user) { - $error_message .= get_lang('Line').' '.$error_class_user['line'].': '.$error_class_user['error'].': '; - $error_message .= "\n"; + $error_message .= get_lang('Line').' '.$error_class_user['line'].': '.$error_class_user['error'].''; + $error_message .= "
"; } $error_message .= "\n"; - Display :: display_error_message($error_message); + Display :: display_error_message($error_message, false); } - $form->display(); ?>

:

-
 UserName;ClassName
 jdoe;class01
 adam;class01
 
-
$course) - { + foreach ($courses as $index => $course) { CourseManager :: subscribe_user($user_id, $course['course_code']); } } @@ -119,16 +110,16 @@ class ClassManager * @param int $user_id The user id * @param int $class_id The class id */ - function unsubscribe_user($user_id, $class_id) - { + function unsubscribe_user($user_id, $class_id) { + $class_id = intval($class_id); + $user_id = intval($user_id); + $table_class_user = Database :: get_main_table(TABLE_MAIN_CLASS_USER); $table_course_class = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS); $courses = ClassManager :: get_courses($class_id); - if (count($courses) != 0) - { + if (count($courses) != 0) { $course_codes = array (); - foreach ($courses as $index => $course) - { + foreach ($courses as $index => $course) { $course_codes[] = $course['course_code']; $sql = "SELECT DISTINCT user_id FROM $table_class_user t1, $table_course_class t2 WHERE t1.class_id=t2.class_id AND course_code = '".$course['course_code']."' AND user_id = $user_id AND t2.class_id<>'$class_id'"; $res = Database::query($sql); @@ -146,15 +137,14 @@ class ClassManager * @param int $class_id * @return array */ - function get_courses($class_id) - { + function get_courses($class_id) { + $class_id = intval($class_id); $table_class_course = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS); $table_course = Database :: get_main_table(TABLE_MAIN_COURSE); $sql = "SELECT * FROM $table_class_course cc, $table_course c WHERE cc.class_id = '".$class_id."' AND cc.course_code = c.code"; $res = Database::query($sql); $courses = array (); - while ($course = Database::fetch_array($res, 'ASSOC')) - { + while ($course = Database::fetch_array($res, 'ASSOC')) { $courses[] = $course; } return $courses; @@ -164,8 +154,7 @@ class ClassManager * @param int $class_id The class id * @param string $course_code The course code */ - function subscribe_to_course($class_id, $course_code) - { + function subscribe_to_course($class_id, $course_code) { $tbl_course_class = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS); $tbl_class_user = Database :: get_main_table(TABLE_MAIN_CLASS_USER); $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); @@ -173,8 +162,7 @@ class ClassManager Database::query($sql); $sql = "SELECT user_id FROM $tbl_class_user WHERE class_id = '".Database::escape_string($class_id)."'"; $res = Database::query($sql); - while ($user = Database::fetch_object($res)) - { + while ($user = Database::fetch_object($res)) { CourseManager :: subscribe_user($user->user_id, $course_code); } } @@ -212,8 +200,8 @@ class ClassManager * @param string $name The class name * @return int the ID of the class */ - function get_class_id($name) - { + function get_class_id($name) { + $name = Database::escape_string($name); $table_class = Database :: get_main_table(TABLE_MAIN_CLASS); $sql = "SELECT * FROM $table_class WHERE name='".$name."'"; $res = Database::query($sql); @@ -225,18 +213,15 @@ class ClassManager * @param string $course_code * @return array An array with all classes (keys: 'id','code','name') */ - function get_classes_in_course($course_code) - { + function get_classes_in_course($course_code) { $table_class = Database :: get_main_table(TABLE_MAIN_CLASS); $table_course_class = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS); $sql = "SELECT cl.* FROM $table_class cl, $table_course_class cc WHERE cc.course_code = '".Database::escape_string($course_code)."' AND cc.class_id = cl.id"; $res = Database::query($sql); $classes = array (); - while ($class = Database::fetch_array($res, 'ASSOC')) - { + while ($class = Database::fetch_array($res, 'ASSOC')) { $classes[] = $class; } return $classes; } -} -?> +} \ No newline at end of file