├── .gitignore ├── .idea ├── WechatWebQuestionnair.iml ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── deployment.xml ├── encodings.xml ├── misc.xml ├── modules.xml ├── php.xml ├── sqldialects.xml ├── webServers.xml ├── workspace(DESKTOP-5GV1KFL--wenkaiW10--2016-04-19-19,45,14).xml ├── workspace(DESKTOP-5GV1KFL--wenkaiW10--2016-04-22-19,23,31).xml └── workspace(DESKTOP-5GV1KFL--wenkaiW10--2016-04-25-13,06,09).xml ├── README.md ├── api └── getParentInfoTable.php ├── bugsss.md ├── dataBaseApi ├── createTable.sql ├── dataBaseApis.php ├── possiblequestion └── testDatabase.php ├── index.html ├── onlyForLocalHost ├── README.md ├── connectFunctions.php └── initializeDataBase.php ├── pages ├── BACKUP_homepage.php ├── README.md ├── error │ └── invalid_url.php ├── files │ └── StudentRegTest.csv ├── first_time_for_students.php ├── first_time_for_teacher.php ├── group_create.html ├── group_join.html ├── group_manage.html ├── group_search.html ├── group_show.html ├── guideline.html ├── help │ ├── group_create_help_csv.html │ └── try.html ├── homepage.php ├── include_js_set_questionnaire.php ├── index.html ├── invalid_url.php ├── js │ └── README.md ├── noticeWithOptions_create.php ├── notice_create.php ├── notice_draft.html ├── notice_history.html ├── notice_read_status.php ├── notice_show.php ├── notice_show_redirect.php ├── notice_show_teacher.php ├── pageUnderConstruction.php ├── pagesbackup │ └── first_time_for_students.html ├── parent_access_denied.php ├── parent_not_registered.php ├── pic │ ├── chen.jpg │ ├── sun.jpg │ └── wen.jpg ├── question_draft.html ├── question_history.html ├── questionnaire_create.php ├── questionnaire_show.php ├── questionnaire_show_in_form_part.php ├── questionnaire_show_parents.php ├── questionnaire_statistics.php ├── redirectParentFromOAuth.php ├── reference │ ├── ZeroClipboard.js │ ├── ZeroClipboard.swf │ ├── bootstrap-theme.min.css │ ├── bootstrap.min.css │ ├── bootstrap.min.js │ ├── cookie.js │ ├── highcharts.js │ ├── jquery.min.js │ ├── json.js │ └── test.html ├── share │ ├── README.md │ ├── navigation.php │ ├── navigation_backup.php │ └── navigation_safe.php ├── showCookie.html ├── testNavigation.php ├── try.html ├── try_upload.html ├── upload_file.php ├── upload_question_answers.php └── welcome.html ├── parentReg.php ├── pictures └── appLogo.jpg ├── reg ├── NewNotice.php ├── chooseOption.php ├── confirmNotice.php ├── newQuestionnaire.php ├── newQuestionnaireOneQues.php ├── noticeStats.php ├── parentReg.php ├── parentRegSharePage.php ├── parentRegWithOutOAuth.php ├── parentRegWithStudent.php ├── questionnaireStats.php ├── readme ├── showAllQuestionnaire.php ├── showNotice.php ├── showQuestionnaire.php ├── showQuestionnaireSharePage.php ├── studentReg.php ├── submitQuestionnaire.php ├── teacherReg.php └── teacherRegWithOutOAuth.php ├── someUsefulURLs.txt ├── test ├── dumpREQUEST.php ├── readme.md ├── testCheckBox.php ├── testJava.html ├── testRedirect.php ├── testShowAllQ.php └── var_dump.php ├── testPost.php ├── util ├── commonFuns.php ├── do_post_request.php ├── generate_hint_page.php ├── httpRedirect.php ├── setHeaderToUTF8.php └── testGetOpenIdFromUserId.php ├── wxq ├── getCodeToRedirect.php ├── testgetOpenId.php └── wxapi.php └── 文档 ├── MYSQL5.1 CHM版中文帮助文档.chm ├── WeChat Notifier 微通 效果图.zip ├── WeChat Notifier 微通 效果图 ├── 1.1教师注册.jpg ├── 1.2教师注册成功.jpg ├── 1.3教师首页1.jpg ├── 1.3教师首页2.jpg ├── 1.4.1通知创建成功.jpg ├── 1.4.2问卷创建成功.jpg ├── 1.4创建通知.jpg ├── 1.5阅读情况.jpg ├── 2.1家长注册.png ├── 2.2家长首页.jpg ├── 2.3通知阅读.jpg └── 无访问权限.jpg ├── ~$意见收集系统 参赛版.docx ├── 作品效果图 不受维护的版本.docx ├── 功能测试计划 参考文件.pdf ├── 参赛文档 ver2.docx ├── 参赛文档.docx ├── 可行性研究报告.docx ├── 可行性研究报告Ver2.docx ├── 图标 ├── noPage.png ├── noPage.psd ├── weitongIcon.png ├── weitongIcon.psd ├── weitongIconTransparent.png └── 设计图.psd ├── 微信意见收集及签到系统 ver2 201604419.docx ├── 微信意见收集及签到系统 项目开发计划 revised.doc ├── 微信意见收集及签到系统 项目开发计划.doc ├── 微信意见收集及签到系统.docx ├── 微信意见收集系统 分析文档 第五小组 整合 ver0.5.docx ├── 微信意见收集系统 分析文档 第五小组 整合 ver0.6.docx ├── 微信意见收集系统 参赛版.docx ├── 微信意见收集系统数据流图.docx ├── 微通 答辩 ppt.pptx ├── 微通 答辩ppt ver2.pptx ├── 微通 答辩ver2.2.pptx ├── 微通 答辩ver2.3.pptx ├── 微通 软件工程作业 展示ppt.pptx ├── 微通:北京大学计算机应用设计大赛 文档 ver2.docx ├── 微通:北京大学计算机应用设计大赛 文档 ver2.pdf ├── 微通:北京大学计算机应用设计大赛 文档.docx ├── 微通:北京大学计算机应用设计大赛 文档.pdf ├── 微通:北京大学计算机应用设计大赛 文档.zip ├── 微通:北京大学计算机应用设计大赛.zip ├── 成本分析.docx ├── 最终提交版参赛文档 20160424 ver2.docx ├── 最终提交版参赛文档 20160424.docx ├── 测试计划 张成九 20160419 revised.docx ├── 测试计划 张成九 20160419.docx ├── 相关说明.md └── 软件工程微信意见收集系统数据流图.pdf /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/phpstorm 2 | 3 | ### PhpStorm ### 4 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm 5 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 6 | 7 | # User-specific stuff: 8 | .idea/workspace.xml 9 | .idea/tasks.xml 10 | .idea/dictionaries 11 | .idea/vcs.xml 12 | .idea/jsLibraryMappings.xml 13 | 14 | # Sensitive or high-churn files: 15 | .idea/dataSources.ids 16 | .idea/dataSources.xml 17 | .idea/dataSources.local.xml 18 | .idea/sqlDataSources.xml 19 | .idea/dynamic.xml 20 | .idea/uiDesigner.xml 21 | 22 | # Gradle: 23 | .idea/gradle.xml 24 | .idea/libraries 25 | 26 | # Mongo Explorer plugin: 27 | .idea/mongoSettings.xml 28 | 29 | ## File-based project format: 30 | *.iws 31 | 32 | ## Plugin-specific files: 33 | 34 | # IntelliJ 35 | /out/ 36 | 37 | # mpeltonen/sbt-idea plugin 38 | .idea_modules/ 39 | 40 | # JIRA plugin 41 | atlassian-ide-plugin.xml 42 | 43 | # Crashlytics plugin (for Android Studio and IntelliJ) 44 | com_crashlytics_export_strings.xml 45 | crashlytics.properties 46 | crashlytics-build.properties 47 | fabric.properties 48 | 49 | 50 | # Created by https://www.gitignore.io/api/osx 51 | 52 | ### OSX ### 53 | .DS_Store 54 | .AppleDouble 55 | .LSOverride 56 | 57 | # Icon must end with two \r 58 | Icon 59 | 60 | 61 | # Thumbnails 62 | ._* 63 | 64 | # Files that might appear in the root of a volume 65 | .DocumentRevisions-V100 66 | .fseventsd 67 | .Spotlight-V100 68 | .TemporaryItems 69 | .Trashes 70 | .VolumeIcon.icns 71 | 72 | # Directories potentially created on remote AFP share 73 | .AppleDB 74 | .AppleDesktop 75 | Network Trash Folder 76 | Temporary Items 77 | .apdisk 78 | 79 | 80 | 81 | # Created by https://www.gitignore.io/api/windows 82 | 83 | ### Windows ### 84 | # Windows image file caches 85 | Thumbs.db 86 | ehthumbs.db 87 | 88 | # Folder config file 89 | Desktop.ini 90 | 91 | # Recycle Bin used on file shares 92 | $RECYCLE.BIN/ 93 | 94 | # Windows Installer files 95 | *.cab 96 | *.msi 97 | *.msm 98 | *.msp 99 | 100 | # Windows shortcuts 101 | *.lnk 102 | .idea/workspace(DESKTOP-5GV1KFL--wenkaiW10--2016-04-18-01,54,23).xml 103 | .idea/workspace(DESKTOP-5GV1KFL--wenkaiW10--2016-04-18-01,41,24).xml 104 | .idea/deployment.xml 105 | .idea/deployment.xml 106 | .idea/deployment.xml 107 | .idea/deployment.xml 108 | .idea/deployment.xml 109 | .idea/deployment.xml 110 | -------------------------------------------------------------------------------- /.idea/WechatWebQuestionnair.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/deployment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/php.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/sqldialects.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/webServers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WechatWebQuestionnair 2 | 微信意见收集系统,支持出勤统计(微信版问卷星!) 3 | ## 开发环境 4 | 推荐使用wamp进行一键式安装。 5 | * MySQL:5.5+ 6 | * PHP:5.5+ 7 | * Apache:2.4+ 8 | * 开发工具:推荐使用 PhpStorm(主要工具 版本:2016.1) 和 WebStorm 进行开发。 9 | 10 | 生产环境版本如下: 11 | 12 | * OS: Ubuntu 14.04 LTS server x64 13 | * MySQL: 5.5.47 14 | * PHP:5.5.9 15 | * Apache: 2.4.7 16 | 17 | ## 目录含义 18 | * ./api 存放问卷系统需要调用的API 19 | * 获取数据的API以get开头,返回json格式数据 20 | * 更改数据的API以set开头 21 | * ./onlyForLocalHost 存放系统初次使用时的配置文件。 22 | * ./wxq 关键文件夹,用户访问应用时的主要文件夹。 23 | * ./util 功能函数所在的文件夹。 24 | * ./pages 显示给用户的网页 25 | 26 | ## 数据库配置 27 | * 数据库只允许来自localhost的访问 28 | * 用户名为typemoon,仅允许本机访问 29 | * 密码为typemoonsql 30 | * 所操作的数据库为typemoon01 31 | * 数据库超级账户:root 32 | * 数据库超级账户密码:TypeMoon01 33 | ## 常用链接 34 | * https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx75de8782f8e4f99c&redirect_uri=121.201.14.58%2fwxq%2fwxapi.php&response_type=code&scope=snsapi_base#wechat_redirect 35 | 获取有关的用户信息。 36 | 37 | ## 接口 38 | ### 家长注册 39 | 使用get方法,提供parentName, studentID两个字段。 40 | 41 | ### 学生信息提交 42 | 使用csv文件进行提交。 43 | 44 | 文件中只有两列,没有列名(从第一行开始就是学生的数据) 45 | 46 | 第一列是studentID,第二列是studentName。 47 | 48 | ### token 49 | 50 | 需要支持update和read 51 | 52 | ### backlog 53 | * 通知阅读情况展示。需要weitong用服务器返回的json数据在浏览器端解析并显示。 54 | * json.js parseJSON 55 | * 服务器以json形式返回阅读情况数据。 56 | * json_encode 57 | * 确定通知已阅。confirmNotice.php 58 | 59 | ## 参赛文档 60 | https://onedrive.live.com/redir?page=view&resid=B4141473268035C7!4797&authkey=!AIox10OnhsryFLA 61 | 62 | ## 尚未实现的需求 63 | *对照提交给老师的分析文档* 64 | * 问卷的创建,发布。家长的回答。意见的统计。 65 | * 老师上传学生信息的文件,从而为数据库提供学生的精准数据。 66 | * 群管理:没法确定家长属于哪个群。 67 | * 68 | ## 界面中需要美化的地方 69 | * 使用Bootstrap的内建类别显示未读通知数 70 | 71 | ## 未来可以增加的功能 72 | * 可能由于服务器没有备案,我们无法使用post,未来应该使用post和cookie来写出更优雅的代码。 73 | * 支持一个家长有多个孩子。 74 | * 提供更为完善的班级管理功能。 75 | * 在通知和问卷下提供评论功能。 76 | * 支持用户名、密码登陆。 77 | * 设计一个logo 78 | * 使用https进行传输。 79 | 80 | 81 | 82 | ##问题定义 83 | ##可行性分析 84 | ##需求分析 85 | ##项目计划 86 | ##成本分析 87 | ##测试计划 88 | -------------------------------------------------------------------------------- /api/getParentInfoTable.php: -------------------------------------------------------------------------------- 1 | select_db(DATABASE_NAME); 14 | $sql = "SELECT * from parentInfo"; 15 | $result = $conn->query($sql); 16 | if($result){ 17 | echo $result; 18 | }else{ 19 | die("error: no data or connection error"); 20 | } 21 | -------------------------------------------------------------------------------- /bugsss.md: -------------------------------------------------------------------------------- 1 | * 服务器开了很多不知道干什么的用户,可能存在安全隐患。 -------------------------------------------------------------------------------- /dataBaseApi/createTable.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE `typemoon01` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 2 | use typemoon01; # 还需要在数据库中给这个用户分配权限,还是因为对mysql的权限管理没有系统的了解 3 | CREATE TABLE teacherTable 4 | ( 5 | teacherName VARCHAR(20) NOT NULL , 6 | teacherOpenID VARCHAR(50) NOT NULL , 7 | teacherID INT NOT NULL AUTO_INCREMENT, 8 | teacherPassword VARCHAR(20), 9 | teacherNickName VARCHAR(20), 10 | PRIMARY KEY (teacherID) 11 | ); 12 | 13 | CREATE TABLE parentTable 14 | ( 15 | parentName VARCHAR(20) NOT NULL , 16 | parentOpenID VARCHAR(50) NOT NULL , 17 | parentID INT NOT NULL AUTO_INCREMENT, 18 | parentPassword VARCHAR(20), 19 | parentNickName VARCHAR(20), 20 | PRIMARY KEY (parentID) 21 | ); 22 | 23 | CREATE TABLE studentTable 24 | ( 25 | studentName VARCHAR(20) NOT NULL , 26 | studentID VARCHAR(20) NOT NULL, 27 | groupID VARCHAR(10), 28 | ownerteacherID INT NOT NULL , 29 | PRIMARY KEY (studentID), 30 | FOREIGN KEY (ownerteacherID) 31 | REFERENCES teacherTable(teacherID) 32 | ); 33 | 34 | CREATE TABLE parentStudentTable 35 | ( 36 | parentID INT NOT NULL , 37 | studentID VARCHAR(20) NOT NULL , 38 | relationship VARCHAR(10), 39 | PRIMARY KEY (parentID,studentID), 40 | FOREIGN KEY (parentID) 41 | REFERENCES parentTable(parentID), 42 | FOREIGN KEY (studentID) 43 | REFERENCES studentTable(studentID) 44 | ); 45 | 46 | CREATE TABLE questionnaireTable 47 | ( 48 | questionnaireID INT NOT NULL AUTO_INCREMENT, 49 | title VARCHAR(50), 50 | questionnaireDescription VARCHAR(500), 51 | questionnaireType CHAR(1), #q for questionnaire, n for notification 52 | createTime TIMESTAMP, 53 | ownerTeacherID INT, 54 | groupID INT, 55 | PRIMARY KEY (questionnaireID), 56 | FOREIGN KEY (ownerTeacherID) 57 | REFERENCES teacherTable(teacherID), 58 | CHECK (questionnaireType='Q' OR questionnaireType='N') 59 | ); 60 | 61 | CREATE TABLE itemTable 62 | ( 63 | questionID INT NOT NULL AUTO_INCREMENT, 64 | questionnaireID INT NOT NULL , 65 | questionType CHAR(1), #s for single, m for mutiple 66 | questionDescription VARCHAR(500), 67 | PRIMARY KEY (questionID,questionnaireID), 68 | FOREIGN KEY (questionnaireID) 69 | REFERENCES questionnaireTable(questionnaireID), 70 | CHECK (questionType = 'S' or questionType='M') 71 | ); 72 | 73 | CREATE TABLE optionTable 74 | ( 75 | optionID INT NOT NULL AUTO_INCREMENT, 76 | questionID INT, 77 | questionnaireID INT, 78 | optionDescription VARCHAR(100), 79 | PRIMARY KEY (optionID, questionID, questionnaireID), 80 | FOREIGN KEY (questionID) 81 | REFERENCES itemTable(questionID), 82 | FOREIGN KEY (questionnaireID) 83 | REFERENCES questionnaireTable(questionnaireID) 84 | ); 85 | 86 | CREATE TABLE answerTable 87 | ( 88 | questionnaireID INT, 89 | questionID INT, 90 | optionID INT, 91 | parentID INT, 92 | selected BOOLEAN, 93 | updateTime TIMESTAMP, 94 | PRIMARY KEY (questionnaireID, questionID, optionID, parentID), 95 | FOREIGN KEY (questionnaireID) 96 | REFERENCES questionnaireTable(questionnaireID), 97 | FOREIGN KEY (questionID) 98 | REFERENCES itemTable(questionID), 99 | FOREIGN KEY (optionID) 100 | REFERENCES optionTable(optionID), 101 | FOREIGN KEY (parentID) 102 | REFERENCES parentTable(parentID) 103 | ); 104 | 105 | CREATE TABLE accessTable 106 | ( 107 | accessToken VARCHAR(50), 108 | time TIMESTAMP, 109 | PRIMARY KEY (accessToken) 110 | ); -------------------------------------------------------------------------------- /dataBaseApi/possiblequestion: -------------------------------------------------------------------------------- 1 | 1.在question表和option表中,如果其ID采用auto increment方式生成,那么在数据库中每个问题、选项的ID都是唯一的。 2 | 实际上每个问卷中的questionID可以从1开始,不同问卷中可以相同。 3 | 如果达到一定数据量,questionID和optionID可能超出int值? 4 | 5 | 3.(有时间)加入预处理语句 6 | 7 | 4. 考勤时不考虑是否select,只看answerTable中是否有某位家长的数据 8 | 9 | 5. 多数据测试 10 | 11 | 6. 把通知作为只有1个题目、1个选项(确认)的问卷 12 | 13 | 7.student表,questionnaire表存在冗余(ownerTeacherID) 14 | 15 | 8.每个学生只能属于一个group,只有一个老师(目前) 16 | 17 | 9.通知的标题为questionnaireTitle(“通知”),questionnaireDescription为空。只有一个问题,其标题为通知标题,description为通知具体内容,只有一个选项确认。 -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 欢迎使用微信意见统计系统 6 | 7 | 8 | 欢迎使用微信意见统计系统 9 | 10 | -------------------------------------------------------------------------------- /onlyForLocalHost/README.md: -------------------------------------------------------------------------------- 1 | 警告:此文件夹的内容已经废弃。 -------------------------------------------------------------------------------- /onlyForLocalHost/connectFunctions.php: -------------------------------------------------------------------------------- 1 | connect_error){ 18 | die("Connection failed: " . $conn->connect_error); 19 | } 20 | return $conn; 21 | } 22 | 23 | function close_database_connection($conn){ 24 | $conn->close(); 25 | } 26 | 27 | 28 | 29 | ?> -------------------------------------------------------------------------------- /onlyForLocalHost/initializeDataBase.php: -------------------------------------------------------------------------------- 1 | '; 11 | echo 'If there is any previous data, they will be removed.
'; 12 | 13 | $conn = create_and_open_database_connection(); 14 | 15 | echo 'Now creating database typemoon01
'; 16 | $sqlIsExist=""; //查询该数据库是否存在的语句 17 | $sql="CREATE DATABASE " + DATABASE_NAME; 18 | if($conn->query($sql) === true){ 19 | echo "database created successfully"; 20 | }else{ 21 | die("Error creating database" . $conn->error); 22 | } 23 | echo 'Now creating necessary tables
'; 24 | // TODO 需要一张ER图 25 | $sql="CREATE TABLE studentInfo (studentID VARCHAR(15) PRIMARY KEY, studentName CHAR(20))"; 26 | if($conn->query($sql) === true){ 27 | echo "table created successfully"; 28 | }else{ 29 | die("Error creating table" . $conn->error); 30 | } 31 | 32 | $sql="INSERT INTO studentInfo VALUES('studentExp01','student01')"; 33 | if($conn->query($sql) === true){ 34 | echo "table created successfully"; 35 | }else{ 36 | die("Error creating table" . $conn->error); 37 | } 38 | 39 | $sql="CREATE TABLE studentInfo (studentID CHAR(15) PRIMARY KEY, studentName CHAR(10))"; 40 | if($conn->query($sql) === true){ 41 | echo "table created successfully"; 42 | }else{ 43 | die("Error creating table" . $conn->error); 44 | } 45 | 46 | $sql= "CREATE TABLE parentInfo (parentID int PRIMARY KEY AUTO_INCREMENT, parentName VARCHAR(20), parentWxOpenID VARCHAR(30), parentPassword VARCHAR(16))"; 47 | if($conn->query($sql) === true){ 48 | echo "table created successfully"; 49 | }else{ 50 | die("Error creating table" . $conn->error); 51 | } 52 | $sql = "INSERT INTO parentInfo VALUES(1,'parenteg1','parentwxid01','pass01');"; 53 | if($conn->query($sql) === true){ 54 | echo "table created successfully"; 55 | }else{ 56 | die("Error creating table" . $conn->error); 57 | } 58 | //$sql = "CREATE TABLE parent"s 59 | 60 | 61 | close_database_connection($conn); // 数据库使用完毕后记得关闭连接。 62 | 63 | ?> -------------------------------------------------------------------------------- /pages/README.md: -------------------------------------------------------------------------------- 1 | # pages目录说明 2 | 3 | * ./files目录用于存储老师上传的学生信息文件。每个老师上传文件的文件名就是这个老师的openid -------------------------------------------------------------------------------- /pages/error/invalid_url.php: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 您所访问的链接格式有误,请与发送者核对链接是否正确。 15 | -------------------------------------------------------------------------------- /pages/files/StudentRegTest.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/pages/files/StudentRegTest.csv -------------------------------------------------------------------------------- /pages/first_time_for_students.php: -------------------------------------------------------------------------------- 1 | 5 | // 6 | // 测试链接: 7 | //http://121.201.14.58/pages/first_time_for_students.php?teacherOpenID=oG_07xPR4JEibyjiSzTjfphx6EWM&code= 8 | header("Content-type: text/html; charset=utf-8"); 9 | ?> 10 | 11 | 18 | 19 | 20 | 21 | 家长注册页 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 |
34 |

