* @author - Christophe Gesch� * * @param string $title - category title * @param string $comment - title comment * @param int $nbline - lines number for the field the user will fill * * @return bool true if succeed, else bolean false */ function create_cat_def($title = "", $comment = "", $nbline = "5") { global $TBL_USERINFO_DEF; //taken from userInfo.php $title = Database::escape_string(trim($title)); $comment = Database::escape_string(trim($comment)); $nbline = strval(intval($nbline)); if (0 == (int) $nbline || empty($title)) { return false; } $sql = "SELECT MAX(rank) as maxRank FROM ".$TBL_USERINFO_DEF; $result = Database::query($sql); if ($result) { $maxRank = Database::fetch_array($result); } $maxRank = $maxRank['maxRank']; $thisRank = $maxRank + 1; $sql = "INSERT INTO $TBL_USERINFO_DEF SET title = '$title', comment = '$comment', line_count = '$nbline', rank = '$thisRank'"; Database::query($sql); return true; } /** * modify the definition of a user information category. * * @author - Hugues peeters * @author - Christophe Gesch� * * @param int $id - id of the category * @param string $title - category title * @param string $comment - title comment * @param int $nbline - lines number for the field the user will fill * * @return - boolean true if succeed, else otherwise */ function edit_cat_def($id, $title, $comment, $nbline) { global $TBL_USERINFO_DEF; if (0 == $nbline || 0 == $id) { return false; } $id = strval(intval($id)); //make sure id is integer $title = Database::escape_string(trim($title)); $comment = Database::escape_string(trim($comment)); $nbline = strval(intval($nbline)); $sql = "UPDATE $TBL_USERINFO_DEF SET title = '$title', comment = '$comment', line_count = '$nbline' WHERE id = '$id'"; Database::query($sql); return true; } /** * remove a category from the category list. * * @author - Hugues peeters * @author - Christophe Gesche * * @param int $id - id of the category * or "ALL" for all category * @param bool $force - FALSE (default) : prevents removal if users have * already fill this category * TRUE : bypass user content existence check * @param int $nbline - lines number for the field the user will fill * * @return bool - TRUE if succeed, ELSE otherwise */ function remove_cat_def($id, $force = false) { $TBL_USERINFO_DEF = Database:: get_course_table(TABLE_USER_INFO_DEF); $TBL_USERINFO_CONTENT = Database:: get_course_table(TABLE_USER_INFO_CONTENT); $id = strval(intval($id)); if ((0 == (int) $id || $id == "ALL") || !is_bool($force)) { return false; } $sqlCondition = " WHERE id = $id"; if (!$force) { $sql = "SELECT * FROM $TBL_USERINFO_CONTENT $sqlCondition"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { return false; } } $sql = "DELETE FROM $TBL_USERINFO_DEF $sqlCondition"; Database::query($sql); } /** * move a category in the category list. * * @author - Hugues peeters * @author - Christophe Gesch� * * @param int $id - id of the category * @param string $direction "up" or "down" : * "up" decrease the rank of gived $id by switching rank with the just lower * "down" increase the rank of gived $id by switching rank with the just upper * * @return bool true if succeed, else boolean false */ function move_cat_rank($id, $direction) // up & down. { $TBL_USERINFO_DEF = Database:: get_course_table(userinfo_def); $id = strval(intval($id)); if (0 == (int) $id || !($direction == "up" || $direction == "down")) { return false; } $sql = "SELECT rank FROM $TBL_USERINFO_DEF WHERE id = $id"; $result = Database::query($sql); if (Database::num_rows($result) < 1) { return false; } $cat = Database::fetch_array($result); $rank = (int) $cat['rank']; return move_cat_rank_by_rank($rank, $direction); } /** * move a category in the category list. * * @author - Hugues peeters * @author - Christophe Gesche * * @param int $rank - actual rank of the category * @param string $direction "up" or "down" : * "up" decrease the rank of gived $rank by switching rank with the just lower * "down" increase the rank of gived $rank by switching rank with the just upper * * @return bool true if succeed, else boolean false */ function move_cat_rank_by_rank($rank, $direction) // up & down. { $TBL_USERINFO_DEF = Database:: get_course_table(userinfo_def); if (0 == (int) $rank || !($direction == "up" || $direction == "down")) { return false; } if ($direction == "down") { // thus increase rank ... $sort = "ASC"; $compOp = ">="; } else { // thus decrease rank ... $sort = "DESC"; $compOp = "<="; } // this request find the 2 line to be switched (on rank value) $sql = "SELECT id, rank FROM $TBL_USERINFO_DEF WHERE rank $compOp $rank ORDER BY rank $sort LIMIT 2"; $result = Database::query($sql); if (Database::num_rows($result) < 2) { return false; } $thisCat = Database::fetch_array($result); $nextCat = Database::fetch_array($result); $sql1 = "UPDATE $TBL_USERINFO_DEF SET rank ='".$nextCat['rank']. "' WHERE id = '".$thisCat['id']."'"; $sql2 = "UPDATE $TBL_USERINFO_DEF SET rank ='".$thisCat['rank']. "' WHERE id = '".$nextCat['id']."'"; Database::query($sql1); Database::query($sql2); return true; } /** * @author Hugues Peeters - peeters@ipm.ucl.ac.be * * @param int $user_id * @param string $course_code * @param array $properties - should contain 'role', 'status', 'tutor_id' * * @return bool true if succeed false otherwise */ function update_user_course_properties($user_id, $course_code, $properties, $horaire_name, $course_id) { global $tbl_coursUser, $_user; $sqlChangeStatus = ""; $user_id = (int) $user_id; //filter integer $course_code = Database::escape_string($course_code); $course_id = (int) $course_id; $horaire_name = Database::escape_string($horaire_name); $status = Database::escape_string($properties['status']); $tutor = Database::escape_string($properties['tutor']); if ($user_id != $_user['user_id']) { $sqlChangeStatus = "status = '$status',"; } $sql = "UPDATE $tbl_coursUser SET $sqlChangeStatus is_tutor = '$tutor' WHERE user_id = $user_id AND c_id = $course_id"; Database::query($sql); //update official-code: Horaire $table_user = Database::get_main_table(TABLE_MAIN_USER); $sql2 = "UPDATE $table_user SET official_code = '$horaire_name' WHERE user_id = $user_id"; Database::query($sql2); //on récupère l'horaire $tbl_personal_agenda = Database:: get_main_table(TABLE_PERSONAL_AGENDA); $TABLECALDATES = Database:: get_course_table(cal_dates); $jour = 0; $sql3 = "SELECT date FROM $TABLECALDATES WHERE horaire_name = '$horaire_name' AND status = 'C' AND c_id = $course_id ORDER BY date "; $result3 = Database::query($sql3); if (Database::num_rows($result3) == '0') { return false; } //on efface ce qui est déjà inscrit $sql4 = "DELETE FROM $tbl_personal_agenda WHERE user = $user_id AND text = 'Pour le calendrier, ne pas effacer'"; Database::query($sql4); $sql = "DELETE FROM $tbl_personal_agenda WHERE user = $user_id AND title = 'Examen*'"; Database::query($sql); //à chaque date dans l'horaire while ($res3 = Database::fetch_array($result3)) { $date = $res3['date']; //on incrémente les jours de cours $date = api_get_utc_datetime($date); $jour = $jour + 1; //on réinsère le nouvel horaire $sql = "INSERT ".$tbl_personal_agenda." (user,title,text,date) VALUES ($user_id, $jour, 'Pour le calendrier, ne pas effacer', '$date')"; Database::query($sql); // pour les inscrire examens dans agenda $sql5 = "SELECT date FROM $TABLECALDATES WHERE horaire_name = '$horaire_name' AND status = 'E' AND c_id = '$course_id' ORDER BY date "; $result5 = Database::query($sql5); } //à chaque date dans l'horaire while ($res5 = Database::fetch_array($result5)) { $date = $res5['date']; $date = api_get_utc_datetime($date); //on réinsère le nouvel horaire $sql7 = "INSERT $tbl_personal_agenda (user, title, date) VALUES ($user_id, 'Examen*', '$date')"; Database::query($sql7); } } /** * fill a bloc for information category. * * @author - Hugues peeters * @author - Christophe Gesche * * @param $definition_id * @param $user_id * @param $user_ip * @param $content * * @return bool true if succeed, else boolean false */ function fill_new_cat_content($definition_id, $user_id, $content = "", $user_ip = "") { global $TBL_USERINFO_CONTENT; if (empty($user_ip)) { $user_ip = $_SERVER['REMOTE_ADDR']; } $definition_id = (int) $definition_id; $user_id = (int) $user_id; $content = Database::escape_string(trim($content)); $user_ip = Database::escape_string(trim($user_ip)); if (0 == $definition_id || 0 == $user_id || $content == "") { // Here we should introduce an error handling system... return false; } // Do not create if already exist $sql = "SELECT id FROM $TBL_USERINFO_CONTENT WHERE definition_id = '$definition_id' AND user_id = $user_id"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { return false; } $sql = "INSERT INTO $TBL_USERINFO_CONTENT SET content = '$content', definition_id = $definition_id, user_id = $user_id, editor_ip = '$user_ip', edition_time = now()"; Database::query($sql); return true; } /** * Edit a bloc for information category. * * @author - Hugues peeters * @author - Christophe Gesche * * @param $definition_id * @param $user_id * @param $user_ip DEFAULT $REMOTE_ADDR * @param $content if empty call delete the bloc * * @return bool true if succeed, else boolean false */ function edit_cat_content($definition_id, $user_id, $content = "", $user_ip = "") { global $TBL_USERINFO_CONTENT; $definition_id = (int) $definition_id; $user_id = (int) $user_id; $content = Database::escape_string(trim($content)); if (empty($user_ip)) { $user_ip = $_SERVER['REMOTE_ADDR']; } $user_ip = Database::escape_string($user_ip); if (0 == $user_id || 0 == $definition_id) { return false; } if ($content == "") { return cleanout_cat_content($user_id, $definition_id); } $sql = "UPDATE $TBL_USERINFO_CONTENT SET content = '$content', editor_ip = '$user_ip', edition_time = now() WHERE definition_id = $definition_id AND user_id = $user_id"; Database::query($sql); return true; } /** * clean the content of a bloc for information category. * * @author Hugues peeters * @author Christophe Gesche * * @param $definition_id * @param $user_id * * @return bool true if succeed, else boolean false */ function cleanout_cat_content($user_id, $definition_id) { global $TBL_USERINFO_CONTENT; $user_id = (int) $user_id; $definition_id = (int) $definition_id; if (0 == $user_id || 0 == $definition_id) { return false; } $sql = "DELETE FROM $TBL_USERINFO_CONTENT WHERE user_id = $user_id AND definition_id = $definition_id"; Database::query($sql); return true; } /** * get the user info from the user id. * * @author - Hugues Peeters * @author - Christophe Gesche * * @param int $user_id user id as stored in the Dokeos main db * * @return array containg user info sort by categories rank * each rank contains 'title', 'comment', 'content', 'cat_id' */ function get_course_user_info($user_id) { $TBL_USERINFO_DEF = Database:: get_course_table(TABLE_USER_INFO_DEF); $TBL_USERINFO_CONTENT = Database:: get_course_table(TABLE_USER_INFO_CONTENT); $user_id = (int) $user_id; $sql = "SELECT cat.id catId, cat.title, cat.comment , content.content FROM $TBL_USERINFO_DEF cat LEFT JOIN $TBL_USERINFO_CONTENT content ON cat.id = content.definition_id AND content.user_id = $user_id ORDER BY cat.rank, content.id"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { while ($userInfo = Database::fetch_array($result, 'ASSOC')) { $userInfos[] = $userInfo; } return $userInfos; } return false; } /** * get the main user information. * * @author - Hugues Peeters * @author - Christophe Gesche * * @param int $user_id user id as stored in the Dokeos main db * * @return array containing user info as 'lastName', 'firstName', 'email', 'role' */ function get_main_user_info($user_id, $courseCode) { $user_id = (int) $user_id; $courseCode = Database::escape_string($courseCode); $courseId = api_get_course_int_id($courseCode); if (0 == $user_id) { return false; } $table_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $table_user = Database::get_main_table(TABLE_MAIN_USER); $sql = "SELECT u.*, u.lastname lastName, u.firstname firstName, u.email, u.picture_uri picture, cu.status status, cu.is_tutor as tutor_id FROM $table_user u, $table_course_user cu WHERE u.user_id = cu.user_id AND cu.relation_type<>".COURSE_RELATION_TYPE_RRHH." AND u.user_id = $user_id AND cu.c_id = $courseId"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { $userInfo = Database::fetch_array($result, 'ASSOC'); $userInfo['password'] = ''; return $userInfo; } return false; } /** * get the user content of a categories plus the categories definition. * * @author - Hugues Peeters * @author - Christophe Gesche * * @param int $userId id of the user * @param int $catId id of the categories * * @return array containing 'catId', 'title', 'comment', 'nbline', 'contentId' and 'content' */ function get_cat_content($userId, $catId) { $TBL_USERINFO_DEF = Database:: get_course_table(TABLE_USER_INFO_DEF); $TBL_USERINFO_CONTENT = Database:: get_course_table(TABLE_USER_INFO_CONTENT); $userId = (int) $userId; $catId = (int) $catId; $sql = "SELECT cat.id catId, cat.title, cat.comment , cat.line_count, content.id contentId, content.content FROM $TBL_USERINFO_DEF cat LEFT JOIN $TBL_USERINFO_CONTENT content ON cat.id = content.definition_id AND content.user_id = $userId WHERE cat.id = $catId "; $result = Database::query($sql); if (Database::num_rows($result) > 0) { $catContent = Database::fetch_array($result, 'ASSOC'); $catContent['nbline'] = $catContent['line_count']; return $catContent; } return false; } /** * get the definition of a category. * * @author Christophe Gesche * @author Hugues Peeters * * @param int $catId - id of the categories * * @return array containing 'id', 'title', 'comment', and 'nbline', */ function get_cat_def($catId) { $TBL_USERINFO_DEF = Database:: get_course_table(TABLE_USER_INFO_DEF); $catId = (int) $catId; $sql = "SELECT id, title, comment, line_count, rank FROM $TBL_USERINFO_DEF WHERE id = $catId"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { $catDef = Database::fetch_array($result, 'ASSOC'); $catDef['nbline'] = $catDef['line_count']; return $catDef; } return false; } /** * get list of all this course categories. * * @author Christophe Gesche * @author Hugues Peeters * * @return array containing a list of arrays. * And each of these arrays contains * 'catId', 'title', 'comment', and 'nbline', */ function get_cat_def_list() { $TBL_USERINFO_DEF = Database:: get_course_table(TABLE_USER_INFO_DEF); $sql = "SELECT id catId, title, comment , line_count FROM $TBL_USERINFO_DEF ORDER BY rank"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { while ($cat_def = Database::fetch_array($result, 'ASSOC')) { $cat_def_list[] = $cat_def; } return $cat_def_list; } return false; } /** * transform content in a html display. * * @author Hugues Peeters * * @param string $string string to htmlize * * @return string htmlized */ function htmlize($string) { global $charset; return nl2br(htmlspecialchars($string, ENT_QUOTES, $charset)); }