/** * merge users * @global type $langUserMergeSuccess * @global type $langBack * @param type $source * @param type $target */ function do_user_merge($source, $target) { global $langUserMergeSuccess, $langBack; $source_id = $source['id']; $target_id = $target['id']; $courses = array(); Database::get()->queryFunc("SELECT code FROM course_user, course WHERE course.id = course_user.course_id AND user_id = ?d" , function($row) use(&$courses) { $courses[] = $row->code; }, $target_id); $tmp_table = "user_merge_{$source_id}_{$target_id}"; $q = Database::get()->query("CREATE TEMPORARY TABLE `$tmp_table` AS SELECT course_id, $target_id AS user_id, MIN(status) AS status, MAX(tutor) AS tutor, MAX(editor) AS editor, MAX(reviewer) AS reviewer, MIN(reg_date) AS reg_date, MAX(receive_mail) AS receive_mail, MAX(document_timestamp) AS document_timestamp FROM course_user WHERE user_id IN ($source_id, $target_id) GROUP BY course_id"); if ($q) { Database::get()->query("DELETE FROM user WHERE id = ?d", $source_id); Database::get()->query("DELETE FROM course_user WHERE user_id IN ($source_id, $target_id)"); Database::get()->query("INSERT INTO course_user SELECT * FROM `$tmp_table`"); Database::get()->query("DROP TEMPORARY TABLE `$tmp_table`"); fix_table('loginout', 'id_user', $source_id, $target_id); fix_table('log', 'user_id', $source_id, $target_id); fix_table('assignment_submit', 'uid', $source_id, $target_id); fix_table('group_members', 'user_id', $source_id, $target_id); fix_table('dropbox_index', 'recipient_id', $source_id, $target_id); fix_table('dropbox_msg', 'author_id', $source_id, $target_id); fix_table('exercise_user_record', 'uid', $source_id, $target_id); fix_table('logins', 'user_id', $source_id, $target_id); fix_table('lp_user_module_progress', 'user_id', $source_id, $target_id); fix_table('poll', 'creator_id', $source_id, $target_id); fix_table('poll_answer_record', 'user_id', $source_id, $target_id); fix_table('forum_notify', 'user_id', $source_id, $target_id); fix_table('forum_post', 'poster_id', $source_id, $target_id); fix_table('forum_topic', 'poster_id', $source_id, $target_id); fix_table('wiki_pages', 'owner_id', $source_id, $target_id); fix_table('wiki_pages_content', 'editor_id', $source_id, $target_id); fix_table('gradebook_users', 'uid', $source_id, $target_id); fix_table('gradebook_book', 'uid', $source_id, $target_id); fix_table('attendance_users', 'uid', $source_id, $target_id); fix_table('attendance_book', 'uid', $source_id, $target_id); fix_table('blog_post', 'user_id', $source_id, $target_id); fix_table('comments', 'user_id', $source_id, $target_id); fix_table('personal_calendar', 'user_id', $source_id, $target_id); fix_table('personal_calendar_settings', 'user_id', $source_id, $target_id); fix_table('rating', 'user_id', $source_id, $target_id); fix_table('user_department', 'user', $source_id, $target_id); fix_table('custom_profile_fields_data', 'user_id', $source, $target); $tool_content = sprintf('<div class="alert alert-success">' . $langUserMergeSuccess . '</div>', '<b>' . q($source['username']) . '</b>', '<b>' . q($target['username']) . '</b>') . "<p><a href='search_user.php'>$langBack</p>"; draw($tool_content, 3); exit; } }
function mysql_die($string) { $error_txt = sprintf($st[1120], $string) . mysql_errno() . $st[1121] . mysql_error(); fix_table(); write_to_error_log($error_txt); }
function do_user_merge($source, $target) { global $langUserMergeSuccess, $langBack; $source_id = $source['user_id']; $target_id = $target['user_id']; $courses = array(); Database::get()->queryFunc("SELECT code FROM course_user, course\n WHERE course.id = course_user.course_id AND\n user_id = ?d", function ($row) use(&$courses) { $courses[] = $row->code; }, $target_id); $tmp_table = "user_merge_{$source_id}_{$target_id}"; $q = Database::get()->query("CREATE TEMPORARY TABLE `{$tmp_table}` AS\n SELECT course_id, {$target_id} AS user_id,\n MIN(status) AS status, MAX(team) AS team, MAX(tutor) AS tutor,\n MAX(editor) AS editor, MAX(reviewer) AS reviewer, MIN(reg_date) AS reg_date,\n MAX(receive_mail) AS receive_mail\n FROM course_user\n WHERE user_id IN ({$source_id}, {$target_id})\n GROUP BY course_id"); if ($q) { Database::get()->query("DELETE FROM user WHERE user_id = ?d", $source_id); Database::get()->query("DELETE FROM course_user WHERE user_id IN ({$source_id}, {$target_id})"); Database::get()->query("INSERT INTO course_user SELECT * FROM `{$tmp_table}`"); Database::get()->query("DROP TEMPORARY TABLE `{$tmp_table}`"); fix_table('forum_notify', 'user_id', $source_id, $target_id); fix_table('loginout', 'id_user', $source_id, $target_id); fix_table('log', 'user_id', $source_id, $target_id); fix_table('assignment_submit', 'uid', $source_id, $target_id); fix_table('dropbox_file', 'uploaderId', $source_id, $target_id); fix_table('dropbox_person', 'personId', $source_id, $target_id); fix_table('dropbox_post', 'recipientId', $source_id, $target_id); fix_table('exercise_user_record', 'uid', $source_id, $target_id); fix_table('logins', 'user_id', $source_id, $target_id); fix_table('lp_user_module_progress', 'user_id', $source_id, $target_id); fix_table('poll', 'creator_id', $source_id, $target_id); fix_table('poll_answer_record', 'user_id', $source_id, $target_id); fix_table('forum_post', 'poster_id', $source_id, $target_id); fix_table('forum_topic', 'poster_id', $source_id, $target_id); fix_table('wiki_pages', 'owner_id', $source_id, $target_id); fix_table('wiki_pages_content', 'editor_id', $source_id, $target_id); $tool_content = sprintf('<div class="alert alert-success">' . $langUserMergeSuccess . '</div>', '<b>' . q($source['username']) . '</b>', '<b>' . q($target['username']) . '</b>') . "\n<p><a href='search_user.php'>{$langBack}</p>\n"; draw($tool_content, 3); exit; } }