35 | 欢迎家长注册! 36 |

37 |
38 |
39 | 40 |
41 | 43 |
44 |
45 |
46 | 47 |
48 | 50 |
51 |
52 |
53 | 54 |
55 | 57 |
58 |
59 | 60 | 67 | 68 | 75 |
76 | 77 |
78 | 80 |
81 |
82 | 83 |
84 | 85 |
86 | 88 | 请包括至少字母和数字 89 |
90 |
91 |
92 | 93 |
94 | 96 |
97 |
98 | 99 |
100 |
101 | 102 |
103 |
104 |
105 | 106 | 107 | -------------------------------------------------------------------------------- /pages/first_time_for_teacher.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 15 | 16 | 17 | 18 | 老师注册页 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 |
29 |

30 | 请老师完成注册 31 |

32 | 33 |

注意:此页面仅供老师使用,家长只能使用老师的邀请链接注册。

34 |
35 |
36 | 37 |
38 | 40 |
41 |
42 | 43 | 50 |
51 | 52 |
53 | 55 |
56 |
57 | 58 |
59 | 60 |
61 | 63 | 请包括至少字母和数字 64 |
65 |
66 |
67 | 68 |
69 | 71 |
72 |
73 | 74 |
75 |
76 | 77 |
78 |
79 |
80 | 81 | 82 | -------------------------------------------------------------------------------- /pages/group_create.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 创建通知群 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 65 | 66 | 67 | 68 | 80 |

