MRBS会议室预约系统
MRBS会议室预约系统(用于学生选课)
一、安装
1、使用宝塔面板新建一个站点,创建数据库
-
站点设置域名:mrbs.sel.com(随便自定义)
-
新建一个数据库(名称自定义)
2、下载安装包,上传到网站根目录
-
解压缩包,进入web文件夹,打开根目录下config.inc.php-sample文件,将文件重命名为config.inc.php,
然后修改代码
将39行 //$timezone = "Europe/London"; 改为 $timezone = "Asia/Shanghai"; // 修改数据库名,用户名,密码 $db_host = “数据库连接地址本地为localhost"; $db_database = “数据库名"; $db_login = “用户名"; $db_password = "密码"; // 在config.inc.php,文件底部添加一行 $auth["type"]="db";
3、在宝塔面板的站点设置中,将网站运行目录改为/web
4、导入数据库文件
使用phpmyadmin,选择刚刚新建的数据库,选择导入,打开刚刚解压缩的文件夹位置,选择tables.my.sql数据库导入
5、访问网站
访问网站(如果没有设置运行目录为/web则需要在域名后面加/web),打开网站后,根据提示新建一个管理员账户即可体验目前最好用的会议室预定系统!
二、自定义配置
1、普通用户不能查看其他用户信息
默认情况下,普通用户也可以点击users查看到所有的用户信息
修改/mrbs/web/edit_users.php文件102行 return ($auth['only_admin_can_see_other_users'] || // 去掉$auth前面的!
2、header导航栏
- 修改公司名称
修改/mrbs/web/systemdefaults.inc.php文件130行 $mrbs_company = "Your Company";
- 修改系统名称
打开文件 /wenb/lang/lang.zh-cn,修改第12行 $vocab["mrbs"] = "选课系统";
- 公司名称添加转到主页链接
修改/web/Themes/default/header.inc文件,修改第105行 echo '<span>' . htmlspecialchars($mrbs_company) . '</span>'; 修改为: echo '<a href="' . htmlspecialchars(multisite('index.php')) . '">' . htmlspecialchars($mrbs_company) . "</a>";
增加 menu 菜单选项
修改/web/Themes/default/header.inc文件,修改第207行 $menu_items = array 中增加 一个菜单选项
- 菜单选项名称指向的文件需要放在/web根目录
可以借鉴 复制 help.php 文件,重命名,然后修改第80行代码
然后在 /web/site_faq目录下,创建新菜单所展示的页面 info.html
- 设置菜单访问权限(默认情况下管理员才能访问新菜单)
修改/web/mrbs_auth.inc文件,在第109行下面 添加一行,
- 这样就可以在不登陆的情况下,访问新的菜单选项
- 可以设置新菜单选项的中文名称
编辑 /web/lang/lang.zh_cn 文件 在 17行下面添加新增的翻译
3、首页index表格中的文字居中显示
- 让表格中的预约主题文字水平居中显示
修改/web/css/mrbs.css.php,第700行 .table_container中增加一行 text-align: center;
- 让页面底部的类型文字水平居中显示
修改/web/css/mrbs.css.php,第1952行 .color_key增加一行 text-align: center;
- 修改首页表格中预约文字高度
修改/web/css/mrbs.css.php,第919行 .dwm_main .booking 插入一行代码,让预约主题文字高度,垂直居中 line-height:50px; --- 修改/web/css/mrbs.css.php,第766行 .dwm_main tbody th 插入一行代码,让表格左侧标题文字高度,垂直居中 line-height:50px; --- 修改/web/css/mrbs.css.php,第1209行 .dwm_main thead th 插入一行代码,设置表格表头文字高度,垂直居中 line-height:40px;
4、日期格式
修改/web/index.php,342行
函数get_date_heading中的代码
//$html .= utf8_strftime($strftime_format['view_day'], $time); 注释掉,不显示 改为: $html .= utf8_strftime("%Y-%m-%d %A", $time); %A代表星期几 如果只是获取星期几的数字 date('w', $time)
5、help帮助页
- 修改帮助页内容,mrbs/web/site_faq
site_faq.html文件
- 修改帮助页面管理员联系名称和邮箱
修改/mrbs/web/systemdefaults.inc.php文件118行 $mrbs_admin = "Your Administrator"; $mrbs_admin_email = "admin_email@your.org";
- 隐藏软件版本和浏览器支持的语言信息
修改 /web/help.php 注释掉24~70行之间的2个 if 语句 /* ... */
6、SMTP settings
修改 /web/systemdefaults.inc.php文件,第1382~1390行
$smtp_settings['host'] = 'smtp.exmail.qq.com'; // 举例:腾讯企业邮 SMTP server $smtp_settings['port'] = 465; // SMTP port number $smtp_settings['auth'] = false; // Whether to use SMTP authentication $smtp_settings['secure'] = 'ssl'; $smtp_settings['username'] = 'name@domain.com'; // Username (if using authentication) $smtp_settings['password'] = // secret key 1243行 $mail_settings['from'] = 'name@domain.com'; 1260行 $mail_settings['recipients'] = 'name@domain.com';
三、自定义为选课系统
1、新建一个选课区域,用作课程类型,然后新建房间,等同于课程
课程房间设置
名称:输入课程名称
说明:输入课程授课教师
容纳人数:输入最大选课人数
email:可以设置
让学生选课预约时类型只能选“内部”
课程选课预约的默认类型是“内部”,但所有人都可以随便选类型
添加完课程后,点击课程名称进行设置,类型:选“外部”,点击保存
设置后,学生操作选课预约的时候,只能选“内部”,“外部”类型不被允许
只有管理员可以选择“外部”,用于提前预约占位
2、区域自定义设置
使用期间模式Periods
student 1、student 2、student *
添加期间Periods,数量等同于课程最大选课人数限制
建议将相同人数限制的课程放到一个区域
如果同一个区域下的课程有不同的人数容量,可以设置最大人数,然后提前预约占用其他课程多出的人数
预约数量限制Limits on the number of bookings
每天和每周最大人数都设置为1,这个用于限制只能选择一门课程
Maximum number per day:1
Maximum number per week:1
预约区间限制Limits on the duration of bookings
期间Periods最大为1
这个用于限制一个学生只能占用一个期间Periods
最后一个隐私设置,选择第3项,公开忽略
3、设置选课预约日期
系统默认是每天都可以循环进行预约,这样就不能达到限制选课人数的目的。今天选课程1,明天又可以选课程2
这里只能设置在MRBS系统中可以预约的日期,并不能控制学生开始登录系统进行预约操作的时间
我们可以限制只能预约某一天
修改/mrbs/web/systemdefaults.inc.php文件276行开始
//结束预约日期 $max_booking_date_enabled = true; $max_booking_date = "2022-09-13";
//开始预约日期,设置在同一天即可 $min_booking_date_enabled = true; $min_booking_date = "2022-09-13";
控制只能预约具体某一天,让所有人都预约在同一天,这样课程人数限制才有效
隐藏部分日期,自动显示在指定日期
修改/mrbs/web/systemdefaults.inc.php文件336行
$hidden_days = array(0,1,5,6); //隐藏一周中的某些日期,0代表周日,6代表周六
通过隐藏一周中的某几天,只显示选课截至日期那天,使一周内在截至日期前的日期将不会显示
比如:学生可以进行选课操作的时间是2022年9月12-13日两天
首先将开始预约日期和结束预约日期都设置为:2022-09-13
然后隐藏每周中的周一(2022-09-12是周一),或者其他全部隐藏,只显示周二
达到的效果是,在2022-09-12周一这天登录系统(或手动选择这一天)不会显示2022-09-12这一天的预约界面。
系统会自动往后跳到2022-09-13这一天的预约界面
或者在系统先导航到指定日期,然后将带有日期参数的URL链接发给学生
http://域名/index.php?csrf_token=cda1265e3c8f1f40deff1e577f80f81f02263601f43cf6ac7c0753005d23a74b&view=day&area=7&page_date=2023-07-14
- 然后使用docker安装nginx容器设置短网址替换链接:
#下载nginx镜像 docker pull nginx # 使用具名卷创建容器 docker run -d --name nginx01 -p 8081:80 -v nginx01:/etc/nginx nginx # 修改nginx配置文件,实现短网址访问 http://域名/s /var/lib/docker/volumes/nginx01/_data/conf.d/default.conf 添加一个 location /s { rewrite ^(.*) 需要代理的目标长域名 permanent; } # 重启容器 docker restart nginx01 # 设置容器开机启动 docker update --restart=always nginx01
隐藏周/月视图和前一天/后一天按钮
编辑 /web/index.php文件
//隐藏前一天/后一天,注释掉第320行 //$html .= get_arrow_nav($view, $view_all, $year, $month, $day, $area, $room); //隐藏周和月视图,注释掉322行 //$html .= get_view_nav($view, $view_all, $year, $month, $day, $area, $room); //如果要隐藏整个导航条(包括区域选择框) //注释掉469行 //echo get_calendar_nav($view, $view_all, $year, $month, $day, $area, $room); //注释掉488行 //echo get_calendar_nav($view, $view_all, $year, $month, $day, $area, $room, true); //如果启用的区域只有 一个,系统默认不会显示区域选择框
让区域area选择框居中显示
修改 /web/css/mrbs.css.php 文件第496行
//nav.main_calendar中的宽度 width: 60%; //字体加租 font-weight: bold;
4、隐藏日历和日期
隐藏首页左侧日历
编辑/web/index.php,注释掉464-465行
//echo "<div class=\"minicalendars\">\n"; //echo "</div>\n";
隐藏首页的当前日期
编辑/web/index.php,注释掉468行
//echo get_date_heading($view, $year, $month, $day);
隐藏顶部导航菜单中的日期(建议不隐藏)
修改/web/Themes/default/header.inc文件,注释掉第437行
//print_goto_date($context);
后面的搜索框是按日期来搜索的,可以搜索从指定日期开始的预约
比如我有一个预约是13号,只要指定的日期在13号之前都可以搜索到该预约
如果指定的开始日期是14号,则搜索不到该预约
5、修改页面文字
修改语言文件 /web/lang/lang.zh-cn
预约编辑页面
//58行“新增条目”改为“新增选课” $vocab["addentry"] = "新增选课"; //59行“修改条目”改为“修改选课” $vocab["editentry"] = "修改选课"; //60行“复制条目”改为“复制选课” $vocab["copyentry"] = "复制选课"; //63行“主题”改为“姓名” $vocab["namebooker"] = "姓名"; //64行“完整描述”改为“班级” $vocab["fulldescription"] = "班级"; //90行“区域”改为“课程类型” $vocab["area"] = "课程类型";
预约查看页面
//138行“房间”修改为“课程” $vocab["room"] = "课程"; //143行“删除条目”改为“删除课程” $vocab["deleteentry"] = "删除选课"; //173行“事件详情”改为“选课详情” $vocab["event_details"] = "选课详情";
搜索界面
//350行“从”改为“开始于” $vocab["from"] = "开始于";
导航栏文字
//22行“前往”修改为“截至日期” $vocab["goto"] = "截至日期"; //401行“房间”修改为“课程” $vocab["rooms"] = "课程";
房间详情页面
//405行“新增区域”改为“新增课程类型” $vocab["addarea"] = "新增课程类型"; //406行“名称”改为“课程名称” $vocab["name"] = "课程名称"; //409行“新增房间”改为“新增课程” $vocab["addroom"] = "新增课程"; //413行“房间明细”修改为“课程明细” $vocab["administration"] = "课程明细"; //423行“会议室管理员Email”改为“Email” $vocab["room_admin_email"] = "Email"; //500行“无效类型”改为“其他” $vocab["invalid_types"] = "其他";
帮助页面
//516行“关于会议室预约系统”改为“关于选课系统” $vocab["about_mrbs"] = "关于选课系统";
首页底部类型
//593行页面底部的“内部使用”改为“学生” $vocab["type.I"] = "学生"; //594行“外部使用”改为“不可用” $vocab["type.E"] = "不可用";
报表页面
//353行“会议室报表”改为“选课报表” $vocab["report_on"] = "选课报表"; //356行“区域”改为“课程类型” $vocab["match_area"] = "课程类型"; //357行“房间”改为“课程” $vocab["match_room"] = "课程"; //360行“简要说明”改为“学生姓名” $vocab["match_entry"] = "学生姓名"; //361行“完整说明”改为“班级” $vocab["match_descr"] = "班级"; //370行“按简要说明汇总”改为“按学生姓名汇总” $vocab["sum_by_descrip"] = "按学生姓名汇总"; //384行”完整说明“改为”班级“ $vocab["fulldescription_short"] = "班级";
其他
//602行“后退”改为“取消” $vocab["back"] = "取消"; //“期间”改为“课位” //71行首页表头 $vocab["period"] = "课位"; //411行空区域房间查看页面提示文字 $vocab["norooms"] = "没有定义任何课程."; //预约查看页面 //68行 $vocab["start_date"] = "起始课位"; //69行 $vocab["end_date"] = "结束课位"; //488行 $vocab["mode_periods"] = "课位"; //42行空区域的提示文字“这个区域没有自定义房间”改为“这个类型没有课程” $vocab["no_rooms_for_area"] = "这个类型没有课程";
修改帮助页面 /web/site_fag/site_fag.html
将英文改为中文
6、取消首页表头课程链接
首页表头课程的链接,点击后会进入课程的周视图,不希望学生点击
修改/web/functions_table.inc,在data-room下方,注释掉450和451行
//$html .= '<a href="' . htmlspecialchars($link) . '"' . // ' title = "' . htmlspecialchars($title) . '">';
7、设置选课开始和结束时间
方式1:通过宝塔面板的定时任务功能,自动定时开启/结束,将预约操作的网页文件改名,使编辑预约php文件不可用
定时开启
mv /www/wwwroot/mrbs.sel.sdgj.com/web/edit_entry.php.stop /www/wwwroot/mrbs.sel.sdgj.com/web/edit_entry.php
定时关闭
mv /www/wwwroot/mrbs.sel.sdgj.com/web/edit_entry.php /www/wwwroot/mrbs.sel.sdgj.com/web/edit_entry.php.stop
方式2:手动更改系统,暂停选课
修改/web/Themes/default/header.inc文件,注释掉第599行
//echo " data-$key=\"" . htmlspecialchars($value) . '"';
修改后,选课预约操作后,不能保存
并且,点击左侧任意日期,右侧的预约窗口不会转账到指定日期,会提示系统错误
8、导出报表,查看选课数据
搜索条件
- 输出选项
输出:报表
格式:HTML(其他格式会出现乱码)
排序:房间名
汇总方式:按学生姓名汇总
生成报表
点击生成报表后,在页面最下方会显示结果
报表自定义设置
修改/web/report.php文件
//默认的预约人列是N/A,因为没有显示出注册表头,需要修改/web/report.php文件609行,添加感叹号 if (!$registration_somewhere) //这样预约人就正确了,后面的更新也出来了
下载报表
点击生成的报表右上角的“excel"
导入用户数据库
导出原有系统用户数据,选中excel格式
导入到新系统的用户数据表,使用excel格式
导入后刷新查看
Navicat插入数据SQL语句: INSERT INTO `mrbs_users` (`id`, `level`, `name`, `display_name`, `password_hash`, `email`, `timestamp`, `last_login`, `reset_key_hash`, `reset_key_expiry`) VALUES (NULL, '1', '2022g18jiangnan', '江南', MD5('123456'), NULL, CURRENT_TIMESTAMP, '0', NULL, '0');
可以将这个SQL语句分成几段,放到excel中不同的列,将账号和名称单独列出来,然后再合并所有列,复制到Navicat中执行SQL插入语句。
注意:excel单元格中,不能以'单引号开头,会被忽略掉,可以放在前一个单元格末尾,SQL每行语句必须以英文分号;结尾
克隆网站
-
宝塔面板新建一个站点
-
上传mrbs安装包到网站根目录并解压,然后复制源网站web目录,替换新网站目录下的web文件夹
-
新建数据库,并导入安装包解压后的空数据库文件
-
进入web文件夹,打开根目录下config.inc.php文件,
然后修改代码
将56行 // 修改数据库名,用户名,密码 $db_database = “数据库名"; $db_login = “用户名"; $db_password = "密码";
-
访问新网站/web,创建管理员账户
-
修改相关配置
自定义预约说明字段,设置为班级选项
修改edit_entry.php 第137行function get_field_description函数
function get_field_description($value, $disabled = false) { global $is_mandatory_field; // Assuming you have a FieldSelect class $field = new FieldSelect(); $params = array( 'label' => get_vocab('fulldescription'), 'name' => 'description', 'field' => 'entry.description', 'required' => true, // Modify this as needed 'disabled' => $disabled, ); // Set up options for the select field // Modify this part according to your requirements $options = array( '' => 'Select an option', // Add an empty option as the default 'option1' => 'Option 1', 'option2' => 'Option 2', 'option3' => 'Option 3', ); $field->setAttributes(array('id' => 'description_select')) ->setLabel($params['label']) ->setControlAttributes(array('name' => $params['name'], 'required' => $params['required'], 'disabled' => $params['disabled'])) ->addSelectOptions($options, $value, true); return $field; // Use getHTML() to get the HTML code for the field }
隐藏预约界面的重复选项
修改edit_entry.php文件,第1865行
/*----注释掉以下代码---- if (($edit_type == "series") && $repeats_allowed) { $form->addElement(get_fieldset_repeat()); } */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人