81 | 通知群创建 82 |

83 |
84 |
85 | 86 |
87 | 88 |
89 |
90 |
91 | 92 |
93 | 94 |
95 |
96 | 97 |
98 | 99 |
100 | 101 |
102 | csv文件上传说明 103 |
104 | 105 |
106 |
107 | 108 |
109 |
110 |
111 | 112 | 113 | -------------------------------------------------------------------------------- /pages/group_join.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 群内容管理 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 65 | 66 |


67 | 68 | 74 | 75 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /pages/group_manage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 群管理 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 65 | 66 |


67 | 68 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /pages/group_search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 群查找 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 65 | 66 |


67 | 77 | 78 | 84 | 85 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /pages/group_show.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 65 | 66 | 78 |


79 | 80 |
81 |
82 |

群名

83 |

简要介绍

84 |
85 |
86 | 92 | 98 | 104 | 105 | -------------------------------------------------------------------------------- /pages/guideline.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | template 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /pages/help/group_create_help_csv.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 群管理 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |


16 | 在excel中编辑,最后保存成csv格式 17 |
第一列: 18 |
第二列: 19 |
第三列: 20 |
不好意思,还没写完呢~~ 21 |

22 | 23 | 24 | -------------------------------------------------------------------------------- /pages/help/try.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 群管理 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |


16 | 17 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /pages/homepage.php: -------------------------------------------------------------------------------- 1 | 5 | '; //重定向 12 | exit(); 13 | } 14 | ?> 15 | 29 | 30 | 31 | 32 | 33 | 首页 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |

44 | 历史通知 45 |

46 | 47 | 52 | 53 | 54 | 60 | 61 | 65 | 66 | 67 | 115 | -------------------------------------------------------------------------------- /pages/include_js_set_questionnaire.php: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /pages/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 群管理 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 64 | 65 |


66 | 67 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /pages/invalid_url.php: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 您所访问的链接格式有误,请与发送者核对链接是否正确。 15 | -------------------------------------------------------------------------------- /pages/js/README.md: -------------------------------------------------------------------------------- 1 | 此文件夹用于存放自己编写的javaScript -------------------------------------------------------------------------------- /pages/noticeWithOptions_create.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 14 | 15 | 16 | 创建通知 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 76 | 77 | 89 |

90 | 新通知创建 91 |

92 |
93 | 100 |
101 | 102 |
103 | 105 |
106 |
107 | 108 | 115 |
116 | 117 |
118 | 120 |
121 |
122 | 123 |
124 |
125 | 126 |
127 |
128 |
129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /pages/notice_create.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 创建通知 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 41 |

42 | 新通知创建 43 |

44 |
45 | 52 |
53 | 54 |
55 | 57 |
58 |
59 | 60 | 67 |
68 | 69 |
70 | 72 |
73 |
74 | 75 |
76 |
77 | 78 |
79 |
80 |
81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /pages/notice_draft.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 | 20 |
21 |
22 |
23 |
24 |

更多功能尚在开发中,您可以资助开发者加速开发进程

25 |
26 | 27 | 28 | 29 |
30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /pages/notice_history.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 历史通知 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 64 | 65 | 66 |

67 | 历史通知 68 |

69 | 70 | 71 | 72 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /pages/notice_read_status.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 通知阅读情况 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |

19 | 学生状态展示 20 |

21 | 22 |
23 | 29 | 30 |
31 | 32 |
33 |

本学期第二次家长会时间通知

34 |
35 |
36 |
37 | 38 |
39 |

我们周六晚来开家长会,请携带小本本来

40 |
41 |
42 | 43 |
44 | ns; 53 | //echo $unnoticed_students[1]."
"; 54 | 55 | echo ""; 66 | 67 | ?> 68 | 69 | 70 | 71 | 72 | 85 | -------------------------------------------------------------------------------- /pages/notice_show.php: -------------------------------------------------------------------------------- 1 | 5 | 15 | 16 | 17 | 18 | 通知 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 40 |

41 | 通知展示 42 |

43 | 44 |
45 | 46 | 53 | 54 | 55 | 62 | 63 | 69 | 70 |
71 | 72 |
73 |

本学期第二次家长会时间通知

74 |
75 |
76 |
77 | 78 |
79 |

我们周六晚来开家长会,请携带小本本来

80 |
81 |
82 |
83 | 84 |
85 | 86 |
87 | 88 | 89 | 99 | -------------------------------------------------------------------------------- /pages/notice_show_redirect.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 61 | 62 | 63 | 64 | 65 | 通知 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 |
75 | 76 | 83 | 84 | 85 | 92 | 93 | 94 | 100 |
101 |
102 |
103 |
104 | 105 |
106 |

本学期第二次家长会时间通知

107 |
108 |
109 |
110 | 111 |
112 |

我们周六晚来开家长会,请携带小本本来

113 |
114 |
115 |
116 | 117 |
118 |
119 |

请点击右上角按钮,将本页面分享至需要通知的微信群。

120 |
121 |
122 | 123 | 124 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /pages/notice_show_teacher.php: -------------------------------------------------------------------------------- 1 | 5 | 14 | 15 | 16 | 17 | 显示通知 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 77 | 78 | 90 |

91 | 通知展示 92 |

93 | 94 |
95 | 96 | 103 | 104 | 110 | 111 |
112 | 113 |
114 |

本学期第二次家长会时间通知

115 |
116 |
117 |
118 | 119 |
120 |

我们周六晚来开家长会,请携带小本本来

121 |
122 |
123 |
124 | 125 |
126 | 127 |
128 | 129 | 130 | 146 | -------------------------------------------------------------------------------- /pages/pageUnderConstruction.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 正在开发中 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |
19 | 24 |
25 |
26 |
27 |
28 |

您可以资助开发者以加速开发进程

29 |
30 | 31 | 32 | 33 |
34 |
35 | 36 | 37 | -------------------------------------------------------------------------------- /pages/pagesbackup/first_time_for_students.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 注册页 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 64 | 65 |

66 | 老师初始化 67 |

68 |
69 |
70 | 71 |
72 | 74 |
75 |
76 |
77 | 78 |
79 | 81 |
82 |
83 |
84 | 85 |
86 | 88 |
89 |
90 | 91 |
92 | 93 |
94 | 96 | 请包括至少字母和数字 97 |
98 |
99 |
100 | 101 |
102 | 104 |
105 |
106 | 107 |
108 |
109 | 110 |
111 |
112 |
113 | 114 | 115 | -------------------------------------------------------------------------------- /pages/parent_access_denied.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |
18 | 23 |
24 |
25 |
26 |
27 |

更多功能尚在开发中,您可以资助开发者加速开发进程

28 |
29 | 30 | 31 | 32 |
33 |
34 | 35 | 36 | -------------------------------------------------------------------------------- /pages/parent_not_registered.php: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 用户未注册 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 |
27 |

用户未注册

28 |

对不起,您在此微信群中的身份还未在 微通 中注册,请向分享问卷的老师请求“邀请家长”页面,该页面在导航栏菜单中。

29 |
30 |
31 |
32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /pages/pic/chen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/pages/pic/chen.jpg -------------------------------------------------------------------------------- /pages/pic/sun.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/pages/pic/sun.jpg -------------------------------------------------------------------------------- /pages/pic/wen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/pages/pic/wen.jpg -------------------------------------------------------------------------------- /pages/question_draft.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 |
16 | 21 |
22 |
23 |
24 |
25 |

更多功能尚在开发中,您可以资助开发者加速开发进程

26 |
27 | 28 | 29 | 30 |
31 |
32 | 33 | 34 | -------------------------------------------------------------------------------- /pages/question_history.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 历史问卷 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 64 | 65 |


66 | 67 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /pages/questionnaire_create.php: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 创建问卷 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |


26 |
27 | 28 | 34 | 35 | 42 |
43 | 44 |
45 | 46 |
47 |
48 |
49 | 50 |
51 | 52 |
53 |
54 | 55 |
56 | 57 |
58 | 59 | 60 | 61 | 62 | 63 |
64 |
65 |
66 |
67 | 68 |
69 |
70 |
71 | 72 | 73 | -------------------------------------------------------------------------------- /pages/questionnaire_show.php: -------------------------------------------------------------------------------- 1 | 5 | 8 | 28 | 29 | 30 | 31 | 问卷 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |


41 |
42 | 48 | 49 | 56 |
57 | 58 |
59 |

正在加载问卷名

60 |
61 |
62 |
63 | 64 |
65 |

正在加载问卷描述

66 |
67 |
68 | 69 |
70 | 71 |
72 |

您可以来参加家长会的时间

73 |
74 |
75 |
76 |
77 |
78 | 79 | 80 |
81 |
82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /pages/questionnaire_show_in_form_part.php: -------------------------------------------------------------------------------- 1 | 5 | 8 | 33 | 34 | 35 | 36 | 问卷 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |


46 |
47 | 53 | 54 | 61 | 62 | 69 | 70 | 77 |
78 | 79 |
80 |

正在加载问卷名

81 |
82 |
83 |
84 | 85 |
86 |

正在加载问卷描述

87 |
88 |
89 | 90 |
91 | 92 |
93 |

正在加载题目描述

94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 | 102 |
103 |
104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /pages/redirectParentFromOAuth.php: -------------------------------------------------------------------------------- 1 | 5 | "; 16 | 17 | $parentOpenID=getOpenId($_REQUEST['code']); 18 | $parentRegUrl="http://121.201.14.58/pages/first_time_for_students.php?teacherOpenID=" . $_REQUEST['teacherOpenID'] . "&parentOpenID=" . $parentOpenID; 19 | 20 | echo "请点击下列链接:" . $parentRegUrl; 21 | ?> -------------------------------------------------------------------------------- /pages/reference/ZeroClipboard.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/pages/reference/ZeroClipboard.swf -------------------------------------------------------------------------------- /pages/reference/cookie.js: -------------------------------------------------------------------------------- 1 | function setCookie(cname,cvalue,exdays) 2 | { 3 | var d = new Date(); 4 | d.setTime(d.getTime()+(exdays*24*60*60*1000)); 5 | var expires = "expires="+d.toGMTString(); 6 | document.cookie = cname + "=" + cvalue + "; " + expires; 7 | } 8 | 9 | function getCookie(cname) 10 | { 11 | var name = cname + "="; 12 | var ca = document.cookie.split(';'); 13 | for(var i=0; i 2 | 3 | 4 | Zero Clipboard Test 5 | 6 | 7 | 26 | 27 | 28 | 29 | 复制 30 | 31 | 32 | -------------------------------------------------------------------------------- /pages/share/README.md: -------------------------------------------------------------------------------- 1 | 此文件夹下存放各个页面共享的元素,如header,banner,navigation bar等。 2 | 问题:navigationbar的相对链接可能会出错 -------------------------------------------------------------------------------- /pages/share/navigation.php: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /pages/share/navigation_backup.php: -------------------------------------------------------------------------------- 1 | 16 | 17 | -------------------------------------------------------------------------------- /pages/share/navigation_safe.php: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /pages/showCookie.html: -------------------------------------------------------------------------------- 1 | nowShowCookie
2 | 17 | -------------------------------------------------------------------------------- /pages/testNavigation.php: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 首页 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /pages/try.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 群管理 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 64 | 65 |


66 | 67 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /pages/try_upload.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | template 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 63 | 64 |


65 | 66 |
67 | 68 | 69 |
70 | 71 |
72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /pages/upload_file.php: -------------------------------------------------------------------------------- 1 | "; 3 | echo "description".$_POST["group_desc"]. "
"; 4 | if ( ($_FILES["file"]["size"] < 2000000)) 5 | { 6 | if ($_FILES["file"]["error"] > 0) 7 | { 8 | echo "Return Code: " . $_FILES["file"]["error"] . "
"; 9 | } 10 | else 11 | { 12 | echo "Upload: " . $_FILES["file"]["name"] . "
"; 13 | echo "Type: " . $_FILES["file"]["type"] . "
"; 14 | echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb
"; 15 | echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
"; 16 | 17 | if (file_exists("upload/" . $_FILES["file"]["name"])) 18 | { 19 | echo $_FILES["file"]["name"] . " already exists. "; 20 | } 21 | else 22 | { 23 | move_uploaded_file($_FILES["file"]["tmp_name"], 24 | "./upload/" . $_FILES["file"]["name"]); 25 | echo "Stored in: " . "./upload/" . $_FILES["file"]["name"]; 26 | } 27 | } 28 | } 29 | else 30 | { 31 | echo "Invalid file"; 32 | } 33 | 34 | -------------------------------------------------------------------------------- /pages/upload_question_answers.php: -------------------------------------------------------------------------------- 1 | ";*/ 3 | foreach ($_GET["ANSWER"] as $value) 4 | {echo $value,"
"; 5 | } -------------------------------------------------------------------------------- /pages/welcome.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 欢迎 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 | 20 |
21 |
22 |
23 |
24 |

我是用户须知,但现在还没有







25 |
26 |
27 |
28 |
29 | 30 |
31 |
32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /parentReg.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 70 | 76 | 77 | 78 | 79 | 问卷创建成功 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
90 |
91 |
92 |

通知创建成功

93 | 94 | 95 |
96 | 97 | 98 | 99 | 100 | ";print_r($userRegNewUrlOAuth) ;?> 101 | 102 | 103 | 104 | 105 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /reg/chooseOption.php: -------------------------------------------------------------------------------- 1 | $value ){ 12 | echo "key: " . $key; 13 | echo " value: " . $value; 14 | }*/ 15 | 16 | $questionnaireID = $_REQUEST["questionnaireID"]; 17 | $parentOpenID = $_REQUEST["parentOpenID"]; 18 | $optionID = $_REQUEST["optionID"]; 19 | $questionID = $_REQUEST["questionID"]; 20 | $parentID = getParentID($parentOpenID); 21 | if ($parentID == false) 22 | echo "Wrong Parent OpenID
"; 23 | else 24 | insertAnswer($optionID, $questionID, $questionnaireID, $parentID, true); -------------------------------------------------------------------------------- /reg/confirmNotice.php: -------------------------------------------------------------------------------- 1 | 5 | 31 | 32 | 33 | 34 | 35 | 通知确认 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 |
48 |

49 | 50 | $value ){ 61 | echo "key: " . $key; 62 | echo " value: " . $value; 63 | }*/ 64 | 65 | $questionnaireID = $_REQUEST["questionnaireID"]; 66 | // $parentOpenID = $_REQUEST["parentOpenID"]; 67 | $parentID = getParentID($parentOpenID); 68 | 69 | 70 | if ($parentID == false) 71 | { 72 | echo "Wrong Parent OpenID
"; 73 | } 74 | else { 75 | //$optionID = $_REQUEST["optionID"]; 76 | //$questionID = $_REQUEST["questionID"]; 77 | $qList = getQuestion($questionnaireID); 78 | //var_dump($qList); 79 | //var_dump($questionnaireID); 80 | //$qList = getQuestion(3); 81 | if ($qList == false) { 82 | echo "确认失败
请重新确认"; 83 | } else { 84 | $question = $qList->fetch_assoc(); 85 | //echo "
$question
"; 86 | $questionID = $question["questionID"]; 87 | //echo "
$questionID
"; 88 | $option = getOption($questionnaireID, $questionID); 89 | //$option = getOption(3, 4); 90 | $optionID = $option->fetch_assoc()["optionID"]; 91 | //echo "
$optionID
"; 92 | $check = checkNoticeAnswer($parentID,$questionnaireID); 93 | //$check = checkNoticeAnswer(17,1); 94 | if ($check==true) 95 | echo "已经确认
"; 96 | else { 97 | $judge = insertAnswer($optionID, $questionID, $questionnaireID, $parentID, true); 98 | if ($judge == false) { 99 | echo "确认失败
请重新确认"; 100 | } else { 101 | echo "确认成功"; 102 | } 103 | 104 | } 105 | } 106 | } 107 | ?> 108 | 109 |

110 |
111 |
112 |
113 | 114 |
115 | 116 | 117 | -------------------------------------------------------------------------------- /reg/newQuestionnaire.php: -------------------------------------------------------------------------------- 1 | 5 | 72 | 78 | 79 | 80 | 81 | 问卷创建成功 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 |
92 |
93 |
94 |

问卷创建成功,正在跳转...

95 |
96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /reg/noticeStats.php: -------------------------------------------------------------------------------- 1 | $value ){ 16 | echo "key: " . $key; 17 | echo " value: " . $value; 18 | }*/ 19 | 20 | //$questionnaireID = $_REQUEST["questionnaireID"]; 21 | 22 | $selected = getPeopleSelected($questionnaireID); 23 | $selectedNum = 0; 24 | $notSelected = getPeopleNotSelected($questionnaireID); 25 | $notSelectedNum = 0; 26 | $s = array(); 27 | $ns = array(); 28 | if ($selected->num_rows > 0) { 29 | while ($row = $selected->fetch_assoc()) { 30 | //echo "studentName: {$row["studentName"]}
"; 31 | array_push($s, $row["studentName"]); 32 | $selectedNum++; 33 | } 34 | //echo "{$selectedNum} students have read this notice.
"; 35 | } else { 36 | //echo "No student has read this notice.
"; 37 | } 38 | 39 | if ($notSelected->num_rows > 0) { 40 | while ($row = $notSelected->fetch_assoc()) { 41 | //echo "studentName: {$row["studentName"]}
" ; 42 | array_push($ns, $row["studentName"]); 43 | $notSelectedNum++; 44 | } 45 | //echo "{$notSelectedNum} students haven't read this notice.
"; 46 | } else { 47 | //echo "No student hasn't read this questionnaire
."; 48 | } 49 | 50 | $arr = array('s' => $s, 'ns' => $ns); 51 | $jsonencode = json_encode($arr); 52 | //echo "$jsonencode"; 53 | return $jsonencode; 54 | } -------------------------------------------------------------------------------- /reg/parentReg.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 通知确认 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 |
22 |
23 |

24 | 25 | 26 | $value ){ 38 | echo "key: " . $key; 39 | echo " value: " . $value; 40 | }*/ 41 | $parentName = $_REQUEST["parentName"]; 42 | $parentOpenID = $_REQUEST["parentOpenID"]; 43 | $studentID = $_REQUEST["studentID"]; 44 | if ($parentName==""){ 45 | echo "ParentName can't be empty!
"; 46 | } 47 | elseif ($parentOpenID==""){ 48 | echo "ParentOpenID can't be empty!
"; 49 | } 50 | else { 51 | if (checkParent($parentOpenID)==true) 52 | //echo "注册失败,用户已注册
"; 53 | echo "用户已注册
"; 54 | else { 55 | $rtnVal = insertParent($parentName, $parentOpenID, $studentID, "null", "null"); 56 | //$rtnVal = insertParent('p','p1openID','123456','pppppp','000001'); 57 | if ($rtnVal == true) { 58 | echo "注册成功
"; 59 | } else { 60 | echo "注册失败
"; 61 | } 62 | } 63 | } 64 | ?> 65 | 66 |

67 |
68 |
69 |
70 | 71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /reg/parentRegSharePage.php: -------------------------------------------------------------------------------- 1 | 21 | 22 | 23 | 24 | 25 | 家长注册 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 |
36 |
37 |

欢迎家长注册

38 |

请老师将此页面分享至微信群以供家长注册。

39 |
40 | 41 | 42 | 43 |
44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /reg/parentRegWithOutOAuth.php: -------------------------------------------------------------------------------- 1 | 5 | 75 | 86 | -------------------------------------------------------------------------------- /reg/questionnaireStats.php: -------------------------------------------------------------------------------- 1 | $value ){ 18 | echo "key: " . $key; 19 | echo " value: " . $value; 20 | }*/ 21 | 22 | //$questionnaireID = $_REQUEST["questionnaireID"]; 23 | 24 | $questionnaire = getQuestionnaire($questionnaireID)->fetch_assoc(); 25 | 26 | $optionArr = array(); 27 | $question = getQuestion($questionnaireID)->fetch_assoc(); 28 | $questionID = $question["questionID"]; 29 | $options = getOption($questionnaireID,$questionID); 30 | $optionNum = 0; 31 | if($options->num_rows>0) { 32 | while ($row = $options->fetch_assoc()) { 33 | //echo "studentName: {$row["studentName"]}
"; 34 | $optionID=$row["optionID"]; 35 | $optionNum++; 36 | $peopleSelected = getPeopleSelectedOption($questionnaireID, $optionID); 37 | $students = array(); 38 | $studentsNum = 0; 39 | if($peopleSelected->num_rows>0) { 40 | while($studentRow = $peopleSelected->fetch_assoc()) { 41 | array_push($students,$studentRow["studentName"]); 42 | $studentsNum++; 43 | } 44 | } 45 | array_push($optionArr, array("optionID"=>$optionID, 46 | 'optionDescription'=>$row["optionDescription"], 47 | 'selectedPeopleNum'=>$studentsNum,'selectedPeople'=>$students)); 48 | } 49 | } 50 | 51 | $notSelected = getPeopleNotSelected($questionnaireID); 52 | $notSelectedNum = 0; 53 | $ns = array(); 54 | 55 | if ($notSelected->num_rows > 0) { 56 | while ($row = $notSelected->fetch_assoc()) { 57 | //echo "studentName: {$row["studentName"]}
" ; 58 | array_push($ns, $row["studentName"]); 59 | $notSelectedNum++; 60 | } 61 | //echo "{$notSelectedNum} students haven't read this notice.
"; 62 | } else { 63 | //echo "No student hasn't read this questionnaire
."; 64 | } 65 | 66 | $arr = array('questionnaireID' => $questionnaireID, 67 | 'questionnaireTitle' => $questionnaire["title"], 68 | 'questioinnaireDescription' => $questionnaire["questionnaireDescription"], 69 | 'questionID' => $questionID, 70 | 'questionDescription' => $question["questionDescription"], 71 | 'optionNum'=>$optionNum, 'optionArr'=>$optionArr, 72 | 'notSelected'=>array("notSelectedNum"=>$notSelectedNum, "students"=>$ns)); 73 | $jsonencode = json_encode($arr); 74 | //echo "$jsonencode"; 75 | return $jsonencode; 76 | } 77 | -------------------------------------------------------------------------------- /reg/readme: -------------------------------------------------------------------------------- 1 | 1. 每个家长只能注册一次,可能存在后续问题 2 | 3 | 2. 老师和家长注册时,依次检查name和openID是否为空。如果name为空,直接报错,不检测openID。 4 | 5 | 3. 每个学生只能注册一次(只属于一个班级) 6 | 7 | 4. 对csv文件进行学生注册检查,正确的加入数据库,不正确的不加入,返回成功添加的学生数、已注册的学生数、添加失败的学生数,但无法返回哪几个学生注册失败 8 | 没有返回已注册学生的信息(可能已被其他老师注册,需要反馈?) 9 | 不用csv了,改为由家长注册学生 -------------------------------------------------------------------------------- /reg/showAllQuestionnaire.php: -------------------------------------------------------------------------------- 1 | 5 | $value ){ 18 | echo "key: " . $key; 19 | echo " value: " . $value; 20 | }*/ 21 | //$teacherID = $_REQUEST["teacherID"]; 22 | $teacherID=getTeacherID($teacherOpenID); 23 | $questionnaireList = getQuestionnaireByTeacher($teacherID); 24 | $arrQ = array(); 25 | $arrN = array(); 26 | $arr = array('Questionnaire'=>$arrQ,'Notice'=>$arrN); 27 | if ($questionnaireList == false) 28 | ; 29 | //echo "No Questionnaire or Notice.
"; 30 | else { 31 | if ($questionnaireList->num_rows > 0) { 32 | while ($row = $questionnaireList->fetch_assoc()) { 33 | if($row["questionnaireType"]=="Q") { 34 | $tmp = array('title' => $row["title"], 35 | 'questionnaireID' => $row["questionnaireID"]); 36 | array_push($arrQ, $tmp); 37 | } 38 | elseif($row["questionnaireType"]=="N") { 39 | $tmp = array('title' => $row["title"], 40 | 'questionnaireID' => $row["questionnaireID"]); 41 | array_push($arrN, $tmp); 42 | } 43 | } 44 | } 45 | } 46 | $arr["Questionnaire"]=$arrQ; 47 | $arr["Notice"]=$arrN; 48 | $jsonencode = json_encode($arr); 49 | //echo "$jsonencode"; 50 | return $jsonencode; 51 | } 52 | ?> -------------------------------------------------------------------------------- /reg/showNotice.php: -------------------------------------------------------------------------------- 1 | 5 | $value ){ 17 | echo "key: " . $key; 18 | echo " value: " . $value; 19 | }*/ 20 | 21 | // $questionnaireID = $_REQUEST["questionnaireID"]; 22 | $questionnaireR = getQuestionnaire($questionnaireID); 23 | if ($questionnaireR == false) 24 | echo "Wrong QuestionnaireID"; 25 | else { 26 | $questionnaire = $questionnaireR->fetch_assoc(); 27 | $questionnaireArr = array('title' => $questionnaire["title"], 28 | 'questionnaireDescription' => $questionnaire["questionnaireDescription"], 29 | 'type' => $questionnaire["questionnaireType"], 30 | 'question' => ""); 31 | $allQuestionArr = array(); 32 | $question = getQuestion($questionnaireID); 33 | if ($question == false) 34 | echo "No question in this questionnaire"; 35 | else { 36 | if ($question->num_rows > 0) { 37 | while ($row = $question->fetch_assoc()) { 38 | //echo "studentName: {$row["studentName"]}
" ; 39 | $questionArr = array('questionDescription' => "", 40 | 'option' => ''); 41 | $questionArr["questionDescription"] = $row["questionDescription"]; 42 | $option = getOption($questionnaireID, $row["questionID"]); 43 | if ($option == false) { 44 | } else { 45 | $optionArr = array(); 46 | while ($optionRow = $option->fetch_assoc()) { 47 | array_push($optionArr, array('optionID'=>$optionRow["optionID"], 48 | 'description'=>$optionRow["optionDescription"])); 49 | } 50 | $questionArr["option"] = $optionArr; 51 | } 52 | array_push($allQuestionArr, $questionArr); 53 | } 54 | } 55 | } 56 | $questionnaireArr["question"] = $allQuestionArr; 57 | } 58 | $jsonencode = json_encode($questionnaireArr); 59 | //echo "$jsonencode"; 60 | return $jsonencode; 61 | } 62 | -------------------------------------------------------------------------------- /reg/showQuestionnaire.php: -------------------------------------------------------------------------------- 1 | 5 | $value ){ 17 | echo "key: " . $key; 18 | echo " value: " . $value; 19 | }*/ 20 | 21 | // $questionnaireID = $_REQUEST["questionnaireID"]; 22 | $questionnaireR = getQuestionnaire($questionnaireID); 23 | if ($questionnaireR == false) { 24 | echo "Wrong QuestionnaireID"; 25 | return "wrong!"; 26 | } 27 | else { 28 | $questionnaire = $questionnaireR->fetch_assoc(); 29 | $questionnaireArr = array('questionnaireTitle' => $questionnaire["title"], 30 | 'questionnaireDescription' => $questionnaire["questionnaireDescription"], 31 | 'type' => $questionnaire["questionnaireType"], 32 | 'question' => ""); 33 | $allQuestionArr = array(); 34 | $question = getQuestion($questionnaireID); 35 | if ($question == false) 36 | echo "No question in this questionnaire"; 37 | else { 38 | if ($question->num_rows > 0) { 39 | while ($row = $question->fetch_assoc()) { 40 | //echo "studentName: {$row["studentName"]}
" ; 41 | $questionArr = array('questionDescription' => "", 42 | 'questionID' => $row["questionID"], 'option' => ''); 43 | $questionArr["questionDescription"] = $row["questionDescription"]; 44 | $option = getOption($questionnaireID, $row["questionID"]); 45 | if ($option == false) { 46 | } else { 47 | $optionArr = array(); 48 | while ($optionRow = $option->fetch_assoc()) { 49 | array_push($optionArr, array('optionID'=>$optionRow["optionID"], 50 | 'description'=>$optionRow["optionDescription"])); 51 | } 52 | $questionArr["option"] = $optionArr; 53 | } 54 | array_push($allQuestionArr, $questionArr); 55 | } 56 | } 57 | } 58 | $questionnaireArr["question"] = $allQuestionArr; 59 | } 60 | $jsonencode = json_encode($questionnaireArr); 61 | //echo "$jsonencode"; 62 | return $jsonencode; 63 | } 64 | -------------------------------------------------------------------------------- /reg/showQuestionnaireSharePage.php: -------------------------------------------------------------------------------- 1 | 25 | 26 | 27 | 28 | 29 | 问卷 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
40 |
41 |
42 |

欢迎回答问题

43 |

请老师将此页面分享至微信群以供家长回答。

44 |
45 | 46 | 47 | 48 |
49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /reg/studentReg.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | "; 43 | $addFailed++; 44 | continue; 45 | } 46 | elseif ($studentID==""){ 47 | echo "StudentID can't be empty!
"; 48 | $addFailed++; 49 | continue; 50 | } 51 | else { 52 | if (checkStudent($studentID)==true) 53 | $alreadyExists++; 54 | else { 55 | //$rtnVal = insertStudent($studentName, $studentID, "null", "teacherID"); //group暂时设置为null 56 | $rtnVal = insertStudent($studentName, $studentID, "null", $teacherID); //group暂时设置为null 57 | if ($rtnVal == true) { 58 | $newStudent++; 59 | } else { 60 | $addFailed++; 61 | } 62 | } 63 | } 64 | } 65 | //fclose($file); 66 | 67 | //$classNum = $_POST["classNum"]; 68 | 69 | echo "共提交{$total}名学生信息
"; 70 | echo "{$alreadyExists}名学生已注册
"; 71 | echo "{$newStudent}名学生注册成功
"; 72 | echo "{$addFailed}名学生注册失败
"; 73 | -------------------------------------------------------------------------------- /reg/submitQuestionnaire.php: -------------------------------------------------------------------------------- 1 | 5 | 15 | 16 | 17 | 18 | 19 | 问卷提交成功 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 |
30 |
31 |

32 | 33 | $value ){ 44 | echo "key: " . $key; 45 | echo " value: " . $value; 46 | }*/ 47 | 48 | $questionnaireID = $_REQUEST["questionnaireID"]; 49 | $questionID = $_REQUEST["questionID"]; 50 | // $optionArr = $_REQUEST["questionAnswer"]; 51 | //下面构建optionArr 52 | $optionArr=array(); 53 | if(!empty($_REQUEST['optionsCheckboxA'])){ 54 | $optionArr[]=$_REQUEST['optionsCheckboxA']; 55 | } 56 | if(!empty($_REQUEST['optionsCheckboxB'])){ 57 | $optionArr[]=$_REQUEST['optionsCheckboxB']; 58 | } 59 | if(!empty($_REQUEST['optionsCheckboxC'])){ 60 | $optionArr[]=$_REQUEST['optionsCheckboxC']; 61 | } 62 | if(!empty($_REQUEST['optionsCheckboxD'])){ 63 | $optionArr[]=$_REQUEST['optionsCheckboxD']; 64 | } 65 | 66 | $parentOpenID = $_REQUEST["parentOpenID"]; 67 | $parentID = getParentID($parentOpenID); 68 | 69 | 70 | if ($parentID == false) 71 | { 72 | echo "Wrong Parent OpenID
"; 73 | } 74 | else { 75 | //$optionID = $_REQUEST["optionID"]; 76 | //$questionID = $_REQUEST["questionID"]; 77 | //$qList = getQuestion($questionnaireID); 78 | //var_dump($qList); 79 | //var_dump($questionnaireID); 80 | //$qList = getQuestion(3); 81 | //if ($qList == false) { 82 | // echo "确认失败
请重新确认"; 83 | //} else { 84 | //$question = $qList->fetch_assoc(); 85 | //echo "
$question
"; 86 | //$questionID = $question["questionID"]; 87 | //echo "
$questionID
"; 88 | //$option = getOption($questionnaireID, $questionID); 89 | //$option = getOption(3, 4); 90 | $checkSubmit = checkNoticeAnswer($parentID,$questionnaireID); 91 | if ($checkSubmit == true) 92 | { 93 | echo "已经提交过,答案已更新"; 94 | } 95 | else 96 | { 97 | echo "提交答案"; 98 | } 99 | $optionNum = count($optionArr); 100 | for($x=0; $x<$optionNum; $x++) 101 | { 102 | $optionID = $optionArr[$x]; 103 | //echo "
$optionID
"; 104 | $check = checkQuestionnaireAnswer($parentID,$questionnaireID,$questionID,$optionID); 105 | //$check = checkNoticeAnswer(17,1); 106 | if ($check==true) 107 | {} 108 | else { 109 | $judge = insertAnswer($optionID, $questionID, $questionnaireID, $parentID, true); 110 | if ($judge == false) { 111 | echo "提交失败
请重新提交"; 112 | break; 113 | } 114 | } 115 | } 116 | //} 117 | } 118 | ?> 119 | 120 |

121 |
122 |
123 |
124 | 125 |
126 | 127 | -------------------------------------------------------------------------------- /reg/teacherReg.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 70 | 76 | 77 | 78 | 79 | 教师注册 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
90 |
91 |
92 |

注册成功,正在跳转...

93 | 94 | 95 |
96 |
97 | 98 | 99 | ";print_r($userRegNewUrlOAuth) ; ?> 100 | 101 | 102 | 103 | 104 |
105 | 106 | 107 | 108 |
109 |
110 | 111 | -------------------------------------------------------------------------------- /reg/teacherRegWithOutOAuth.php: -------------------------------------------------------------------------------- 1 | 9 |
10 |
11 | 12 |
13 |

您可以来参加家长会的时间

14 |
15 |
16 |
17 |
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /test/testJava.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 13 | -------------------------------------------------------------------------------- /test/var_dump.php: -------------------------------------------------------------------------------- 1 | = 7100) || ($GLOBALS["last_access_token"] == null) ){ 27 | $URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" . CORPID_GOLBAL . "&corpsecret=" . CORP_SECERT; 28 | $result = file_get_contents($URL); 29 | $obj = json_decode($result); 30 | $access_token = $obj->{'access_token'}; 31 | $expireTime = $obj->{'expires_in'}; 32 | $GLOBALS["last_get_access_token_time"] = time() ; 33 | $GLOBALS["last_access_token"] =$access_token; 34 | return $access_token; 35 | }else{ 36 | //echo "cached "; 37 | return $GLOBALS["last_access_token"]; 38 | } 39 | 40 | } 41 | /** 42 | * @param $code 43 | * @return string 可能返回userid(对于企业成员),也可能返回openid(对于其他用户) 44 | */ 45 | function getOpenIdOrUserID($code){ 46 | $token = getAccessToken(); 47 | $url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=". $token . "&code=" . $code; 48 | $result = file_get_contents($url); 49 | return $result; 50 | } 51 | 52 | 53 | /** 54 | * 永远只返回openID 55 | * @param $code 56 | */ 57 | function getOpenId($code){ 58 | if(empty($code)){ 59 | throw new Exception("No content in variable code"); 60 | } 61 | $result = getOpenIdOrUserID($code); 62 | $obj = json_decode($result); 63 | if(property_exists($obj,"UserId")){ // 返回了企业号中的成员 64 | $openID = getOpenIdFromUserId($obj->{'UserId'}); 65 | 66 | }elseif(property_exists($obj,"OpenId")){ //这里的openid大小写不要更改 67 | $openID = $obj->{'OpenId'}; 68 | }else{ 69 | $error = "getOpenId error"; 70 | throw new Exception($error); 71 | } 72 | 73 | return $openID; 74 | } 75 | 76 | function getOpenIdFromUserId($userId){ 77 | $access_token = getAccessToken(); 78 | $URL = "https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token=" . $access_token; 79 | $arraydata = array( 80 | "userid"=>$userId 81 | ); 82 | // var_dump($arraydata); 83 | $jsondata = json_encode( $arraydata); 84 | // echo $jsondata; 85 | $result = do_post_request($URL, $jsondata); 86 | // var_dump($result); 87 | $obj = json_decode($result); 88 | $openID = $obj->{"openid"}; 89 | return $openID; 90 | } 91 | 92 | 93 | /** 94 | * 产生微信OAuth认证所需url,该url会以get形式提供一个参数 code。通过code可以获取微信OpenID 95 | * @param string 96 | * @return string 可供微信OAuth使用的链接 97 | */ 98 | function genOAuthURL($url){ 99 | $oauthurl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . CORPID_GOLBAL . "&redirect_uri=" . urlencode($url) . "&response_type=code&scope=snsapi_base#wechat_redirect"; 100 | return $oauthurl; 101 | } 102 | 103 | 104 | function getOpenIDFromREQUEST($request){ 105 | if(!empty($request['parentOpenID'])){ 106 | return $request['parentOpenID']; 107 | }elseif(!empty($request['teacherOpenID'])){ 108 | return $request['teacherOpenID']; 109 | }elseif(!empty($request['code'])){ 110 | return getOpenId($request['code']); 111 | }else{ 112 | throw new Exception("No code or openid in request"); 113 | } 114 | } 115 | 116 | // 为了方便使用,将这两个函数拷贝过来了,以后只要引入commonfuns就好了 2016年5月10日23:18:00 117 | function http_redirect_cf($time, $goalURL){ 118 | echo ' '; //重定向 119 | } 120 | 121 | function http_OAuth_redirect_cf($time, $FULLGoalURL){ 122 | $goalURL = genOAuthURL($FULLGoalURL); 123 | http_redirect_cf($time, $goalURL); 124 | } 125 | 126 | /** 127 | * 解决老师的登陆问题, 128 | * 判断一:request中是否存在 teacherOpenID, code, OpenID, 如果不存在将带到微信授权界面,微信授权界面跳转回来后将 129 | * 统一转换为teacherOpenID 130 | * 判断二:判断该teacher是否已经注册,如果没有注册的话则跳转至权限不足页面 131 | * @param $request 132 | * @return string 133 | */ 134 | function teacher_sign_in($request, $FULLGoalURL){ 135 | if(!empty($request['teacherOpenID'])){ 136 | $teacherOpenID = $request['teacherOpenID']; 137 | }elseif(!empty($request['OpenID'])){ 138 | $teacherOpenID = $request['OpenID']; 139 | }elseif(!empty($request['code'])){ 140 | $teacherOpenID = getOpenId($request['code']); 141 | }else{ //链接中不带验证消息,重定向至验证页面 142 | http_OAuth_redirect_cf(0,$FULLGoalURL); 143 | return null; 144 | } 145 | 146 | //ONLY for debug 147 | // if($teacherOpenID==2){ 148 | // return $teacherOpenID; 149 | // } 150 | //判定是否是真正的老师 151 | if(!checkTeacher($teacherOpenID)){ // 不是老师 152 | http_redirect_cf(0, "http://" . REMOTE_SERVER_IP . "/pages/parent_access_denied.php"); 153 | return null; 154 | } 155 | return $teacherOpenID; 156 | } 157 | 158 | /** 159 | * 解决家长的登陆问题, 160 | * 判断一:request中是否存在 parentOpenID, code, OpenID, 如果不存在将带到微信授权界面,微信授权界面跳转回来后将 161 | * 统一转换为parentOpenID 162 | * 判断二:判断该parentOpenID是否已经注册,如果没有注册的话则跳转至引导注册界面 163 | * @param $request 164 | * @return string 165 | */ 166 | function parent_sign_in($request, $FULLGoalURL){ 167 | if(!empty($request['parentOpenID'])){ 168 | $parentOpenID = $request['parentOpenID']; 169 | }elseif(!empty($request['OpenID'])){ 170 | $parentOpenID = $request['OpenID']; 171 | }elseif(!empty($request['code'])){ 172 | $parentOpenID = getOpenId($request['code']); 173 | }else{ //链接中不带验证消息,重定向至验证页面 174 | http_OAuth_redirect_cf(0,$FULLGoalURL); 175 | return null; 176 | } 177 | 178 | // //ONLY for debug 179 | // if($parentOpenID==2){ 180 | // return $parentOpenID; 181 | // } 182 | //判定是否是真正的家长 183 | if(!checkParent($parentOpenID)){ // 不是家长 184 | http_redirect_cf(0, "http://" . REMOTE_SERVER_IP . "/pages/parent_not_registered.php"); 185 | return null; 186 | } 187 | return $parentOpenID; 188 | } 189 | 190 | -------------------------------------------------------------------------------- /util/do_post_request.php: -------------------------------------------------------------------------------- 1 | array( 14 | 'method' => 'POST', 15 | 'content' => $data 16 | )); 17 | if ($optional_headers !== null) { 18 | $params['http']['header'] = $optional_headers; 19 | } 20 | $ctx = stream_context_create($params); 21 | $fp = @fopen($url, 'rb', false, $ctx); 22 | if (!$fp) { 23 | throw new Exception("Problem with $url, $php_errormsg"); 24 | } 25 | $response = @stream_get_contents($fp); 26 | if ($response === false) { 27 | throw new Exception("Problem reading data from $url, $php_errormsg"); 28 | } 29 | return $response; 30 | } -------------------------------------------------------------------------------- /util/generate_hint_page.php: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | <?php echo $title ?> 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 |
33 |
34 |

35 |

36 |
37 |
38 |
39 | 40 | 41 | -------------------------------------------------------------------------------- /util/httpRedirect.php: -------------------------------------------------------------------------------- 1 | '; //重定向 16 | } 17 | 18 | function http_OAuth_redirect($time, $FULLGoalURL){ 19 | $goalURL = genOAuthURL($FULLGoalURL); 20 | http_redirect($time, $goalURL); 21 | } 22 | 23 | -------------------------------------------------------------------------------- /util/setHeaderToUTF8.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /util/testGetOpenIdFromUserId.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 欢迎使用微通 9 | 10 | 11 | 12 | 13 | 32 | "; 33 | $isRegedParent=checkParent($openID); 34 | $regedParentRedirectStr=" 35 | 36 | "; 37 | 38 | $regPageRedirectForNewUser= " 39 | 40 | "; 41 | 42 | if($isRegedTeacher){ 43 | echo $regedTeacherRedirectStr; 44 | exit(); 45 | }elseif($isRegedParent){ 46 | echo $regedParentRedirectStr; 47 | exit(); 48 | }else{ 49 | echo $regPageRedirectForNewUser; 50 | exit(); 51 | } 52 | 53 | ?> 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
65 |
66 |
67 |

正在跳转中,请稍候 68 | 69 | 70 |

71 |
72 |
73 | 74 |
75 | 76 | 77 | -------------------------------------------------------------------------------- /wxq/testgetOpenId.php: -------------------------------------------------------------------------------- 1 | $value ){ 14 | echo "key: " . $key; 15 | echo " value: " . $value; 16 | } 17 | 18 | $code = $_REQUEST['code']; 19 | echo $code; 20 | $result = getOpenId($code); 21 | echo "
Openid:"; 22 | echo $result; 23 | 24 | //最后,把这些信息存储成cookie 25 | // TODO 如果 设置为cookie,需要考虑过期时间,以及如果用户没有cookie的话引导用户设置cookie 26 | setcookie("OpenIDCookie", $result, time()+60*60*24*30 ); 27 | 28 | ?> 29 | 30 | ============测试信息结束
31 | 32 |

>老师注册

35 |
36 |

显示cookie

41 | -------------------------------------------------------------------------------- /wxq/wxapi.php: -------------------------------------------------------------------------------- 1 | 4 | 18 | 23 | 24 | 48 | 49 | 50 | 51 | 52 | 53 | 欢迎使用微通 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
63 |
64 |
65 |

正在跳转中,请稍候 66 | 67 | 68 |

69 |
70 |
71 | 72 |
73 | 74 | -------------------------------------------------------------------------------- /文档/MYSQL5.1 CHM版中文帮助文档.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/MYSQL5.1 CHM版中文帮助文档.chm -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图.zip -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/1.1教师注册.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/1.1教师注册.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/1.2教师注册成功.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/1.2教师注册成功.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/1.3教师首页1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/1.3教师首页1.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/1.3教师首页2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/1.3教师首页2.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/1.4.1通知创建成功.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/1.4.1通知创建成功.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/1.4.2问卷创建成功.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/1.4.2问卷创建成功.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/1.4创建通知.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/1.4创建通知.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/1.5阅读情况.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/1.5阅读情况.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/2.1家长注册.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/2.1家长注册.png -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/2.2家长首页.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/2.2家长首页.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/2.3通知阅读.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/2.3通知阅读.jpg -------------------------------------------------------------------------------- /文档/WeChat Notifier 微通 效果图/无访问权限.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/WeChat Notifier 微通 效果图/无访问权限.jpg -------------------------------------------------------------------------------- /文档/~$意见收集系统 参赛版.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/~$意见收集系统 参赛版.docx -------------------------------------------------------------------------------- /文档/作品效果图 不受维护的版本.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/作品效果图 不受维护的版本.docx -------------------------------------------------------------------------------- /文档/功能测试计划 参考文件.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/功能测试计划 参考文件.pdf -------------------------------------------------------------------------------- /文档/参赛文档 ver2.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/参赛文档 ver2.docx -------------------------------------------------------------------------------- /文档/参赛文档.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/参赛文档.docx -------------------------------------------------------------------------------- /文档/可行性研究报告.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/可行性研究报告.docx -------------------------------------------------------------------------------- /文档/可行性研究报告Ver2.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/可行性研究报告Ver2.docx -------------------------------------------------------------------------------- /文档/图标/noPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/图标/noPage.png -------------------------------------------------------------------------------- /文档/图标/noPage.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/图标/noPage.psd -------------------------------------------------------------------------------- /文档/图标/weitongIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/图标/weitongIcon.png -------------------------------------------------------------------------------- /文档/图标/weitongIcon.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/图标/weitongIcon.psd -------------------------------------------------------------------------------- /文档/图标/weitongIconTransparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/图标/weitongIconTransparent.png -------------------------------------------------------------------------------- /文档/图标/设计图.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/图标/设计图.psd -------------------------------------------------------------------------------- /文档/微信意见收集及签到系统 ver2 201604419.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微信意见收集及签到系统 ver2 201604419.docx -------------------------------------------------------------------------------- /文档/微信意见收集及签到系统 项目开发计划 revised.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微信意见收集及签到系统 项目开发计划 revised.doc -------------------------------------------------------------------------------- /文档/微信意见收集及签到系统 项目开发计划.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微信意见收集及签到系统 项目开发计划.doc -------------------------------------------------------------------------------- /文档/微信意见收集及签到系统.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微信意见收集及签到系统.docx -------------------------------------------------------------------------------- /文档/微信意见收集系统 分析文档 第五小组 整合 ver0.5.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微信意见收集系统 分析文档 第五小组 整合 ver0.5.docx -------------------------------------------------------------------------------- /文档/微信意见收集系统 分析文档 第五小组 整合 ver0.6.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微信意见收集系统 分析文档 第五小组 整合 ver0.6.docx -------------------------------------------------------------------------------- /文档/微信意见收集系统 参赛版.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微信意见收集系统 参赛版.docx -------------------------------------------------------------------------------- /文档/微信意见收集系统数据流图.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微信意见收集系统数据流图.docx -------------------------------------------------------------------------------- /文档/微通 答辩 ppt.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通 答辩 ppt.pptx -------------------------------------------------------------------------------- /文档/微通 答辩ppt ver2.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通 答辩ppt ver2.pptx -------------------------------------------------------------------------------- /文档/微通 答辩ver2.2.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通 答辩ver2.2.pptx -------------------------------------------------------------------------------- /文档/微通 答辩ver2.3.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通 答辩ver2.3.pptx -------------------------------------------------------------------------------- /文档/微通 软件工程作业 展示ppt.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通 软件工程作业 展示ppt.pptx -------------------------------------------------------------------------------- /文档/微通:北京大学计算机应用设计大赛 文档 ver2.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通:北京大学计算机应用设计大赛 文档 ver2.docx -------------------------------------------------------------------------------- /文档/微通:北京大学计算机应用设计大赛 文档 ver2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通:北京大学计算机应用设计大赛 文档 ver2.pdf -------------------------------------------------------------------------------- /文档/微通:北京大学计算机应用设计大赛 文档.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通:北京大学计算机应用设计大赛 文档.docx -------------------------------------------------------------------------------- /文档/微通:北京大学计算机应用设计大赛 文档.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通:北京大学计算机应用设计大赛 文档.pdf -------------------------------------------------------------------------------- /文档/微通:北京大学计算机应用设计大赛 文档.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通:北京大学计算机应用设计大赛 文档.zip -------------------------------------------------------------------------------- /文档/微通:北京大学计算机应用设计大赛.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/微通:北京大学计算机应用设计大赛.zip -------------------------------------------------------------------------------- /文档/成本分析.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/成本分析.docx -------------------------------------------------------------------------------- /文档/最终提交版参赛文档 20160424 ver2.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/最终提交版参赛文档 20160424 ver2.docx -------------------------------------------------------------------------------- /文档/最终提交版参赛文档 20160424.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/最终提交版参赛文档 20160424.docx -------------------------------------------------------------------------------- /文档/测试计划 张成九 20160419 revised.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/测试计划 张成九 20160419 revised.docx -------------------------------------------------------------------------------- /文档/测试计划 张成九 20160419.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/测试计划 张成九 20160419.docx -------------------------------------------------------------------------------- /文档/相关说明.md: -------------------------------------------------------------------------------- 1 | ## 使用假设 2 | * 一个微信群中仅有一个班级。 3 | * 假设所有学生都有唯一的学号。 4 | * 目前的系统只能供陈老师所在微信群使用。 5 | * 一个老师只管理一个微信群。 -------------------------------------------------------------------------------- /文档/软件工程微信意见收集系统数据流图.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TypeMoonPKU/WechatWebQuestionnair/94c651366f8d47adfc90a8c0c182d6c55cdc4064/文档/软件工程微信意见收集系统数据流图.pdf --------------------------------------------------------------------------------