├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── common ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── examstack │ │ └── common │ │ ├── Constants.java │ │ ├── daemon │ │ └── AbstractDaemon.java │ │ ├── domain │ │ ├── exam │ │ │ ├── AnswerSheet.java │ │ │ ├── AnswerSheetItem.java │ │ │ ├── Exam.java │ │ │ ├── ExamFinishParam.java │ │ │ ├── ExamHistory.java │ │ │ ├── ExamPaper.java │ │ │ ├── Message.java │ │ │ ├── Paper.java │ │ │ ├── PaperCreatorParam.java │ │ │ └── UserQuestionHistory.java │ │ ├── news │ │ │ └── News.java │ │ ├── practice │ │ │ ├── KnowledgePointAnalysisResult.java │ │ │ ├── SubmitParam.java │ │ │ └── TypeAnalysis.java │ │ ├── question │ │ │ ├── Comment.java │ │ │ ├── Comments.java │ │ │ ├── Field.java │ │ │ ├── KnowledgePoint.java │ │ │ ├── PointStatistic.java │ │ │ ├── Question.java │ │ │ ├── QuestionContent.java │ │ │ ├── QuestionFilter.java │ │ │ ├── QuestionHistory.java │ │ │ ├── QuestionImproveResult.java │ │ │ ├── QuestionQueryResult.java │ │ │ ├── QuestionStatistic.java │ │ │ ├── QuestionStruts.java │ │ │ ├── QuestionTag.java │ │ │ ├── QuestionType.java │ │ │ └── Tag.java │ │ ├── training │ │ │ ├── Training.java │ │ │ ├── TrainingSection.java │ │ │ ├── TrainingSectionProcess.java │ │ │ ├── UserTraining.java │ │ │ └── UserTrainingHistory.java │ │ └── user │ │ │ ├── Department.java │ │ │ ├── Group.java │ │ │ ├── Role.java │ │ │ └── User.java │ │ └── util │ │ ├── CustomXWPFDocument.java │ │ ├── EhcacheTest.java │ │ ├── MenuItem.java │ │ ├── MyInterceptor.java │ │ ├── Page.java │ │ ├── PagingUtil.java │ │ ├── Population.java │ │ ├── QuestionAdapter.java │ │ ├── ReflectUtil.java │ │ ├── Roulette.java │ │ ├── StandardPasswordEncoderForSha1.java │ │ ├── StreamGobbler.java │ │ ├── StringUtil.java │ │ ├── file │ │ ├── ExcelUtil.java │ │ ├── FileUploadUtil.java │ │ ├── Html2Doc.java │ │ ├── JOD4DocToPDF.java │ │ ├── MD5FileUtil.java │ │ ├── PdfToSwf.java │ │ └── PropertyReaderUtil.java │ │ └── xml │ │ └── Object2Xml.java │ └── resources │ ├── ehcache.xml │ ├── ehcache.xsd │ └── log4j.properties ├── examstack.sql ├── management ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── examstack │ │ └── management │ │ ├── controller │ │ ├── action │ │ │ ├── DashBoardAction.java │ │ │ ├── ExamAction.java │ │ │ ├── QuestionAction.java │ │ │ ├── TrainingAction.java │ │ │ ├── UserAction.java │ │ │ ├── admin │ │ │ │ ├── CommonActionAdmin.java │ │ │ │ ├── ExamActionAdmin.java │ │ │ │ ├── ExamPaperActionAdmin.java │ │ │ │ ├── SystemActionAdmin.java │ │ │ │ ├── TrainingActionAdmin.java │ │ │ │ └── UserActionAdmin.java │ │ │ └── teacher │ │ │ │ ├── DashBoardPageTeacher.java │ │ │ │ ├── ExamActionTeacher.java │ │ │ │ ├── ExamPaperActionTeacher.java │ │ │ │ └── TrainingActionTeacher.java │ │ └── page │ │ │ ├── BasePage.java │ │ │ ├── MenuPage.java │ │ │ ├── SystemPage.java │ │ │ ├── admin │ │ │ ├── CommonPageAdmin.java │ │ │ ├── DashBoardPageAdmin.java │ │ │ ├── ExamPageAdmin.java │ │ │ ├── ExamPaperPageAdmin.java │ │ │ ├── QuestionPageAdmin.java │ │ │ ├── SystemPageAdmin.java │ │ │ ├── TrainingPageAdmin.java │ │ │ └── UserPageAdmin.java │ │ │ └── teacher │ │ │ ├── ExamPageTeacher.java │ │ │ ├── ExamPaperPageTeacher.java │ │ │ ├── QuestionPageTeacher.java │ │ │ ├── TrainingPageTeacher.java │ │ │ └── UserPageTeacher.java │ │ ├── persistence │ │ ├── ExamMapper.java │ │ ├── ExamPaperMapper.java │ │ ├── NewsMapper.java │ │ ├── QuestionHistoryMapper.java │ │ ├── QuestionMapper.java │ │ ├── SystemMapper.java │ │ ├── TrainingMapper.java │ │ └── UserMapper.java │ │ ├── security │ │ ├── UserDetailsServiceImpl.java │ │ ├── UserInfo.java │ │ ├── UserInfoUtil.java │ │ ├── filter │ │ │ └── AuthenticationFilter.java │ │ └── handler │ │ │ └── ExtrAuthenticationSuccessHandler.java │ │ └── service │ │ ├── ExamPaperService.java │ │ ├── ExamPaperServiceImpl.java │ │ ├── ExamService.java │ │ ├── ExamServiceImpl.java │ │ ├── NewsService.java │ │ ├── NewsServiceImpl.java │ │ ├── QuestionHistoryService.java │ │ ├── QuestionHistoryServiceImpl.java │ │ ├── QuestionService.java │ │ ├── QuestionServiceImpl.java │ │ ├── SystemService.java │ │ ├── SystemServiceImpl.java │ │ ├── TrainingService.java │ │ ├── TrainingServiceImpl.java │ │ ├── UserService.java │ │ └── UserServiceImpl.java │ ├── resources │ ├── com │ │ └── examstack │ │ │ └── management │ │ │ └── persistence │ │ │ ├── ExamMapper.xml │ │ │ ├── ExamPaperMapper.xml │ │ │ ├── NewsMapper.xml │ │ │ ├── QuestionHistoryMapper.xml │ │ │ ├── QuestionMapper.xml │ │ │ ├── SystemMapper.xml │ │ │ ├── TrainingMapper.xml │ │ │ └── UserMapper.xml │ ├── ehcache.xml │ ├── ehcache.xsd │ └── log4j.properties │ └── webapp │ ├── META-INF │ └── MANIFEST.MF │ ├── WEB-INF │ ├── spring │ │ ├── appServlet │ │ │ ├── controllers.xml │ │ │ └── servlet-context.xml │ │ ├── rabbitmq.xml │ │ ├── root-context.xml │ │ ├── scheduler.xml │ │ └── security.xml │ ├── views │ │ ├── add-admin.jsp │ │ ├── add-field.jsp │ │ ├── add-point.jsp │ │ ├── add-tag.jsp │ │ ├── admin │ │ │ └── teacher-list.jsp │ │ ├── common │ │ │ ├── footer.jsp │ │ │ ├── left-menu.jsp │ │ │ └── top-menu.jsp │ │ ├── dashboard.jsp │ │ ├── dep-list.jsp │ │ ├── exam-add.jsp │ │ ├── exam-list.jsp │ │ ├── exampaper-add.jsp │ │ ├── exampaper-edit.jsp │ │ ├── exampaper-list.jsp │ │ ├── exampaper-mark.jsp │ │ ├── exampaper-preview.jsp │ │ ├── field-list.jsp │ │ ├── footer.jsp │ │ ├── home.jsp │ │ ├── inner │ │ │ ├── add-tag.jsp │ │ │ ├── tag-list.jsp │ │ │ └── user-list.jsp │ │ ├── knowledge-list.jsp │ │ ├── login.jsp │ │ ├── model-test-add.jsp │ │ ├── model-test-list.jsp │ │ ├── news-list.jsp │ │ ├── practice-status.jsp │ │ ├── question-add.jsp │ │ ├── question-import.jsp │ │ ├── question-list-dialog.jsp │ │ ├── question-list.jsp │ │ ├── question-preview.jsp │ │ ├── regist-success.jsp │ │ ├── register.jsp │ │ ├── section.jsp │ │ ├── start-exam.jsp │ │ ├── student-answer-sheet.jsp │ │ ├── sys-admin-list.jsp │ │ ├── sys-backup.jsp │ │ ├── tag-list.jsp │ │ ├── tmp.jsp │ │ ├── training-add.jsp │ │ ├── training-history.jsp │ │ ├── training-list.jsp │ │ ├── user-exam-list.jsp │ │ └── user-list.jsp │ └── web.xml │ └── resources │ ├── bootstrap │ ├── css │ │ ├── bootstrap-huan.css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.css.map │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ └── bootstrap.min.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ └── js │ │ ├── bootstrap.js │ │ └── bootstrap.min.js │ ├── chart │ ├── less │ │ └── morris.core.less │ ├── lib │ │ ├── morris.area.coffee │ │ ├── morris.bar.coffee │ │ ├── morris.coffee │ │ ├── morris.donut.coffee │ │ ├── morris.grid.coffee │ │ ├── morris.hover.coffee │ │ └── morris.line.coffee │ ├── morris.css │ ├── morris.js │ ├── morris.min.js │ └── raphael-min.js │ ├── chartjs │ ├── Chart.js │ ├── Chart.min.js │ ├── bower.json │ ├── excanvas.js │ ├── gulpfile.js │ └── package.json │ ├── css │ ├── exam.css │ ├── images │ │ ├── admin-login-bg.jpg │ │ ├── admin-login-bg2.jpg │ │ ├── bg.png │ │ ├── error.png │ │ ├── icon20_20.png │ │ ├── info.png │ │ ├── pattern-1.png │ │ ├── success.png │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ ├── ui-bg_flat_0_eeeeee_40x100.png │ │ ├── ui-bg_flat_55_c0402a_40x100.png │ │ ├── ui-bg_flat_55_eeeeee_40x100.png │ │ ├── ui-bg_glass_100_f8f8f8_1x400.png │ │ ├── ui-bg_glass_35_dddddd_1x400.png │ │ ├── ui-bg_glass_60_eeeeee_1x400.png │ │ ├── ui-bg_inset-hard_75_999999_1x100.png │ │ ├── ui-bg_inset-soft_50_c9c9c9_1x100.png │ │ ├── ui-icons_0073ea_256x240.png │ │ ├── ui-icons_3383bb_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_4eb305_256x240.png │ │ ├── ui-icons_4eb305_256x240_2.png │ │ ├── ui-icons_4eb305_256x240_3.png │ │ ├── ui-icons_70b2e1_256x240.png │ │ ├── ui-icons_fbc856_256x240.png │ │ └── ui-icons_ffffff_256x240.png │ ├── jquery-ui-1.9.2.custom.min.css │ ├── jquery.placeholder.min.css │ ├── proton │ │ ├── d-mobile.png │ │ ├── d-old.png │ │ ├── d.png │ │ ├── d.psd │ │ ├── dot_for_ie.gif │ │ ├── file.png │ │ ├── less-1.3.1.min.js │ │ ├── proton-jstree.less │ │ ├── proton-mixins.less │ │ ├── proton-variables.less │ │ ├── style-original.css │ │ ├── style.css │ │ ├── style.less │ │ ├── throbber.gif │ │ └── tree.css │ ├── question-add.css │ └── style.css │ ├── files │ └── test.mp4 │ ├── flash │ ├── beelden.zip │ └── player.swf │ ├── font-awesome │ ├── css │ │ ├── font-awesome.css │ │ └── font-awesome.min.css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── less │ │ ├── bordered-pulled.less │ │ ├── core.less │ │ ├── fixed-width.less │ │ ├── font-awesome.less │ │ ├── icons.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── mixins.less │ │ ├── path.less │ │ ├── rotated-flipped.less │ │ ├── spinning.less │ │ ├── stacked.less │ │ └── variables.less │ └── scss │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _icons.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _path.scss │ │ ├── _rotated-flipped.scss │ │ ├── _spinning.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ └── font-awesome.scss │ ├── fullcalendar-2.1.1 │ ├── changelog.txt │ ├── demos │ │ ├── agenda-views.html │ │ ├── basic-views.html │ │ ├── default.html │ │ ├── external-dragging.html │ │ ├── gcal.html │ │ ├── json.html │ │ ├── json │ │ │ └── events.json │ │ ├── languages.html │ │ ├── php │ │ │ ├── get-events.php │ │ │ ├── get-timezones.php │ │ │ └── utils.php │ │ ├── selectable.html │ │ ├── theme.html │ │ └── timezones.html │ ├── fullcalendar.css │ ├── fullcalendar.js │ ├── fullcalendar.min.css │ ├── fullcalendar.min.js │ ├── fullcalendar.print.css │ ├── gcal.js │ ├── lang-all.js │ ├── lang │ │ ├── ar-ma.js │ │ ├── ar-sa.js │ │ ├── ar.js │ │ ├── bg.js │ │ ├── ca.js │ │ ├── cs.js │ │ ├── da.js │ │ ├── de-at.js │ │ ├── de.js │ │ ├── el.js │ │ ├── en-au.js │ │ ├── en-ca.js │ │ ├── en-gb.js │ │ ├── es.js │ │ ├── fa.js │ │ ├── fi.js │ │ ├── fr-ca.js │ │ ├── fr.js │ │ ├── hi.js │ │ ├── hr.js │ │ ├── hu.js │ │ ├── id.js │ │ ├── is.js │ │ ├── it.js │ │ ├── ja.js │ │ ├── ko.js │ │ ├── lt.js │ │ ├── lv.js │ │ ├── nl.js │ │ ├── pl.js │ │ ├── pt-br.js │ │ ├── pt.js │ │ ├── ro.js │ │ ├── ru.js │ │ ├── sk.js │ │ ├── sl.js │ │ ├── sr-cyrl.js │ │ ├── sr.js │ │ ├── sv.js │ │ ├── th.js │ │ ├── tr.js │ │ ├── uk.js │ │ ├── vi.js │ │ ├── zh-cn.js │ │ └── zh-tw.js │ ├── lib │ │ ├── cupertino │ │ │ ├── images │ │ │ │ ├── animated-overlay.gif │ │ │ │ ├── ui-bg_diagonals-thick_90_eeeeee_40x40.png │ │ │ │ ├── ui-bg_flat_15_cd0a0a_40x100.png │ │ │ │ ├── ui-bg_glass_100_e4f1fb_1x400.png │ │ │ │ ├── ui-bg_glass_50_3baae3_1x400.png │ │ │ │ ├── ui-bg_glass_80_d7ebf9_1x400.png │ │ │ │ ├── ui-bg_highlight-hard_100_f2f5f7_1x100.png │ │ │ │ ├── ui-bg_highlight-hard_70_000000_1x100.png │ │ │ │ ├── ui-bg_highlight-soft_100_deedf7_1x100.png │ │ │ │ ├── ui-bg_highlight-soft_25_ffef8f_1x100.png │ │ │ │ ├── ui-icons_2694e8_256x240.png │ │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ │ ├── ui-icons_3d80b3_256x240.png │ │ │ │ ├── ui-icons_72a7cf_256x240.png │ │ │ │ └── ui-icons_ffffff_256x240.png │ │ │ └── jquery-ui.min.css │ │ ├── jquery-ui.custom.min.js │ │ ├── jquery.min.js │ │ └── moment.min.js │ └── license.txt │ ├── images │ ├── ad.jpg │ ├── ad.png │ ├── error.png │ ├── favicon.ico │ ├── icon-all.png │ ├── icon20_20.png │ ├── info.png │ ├── loading.gif │ ├── logo-s.png │ ├── logo.png │ ├── photo.jpg │ ├── simplest.png │ ├── success.png │ ├── training-content.png │ └── user.png │ ├── js │ ├── add-admin.js │ ├── add-dep.js │ ├── add-exam.js │ ├── add-field.js │ ├── add-model-test.js │ ├── add-news.js │ ├── add-point.js │ ├── add-tag.js │ ├── add-teacher.js │ ├── add-training-section.js │ ├── add-training.js │ ├── add-user.js │ ├── admin-list.js │ ├── all.js │ ├── comment.js │ ├── contextmenu │ │ ├── images │ │ │ ├── cmenu-gloss-cyan-menu-item-hover.gif │ │ │ ├── cmenu-gloss-menu-item-hover.gif │ │ │ ├── cmenu-gloss-semitransparent-menu-item-hover.png │ │ │ ├── cmenu-human-menu-item-hover.gif │ │ │ ├── cmenu-osx-menu-item-hover.gif │ │ │ ├── cmenu-vista-bg.gif │ │ │ ├── cmenu-vista-menu-item-hover.gif │ │ │ └── cmenu-xp-bg.gif │ │ ├── jquery.contextmenu.css │ │ └── jquery.contextmenu.js │ ├── dashboard.js │ ├── dep-list.js │ ├── echarts-all.js │ ├── exam-finished.js │ ├── exam-list.js │ ├── exam-user-list.js │ ├── examing.js │ ├── exampaper-add.js │ ├── exampaper-edit.js │ ├── exampaper-list.js │ ├── exampaper-mark.js │ ├── exampaper-preview.js │ ├── excanvas.js │ ├── field-2-point.js │ ├── field-list.js │ ├── fullcalendar.min.js │ ├── group-manage.js │ ├── group-tree.js │ ├── group-user-menu.js │ ├── jquery.ui.datepicker-zh-TW.js │ ├── jquery │ │ ├── jquery-1.9.0.min.js │ │ ├── jquery-1.9.0.min.map │ │ ├── jquery-ui-1.9.2.custom.min.js │ │ └── jquery.min.map │ ├── modify-user.js │ ├── paper-examing.js │ ├── point-list.js │ ├── point-select.js │ ├── practice-improve-qh.js │ ├── practice-improve.js │ ├── practice-testing.js │ ├── pwd-change.js │ ├── question-add.js │ ├── question-import.js │ ├── question-lib.js │ ├── question-list.js │ ├── question-list4dialog.js │ ├── question-upload-img.js │ ├── register.js │ ├── student-exam-list.js │ ├── tag-list.js │ ├── teacher-list.js │ ├── training-file-upload.js │ ├── training-list.js │ ├── training-process-list.js │ ├── update-admin.js │ ├── update-teacher.js │ ├── update-user.js │ ├── uploadify │ │ ├── Change Log.txt │ │ ├── __MACOSX │ │ │ ├── ._Change Log.txt │ │ │ └── ._uploadify.swf │ │ ├── check-exists.php │ │ ├── index.php │ │ ├── jquery.uploadify.js │ │ ├── jquery.uploadify.min.js │ │ ├── jquery.uploadify3.1Fixed.js │ │ ├── license.txt │ │ ├── uploadify-cancel.png │ │ ├── uploadify.css │ │ ├── uploadify.php │ │ └── uploadify.swf │ ├── user-list-inner.js │ └── util │ │ ├── inline-form.js │ │ ├── jquery.fullscreen-0.3.5.min.js │ │ ├── question-4cep-table.js │ │ ├── question-admin-table.js │ │ ├── question-teacher-table.js │ │ ├── simple-jstree.js │ │ └── tree.js │ └── template │ ├── doc_tmp.docx │ ├── question.xlsx │ └── user.xls ├── pom.xml ├── portal ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── examstack │ │ └── portal │ │ ├── controller │ │ ├── action │ │ │ ├── CommentAction.java │ │ │ ├── ExamAction.java │ │ │ ├── PracticeAction.java │ │ │ ├── TrainingAction.java │ │ │ └── UserAction.java │ │ └── page │ │ │ ├── ExamPage.java │ │ │ ├── MenuPage.java │ │ │ ├── PracticePage.java │ │ │ ├── TrainingPage.java │ │ │ ├── UserCenterPage.java │ │ │ └── UserPage.java │ │ ├── persistence │ │ ├── CommentMapper.java │ │ ├── ExamMapper.java │ │ ├── ExamPaperMapper.java │ │ ├── NewsMapper.java │ │ ├── QuestionHistoryMapper.java │ │ ├── QuestionMapper.java │ │ ├── TrainingMapper.java │ │ └── UserMapper.java │ │ ├── security │ │ ├── UserDetailsServiceImpl.java │ │ ├── UserDetailsServiceImpl2.java │ │ ├── UserInfo.java │ │ ├── UserInfoUtil.java │ │ ├── filter │ │ │ └── AuthenticationFilter.java │ │ └── handler │ │ │ └── ExtrAuthenticationSuccessHandler.java │ │ └── service │ │ ├── CommentService.java │ │ ├── CommentServiceImpl.java │ │ ├── ExamPaperService.java │ │ ├── ExamPaperServiceImpl.java │ │ ├── ExamService.java │ │ ├── ExamServiceImpl.java │ │ ├── NewsService.java │ │ ├── NewsServiceImpl.java │ │ ├── QuestionHistoryService.java │ │ ├── QuestionHistoryServiceImpl.java │ │ ├── QuestionService.java │ │ ├── QuestionServiceImpl.java │ │ ├── TrainingService.java │ │ ├── TrainingServiceImpl.java │ │ ├── UserService.java │ │ └── UserServiceImpl.java │ ├── resources │ ├── com │ │ └── examstack │ │ │ └── portal │ │ │ └── persistence │ │ │ ├── CommentMapper.xml │ │ │ ├── ExamMapper.xml │ │ │ ├── ExamPaperMapper.xml │ │ │ ├── NewsMapper.xml │ │ │ ├── QuestionHistoryMapper.xml │ │ │ ├── QuestionMapper.xml │ │ │ ├── TrainingMapper.xml │ │ │ └── UserMapper.xml │ ├── ehcache.xml │ ├── ehcache.xsd │ └── log4j.properties │ └── webapp │ ├── META-INF │ └── MANIFEST.MF │ ├── WEB-INF │ ├── spring │ │ ├── appServlet │ │ │ ├── controllers.xml │ │ │ └── servlet-context.xml │ │ ├── rabbitmq.xml │ │ ├── root-context.xml │ │ ├── scheduler.xml │ │ └── security.xml │ ├── views │ │ ├── analysis.jsp │ │ ├── change-password.jsp │ │ ├── error.jsp │ │ ├── exam-finished.jsp │ │ ├── exam-history.jsp │ │ ├── exam.jsp │ │ ├── examing.jsp │ │ ├── finished-submit.jsp │ │ ├── home.jsp │ │ ├── login.jsp │ │ ├── news-detail.jsp │ │ ├── practice-improve-qh.jsp │ │ ├── practice-improve.jsp │ │ ├── practice.jsp │ │ ├── quick-start.jsp │ │ ├── regist-success.jsp │ │ ├── register.jsp │ │ ├── setting.jsp │ │ ├── student-answer-sheet.jsp │ │ ├── training-history.jsp │ │ ├── training-list.jsp │ │ ├── training-pdf.jsp │ │ ├── training-practice.jsp │ │ ├── training.jsp │ │ ├── usercenter.jsp │ │ └── video.jsp │ └── web.xml │ ├── html │ ├── exam.html │ ├── home.html │ ├── practice.html │ └── training.html │ └── resources │ ├── bootstrap │ ├── css │ │ ├── bootstrap-huan.css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.css.map │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ └── bootstrap.min.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ └── js │ │ ├── bootstrap.js │ │ └── bootstrap.min.js │ ├── chart │ ├── less │ │ └── morris.core.less │ ├── lib │ │ ├── morris.area.coffee │ │ ├── morris.bar.coffee │ │ ├── morris.coffee │ │ ├── morris.donut.coffee │ │ ├── morris.grid.coffee │ │ ├── morris.hover.coffee │ │ └── morris.line.coffee │ ├── morris.css │ ├── morris.js │ ├── morris.min.js │ └── raphael-min.js │ ├── chartjs │ ├── Chart.js │ ├── Chart.min.js │ ├── bower.json │ ├── excanvas.js │ ├── gulpfile.js │ └── package.json │ ├── css │ ├── exam.css │ ├── images │ │ ├── bg.png │ │ ├── error.png │ │ ├── icon20_20.png │ │ ├── info.png │ │ ├── pattern-1.png │ │ ├── success.png │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ ├── ui-bg_flat_0_eeeeee_40x100.png │ │ ├── ui-bg_flat_55_c0402a_40x100.png │ │ ├── ui-bg_flat_55_eeeeee_40x100.png │ │ ├── ui-bg_glass_100_f8f8f8_1x400.png │ │ ├── ui-bg_glass_35_dddddd_1x400.png │ │ ├── ui-bg_glass_60_eeeeee_1x400.png │ │ ├── ui-bg_inset-hard_75_999999_1x100.png │ │ ├── ui-bg_inset-soft_50_c9c9c9_1x100.png │ │ ├── ui-icons_0073ea_256x240.png │ │ ├── ui-icons_3383bb_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_4eb305_256x240.png │ │ ├── ui-icons_4eb305_256x240_2.png │ │ ├── ui-icons_4eb305_256x240_3.png │ │ ├── ui-icons_70b2e1_256x240.png │ │ ├── ui-icons_fbc856_256x240.png │ │ └── ui-icons_ffffff_256x240.png │ ├── jquery-ui-1.9.2.custom.min.css │ ├── jquery.placeholder.min.css │ ├── question-add.css │ └── style.css │ ├── flash │ ├── beelden.zip │ └── player.swf │ ├── font-awesome │ ├── css │ │ ├── font-awesome.css │ │ └── font-awesome.min.css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── less │ │ ├── bordered-pulled.less │ │ ├── core.less │ │ ├── fixed-width.less │ │ ├── font-awesome.less │ │ ├── icons.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── mixins.less │ │ ├── path.less │ │ ├── rotated-flipped.less │ │ ├── spinning.less │ │ ├── stacked.less │ │ └── variables.less │ └── scss │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _icons.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _path.scss │ │ ├── _rotated-flipped.scss │ │ ├── _spinning.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ └── font-awesome.scss │ ├── images │ ├── ad.jpg │ ├── ad.png │ ├── bg.png │ ├── error.png │ ├── favicon.ico │ ├── icon-all.png │ ├── icon20_20.png │ ├── info.png │ ├── loading.gif │ ├── logo-s.png │ ├── logo.png │ ├── photo.jpg │ ├── simplest.png │ ├── success.png │ ├── training-content.png │ └── user.png │ ├── js │ ├── add-field.js │ ├── add-point.js │ ├── add-tag.js │ ├── all.js │ ├── comment.js │ ├── echarts-all.js │ ├── exam-finished.js │ ├── examing.js │ ├── exampaper-add.js │ ├── exampaper-edit.js │ ├── exampaper-list.js │ ├── exampaper-mark.js │ ├── exampaper-preview.js │ ├── excanvas.js │ ├── field-2-point.js │ ├── field-list.js │ ├── jquery │ │ ├── jquery-1.9.0.min.js │ │ ├── jquery-ui-1.9.2.custom.min.js │ │ └── jquery.min.map │ ├── jwplayer │ │ └── jwplayer.js │ ├── mediaelement │ │ ├── background.png │ │ ├── bigplay.fw.png │ │ ├── bigplay.png │ │ ├── bigplay.svg │ │ ├── controls-ted.png │ │ ├── controls-wmp-bg.png │ │ ├── controls-wmp.png │ │ ├── controls.fw.png │ │ ├── controls.png │ │ ├── controls.svg │ │ ├── flashmediaelement.swf │ │ ├── jumpforward.png │ │ ├── loading.gif │ │ ├── mediaelement-and-player.min.js │ │ ├── mediaelement.js │ │ ├── mediaelementplayer.css │ │ ├── mejs-skins.css │ │ └── skipback.png │ ├── modify-user.js │ ├── paper-examing.js │ ├── point-list.js │ ├── point-select.js │ ├── practice-improve-qh.js │ ├── practice-improve.js │ ├── practice-testing.js │ ├── pwd-change.js │ ├── question-add.js │ ├── question-import.js │ ├── question-lib.js │ ├── question-list.js │ ├── question-list4dialog.js │ ├── question-upload-img.js │ ├── register.js │ ├── training-comment.js │ ├── update-user.js │ ├── uploadify │ │ ├── Change Log.txt │ │ ├── __MACOSX │ │ │ ├── ._Change Log.txt │ │ │ └── ._uploadify.swf │ │ ├── check-exists.php │ │ ├── index.php │ │ ├── jquery.uploadify.js │ │ ├── jquery.uploadify.min.js │ │ ├── jquery.uploadify3.1Fixed.js │ │ ├── license.txt │ │ ├── uploadify-cancel.png │ │ ├── uploadify.css │ │ ├── uploadify.php │ │ └── uploadify.swf │ ├── util │ │ ├── html5.js │ │ ├── inline-form.js │ │ ├── jquery.fullscreen-0.3.5.min.js │ │ ├── question-4cep-table.js │ │ ├── question-admin-table.js │ │ ├── question-teacher-table.js │ │ └── tree.js │ └── videojs │ │ ├── font │ │ ├── vjs.eot │ │ ├── vjs.svg │ │ ├── vjs.ttf │ │ └── vjs.woff │ │ ├── lang │ │ ├── de.js │ │ ├── es.js │ │ ├── fr.js │ │ ├── it.js │ │ ├── ja.js │ │ ├── ko.js │ │ ├── nl.js │ │ ├── pt-BR.js │ │ ├── ru.js │ │ ├── uk.js │ │ └── zh.js │ │ ├── video-js.css │ │ ├── video-js.swf │ │ ├── video.js │ │ ├── videojs-ie8.js │ │ └── videojs-ie8.min.js │ └── template │ ├── perl.pdf │ ├── question.xlsx │ └── user.xls └── scoreMarker ├── config └── scoremaker.properties ├── installService.bat ├── pom.xml ├── prunsrv.exe ├── scoremarker └── src └── main ├── java └── com │ └── examstack │ └── scoremarker │ ├── ScoreCalcuService.java │ ├── ScoreMarkerMain.java │ ├── ScoreMarkerWin.java │ └── config │ └── ScoreMarkConfig.java └── resources └── log4j.properties /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | 19 | *.js linguist-language=Java 20 | *.css linguist-language=Java 21 | *.jsp linguist-language=Java 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | Thumbs.db 2 | ehthumbs.db 3 | Desktop.ini 4 | .project 5 | .settings/* 6 | .settings 7 | target 8 | .classpath -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/Constants.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common; 2 | 3 | public class Constants { 4 | 5 | public final static String ANSWERSHEET_DATA_QUEUE = "examplus.answersheetToScoreMaker"; 6 | public final static String CONFIG_PATH = "/opt/scoremarker"; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/daemon/AbstractDaemon.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.daemon; 2 | 3 | import org.apache.commons.daemon.Daemon; 4 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 5 | 6 | 7 | public abstract class AbstractDaemon implements Daemon { 8 | protected AnnotationConfigApplicationContext context; 9 | private boolean shutdownRequested = false; 10 | protected Thread workThread; 11 | 12 | protected abstract void run(); 13 | 14 | protected Thread getWorkThread() { 15 | return workThread; 16 | } 17 | 18 | protected void createWorkThread() { 19 | final AbstractDaemon instance = this; 20 | workThread = new Thread() { 21 | @Override 22 | public synchronized void start() { 23 | super.start(); 24 | } 25 | 26 | @Override 27 | public void run() { 28 | instance.run(); 29 | } 30 | }; 31 | } 32 | 33 | protected boolean isShutdownRequested() { 34 | return shutdownRequested; 35 | } 36 | 37 | /** 38 | * @param shutdown 39 | * flag to set 40 | */ 41 | protected void setShutdownRequested(boolean shutdownRequested) { 42 | this.shutdownRequested = shutdownRequested; 43 | } 44 | 45 | @Override 46 | public void destroy() { 47 | if (context != null) { 48 | context.close(); 49 | } 50 | workThread = null; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/exam/AnswerSheetItem.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.exam; 2 | 3 | public class AnswerSheetItem { 4 | private float point; 5 | private int questionTypeId; 6 | private String answer; 7 | private int questionId; 8 | private String comment; 9 | private boolean right; 10 | 11 | public boolean isRight() { 12 | return right; 13 | } 14 | 15 | public void setRight(boolean right) { 16 | this.right = right; 17 | } 18 | 19 | public float getPoint() { 20 | return point; 21 | } 22 | 23 | public void setPoint(float point) { 24 | this.point = point; 25 | } 26 | 27 | public String getAnswer() { 28 | return answer; 29 | } 30 | 31 | public void setAnswer(String answer) { 32 | this.answer = answer; 33 | } 34 | 35 | public int getQuestionTypeId() { 36 | return questionTypeId; 37 | } 38 | 39 | public void setQuestionTypeId(int questionTypeId) { 40 | this.questionTypeId = questionTypeId; 41 | } 42 | 43 | public int getQuestionId() { 44 | return questionId; 45 | } 46 | 47 | public void setQuestionId(int questionId) { 48 | this.questionId = questionId; 49 | } 50 | 51 | public String getComment() { 52 | return comment; 53 | } 54 | 55 | public void setComment(String comment) { 56 | this.comment = comment; 57 | } 58 | 59 | 60 | 61 | } 62 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/exam/ExamFinishParam.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.exam; 2 | 3 | import java.io.Serializable; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | 7 | import javax.xml.bind.annotation.XmlRootElement; 8 | 9 | @XmlRootElement 10 | public class ExamFinishParam implements Serializable { 11 | private static final long serialVersionUID = 4265690784518580278L; 12 | private int exam_history_id; 13 | private int duration; 14 | public int getDuration() { 15 | return duration; 16 | } 17 | 18 | public void setDuration(int duration) { 19 | this.duration = duration; 20 | } 21 | 22 | private HashMap as; 23 | 24 | public int getExam_history_id() { 25 | return exam_history_id; 26 | } 27 | 28 | public void setExam_history_id(int exam_history_id) { 29 | this.exam_history_id = exam_history_id; 30 | } 31 | 32 | public HashMap getAs() { 33 | return as; 34 | } 35 | 36 | public void setAs(HashMap as) { 37 | this.as = as; 38 | } 39 | 40 | 41 | 42 | } 43 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/exam/Message.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.exam; 2 | 3 | import java.io.Serializable; 4 | 5 | public class Message implements Serializable { 6 | 7 | private static final long serialVersionUID = -2999571571280318844L; 8 | private String result = "success"; 9 | private int generatedId; 10 | private String messageInfo; 11 | 12 | private Object object; 13 | 14 | public Object getObject() { 15 | return object; 16 | } 17 | 18 | public void setObject(Object object) { 19 | this.object = object; 20 | } 21 | 22 | public String getMessageInfo() { 23 | return messageInfo; 24 | } 25 | 26 | public void setMessageInfo(String messageInfo) { 27 | this.messageInfo = messageInfo; 28 | } 29 | 30 | public String getResult() { 31 | return result; 32 | } 33 | 34 | public void setResult(String result) { 35 | this.result = result; 36 | } 37 | 38 | public int getGeneratedId() { 39 | return generatedId; 40 | } 41 | 42 | public void setGeneratedId(int generatedId) { 43 | this.generatedId = generatedId; 44 | } 45 | 46 | 47 | } 48 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/news/News.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.news; 2 | 3 | import java.io.Serializable; 4 | import java.util.Date; 5 | 6 | import javax.xml.bind.annotation.XmlRootElement; 7 | 8 | @XmlRootElement 9 | public class News implements Serializable { 10 | 11 | private static final long serialVersionUID = -7893094577107799554L; 12 | private int newsId; 13 | private String title; 14 | private String content; 15 | private String creator; 16 | private Date createTime; 17 | private int userId; 18 | 19 | public int getNewsId() { 20 | return newsId; 21 | } 22 | public void setNewsId(int newsId) { 23 | this.newsId = newsId; 24 | } 25 | public String getTitle() { 26 | return title; 27 | } 28 | public void setTitle(String title) { 29 | this.title = title; 30 | } 31 | public String getContent() { 32 | return content; 33 | } 34 | public void setContent(String content) { 35 | this.content = content; 36 | } 37 | public String getCreator() { 38 | return creator; 39 | } 40 | public void setCreator(String creator) { 41 | this.creator = creator; 42 | } 43 | public Date getCreateTime() { 44 | return createTime; 45 | } 46 | public void setCreateTime(Date createTime) { 47 | this.createTime = createTime; 48 | } 49 | public int getUserId() { 50 | return userId; 51 | } 52 | public void setUserId(int userId) { 53 | this.userId = userId; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/practice/KnowledgePointAnalysisResult.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.practice; 2 | 3 | import java.util.List; 4 | 5 | public class KnowledgePointAnalysisResult { 6 | private int knowledgePointId; 7 | private String knowledgePointName; 8 | private List typeAnalysis; 9 | private float finishRate; 10 | 11 | public int getKnowledgePointId() { 12 | return knowledgePointId; 13 | } 14 | 15 | public void setKnowledgePointId(int knowledgePointId) { 16 | this.knowledgePointId = knowledgePointId; 17 | } 18 | 19 | public String getKnowledgePointName() { 20 | return knowledgePointName; 21 | } 22 | 23 | public void setKnowledgePointName(String knowledgePointName) { 24 | this.knowledgePointName = knowledgePointName; 25 | } 26 | 27 | public List getTypeAnalysis() { 28 | return typeAnalysis; 29 | } 30 | 31 | public void setTypeAnalysis(List typeAnalysis) { 32 | this.typeAnalysis = typeAnalysis; 33 | } 34 | 35 | public float getFinishRate() { 36 | return finishRate; 37 | } 38 | 39 | public void setFinishRate(float finishRate) { 40 | this.finishRate = finishRate; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/practice/SubmitParam.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.practice; 2 | 3 | import java.util.Date; 4 | 5 | import javax.xml.bind.annotation.XmlRootElement; 6 | 7 | /** 8 | * @author Ocelot 9 | * @date 2014年8月3日 下午7:56:19 10 | */ 11 | @XmlRootElement 12 | public class SubmitParam { 13 | private int questionId; 14 | private String answer; 15 | private String userId; 16 | private Date submitDate; 17 | 18 | public int getQuestionId() { 19 | return questionId; 20 | } 21 | public void setQuestionId(int questionId) { 22 | this.questionId = questionId; 23 | } 24 | public String getAnswer() { 25 | return answer; 26 | } 27 | public void setAnswer(String answer) { 28 | this.answer = answer; 29 | } 30 | public String getUserId() { 31 | return userId; 32 | } 33 | public void setUserId(String userId) { 34 | this.userId = userId; 35 | } 36 | public Date getSubmitDate() { 37 | return submitDate; 38 | } 39 | public void setSubmitDate(Date submitDate) { 40 | this.submitDate = submitDate; 41 | } 42 | 43 | 44 | 45 | } 46 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/practice/TypeAnalysis.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.practice; 2 | 3 | public class TypeAnalysis { 4 | private int questionTypeId; 5 | private String questionTypeName; 6 | private int restAmount; 7 | private int rightAmount; 8 | private int wrongAmount; 9 | 10 | public int getQuestionTypeId() { 11 | return questionTypeId; 12 | } 13 | 14 | public void setQuestionTypeId(int questionTypeId) { 15 | this.questionTypeId = questionTypeId; 16 | } 17 | 18 | public String getQuestionTypeName() { 19 | return questionTypeName; 20 | } 21 | 22 | public void setQuestionTypeName(String questionTypeName) { 23 | this.questionTypeName = questionTypeName; 24 | } 25 | 26 | public int getRestAmount() { 27 | return restAmount; 28 | } 29 | 30 | public void setRestAmount(int restAmount) { 31 | this.restAmount = restAmount; 32 | } 33 | 34 | public int getRightAmount() { 35 | return rightAmount; 36 | } 37 | 38 | public void setRightAmount(int rightAmount) { 39 | this.rightAmount = rightAmount; 40 | } 41 | 42 | public int getWrongAmount() { 43 | return wrongAmount; 44 | } 45 | 46 | public void setWrongAmount(int wrongAmount) { 47 | this.wrongAmount = wrongAmount; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/question/Comments.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.question; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | public class Comments implements Serializable { 7 | 8 | private static final long serialVersionUID = -515766630713170465L; 9 | private List comments = null; 10 | private int size; 11 | 12 | public int getSize() { 13 | return size; 14 | } 15 | 16 | public void setSize(int size) { 17 | this.size = size; 18 | } 19 | 20 | public List getComments() { 21 | return comments; 22 | } 23 | 24 | public void setComments(List comments) { 25 | this.comments = comments; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/question/Field.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.question; 2 | 3 | import javax.xml.bind.annotation.XmlRootElement; 4 | 5 | @XmlRootElement 6 | public class Field { 7 | 8 | private int fieldId; 9 | private String fieldName; 10 | private String memo; 11 | private boolean state; 12 | private boolean removeable; 13 | public boolean isRemoveable() { 14 | return removeable; 15 | } 16 | public void setRemoveable(boolean removeable) { 17 | this.removeable = removeable; 18 | } 19 | public int getFieldId() { 20 | return fieldId; 21 | } 22 | public void setFieldId(int fieldId) { 23 | this.fieldId = fieldId; 24 | } 25 | public String getFieldName() { 26 | return fieldName; 27 | } 28 | public void setFieldName(String fieldName) { 29 | this.fieldName = fieldName; 30 | } 31 | public String getMemo() { 32 | return memo; 33 | } 34 | public void setMemo(String memo) { 35 | this.memo = memo; 36 | } 37 | public boolean isState() { 38 | return state; 39 | } 40 | public void setState(boolean state) { 41 | this.state = state; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/question/KnowledgePoint.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.question; 2 | 3 | /** 4 | * 知识点 5 | * @author mars 6 | * 7 | */ 8 | public class KnowledgePoint { 9 | 10 | private int pointId; 11 | private String pointName; 12 | private int fieldId; 13 | private String fieldName; 14 | private String memo; 15 | private boolean removeable; 16 | private int state; 17 | 18 | public boolean isRemoveable() { 19 | return removeable; 20 | } 21 | public void setRemoveable(boolean removeable) { 22 | this.removeable = removeable; 23 | } 24 | public String getFieldName() { 25 | return fieldName; 26 | } 27 | public void setFieldName(String fieldName) { 28 | this.fieldName = fieldName; 29 | } 30 | public int getPointId() { 31 | return pointId; 32 | } 33 | public void setPointId(int pointId) { 34 | this.pointId = pointId; 35 | } 36 | public String getPointName() { 37 | return pointName; 38 | } 39 | public void setPointName(String pointName) { 40 | this.pointName = pointName; 41 | } 42 | public int getFieldId() { 43 | return fieldId; 44 | } 45 | public void setFieldId(int fieldId) { 46 | this.fieldId = fieldId; 47 | } 48 | public String getMemo() { 49 | return memo; 50 | } 51 | public void setMemo(String memo) { 52 | this.memo = memo; 53 | } 54 | public int getState() { 55 | return state; 56 | } 57 | public void setState(int state) { 58 | this.state = state; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/question/PointStatistic.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.question; 2 | 3 | public class PointStatistic { 4 | 5 | private int fieldId; 6 | private String fieldName; 7 | private int pointId; 8 | private String pointName; 9 | private int amount; 10 | public int getFieldId() { 11 | return fieldId; 12 | } 13 | public void setFieldId(int fieldId) { 14 | this.fieldId = fieldId; 15 | } 16 | public String getFieldName() { 17 | return fieldName; 18 | } 19 | public void setFieldName(String fieldName) { 20 | this.fieldName = fieldName; 21 | } 22 | public int getPointId() { 23 | return pointId; 24 | } 25 | public void setPointId(int pointId) { 26 | this.pointId = pointId; 27 | } 28 | public String getPointName() { 29 | return pointName; 30 | } 31 | public void setPointName(String pointName) { 32 | this.pointName = pointName; 33 | } 34 | public int getAmount() { 35 | return amount; 36 | } 37 | public void setAmount(int amount) { 38 | this.amount = amount; 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/question/QuestionContent.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.question; 2 | 3 | import java.util.LinkedHashMap; 4 | 5 | import com.thoughtworks.xstream.annotations.XStreamAlias; 6 | 7 | @XStreamAlias("QuestionContent") 8 | public class QuestionContent { 9 | 10 | @XStreamAlias("title") 11 | private String title; 12 | @XStreamAlias("titleImg") 13 | private String titleImg = ""; 14 | @XStreamAlias("choiceList") 15 | private LinkedHashMap choiceList; 16 | @XStreamAlias("choiceImgList") 17 | private LinkedHashMap choiceImgList; 18 | 19 | public String getTitle() { 20 | return title; 21 | } 22 | 23 | public void setTitle(String title) { 24 | this.title = title; 25 | } 26 | 27 | public String getTitleImg() { 28 | return titleImg; 29 | } 30 | 31 | public void setTitleImg(String titleImg) { 32 | this.titleImg = titleImg; 33 | } 34 | 35 | public LinkedHashMap getChoiceList() { 36 | return choiceList; 37 | } 38 | 39 | public void setChoiceList(LinkedHashMap choiceList) { 40 | this.choiceList = choiceList; 41 | } 42 | 43 | public LinkedHashMap getChoiceImgList() { 44 | return choiceImgList; 45 | } 46 | 47 | public void setChoiceImgList(LinkedHashMap choiceImgList) { 48 | this.choiceImgList = choiceImgList; 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/question/QuestionType.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.question; 2 | 3 | import java.io.Serializable; 4 | 5 | public class QuestionType implements Serializable { 6 | 7 | private static final long serialVersionUID = 8020837656124230840L; 8 | private int id; 9 | private String name; 10 | private boolean subjective ; 11 | 12 | public boolean isSubjective() { 13 | return subjective; 14 | } 15 | 16 | public void setSubjective(boolean subjective) { 17 | this.subjective = subjective; 18 | } 19 | 20 | public QuestionType() { 21 | } 22 | public QuestionType(String name) { 23 | this.name=name; 24 | } 25 | public QuestionType(int id, String name) { 26 | this.id = id; 27 | this.name = name; 28 | } 29 | 30 | @Override 31 | public String toString() { 32 | return "QuestionType [id=" + id + ", name=" + name + ", subjective=" 33 | + subjective + "]"; 34 | } 35 | 36 | public int getId() { 37 | return id; 38 | } 39 | 40 | public void setId(int id) { 41 | this.id = id; 42 | } 43 | 44 | public String getName() { 45 | return name; 46 | } 47 | 48 | public void setName(String name) { 49 | this.name = name; 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/training/TrainingSectionProcess.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.training; 2 | 3 | public class TrainingSectionProcess extends TrainingSection { 4 | 5 | private String trainingName; 6 | private int userId; 7 | private String userName; 8 | private float process; 9 | 10 | public int getUserId() { 11 | return userId; 12 | } 13 | 14 | public void setUserId(int userId) { 15 | this.userId = userId; 16 | } 17 | 18 | public String getUserName() { 19 | return userName; 20 | } 21 | 22 | public void setUserName(String userName) { 23 | this.userName = userName; 24 | } 25 | 26 | public String getTrainingName() { 27 | return trainingName; 28 | } 29 | 30 | public void setTrainingName(String trainingName) { 31 | this.trainingName = trainingName; 32 | } 33 | 34 | public float getProcess() { 35 | return process; 36 | } 37 | 38 | public void setProcess(float process) { 39 | this.process = process; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/training/UserTraining.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.training; 2 | 3 | public class UserTraining extends Training { 4 | 5 | private int userId; 6 | private String userName; 7 | private String trueName; 8 | private String depName; 9 | 10 | public String getDepName() { 11 | return depName; 12 | } 13 | public void setDepName(String depName) { 14 | this.depName = depName; 15 | } 16 | public String getTrueName() { 17 | return trueName; 18 | } 19 | public void setTrueName(String trueName) { 20 | this.trueName = trueName; 21 | } 22 | public int getUserId() { 23 | return userId; 24 | } 25 | public void setUserId(int userId) { 26 | this.userId = userId; 27 | } 28 | public String getUserName() { 29 | return userName; 30 | } 31 | public void setUserName(String userName) { 32 | this.userName = userName; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/user/Department.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.user; 2 | 3 | public class Department { 4 | 5 | private int depId; 6 | private String depName; 7 | private String memo; 8 | public String getMemo() { 9 | return memo; 10 | } 11 | public void setMemo(String memo) { 12 | this.memo = memo; 13 | } 14 | public int getDepId() { 15 | return depId; 16 | } 17 | public void setDepId(int depId) { 18 | this.depId = depId; 19 | } 20 | public String getDepName() { 21 | return depName; 22 | } 23 | public void setDepName(String depName) { 24 | this.depName = depName; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/user/Group.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.user; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.xml.bind.annotation.XmlRootElement; 6 | 7 | @XmlRootElement 8 | public class Group implements Serializable { 9 | 10 | private static final long serialVersionUID = -166573023634513538L; 11 | private int groupId; 12 | private String groupName; 13 | private int userId; 14 | private boolean defaultt; 15 | public boolean isDefaultt() { 16 | return defaultt; 17 | } 18 | public void setDefaultt(boolean defaultt) { 19 | this.defaultt = defaultt; 20 | } 21 | public int getUserId() { 22 | return userId; 23 | } 24 | public void setUserId(int userId) { 25 | this.userId = userId; 26 | } 27 | public int getGroupId() { 28 | return groupId; 29 | } 30 | public void setGroupId(int groupId) { 31 | this.groupId = groupId; 32 | } 33 | public String getGroupName() { 34 | return groupName; 35 | } 36 | public void setGroupName(String groupName) { 37 | this.groupName = groupName; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/domain/user/Role.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.domain.user; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.xml.bind.annotation.XmlRootElement; 6 | 7 | @XmlRootElement 8 | public class Role implements Serializable { 9 | private static final long serialVersionUID = -6541723313940343320L; 10 | private int roleId; 11 | private String authority; 12 | private String roleName; 13 | private String roleCode; 14 | public int getRoleId() { 15 | return roleId; 16 | } 17 | public void setRoleId(int roleId) { 18 | this.roleId = roleId; 19 | } 20 | public String getAuthority() { 21 | return authority; 22 | } 23 | public void setAuthority(String authority) { 24 | this.authority = authority; 25 | } 26 | public String getRoleName() { 27 | return roleName; 28 | } 29 | public void setRoleName(String roleName) { 30 | this.roleName = roleName; 31 | } 32 | public String getRoleCode() { 33 | return roleCode; 34 | } 35 | public void setRoleCode(String roleCode) { 36 | this.roleCode = roleCode; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/util/EhcacheTest.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.util; 2 | 3 | import org.springframework.cache.annotation.CacheEvict; 4 | import org.springframework.cache.annotation.Cacheable; 5 | 6 | public class EhcacheTest { 7 | @Cacheable(value = "wordCache") 8 | public String sayWord(String word) { 9 | System.out.println("nocache"); 10 | return word; 11 | } 12 | 13 | @CacheEvict(value = "wordCache", key = "#word") 14 | public String clearWord(String word) { 15 | return "Ok"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/util/Roulette.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.util; 2 | 3 | import java.util.HashMap; 4 | import java.util.Iterator; 5 | import java.util.List; 6 | 7 | import org.apache.commons.logging.Log; 8 | import org.apache.commons.logging.LogFactory; 9 | 10 | public class Roulette { 11 | 12 | public static Log log = LogFactory.getLog(Roulette.class); 13 | private List resultList; 14 | private HashMap chanceMap; 15 | 16 | public Roulette(List resultList,HashMap chanceMap){ 17 | 18 | Iterator it = chanceMap.keySet().iterator(); 19 | float sum = 0; 20 | while(it.hasNext()){ 21 | sum = (float)(Math.round((sum + chanceMap.get(it.next())) * 1000)) / 1000; 22 | 23 | log.info("sum = " + sum); 24 | } 25 | 26 | if(sum == 1 && resultList.size() == chanceMap.size()){ 27 | this.resultList = resultList; 28 | this.chanceMap = chanceMap; 29 | } 30 | } 31 | 32 | public T getResult() throws Exception{ 33 | double result = Math.random(); 34 | double area = chanceMap.get(0); 35 | 36 | if(resultList.size() == 0) 37 | throw new Exception(""); 38 | 39 | //不会出现i+1造成数组越界的情况,因为当i=resultList.size()的时候 40 | //area=1,肯定会大于result,因此函数返回,不会继续执行 41 | for(int i = 0 ; i < resultList.size() ; i ++){ 42 | if(area > result) 43 | return resultList.get(i); 44 | else 45 | area += chanceMap.get(i + 1); 46 | } 47 | return null; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/util/StandardPasswordEncoderForSha1.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.util; 2 | 3 | import java.security.MessageDigest; 4 | import java.security.NoSuchAlgorithmException; 5 | 6 | import org.springframework.security.crypto.password.PasswordEncoder; 7 | 8 | /** 9 | * 2013-7-13 10 | * @author scar 11 | * sha加密算法,实现PasswordEncoder 12 | */ 13 | public class StandardPasswordEncoderForSha1 implements PasswordEncoder { 14 | 15 | @Override 16 | public String encode(CharSequence rwPassword) { 17 | // TODO Auto-generated method stub 18 | MessageDigest mDigest = null; 19 | try { 20 | mDigest = MessageDigest.getInstance("SHA1"); 21 | } catch (NoSuchAlgorithmException e) { 22 | // TODO Auto-generated catch block 23 | e.printStackTrace(); 24 | } 25 | byte[] result = mDigest.digest(rwPassword.toString().getBytes()); 26 | StringBuffer sb = new StringBuffer(); 27 | for (int i = 0; i < result.length; i++) { 28 | sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1)); 29 | } 30 | 31 | return sb.toString(); 32 | } 33 | 34 | @Override 35 | public boolean matches(CharSequence rwPassword, String password) { 36 | // TODO Auto-generated method stub 37 | return rwPassword.equals(password) ? true : false; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/util/StreamGobbler.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.util; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | import java.io.InputStreamReader; 7 | 8 | public class StreamGobbler extends Thread { 9 | 10 | private InputStream is; 11 | private String type; 12 | 13 | public StreamGobbler(InputStream is, String type){ 14 | this.is = is; 15 | this.type = type; 16 | } 17 | 18 | public void run(){ 19 | 20 | try { 21 | InputStreamReader isr = new InputStreamReader(is); 22 | BufferedReader br = new BufferedReader(isr); 23 | String line = null; 24 | while ((line = br.readLine()) != null){ 25 | if (type.equals("Error")){ 26 | System.out.println("Error:" + line); 27 | }else{ 28 | System.out.println("Debug:" + line); 29 | } 30 | } 31 | } catch (IOException e) { 32 | // TODO Auto-generated catch block 33 | e.printStackTrace(); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/util/StringUtil.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.util; 2 | 3 | public class StringUtil { 4 | 5 | public static String format(String str,int length){ 6 | while(str.length() > length) 7 | length ++; 8 | while(str.length() < length){ 9 | str = "0" + str; 10 | } 11 | return str; 12 | } 13 | 14 | public static String format(int num,int length){ 15 | String str = Integer.toHexString(num); 16 | return format(str, length); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /common/src/main/java/com/examstack/common/util/xml/Object2Xml.java: -------------------------------------------------------------------------------- 1 | package com.examstack.common.util.xml; 2 | 3 | import com.thoughtworks.xstream.XStream; 4 | import com.thoughtworks.xstream.io.xml.DomDriver; 5 | 6 | public class Object2Xml { 7 | public static String toXml(Object obj){ 8 | XStream xstream=new XStream(); 9 | xstream.processAnnotations(obj.getClass()); 10 | 11 | return xstream.toXML(obj); 12 | } 13 | 14 | public static T toBean(String xmlStr,Class cls){ 15 | XStream xstream=new XStream(new DomDriver()); 16 | xstream.processAnnotations(cls); 17 | @SuppressWarnings("unchecked") 18 | T obj=(T)xstream.fromXML(xmlStr); 19 | return obj; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /common/src/main/resources/ehcache.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /common/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | ### direct log messages to stdout ### 2 | log4j.appender.stdout = org.apache.log4j.ConsoleAppender 3 | log4j.appender.stdout.Target = System.out 4 | log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %-5p %-5C %M:%-L%x -> %m%n 6 | 7 | ### direct log messages to file ### 8 | log4j.appender.file = org.apache.log4j.RollingFileAppender 9 | log4j.appender.file.File = ../logs/common.log 10 | log4j.appender.file.MaxFileSize = 2000KB 11 | log4j.appender.file.MaxBackupIndex =1 12 | log4j.appender.file.layout = org.apache.log4j.PatternLayout 13 | log4j.appender.file.layout.ConversionPattern = %d %-5p %-5C:%L %x -> %m%n 14 | 15 | # Root logger level. 16 | log4j.rootLogger = info, file, stdout 17 | 18 | # Logging level for the framework packages: 19 | log4j.logger =info -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/controller/action/teacher/DashBoardPageTeacher.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.controller.action.teacher; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.ui.Model; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | 11 | import com.examstack.common.domain.question.Field; 12 | import com.examstack.management.service.QuestionService; 13 | 14 | @Controller 15 | public class DashBoardPageTeacher { 16 | @Autowired 17 | private QuestionService questionService; 18 | 19 | 20 | @RequestMapping(value = "/teacher/dashboard", method = RequestMethod.GET) 21 | public String dashboardPage(Model model) { 22 | 23 | List fieldList = questionService.getAllField(null); 24 | 25 | 26 | model.addAttribute("fieldList", fieldList); 27 | return "dashboard"; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/controller/page/SystemPage.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.controller.page; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.ui.Model; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | 11 | import com.examstack.management.service.UserService; 12 | 13 | 14 | 15 | @Controller 16 | public class SystemPage { 17 | 18 | @Autowired 19 | private UserService userService; 20 | 21 | /** 22 | * 系统备份页面 23 | * 24 | * @param model 25 | * @param request 26 | * @return 27 | */ 28 | @RequestMapping(value = "/admin/sys-backup", method = RequestMethod.GET) 29 | private String sysBackUpPage(Model model, HttpServletRequest request) { 30 | return "sys-backup"; 31 | } 32 | 33 | 34 | } 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/controller/page/admin/DashBoardPageAdmin.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.controller.page.admin; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.ui.Model; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | 11 | import com.examstack.common.domain.question.Field; 12 | import com.examstack.management.service.QuestionService; 13 | 14 | @Controller 15 | public class DashBoardPageAdmin { 16 | @Autowired 17 | private QuestionService questionService; 18 | 19 | 20 | @RequestMapping(value = "/admin/dashboard", method = RequestMethod.GET) 21 | public String dashboardPage(Model model) { 22 | 23 | List fieldList = questionService.getAllField(null); 24 | 25 | 26 | model.addAttribute("fieldList", fieldList); 27 | return "dashboard"; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/persistence/ExamPaperMapper.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.persistence; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.examstack.common.domain.exam.ExamPaper; 8 | import com.examstack.common.util.Page; 9 | 10 | public interface ExamPaperMapper { 11 | 12 | public List getExamPaperList(@Param("searchStr") String searchStr,@Param("paperType") String paperType, @Param("page") Page page); 13 | 14 | public void insertExamPaper(ExamPaper examPaper); 15 | 16 | public ExamPaper getExamPaperById(int examPaperId); 17 | 18 | public void updateExamPaper(ExamPaper examPaper); 19 | 20 | public void deleteExamPaper(int id); 21 | 22 | public List getEnabledExamPaperList(@Param("userName") String userName,@Param("page") Page page); 23 | } 24 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/persistence/NewsMapper.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.persistence; 2 | 3 | import java.util.List; 4 | 5 | import com.examstack.common.domain.news.News; 6 | import com.examstack.common.util.Page; 7 | 8 | public interface NewsMapper { 9 | 10 | public List getNewsList(Page page); 11 | 12 | public News getNewsById(int newsId); 13 | 14 | public void addNews(News news); 15 | } 16 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/persistence/QuestionHistoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.persistence; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.examstack.common.domain.exam.UserQuestionHistory; 8 | import com.examstack.common.domain.question.QuestionStatistic; 9 | 10 | public interface QuestionHistoryMapper { 11 | 12 | /** 13 | * 插入试题历史 14 | * @param historyList 15 | */ 16 | public void addUserQuestionHist(@Param("array") List historyList); 17 | 18 | /** 19 | * 获取用户的试题练习历史 20 | * @param userId 21 | * @param fieldId 22 | * @return 23 | */ 24 | public List getUserQuestionHist(@Param("userId") int userId,@Param("fieldId") int fieldId); 25 | 26 | /** 27 | * 根据fieldId,pointId分组统计练习历史试题数量 28 | * @param fieldId 29 | * @param userId 30 | * @return 31 | */ 32 | public List getQuestionHistStaticByFieldId(@Param("fieldId") int fieldId,@Param("userId") int userId); 33 | 34 | /** 35 | * 根据fieldId,pointId,typeId分组统计练习历史试题数量 36 | * @param fieldId 37 | * @param userId 38 | * @return 39 | */ 40 | public List getTypeQuestionHistStaticByFieldId(@Param("fieldId") int fieldId,@Param("userId") int userId); 41 | } 42 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/persistence/SystemMapper.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.persistence; 2 | 3 | import java.util.List; 4 | 5 | import com.examstack.common.util.MenuItem; 6 | 7 | 8 | public interface SystemMapper { 9 | 10 | public List getMenuItemsByAuthority(String authority); 11 | } 12 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/security/UserInfoUtil.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.security; 2 | 3 | import org.springframework.security.core.context.SecurityContextHolder; 4 | 5 | 6 | public class UserInfoUtil { 7 | public static UserInfo getUserInfo(){ 8 | UserInfo userInfo=(UserInfo)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 9 | return userInfo; 10 | } 11 | /*public static void main(String[] args){ 12 | List initList= new ArrayList(); 13 | List resultList= new ArrayList(); 14 | for(int i=0;i<20;i++){ 15 | initList.add(new Question(i)); 16 | } 17 | 18 | System.out.println("未生成之前:"+initList); 19 | //resultList=getQuestionListByRandom(initList,10); 20 | System.out.println("生成之后:"+resultList); 21 | 22 | }*/ 23 | 24 | 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/service/NewsService.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.service; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.stereotype.Service; 6 | 7 | import com.examstack.common.domain.news.News; 8 | import com.examstack.common.util.Page; 9 | 10 | @Service 11 | public interface NewsService { 12 | 13 | public List getNewsList(Page page); 14 | 15 | public News getNewsById(int newsId); 16 | 17 | public void addNews(News news); 18 | } 19 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/service/NewsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.service; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | 8 | import com.examstack.common.domain.news.News; 9 | import com.examstack.common.util.Page; 10 | import com.examstack.management.persistence.NewsMapper; 11 | 12 | @Service 13 | public class NewsServiceImpl implements NewsService { 14 | 15 | @Autowired 16 | private NewsMapper newsMapper; 17 | @Override 18 | public List getNewsList(Page page) { 19 | // TODO Auto-generated method stub 20 | return newsMapper.getNewsList(page); 21 | } 22 | 23 | @Override 24 | public News getNewsById(int newsId) { 25 | // TODO Auto-generated method stub 26 | return newsMapper.getNewsById(newsId); 27 | } 28 | 29 | @Override 30 | public void addNews(News news) { 31 | // TODO Auto-generated method stub 32 | newsMapper.addNews(news); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/service/QuestionHistoryService.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.service; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | import com.examstack.common.domain.exam.UserQuestionHistory; 7 | import com.examstack.common.domain.question.QuestionStatistic; 8 | 9 | public interface QuestionHistoryService { 10 | 11 | /** 12 | * 插入试题历史 13 | * @param historyList 14 | */ 15 | public void addUserQuestionHist(List historyList); 16 | 17 | /** 18 | * 插入试题历史 19 | * @param history 20 | */ 21 | public void addUserQuestionHist(UserQuestionHistory ... history); 22 | 23 | /** 24 | * 获取用户的试题练习历史 25 | * @param userId 26 | * @param fieldId 27 | * @return Map<知识点,List> 28 | */ 29 | public Map> getUserQuestionHist(int userId,int fieldId); 30 | 31 | /** 32 | * 根据fieldId,pointId分组统计练习历史试题数量 33 | * @param fieldId 34 | * @param userId 35 | * @return 36 | */ 37 | public Map getQuestionHistStaticByFieldId(int fieldId, int userId); 38 | 39 | /** 40 | * 根据fieldId,pointId,typeId分组统计练习历史试题数量 41 | * @param fieldId 42 | * @param userId 43 | * @return 44 | */ 45 | public Map> getTypeQuestionHistStaticByFieldId(int fieldId, int userId); 46 | } 47 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/service/SystemService.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.service; 2 | 3 | import java.util.LinkedHashMap; 4 | 5 | import org.springframework.stereotype.Service; 6 | 7 | import com.examstack.common.util.MenuItem; 8 | 9 | @Service 10 | public interface SystemService { 11 | 12 | public LinkedHashMap getMenuItemsByAuthority(String authority); 13 | } 14 | -------------------------------------------------------------------------------- /management/src/main/java/com/examstack/management/service/SystemServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.examstack.management.service; 2 | 3 | import java.util.LinkedHashMap; 4 | import java.util.List; 5 | 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | 9 | import com.examstack.common.util.MenuItem; 10 | import com.examstack.management.persistence.SystemMapper; 11 | 12 | @Service("SystemService") 13 | public class SystemServiceImpl implements SystemService { 14 | 15 | @Autowired 16 | private SystemMapper systemMapper; 17 | @Override 18 | public LinkedHashMap getMenuItemsByAuthority(String authority) { 19 | // TODO Auto-generated method stub 20 | List ml = systemMapper.getMenuItemsByAuthority(authority); 21 | 22 | LinkedHashMap map = new LinkedHashMap(); 23 | for(MenuItem item : ml){ 24 | if(item.getParentId().equals("-1")){ 25 | LinkedHashMap childs = new LinkedHashMap(); 26 | for(MenuItem mi : ml){ 27 | if(mi.getParentId().equals(item.getMenuId())){ 28 | childs.put(mi.getMenuId(), mi); 29 | } 30 | } 31 | item.setChildMap(childs); 32 | map.put(item.getMenuId(), item); 33 | } 34 | } 35 | return map; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /management/src/main/resources/com/examstack/management/persistence/NewsMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | 20 | 21 | insert into et_news (title,content,user_id) 22 | value 23 | (#{title},#{content},#{userId}) 24 | 25 | -------------------------------------------------------------------------------- /management/src/main/resources/com/examstack/management/persistence/SystemMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /management/src/main/resources/ehcache.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /management/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | ### direct log messages to stdout ### 2 | log4j.appender.stdout = org.apache.log4j.ConsoleAppender 3 | log4j.appender.stdout.Target = System.out 4 | log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %-5p %-5C %M:%-L%x -> %m%n 6 | 7 | ### direct log messages to file ### 8 | log4j.appender.file = org.apache.log4j.RollingFileAppender 9 | log4j.appender.file.File = ../logs/examstack/management.log 10 | log4j.appender.file.MaxFileSize = 2000KB 11 | log4j.appender.file.MaxBackupIndex =1 12 | log4j.appender.file.layout = org.apache.log4j.PatternLayout 13 | log4j.appender.file.layout.ConversionPattern = %d %-5p %-5C:%L %x -> %m%n 14 | 15 | # Root logger level. 16 | log4j.rootLogger = info, file, stdout 17 | 18 | # Logging level for the framework packages: 19 | log4j.logger =info -------------------------------------------------------------------------------- /management/src/main/webapp/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Class-Path: 3 | 4 | -------------------------------------------------------------------------------- /management/src/main/webapp/WEB-INF/spring/appServlet/controllers.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 12 | -------------------------------------------------------------------------------- /management/src/main/webapp/WEB-INF/spring/rabbitmq.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /management/src/main/webapp/WEB-INF/spring/scheduler.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /management/src/main/webapp/WEB-INF/views/common/footer.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=utf-8"%> 2 |
3 |
4 |
5 |
6 |

7 | ExamStack Copyright © ExamStack - 主页 | 关于我们 | FAQ | 联系我们 8 |

9 |
10 |
11 |
12 | 13 |
-------------------------------------------------------------------------------- /management/src/main/webapp/WEB-INF/views/common/left-menu.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=utf-8"%> 2 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 | -------------------------------------------------------------------------------- /management/src/main/webapp/WEB-INF/views/common/top-menu.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=utf-8"%> 2 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 | -------------------------------------------------------------------------------- /management/src/main/webapp/WEB-INF/views/footer.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=utf-8"%> 2 |
3 |
4 |
5 |
6 |

7 | ExamStack Copyright © ExamStack - 主页 | 关于我们 | FAQ | 联系我们 8 |

9 |
10 |
11 |
12 | 13 |
-------------------------------------------------------------------------------- /management/src/main/webapp/WEB-INF/views/tmp.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 | <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> 3 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 | <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 5 | <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 6 | 7 | <%-- <%@taglib uri="spring.tld" prefix="spring"%> --%> 8 | <% 9 | String path = request.getContextPath(); 10 | String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 11 | %> 12 | 13 | 14 | 15 | 16 | 17 | 18 | My JSP 'tmp.jsp' starting page 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | This is my JSP page.
34 | 35 | 36 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /management/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /management/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /management/src/main/webapp/resources/chart/less/morris.core.less: -------------------------------------------------------------------------------- 1 | .morris-hover { 2 | position: absolute; 3 | z-index: 1000; 4 | 5 | &.morris-default-style { 6 | border-radius: 10px; 7 | padding: 6px; 8 | color: #666; 9 | background: rgba(255, 255, 255, 0.8); 10 | border: solid 2px rgba(230, 230, 230, 0.8); 11 | 12 | font-family: sans-serif; 13 | font-size: 12px; 14 | text-align: center; 15 | 16 | .morris-hover-row-label { 17 | font-weight: bold; 18 | margin: 0.25em 0; 19 | } 20 | 21 | .morris-hover-point { 22 | white-space: nowrap; 23 | margin: 0.1em 0; 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/chart/lib/morris.coffee: -------------------------------------------------------------------------------- 1 | Morris = window.Morris = {} 2 | 3 | $ = jQuery 4 | 5 | # Very simple event-emitter class. 6 | # 7 | # @private 8 | class Morris.EventEmitter 9 | on: (name, handler) -> 10 | unless @handlers? 11 | @handlers = {} 12 | unless @handlers[name]? 13 | @handlers[name] = [] 14 | @handlers[name].push(handler) 15 | @ 16 | 17 | fire: (name, args...) -> 18 | if @handlers? and @handlers[name]? 19 | for handler in @handlers[name] 20 | handler(args...) 21 | 22 | # Make long numbers prettier by inserting commas. 23 | # 24 | # @example 25 | # Morris.commas(1234567) -> '1,234,567' 26 | Morris.commas = (num) -> 27 | if num? 28 | ret = if num < 0 then "-" else "" 29 | absnum = Math.abs(num) 30 | intnum = Math.floor(absnum).toFixed(0) 31 | ret += intnum.replace(/(?=(?:\d{3})+$)(?!^)/g, ',') 32 | strabsnum = absnum.toString() 33 | if strabsnum.length > intnum.length 34 | ret += strabsnum.slice(intnum.length) 35 | ret 36 | else 37 | '-' 38 | 39 | # Zero-pad numbers to two characters wide. 40 | # 41 | # @example 42 | # Morris.pad2(1) -> '01' 43 | Morris.pad2 = (number) -> (if number < 10 then '0' else '') + number 44 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/chart/lib/morris.hover.coffee: -------------------------------------------------------------------------------- 1 | class Morris.Hover 2 | # Displays contextual information in a floating HTML div. 3 | 4 | @defaults: 5 | class: 'morris-hover morris-default-style' 6 | 7 | constructor: (options = {}) -> 8 | @options = $.extend {}, Morris.Hover.defaults, options 9 | @el = $ "
" 10 | @el.hide() 11 | @options.parent.append(@el) 12 | 13 | update: (html, x, y) -> 14 | @html(html) 15 | @show() 16 | @moveTo(x, y) 17 | 18 | html: (content) -> 19 | @el.html(content) 20 | 21 | moveTo: (x, y) -> 22 | parentWidth = @options.parent.innerWidth() 23 | parentHeight = @options.parent.innerHeight() 24 | hoverWidth = @el.outerWidth() 25 | hoverHeight = @el.outerHeight() 26 | left = Math.min(Math.max(0, x - hoverWidth / 2), parentWidth - hoverWidth) 27 | if y? 28 | top = y - hoverHeight - 10 29 | if top < 0 30 | top = y + 10 31 | if top + hoverHeight > parentHeight 32 | top = parentHeight / 2 - hoverHeight / 2 33 | else 34 | top = parentHeight / 2 - hoverHeight / 2 35 | @el.css(left: left + "px", top: parseInt(top) + "px") 36 | 37 | show: -> 38 | @el.show() 39 | 40 | hide: -> 41 | @el.hide() 42 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/chart/morris.css: -------------------------------------------------------------------------------- 1 | .morris-hover{position:absolute;z-index:1000;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255, 255, 255, 0.8);border:solid 2px rgba(230, 230, 230, 0.8);font-family:sans-serif;font-size:12px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;} 2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;} 3 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/chartjs/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Chart.js", 3 | "version": "1.0.1-beta.3", 4 | "description": "Simple HTML5 Charts using the canvas element", 5 | "homepage": "https://github.com/nnnick/Chart.js", 6 | "author": "nnnick", 7 | "main": [ 8 | "Chart.min.js" 9 | ], 10 | "dependencies": {} 11 | } -------------------------------------------------------------------------------- /management/src/main/webapp/resources/chartjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chart.js", 3 | "homepage": "http://www.chartjs.org", 4 | "description": "Simple HTML5 charts using the canvas element.", 5 | "version": "1.0.1-beta.3", 6 | "main": "Chart.js", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/nnnick/Chart.js.git" 10 | }, 11 | "dependences": {}, 12 | "devDependencies": { 13 | "gulp": "3.5.x", 14 | "gulp-concat": "~2.1.x", 15 | "gulp-connect": "~2.0.5", 16 | "gulp-jshint": "~1.5.1", 17 | "gulp-replace": "^0.4.0", 18 | "gulp-size": "~0.4.0", 19 | "gulp-uglify": "~0.2.x", 20 | "gulp-util": "~2.2.x", 21 | "inquirer": "^0.5.1", 22 | "semver": "^3.0.1" 23 | } 24 | } -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/admin-login-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/admin-login-bg.jpg -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/admin-login-bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/admin-login-bg2.jpg -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/bg.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/error.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/icon20_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/icon20_20.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/info.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/pattern-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/pattern-1.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/success.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-bg_flat_0_eeeeee_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-bg_flat_0_eeeeee_40x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-bg_flat_55_c0402a_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-bg_flat_55_c0402a_40x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-bg_flat_55_eeeeee_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-bg_flat_55_eeeeee_40x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-bg_glass_100_f8f8f8_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-bg_glass_100_f8f8f8_1x400.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-bg_glass_35_dddddd_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-bg_glass_35_dddddd_1x400.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-bg_glass_60_eeeeee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-bg_glass_60_eeeeee_1x400.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-bg_inset-hard_75_999999_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-bg_inset-hard_75_999999_1x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-bg_inset-soft_50_c9c9c9_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-bg_inset-soft_50_c9c9c9_1x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-icons_0073ea_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-icons_0073ea_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-icons_3383bb_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-icons_3383bb_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240_2.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240_3.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-icons_70b2e1_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-icons_70b2e1_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-icons_fbc856_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-icons_fbc856_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/jquery.placeholder.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery Placeholder Plugin - v0.7.0 - 2013-02-18 2 | * http://andrew-jones.com/jquery-placeholder-plugin 3 | * Copyright (c) 2013 Andrew Jones; Licensed MIT */ 4 | .placeholder{color:#666}.placeholderFocus{color:#666} -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/proton/d-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/proton/d-mobile.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/proton/d-old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/proton/d-old.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/proton/d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/proton/d.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/proton/d.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/proton/d.psd -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/proton/dot_for_ie.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/proton/dot_for_ie.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/proton/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/proton/file.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/proton/style.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Proton override less files for Bootstrap v3.0.0 3 | * 4 | * Created using Bootstrap customization guidelines: 5 | * http://getbootstrap.com/getting-started/#customizing 6 | */ 7 | 8 | @import "proton-variables.less"; 9 | @import "proton-mixins.less"; 10 | 11 | @import "proton-jstree.less"; -------------------------------------------------------------------------------- /management/src/main/webapp/resources/css/proton/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/css/proton/throbber.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/files/test.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/files/test.mp4 -------------------------------------------------------------------------------- /management/src/main/webapp/resources/flash/beelden.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/flash/beelden.zip -------------------------------------------------------------------------------- /management/src/main/webapp/resources/flash/player.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/flash/player.swf -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "spinning.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: -@fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon-rotate(@degrees, @rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 6 | -webkit-transform: rotate(@degrees); 7 | -moz-transform: rotate(@degrees); 8 | -ms-transform: rotate(@degrees); 9 | -o-transform: rotate(@degrees); 10 | transform: rotate(@degrees); 11 | } 12 | 13 | .fa-icon-flip(@horiz, @vert, @rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 15 | -webkit-transform: scale(@horiz, @vert); 16 | -moz-transform: scale(@horiz, @vert); 17 | -ms-transform: scale(@horiz, @vert); 18 | -o-transform: scale(@horiz, @vert); 19 | transform: scale(@horiz, @vert); 20 | } 21 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: ~"url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}')"; 7 | src: ~"url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype')", 8 | ~"url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff')", 9 | ~"url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype')", 10 | ~"url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg')"; 11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @keyframes spin { 24 | 0% { 25 | -webkit-transform: rotate(0deg); 26 | transform: rotate(0deg); 27 | } 28 | 100% { 29 | -webkit-transform: rotate(359deg); 30 | transform: rotate(359deg); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon-rotate($degrees, $rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 6 | -webkit-transform: rotate($degrees); 7 | -moz-transform: rotate($degrees); 8 | -ms-transform: rotate($degrees); 9 | -o-transform: rotate($degrees); 10 | transform: rotate($degrees); 11 | } 12 | 13 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 15 | -webkit-transform: scale($horiz, $vert); 16 | -moz-transform: scale($horiz, $vert); 17 | -ms-transform: scale($horiz, $vert); 18 | -o-transform: scale($horiz, $vert); 19 | transform: scale($horiz, $vert); 20 | } 21 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @keyframes spin { 24 | 0% { 25 | -webkit-transform: rotate(0deg); 26 | transform: rotate(0deg); 27 | } 28 | 100% { 29 | -webkit-transform: rotate(359deg); 30 | transform: rotate(359deg); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/demos/json/events.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "All Day Event", 4 | "start": "2014-09-01" 5 | }, 6 | { 7 | "title": "Long Event", 8 | "start": "2014-09-07", 9 | "end": "2014-09-10" 10 | }, 11 | { 12 | "id": "999", 13 | "title": "Repeating Event", 14 | "start": "2014-09-09T16:00:00-05:00" 15 | }, 16 | { 17 | "id": "999", 18 | "title": "Repeating Event", 19 | "start": "2014-09-16T16:00:00-05:00" 20 | }, 21 | { 22 | "title": "Conference", 23 | "start": "2014-09-11", 24 | "end": "2014-09-13" 25 | }, 26 | { 27 | "title": "Meeting", 28 | "start": "2014-09-12T10:30:00-05:00", 29 | "end": "2014-09-12T12:30:00-05:00" 30 | }, 31 | { 32 | "title": "Lunch", 33 | "start": "2014-09-12T12:00:00-05:00" 34 | }, 35 | { 36 | "title": "Meeting", 37 | "start": "2014-09-12T14:30:00-05:00" 38 | }, 39 | { 40 | "title": "Happy Hour", 41 | "start": "2014-09-12T17:30:00-05:00" 42 | }, 43 | { 44 | "title": "Dinner", 45 | "start": "2014-09-12T20:00:00" 46 | }, 47 | { 48 | "title": "Birthday Party", 49 | "start": "2014-09-13T07:00:00-05:00" 50 | }, 51 | { 52 | "title": "Click for Google", 53 | "url": "http://google.com/", 54 | "start": "2014-09-28" 55 | } 56 | ] 57 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/demos/php/get-timezones.php: -------------------------------------------------------------------------------- 1 | e?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}}),e.fullCalendar.datepickerLang("ja","ja",{closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),e.fullCalendar.lang("ja",{defaultButtonText:{month:"月",week:"週",day:"日",list:"予定リスト"},allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"}})}); -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/animated-overlay.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_glass_50_3baae3_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_glass_50_3baae3_1x400.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_2694e8_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_2694e8_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_3d80b3_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_3d80b3_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_72a7cf_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_72a7cf_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/fullcalendar-2.1.1/lib/cupertino/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/fullcalendar-2.1.1/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Adam Shaw 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/ad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/ad.jpg -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/ad.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/error.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/favicon.ico -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/icon-all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/icon-all.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/icon20_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/icon20_20.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/info.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/loading.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/logo-s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/logo-s.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/logo.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/photo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/photo.jpg -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/simplest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/simplest.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/success.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/training-content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/training-content.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/images/user.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/contextmenu/images/cmenu-gloss-cyan-menu-item-hover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/contextmenu/images/cmenu-gloss-cyan-menu-item-hover.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/contextmenu/images/cmenu-gloss-menu-item-hover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/contextmenu/images/cmenu-gloss-menu-item-hover.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/contextmenu/images/cmenu-gloss-semitransparent-menu-item-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/contextmenu/images/cmenu-gloss-semitransparent-menu-item-hover.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/contextmenu/images/cmenu-human-menu-item-hover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/contextmenu/images/cmenu-human-menu-item-hover.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/contextmenu/images/cmenu-osx-menu-item-hover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/contextmenu/images/cmenu-osx-menu-item-hover.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/contextmenu/images/cmenu-vista-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/contextmenu/images/cmenu-vista-bg.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/contextmenu/images/cmenu-vista-menu-item-hover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/contextmenu/images/cmenu-vista-menu-item-hover.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/contextmenu/images/cmenu-xp-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/contextmenu/images/cmenu-xp-bg.gif -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/exam-finished.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | Morris.Donut({ 3 | element : 'graph-base', 4 | data : [{ 5 | label : "答对题目", 6 | value : parseInt($(".exam-report-correct .label-success").text()) 7 | }, { 8 | label : "答错题目", 9 | value : parseInt($(".exam-report-error .label-danger").text()) 10 | }], 11 | colors : ['#5cb85c', '#da4f49'], 12 | labelColor : '#1ba1e2' 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/field-2-point.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var selection = $("#aq-course1").find("select"); 3 | // alert("111"); 4 | var point_list = $("#aq-course2").find("select"); 5 | selection.change(function(){ 6 | $.ajax({ 7 | headers : { 8 | 'Accept' : 'application/json', 9 | 'Content-Type' : 'application/json' 10 | }, 11 | type : "GET", 12 | url : "secure/question/get-knowledge-point/" + selection.val(), 13 | success : function(message,tst,jqXHR) { 14 | if(!util.checkSessionOut(jqXHR))return false; 15 | if (message.result == "success") { 16 | point_list.empty(); 17 | $.each(message.object,function(key,values){ 18 | point_list.append(""); 19 | }); 20 | } else { 21 | util.error("操作失败请稍后尝试"); 22 | } 23 | }, 24 | error : function(xhr) { 25 | util.error("操作失败请稍后尝试"); 26 | } 27 | }); 28 | }); 29 | }); 30 | 31 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/field-list.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | 3 | field_list.initial(); 4 | }); 5 | 6 | var field_list = { 7 | initial : function initial() { 8 | this.bindDelete(); 9 | }, 10 | genrateParamOld :function genrateParamOld(){ 11 | 12 | var page = 1; 13 | var data = new Object(); 14 | data.page = page; 15 | 16 | return data; 17 | }, 18 | 19 | redirectUrl : function(newparam) { 20 | var paramurl = newparam.page; 21 | 22 | document.location.href = document.getElementsByTagName('base')[0].href 23 | + 'admin/common/field-list-' + paramurl; 24 | }, 25 | 26 | 27 | bindDelete : function bindDelete(){ 28 | $(".delete-btn").click(function(){ 29 | 30 | $.ajax({ 31 | headers : { 32 | 'Accept' : 'application/json', 33 | 'Content-Type' : 'application/json' 34 | }, 35 | type : "GET", 36 | url : "admin/common/delete-field-" + $(this).data("id"), 37 | success : function(message, tst, jqXHR) { 38 | if (!util.checkSessionOut(jqXHR)) 39 | return false; 40 | if (message.result == "success") { 41 | util.success("删除成功", function(){ 42 | window.location.reload(); 43 | }); 44 | } else { 45 | util.error("操作失败请稍后尝试:" + message.result); 46 | } 47 | 48 | }, 49 | error : function(jqXHR, textStatus) { 50 | util.error("操作失败请稍后尝试"); 51 | } 52 | }); 53 | 54 | return false; 55 | 56 | 57 | 58 | }); 59 | } 60 | }; -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/jquery.ui.datepicker-zh-TW.js: -------------------------------------------------------------------------------- 1 | /* Chinese initialisation for the jQuery UI date picker plugin. */ 2 | /* Written by Ressol (ressol@gmail.com). */ 3 | jQuery(function($){ 4 | $.datepicker.regional['zh-TW'] = { 5 | closeText: '关闭', 6 | prevText: '<上月', 7 | nextText: '下月>', 8 | currentText: '今天', 9 | monthNames: ['一月','二月','三月','四月','五月','六月', 10 | '七月','八月','九月','十月','十一月','十二月'], 11 | monthNamesShort: ['一月','二月','三月','四月','五月','六月', 12 | '七月','八月','九月','十月','十一月','十二月'], 13 | dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], 14 | dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], 15 | dayNamesMin: ['日','一','二','三','四','五','六'], 16 | weekHeader: '周', 17 | dateFormat: 'yy/mm/dd', 18 | firstDay: 1, 19 | isRTL: false, 20 | showMonthAfterYear: true, 21 | yearSuffix: '年'}; 22 | $.datepicker.setDefaults($.datepicker.regional['zh-TW']); 23 | }); 24 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/point-select.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var point_div = $("#point-select-result"); 3 | var btn = $("#btn-point-add"); 4 | var innerHtml = point_div.html(); 5 | btn.click(function(){ 6 | 7 | }); 8 | }); -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/pwd-change.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var form = $("#form-change-password"); 3 | form.submit(function(){ 4 | var user = new Object(); 5 | var password = $("#password").val(); 6 | var password_confirm = $("#password-confirm").val(); 7 | if(password != password_confirm){ 8 | $(".form-password-confirm .form-message").text("两次密码不一致!"); 9 | return false; 10 | } 11 | if(password.length > 10 || password.length <6){ 12 | $(".form-password .form-message").text("长度请保持在6到10之间!"); 13 | return false; 14 | } 15 | user.password = password; 16 | $.ajax({ 17 | headers : { 18 | 'Accept' : 'application/json', 19 | 'Content-Type' : 'application/json' 20 | }, 21 | type : "POST", 22 | url : form.attr("action"), 23 | data : JSON.stringify(user), 24 | success : function(message, tst, jqXHR) { 25 | if (!util.checkSessionOut(jqXHR)) 26 | return false; 27 | if (message.result == "success") { 28 | util.success("修改成功", function() { 29 | document.location.href = document.getElementsByTagName('base')[0].href + 'home'; 30 | }); 31 | } else { 32 | util.error("操作失败请稍后尝试"); 33 | } 34 | 35 | }, 36 | error : function(jqXHR, textStatus) { 37 | util.error("操作失败请稍后尝试"); 38 | } 39 | }); 40 | return false; 41 | }); 42 | }); -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/question-lib.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | $(".delete-btn").click(function() { 3 | 4 | $.ajax({ 5 | headers : { 6 | 'Accept' : 'application/json', 7 | 'Content-Type' : 'application/json' 8 | }, 9 | type : "GET", 10 | url : util.getCurrentRole() + "/delete-field-" + $(this).data("id"), 11 | success : function(message, tst, jqXHR) { 12 | if (!util.checkSessionOut(jqXHR)) 13 | return false; 14 | if (message.result == "success") { 15 | util.success("删除成功", function() { 16 | window.location.reload(); 17 | }); 18 | } else { 19 | util.error("操作失败请稍后尝试:" + message.result); 20 | } 21 | 22 | }, 23 | error : function(jqXHR, textStatus) { 24 | util.error("操作失败请稍后尝试"); 25 | } 26 | }); 27 | 28 | return false; 29 | 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/tag-list.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | 3 | tag_list.initial(); 4 | }); 5 | 6 | var tag_list = { 7 | initial : function initial() { 8 | this.bindDelete(); 9 | }, 10 | 11 | 12 | 13 | genrateParamOld :function genrateParamOld(){ 14 | 15 | var page = 1; 16 | var data = new Object(); 17 | data.page = page; 18 | 19 | return data; 20 | }, 21 | 22 | redirectUrl : function(newparam) { 23 | var paramurl = newparam.page; 24 | 25 | document.location.href = document.getElementsByTagName('base')[0].href 26 | + 'admin/common/tag-list-' + paramurl; 27 | }, 28 | 29 | 30 | bindDelete : function bindDelete(){ 31 | $(".delete-btn").click(function(){ 32 | 33 | $.ajax({ 34 | headers : { 35 | 'Accept' : 'application/json', 36 | 'Content-Type' : 'application/json' 37 | }, 38 | type : "GET", 39 | url : "admin/common/tag-delete-" + $(this).data("id"), 40 | success : function(message, tst, jqXHR) { 41 | if (!util.checkSessionOut(jqXHR)) 42 | return false; 43 | if (message.result == "success") { 44 | util.success("删除成功", function(){ 45 | window.location.reload(); 46 | }); 47 | } else { 48 | util.error("操作失败请稍后尝试:" + message.result); 49 | } 50 | 51 | }, 52 | error : function(jqXHR, textStatus) { 53 | util.error("操作失败请稍后尝试"); 54 | } 55 | }); 56 | 57 | return false; 58 | 59 | 60 | 61 | }); 62 | } 63 | }; -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/uploadify/Change Log.txt: -------------------------------------------------------------------------------- 1 | Uploadify Change Log 2 | Copyright (c) 2012 by Reactive Apps, Ronnie Garcia 3 | 4 | v3.2.1 5 | - Updated uploadify.swf with security updates from secure swfupload. 6 | 7 | v3.2 8 | - Added a new option for itemTemplate where you can create an HTML template for the items that are added to the queue 9 | 10 | v3.1.1 11 | - Fixed issue with incorrect queueLength 12 | 13 | v3.1.0 14 | - Switched to the preferred jQuery plugin pattern 15 | - Added references to all elements 16 | - Removed flash based image 17 | - Added fallback method 18 | - Fixed onInit event 19 | - Added onDisable and onEnable events 20 | - Added SWFObject for flash detection 21 | - Added indication of cancelled files -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/uploadify/__MACOSX/._Change Log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/uploadify/__MACOSX/._Change Log.txt -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/uploadify/__MACOSX/._uploadify.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/uploadify/__MACOSX/._uploadify.swf -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/uploadify/check-exists.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | 8 | // Define a destination 9 | $targetFolder = '/uploads'; // Relative to the root and should match the upload folder in the uploader script 10 | 11 | if (file_exists($_SERVER['DOCUMENT_ROOT'] . $targetFolder . '/' . $_POST['filename'])) { 12 | echo 1; 13 | } else { 14 | echo 0; 15 | } 16 | ?> -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/uploadify/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UploadiFive Test 6 | 7 | 8 | 9 | 14 | 15 | 16 | 17 |

Uploadify Demo

18 |
19 |
20 | 21 |
22 | 23 | 36 | 37 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/uploadify/license.txt: -------------------------------------------------------------------------------- 1 | Uploadify 2 | Copyright (c) 2012 Reactive Apps, Ronnie Garcia 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/uploadify/uploadify-cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/uploadify/uploadify-cancel.png -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/uploadify/uploadify.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | 8 | // Define a destination 9 | $targetFolder = '/uploads'; // Relative to the root 10 | 11 | $verifyToken = md5('unique_salt' . $_POST['timestamp']); 12 | 13 | if (!empty($_FILES) && $_POST['token'] == $verifyToken) { 14 | $tempFile = $_FILES['Filedata']['tmp_name']; 15 | $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; 16 | $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name']; 17 | 18 | // Validate the file type 19 | $fileTypes = array('jpg','jpeg','gif','png'); // File extensions 20 | $fileParts = pathinfo($_FILES['Filedata']['name']); 21 | 22 | if (in_array($fileParts['extension'],$fileTypes)) { 23 | move_uploaded_file($tempFile,$targetFile); 24 | echo '1'; 25 | } else { 26 | echo 'Invalid file type.'; 27 | } 28 | } 29 | ?> -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/uploadify/uploadify.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/js/uploadify/uploadify.swf -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/util/inline-form.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | $(":input[placeholder]").placeholder(); 3 | 4 | $(".show-form").click(function() { 5 | $("form.inline-form").show(); 6 | $(this).hide(); 7 | return false; 8 | }); 9 | 10 | $(".cancel-form").click(function() { 11 | $("form.inline-form").hide(); 12 | $(".show-form").show(); 13 | return false; 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /management/src/main/webapp/resources/js/util/simple-jstree.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | 3 | $(".jstree li a").attr("title","右键查看更多操作"); 4 | 5 | $(".jstree").on("click","ins.jstree-icon",function(){ 6 | var li_dom = $(this).parent(); 7 | if(li_dom.hasClass("jstree-closed")){ 8 | li_dom.removeClass("jstree-closed"); 9 | li_dom.addClass("jstree-open"); 10 | }else{ 11 | li_dom.removeClass("jstree-open"); 12 | li_dom.addClass("jstree-closed"); 13 | } 14 | }); 15 | 16 | 17 | $(".jstree li a").click(function(){ 18 | var id = $(this).parent().data("id"); 19 | 20 | var includeChild = 0; 21 | if($("#include-child").is(":checked")) 22 | includeChild = 1; 23 | document.getElementById('user-list-iframe').src = "admin/group-user-list/" + id + "-" + includeChild; 24 | 25 | document.getElementById("group-code").setAttribute("data-id", id); 26 | 27 | $("#group-code").val($(".jstree-clicked").text()); 28 | return false; 29 | }); 30 | }); -------------------------------------------------------------------------------- /management/src/main/webapp/resources/template/doc_tmp.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/template/doc_tmp.docx -------------------------------------------------------------------------------- /management/src/main/webapp/resources/template/question.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/template/question.xlsx -------------------------------------------------------------------------------- /management/src/main/webapp/resources/template/user.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/management/src/main/webapp/resources/template/user.xls -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | com.examstack 6 | ExamStack 7 | 2.0.0 8 | pom 9 | 10 | 11 | 12 | website 13 | scp://webhost.company.com/www/website 14 | 15 | 16 | 17 | 18 | UTF-8 19 | 20 | 21 | portal 22 | management 23 | common 24 | scoreMarker 25 | 26 | 27 | 28 | 29 | 30 | spring-milestones 31 | Spring Milestones 32 | http://repo.spring.io/milestone 33 | 34 | false 35 | 36 | 37 | 38 | 39 | 40 | 41 | spring-milestones 42 | http://repo.spring.io/milestone 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/persistence/CommentMapper.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.persistence; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.examstack.common.domain.question.Comment; 8 | import com.examstack.common.util.Page; 9 | 10 | 11 | /** 12 | * @author Ocelot 13 | * @date 2014年6月8日 下午8:32:33 14 | */ 15 | public interface CommentMapper { 16 | 17 | List getCommentByTypeAndReferId(@Param("commentType") int commentType,@Param("referId") int referId,@Param("indexId") int indexId, 18 | @Param("page") Page page); 19 | 20 | /** 21 | * 添加评论 22 | * @param comment 23 | */ 24 | public void addComment(Comment comment); 25 | 26 | public Integer getMaxCommentIndexByTypeAndReferId(@Param("commentType") int commentType,@Param("referId") int referId); 27 | } 28 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/persistence/ExamPaperMapper.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.persistence; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.examstack.common.domain.exam.ExamPaper; 8 | import com.examstack.common.util.Page; 9 | 10 | public interface ExamPaperMapper { 11 | 12 | public List getExamPaperList(@Param("searchStr") String searchStr, @Param("page") Page page); 13 | 14 | public void insertExamPaper(ExamPaper examPaper); 15 | 16 | public ExamPaper getExamPaperById(int examPaperId); 17 | 18 | public void updateExamPaper(ExamPaper examPaper); 19 | 20 | public void deleteExamPaper(int id); 21 | 22 | public List getEnabledExamPaperList(@Param("userName") String userName,@Param("page") Page page); 23 | } 24 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/persistence/NewsMapper.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.persistence; 2 | 3 | import java.util.List; 4 | 5 | import com.examstack.common.domain.news.News; 6 | import com.examstack.common.util.Page; 7 | 8 | public interface NewsMapper { 9 | 10 | public List getNewsList(Page page); 11 | 12 | public News getNewsById(int newsId); 13 | } 14 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/persistence/QuestionHistoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.persistence; 2 | 3 | import java.util.List; 4 | 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import com.examstack.common.domain.exam.UserQuestionHistory; 8 | import com.examstack.common.domain.question.QuestionStatistic; 9 | 10 | public interface QuestionHistoryMapper { 11 | 12 | /** 13 | * 插入试题历史 14 | * @param historyList 15 | */ 16 | public void addUserQuestionHist(@Param("array") List historyList); 17 | 18 | /** 19 | * 获取用户的试题练习历史 20 | * @param userId 21 | * @param fieldId 22 | * @return 23 | */ 24 | public List getUserQuestionHist(@Param("userId") int userId,@Param("fieldId") int fieldId); 25 | 26 | /** 27 | * 根据fieldId,pointId分组统计练习历史试题数量 28 | * @param fieldId 29 | * @param userId 30 | * @return 31 | */ 32 | public List getQuestionHistStaticByFieldId(@Param("fieldId") int fieldId,@Param("userId") int userId); 33 | 34 | /** 35 | * 根据fieldId,pointId,typeId分组统计练习历史试题数量 36 | * @param fieldId 37 | * @param userId 38 | * @return 39 | */ 40 | public List getTypeQuestionHistStaticByFieldId(@Param("fieldId") int fieldId,@Param("userId") int userId); 41 | } 42 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/security/UserInfoUtil.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.security; 2 | 3 | import org.springframework.security.core.context.SecurityContextHolder; 4 | 5 | 6 | public class UserInfoUtil { 7 | public static UserInfo getUserInfo(){ 8 | UserInfo userInfo=(UserInfo)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 9 | return userInfo; 10 | } 11 | /*public static void main(String[] args){ 12 | List initList= new ArrayList(); 13 | List resultList= new ArrayList(); 14 | for(int i=0;i<20;i++){ 15 | initList.add(new Question(i)); 16 | } 17 | 18 | System.out.println("未生成之前:"+initList); 19 | //resultList=getQuestionListByRandom(initList,10); 20 | System.out.println("生成之后:"+resultList); 21 | 22 | }*/ 23 | 24 | 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/service/CommentService.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.service; 2 | 3 | import java.util.List; 4 | 5 | import com.examstack.common.domain.question.Comment; 6 | import com.examstack.common.util.Page; 7 | 8 | 9 | public interface CommentService { 10 | 11 | public List getCommentByTypeAndReferId(int referType,int referId,int indexId,Page page); 12 | 13 | public void addComment(Comment comment); 14 | } 15 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/service/CommentServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.service; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | import org.springframework.transaction.annotation.Transactional; 8 | 9 | import com.examstack.common.domain.question.Comment; 10 | import com.examstack.common.util.Page; 11 | import com.examstack.portal.persistence.CommentMapper; 12 | 13 | @Service("commentService") 14 | public class CommentServiceImpl implements CommentService { 15 | 16 | @Autowired 17 | private CommentMapper commentMapper; 18 | @Override 19 | public List getCommentByTypeAndReferId(int commentType,int referId,int indexId,Page page) { 20 | // TODO Auto-generated method stub 21 | return commentMapper.getCommentByTypeAndReferId(commentType, referId, indexId, page); 22 | } 23 | @Override 24 | @Transactional 25 | public void addComment(Comment comment) { 26 | // TODO Auto-generated method stub 27 | try{ 28 | Object index = commentMapper.getMaxCommentIndexByTypeAndReferId(comment.getCommentType(), comment.getReferId()); 29 | int i = 0; 30 | if(index == null) 31 | i = 0; 32 | else 33 | i = (Integer) index; 34 | comment.setIndexId(i + 1); 35 | commentMapper.addComment(comment); 36 | }catch(Exception e){ 37 | throw new RuntimeException(e); 38 | } 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/service/ExamPaperService.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.service; 2 | 3 | 4 | import com.examstack.common.domain.exam.ExamPaper; 5 | 6 | public interface ExamPaperService { 7 | 8 | /** 9 | * 获取一张试卷 10 | * @param examPaperId 11 | * @return 12 | */ 13 | public ExamPaper getExamPaperById(int examPaperId); 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/service/ExamPaperServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.service; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | 6 | import com.examstack.common.domain.exam.ExamPaper; 7 | import com.examstack.portal.persistence.ExamPaperMapper; 8 | 9 | @Service("examPaperService") 10 | public class ExamPaperServiceImpl implements ExamPaperService { 11 | 12 | @Autowired 13 | private ExamPaperMapper examPaperMapper; 14 | 15 | @Override 16 | public ExamPaper getExamPaperById(int examPaperId) { 17 | // TODO Auto-generated method stub 18 | return examPaperMapper.getExamPaperById(examPaperId); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/service/NewsService.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.service; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.stereotype.Service; 6 | 7 | import com.examstack.common.domain.news.News; 8 | import com.examstack.common.util.Page; 9 | 10 | @Service 11 | public interface NewsService { 12 | 13 | public List getNewsList(Page page); 14 | 15 | public News getNewsById(int newsId); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/service/NewsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.service; 2 | 3 | import java.util.List; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | 8 | import com.examstack.common.domain.news.News; 9 | import com.examstack.common.util.Page; 10 | import com.examstack.portal.persistence.NewsMapper; 11 | 12 | @Service 13 | public class NewsServiceImpl implements NewsService { 14 | 15 | @Autowired 16 | private NewsMapper newsMapper; 17 | @Override 18 | public List getNewsList(Page page) { 19 | // TODO Auto-generated method stub 20 | return newsMapper.getNewsList(page); 21 | } 22 | 23 | @Override 24 | public News getNewsById(int newsId) { 25 | // TODO Auto-generated method stub 26 | return newsMapper.getNewsById(newsId); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /portal/src/main/java/com/examstack/portal/service/QuestionHistoryService.java: -------------------------------------------------------------------------------- 1 | package com.examstack.portal.service; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | import com.examstack.common.domain.exam.UserQuestionHistory; 7 | import com.examstack.common.domain.question.QuestionStatistic; 8 | 9 | public interface QuestionHistoryService { 10 | 11 | /** 12 | * 插入试题历史 13 | * @param historyList 14 | */ 15 | public void addUserQuestionHist(List historyList); 16 | 17 | /** 18 | * 插入试题历史 19 | * @param history 20 | */ 21 | public void addUserQuestionHist(UserQuestionHistory ... history); 22 | 23 | /** 24 | * 获取用户的试题练习历史 25 | * @param userId 26 | * @param fieldId 27 | * @return Map<知识点,List> 28 | */ 29 | public Map> getUserQuestionHist(int userId,int fieldId); 30 | 31 | /** 32 | * 根据fieldId,pointId分组统计练习历史试题数量 33 | * @param fieldId 34 | * @param userId 35 | * @return 36 | */ 37 | public Map getQuestionHistStaticByFieldId(int fieldId, int userId); 38 | 39 | /** 40 | * 根据fieldId,pointId,typeId分组统计练习历史试题数量 41 | * @param fieldId 42 | * @param userId 43 | * @return 44 | */ 45 | public Map> getTypeQuestionHistStaticByFieldId(int fieldId, int userId); 46 | } 47 | -------------------------------------------------------------------------------- /portal/src/main/resources/com/examstack/portal/persistence/CommentMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 21 | 22 | 26 | 27 | 29 | insert into et_comment(refer_id,comment_type,index_id,user_id,content_msg,quoto_id,re_id) 30 | values( 31 | #{referId},#{commentType},#{indexId},#{userId},#{contentMsg},#{quotoId},#{reId} 32 | ) 33 | 34 | -------------------------------------------------------------------------------- /portal/src/main/resources/com/examstack/portal/persistence/NewsMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 13 | 14 | 20 | 21 | -------------------------------------------------------------------------------- /portal/src/main/resources/ehcache.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /portal/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | ### direct log messages to stdout ### 2 | log4j.appender.stdout = org.apache.log4j.ConsoleAppender 3 | log4j.appender.stdout.Target = System.out 4 | log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %-5p %-5C %M:%-L%x -> %m%n 6 | 7 | ### direct log messages to file ### 8 | log4j.appender.file = org.apache.log4j.RollingFileAppender 9 | log4j.appender.file.File = ../logs/examstack/Portal.log 10 | log4j.appender.file.MaxFileSize = 2000KB 11 | log4j.appender.file.MaxBackupIndex =1 12 | log4j.appender.file.layout = org.apache.log4j.PatternLayout 13 | log4j.appender.file.layout.ConversionPattern = %d %-5p %-5C:%L %x -> %m%n 14 | 15 | # Root logger level. 16 | log4j.rootLogger = info, file, stdout 17 | 18 | # Logging level for the framework packages: 19 | log4j.logger =info -------------------------------------------------------------------------------- /portal/src/main/webapp/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Class-Path: 3 | 4 | -------------------------------------------------------------------------------- /portal/src/main/webapp/WEB-INF/spring/appServlet/controllers.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 12 | -------------------------------------------------------------------------------- /portal/src/main/webapp/WEB-INF/spring/rabbitmq.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /portal/src/main/webapp/WEB-INF/spring/scheduler.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/chart/less/morris.core.less: -------------------------------------------------------------------------------- 1 | .morris-hover { 2 | position: absolute; 3 | z-index: 1000; 4 | 5 | &.morris-default-style { 6 | border-radius: 10px; 7 | padding: 6px; 8 | color: #666; 9 | background: rgba(255, 255, 255, 0.8); 10 | border: solid 2px rgba(230, 230, 230, 0.8); 11 | 12 | font-family: sans-serif; 13 | font-size: 12px; 14 | text-align: center; 15 | 16 | .morris-hover-row-label { 17 | font-weight: bold; 18 | margin: 0.25em 0; 19 | } 20 | 21 | .morris-hover-point { 22 | white-space: nowrap; 23 | margin: 0.1em 0; 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/chart/lib/morris.coffee: -------------------------------------------------------------------------------- 1 | Morris = window.Morris = {} 2 | 3 | $ = jQuery 4 | 5 | # Very simple event-emitter class. 6 | # 7 | # @private 8 | class Morris.EventEmitter 9 | on: (name, handler) -> 10 | unless @handlers? 11 | @handlers = {} 12 | unless @handlers[name]? 13 | @handlers[name] = [] 14 | @handlers[name].push(handler) 15 | @ 16 | 17 | fire: (name, args...) -> 18 | if @handlers? and @handlers[name]? 19 | for handler in @handlers[name] 20 | handler(args...) 21 | 22 | # Make long numbers prettier by inserting commas. 23 | # 24 | # @example 25 | # Morris.commas(1234567) -> '1,234,567' 26 | Morris.commas = (num) -> 27 | if num? 28 | ret = if num < 0 then "-" else "" 29 | absnum = Math.abs(num) 30 | intnum = Math.floor(absnum).toFixed(0) 31 | ret += intnum.replace(/(?=(?:\d{3})+$)(?!^)/g, ',') 32 | strabsnum = absnum.toString() 33 | if strabsnum.length > intnum.length 34 | ret += strabsnum.slice(intnum.length) 35 | ret 36 | else 37 | '-' 38 | 39 | # Zero-pad numbers to two characters wide. 40 | # 41 | # @example 42 | # Morris.pad2(1) -> '01' 43 | Morris.pad2 = (number) -> (if number < 10 then '0' else '') + number 44 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/chart/lib/morris.hover.coffee: -------------------------------------------------------------------------------- 1 | class Morris.Hover 2 | # Displays contextual information in a floating HTML div. 3 | 4 | @defaults: 5 | class: 'morris-hover morris-default-style' 6 | 7 | constructor: (options = {}) -> 8 | @options = $.extend {}, Morris.Hover.defaults, options 9 | @el = $ "
" 10 | @el.hide() 11 | @options.parent.append(@el) 12 | 13 | update: (html, x, y) -> 14 | @html(html) 15 | @show() 16 | @moveTo(x, y) 17 | 18 | html: (content) -> 19 | @el.html(content) 20 | 21 | moveTo: (x, y) -> 22 | parentWidth = @options.parent.innerWidth() 23 | parentHeight = @options.parent.innerHeight() 24 | hoverWidth = @el.outerWidth() 25 | hoverHeight = @el.outerHeight() 26 | left = Math.min(Math.max(0, x - hoverWidth / 2), parentWidth - hoverWidth) 27 | if y? 28 | top = y - hoverHeight - 10 29 | if top < 0 30 | top = y + 10 31 | if top + hoverHeight > parentHeight 32 | top = parentHeight / 2 - hoverHeight / 2 33 | else 34 | top = parentHeight / 2 - hoverHeight / 2 35 | @el.css(left: left + "px", top: parseInt(top) + "px") 36 | 37 | show: -> 38 | @el.show() 39 | 40 | hide: -> 41 | @el.hide() 42 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/chart/morris.css: -------------------------------------------------------------------------------- 1 | .morris-hover{position:absolute;z-index:1000;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255, 255, 255, 0.8);border:solid 2px rgba(230, 230, 230, 0.8);font-family:sans-serif;font-size:12px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;} 2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;} 3 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/chartjs/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Chart.js", 3 | "version": "1.0.1-beta.3", 4 | "description": "Simple HTML5 Charts using the canvas element", 5 | "homepage": "https://github.com/nnnick/Chart.js", 6 | "author": "nnnick", 7 | "main": [ 8 | "Chart.min.js" 9 | ], 10 | "dependencies": {} 11 | } -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/chartjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chart.js", 3 | "homepage": "http://www.chartjs.org", 4 | "description": "Simple HTML5 charts using the canvas element.", 5 | "version": "1.0.1-beta.3", 6 | "main": "Chart.js", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/nnnick/Chart.js.git" 10 | }, 11 | "dependences": {}, 12 | "devDependencies": { 13 | "gulp": "3.5.x", 14 | "gulp-concat": "~2.1.x", 15 | "gulp-connect": "~2.0.5", 16 | "gulp-jshint": "~1.5.1", 17 | "gulp-replace": "^0.4.0", 18 | "gulp-size": "~0.4.0", 19 | "gulp-uglify": "~0.2.x", 20 | "gulp-util": "~2.2.x", 21 | "inquirer": "^0.5.1", 22 | "semver": "^3.0.1" 23 | } 24 | } -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/bg.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/error.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/icon20_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/icon20_20.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/info.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/pattern-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/pattern-1.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/success.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-bg_flat_0_eeeeee_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-bg_flat_0_eeeeee_40x100.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-bg_flat_55_c0402a_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-bg_flat_55_c0402a_40x100.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-bg_flat_55_eeeeee_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-bg_flat_55_eeeeee_40x100.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-bg_glass_100_f8f8f8_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-bg_glass_100_f8f8f8_1x400.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-bg_glass_35_dddddd_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-bg_glass_35_dddddd_1x400.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-bg_glass_60_eeeeee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-bg_glass_60_eeeeee_1x400.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-bg_inset-hard_75_999999_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-bg_inset-hard_75_999999_1x100.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-bg_inset-soft_50_c9c9c9_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-bg_inset-soft_50_c9c9c9_1x100.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-icons_0073ea_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-icons_0073ea_256x240.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-icons_3383bb_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-icons_3383bb_256x240.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240_2.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-icons_4eb305_256x240_3.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-icons_70b2e1_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-icons_70b2e1_256x240.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-icons_fbc856_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-icons_fbc856_256x240.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/css/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/css/jquery.placeholder.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery Placeholder Plugin - v0.7.0 - 2013-02-18 2 | * http://andrew-jones.com/jquery-placeholder-plugin 3 | * Copyright (c) 2013 Andrew Jones; Licensed MIT */ 4 | .placeholder{color:#666}.placeholderFocus{color:#666} -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/flash/beelden.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/flash/beelden.zip -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/flash/player.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/flash/player.swf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "spinning.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: -@fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon-rotate(@degrees, @rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 6 | -webkit-transform: rotate(@degrees); 7 | -moz-transform: rotate(@degrees); 8 | -ms-transform: rotate(@degrees); 9 | -o-transform: rotate(@degrees); 10 | transform: rotate(@degrees); 11 | } 12 | 13 | .fa-icon-flip(@horiz, @vert, @rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 15 | -webkit-transform: scale(@horiz, @vert); 16 | -moz-transform: scale(@horiz, @vert); 17 | -ms-transform: scale(@horiz, @vert); 18 | -o-transform: scale(@horiz, @vert); 19 | transform: scale(@horiz, @vert); 20 | } 21 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: ~"url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}')"; 7 | src: ~"url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype')", 8 | ~"url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff')", 9 | ~"url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype')", 10 | ~"url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg')"; 11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @keyframes spin { 24 | 0% { 25 | -webkit-transform: rotate(0deg); 26 | transform: rotate(0deg); 27 | } 28 | 100% { 29 | -webkit-transform: rotate(359deg); 30 | transform: rotate(359deg); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font-family: FontAwesome; 7 | font-style: normal; 8 | font-weight: normal; 9 | line-height: 1; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon-rotate($degrees, $rotation) { 5 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 6 | -webkit-transform: rotate($degrees); 7 | -moz-transform: rotate($degrees); 8 | -ms-transform: rotate($degrees); 9 | -o-transform: rotate($degrees); 10 | transform: rotate($degrees); 11 | } 12 | 13 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 15 | -webkit-transform: scale($horiz, $vert); 16 | -moz-transform: scale($horiz, $vert); 17 | -ms-transform: scale($horiz, $vert); 18 | -o-transform: scale($horiz, $vert); 19 | transform: scale($horiz, $vert); 20 | } 21 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: spin 2s infinite linear; 6 | -moz-animation: spin 2s infinite linear; 7 | -o-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @keyframes spin { 24 | 0% { 25 | -webkit-transform: rotate(0deg); 26 | transform: rotate(0deg); 27 | } 28 | 100% { 29 | -webkit-transform: rotate(359deg); 30 | transform: rotate(359deg); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/ad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/ad.jpg -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/ad.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/bg.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/error.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/favicon.ico -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/icon-all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/icon-all.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/icon20_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/icon20_20.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/info.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/loading.gif -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/logo-s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/logo-s.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/logo.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/photo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/photo.jpg -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/simplest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/simplest.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/success.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/training-content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/training-content.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/images/user.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/exam-finished.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | Morris.Donut({ 3 | element : 'graph-base', 4 | data : [{ 5 | label : "答对题目", 6 | value : parseInt($(".exam-report-correct .label-success").text()) 7 | }, { 8 | label : "答错题目", 9 | value : parseInt($(".exam-report-error .label-danger").text()) 10 | }], 11 | colors : ['#5cb85c', '#da4f49'], 12 | labelColor : '#1ba1e2' 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/field-2-point.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var selection = $("#aq-course1").find("select"); 3 | // alert("111"); 4 | var point_list = $("#aq-course2").find("select"); 5 | selection.change(function(){ 6 | $.ajax({ 7 | headers : { 8 | 'Accept' : 'application/json', 9 | 'Content-Type' : 'application/json' 10 | }, 11 | type : "GET", 12 | url : "admin/get-knowledge-point/" + selection.val(), 13 | success : function(message,tst,jqXHR) { 14 | if(!util.checkSessionOut(jqXHR))return false; 15 | if (message.result == "success") { 16 | point_list.empty(); 17 | $.each(message.object,function(key,values){ 18 | point_list.append(""); 19 | }); 20 | } else { 21 | util.error("操作失败请稍后尝试"); 22 | } 23 | }, 24 | error : function(xhr) { 25 | util.error("操作失败请稍后尝试"); 26 | } 27 | }); 28 | }); 29 | }); 30 | 31 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/background.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/bigplay.fw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/bigplay.fw.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/bigplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/bigplay.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/bigplay.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/controls-ted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/controls-ted.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/controls-wmp-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/controls-wmp-bg.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/controls-wmp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/controls-wmp.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/controls.fw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/controls.fw.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/controls.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/flashmediaelement.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/flashmediaelement.swf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/jumpforward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/jumpforward.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/loading.gif -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/mediaelement/skipback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/mediaelement/skipback.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/point-select.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var point_div = $("#point-select-result"); 3 | var btn = $("#btn-point-add"); 4 | var innerHtml = point_div.html(); 5 | btn.click(function(){ 6 | 7 | }); 8 | }); -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/pwd-change.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var form = $("#form-change-password"); 3 | form.submit(function(){ 4 | var user = new Object(); 5 | var password = $("#password").val(); 6 | var password_confirm = $("#password-confirm").val(); 7 | if(password != password_confirm){ 8 | $(".form-password-confirm .form-message").text("两次密码不一致!"); 9 | return false; 10 | } 11 | if(password.length > 10 || password.length <6){ 12 | $(".form-password .form-message").text("长度请保持在6到10之间!"); 13 | return false; 14 | } 15 | user.password = password; 16 | $.ajax({ 17 | headers : { 18 | 'Accept' : 'application/json', 19 | 'Content-Type' : 'application/json' 20 | }, 21 | type : "POST", 22 | url : form.attr("action"), 23 | data : JSON.stringify(user), 24 | success : function(message, tst, jqXHR) { 25 | if (!util.checkSessionOut(jqXHR)) 26 | return false; 27 | if (message.result == "success") { 28 | util.success("修改成功", function() { 29 | document.location.href = document.getElementsByTagName('base')[0].href + 'home'; 30 | }); 31 | } else { 32 | util.error("操作失败请稍后尝试"); 33 | } 34 | 35 | }, 36 | error : function(jqXHR, textStatus) { 37 | util.error("操作失败请稍后尝试"); 38 | } 39 | }); 40 | return false; 41 | }); 42 | }); -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/question-lib.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | $(".delete-btn").click(function() { 3 | 4 | $.ajax({ 5 | headers : { 6 | 'Accept' : 'application/json', 7 | 'Content-Type' : 'application/json' 8 | }, 9 | type : "GET", 10 | url : "admin/delete-field-" + $(this).data("id"), 11 | success : function(message, tst, jqXHR) { 12 | if (!util.checkSessionOut(jqXHR)) 13 | return false; 14 | if (message.result == "success") { 15 | util.success("删除成功", function() { 16 | window.location.reload(); 17 | }); 18 | } else { 19 | util.error("操作失败请稍后尝试:" + message.result); 20 | } 21 | 22 | }, 23 | error : function(jqXHR, textStatus) { 24 | util.error("操作失败请稍后尝试"); 25 | } 26 | }); 27 | 28 | return false; 29 | 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/uploadify/Change Log.txt: -------------------------------------------------------------------------------- 1 | Uploadify Change Log 2 | Copyright (c) 2012 by Reactive Apps, Ronnie Garcia 3 | 4 | v3.2.1 5 | - Updated uploadify.swf with security updates from secure swfupload. 6 | 7 | v3.2 8 | - Added a new option for itemTemplate where you can create an HTML template for the items that are added to the queue 9 | 10 | v3.1.1 11 | - Fixed issue with incorrect queueLength 12 | 13 | v3.1.0 14 | - Switched to the preferred jQuery plugin pattern 15 | - Added references to all elements 16 | - Removed flash based image 17 | - Added fallback method 18 | - Fixed onInit event 19 | - Added onDisable and onEnable events 20 | - Added SWFObject for flash detection 21 | - Added indication of cancelled files -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/uploadify/__MACOSX/._Change Log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/uploadify/__MACOSX/._Change Log.txt -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/uploadify/__MACOSX/._uploadify.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/uploadify/__MACOSX/._uploadify.swf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/uploadify/check-exists.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | 8 | // Define a destination 9 | $targetFolder = '/uploads'; // Relative to the root and should match the upload folder in the uploader script 10 | 11 | if (file_exists($_SERVER['DOCUMENT_ROOT'] . $targetFolder . '/' . $_POST['filename'])) { 12 | echo 1; 13 | } else { 14 | echo 0; 15 | } 16 | ?> -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/uploadify/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UploadiFive Test 6 | 7 | 8 | 9 | 14 | 15 | 16 | 17 |

Uploadify Demo

18 |
19 |
20 | 21 |
22 | 23 | 36 | 37 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/uploadify/license.txt: -------------------------------------------------------------------------------- 1 | Uploadify 2 | Copyright (c) 2012 Reactive Apps, Ronnie Garcia 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/uploadify/uploadify-cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/uploadify/uploadify-cancel.png -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/uploadify/uploadify.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | 8 | // Define a destination 9 | $targetFolder = '/uploads'; // Relative to the root 10 | 11 | $verifyToken = md5('unique_salt' . $_POST['timestamp']); 12 | 13 | if (!empty($_FILES) && $_POST['token'] == $verifyToken) { 14 | $tempFile = $_FILES['Filedata']['tmp_name']; 15 | $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; 16 | $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name']; 17 | 18 | // Validate the file type 19 | $fileTypes = array('jpg','jpeg','gif','png'); // File extensions 20 | $fileParts = pathinfo($_FILES['Filedata']['name']); 21 | 22 | if (in_array($fileParts['extension'],$fileTypes)) { 23 | move_uploaded_file($tempFile,$targetFile); 24 | echo '1'; 25 | } else { 26 | echo 'Invalid file type.'; 27 | } 28 | } 29 | ?> -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/uploadify/uploadify.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/uploadify/uploadify.swf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/util/inline-form.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | $(":input[placeholder]").placeholder(); 3 | 4 | $(".show-form").click(function() { 5 | $("form.inline-form").show(); 6 | $(this).hide(); 7 | return false; 8 | }); 9 | 10 | $(".cancel-form").click(function() { 11 | $("form.inline-form").hide(); 12 | $(".show-form").show(); 13 | return false; 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/videojs/font/vjs.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/videojs/font/vjs.eot -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/videojs/font/vjs.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/videojs/font/vjs.ttf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/videojs/font/vjs.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/videojs/font/vjs.woff -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/videojs/lang/ja.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("ja",{ 2 | "Play": "再生", 3 | "Pause": "一時停止", 4 | "Current Time": "現在の時間", 5 | "Duration Time": "長さ", 6 | "Remaining Time": "残りの時間", 7 | "Stream Type": "ストリームの種類", 8 | "LIVE": "ライブ", 9 | "Loaded": "ロード済み", 10 | "Progress": "進行状況", 11 | "Fullscreen": "フルスクリーン", 12 | "Non-Fullscreen": "フルスクリーン以外", 13 | "Mute": "ミュート", 14 | "Unmuted": "ミュート解除", 15 | "Playback Rate": "再生レート", 16 | "Subtitles": "サブタイトル", 17 | "subtitles off": "サブタイトル オフ", 18 | "Captions": "キャプション", 19 | "captions off": "キャプション オフ", 20 | "Chapters": "チャプター", 21 | "You aborted the video playback": "動画再生を中止しました", 22 | "A network error caused the video download to fail part-way.": "ネットワーク エラーにより動画のダウンロードが途中で失敗しました", 23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "サーバーまたはネットワークのエラー、またはフォーマットがサポートされていないため、動画をロードできませんでした", 24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "破損の問題、またはお使いのブラウザがサポートしていない機能が動画に使用されていたため、動画の再生が中止されました", 25 | "No compatible source was found for this video.": "この動画に対して互換性のあるソースが見つかりませんでした" 26 | }); -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/videojs/lang/ko.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("ko",{ 2 | "Play": "재생", 3 | "Pause": "일시중지", 4 | "Current Time": "현재 시간", 5 | "Duration Time": "지정 기간", 6 | "Remaining Time": "남은 시간", 7 | "Stream Type": "스트리밍 유형", 8 | "LIVE": "라이브", 9 | "Loaded": "로드됨", 10 | "Progress": "진행", 11 | "Fullscreen": "전체 화면", 12 | "Non-Fullscreen": "전체 화면 해제", 13 | "Mute": "음소거", 14 | "Unmuted": "음소거 해제", 15 | "Playback Rate": "재생 비율", 16 | "Subtitles": "서브타이틀", 17 | "subtitles off": "서브타이틀 끄기", 18 | "Captions": "자막", 19 | "captions off": "자막 끄기", 20 | "Chapters": "챕터", 21 | "You aborted the video playback": "비디오 재생을 취소했습니다.", 22 | "A network error caused the video download to fail part-way.": "네트워크 오류로 인하여 비디오 일부를 다운로드하지 못 했습니다.", 23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "비디오를 로드할 수 없습니다. 서버 혹은 네트워크 오류 때문이거나 지원되지 않는 형식 때문일 수 있습니다.", 24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "비디오 재생이 취소됐습니다. 비디오가 손상되었거나 비디오가 사용하는 기능을 브라우저에서 지원하지 않는 것 같습니다.", 25 | "No compatible source was found for this video.": "비디오에 호환되지 않는 소스가 있습니다." 26 | }); -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/videojs/lang/pt-BR.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("pt-BR",{ 2 | "Play": "Tocar", 3 | "Pause": "Pause", 4 | "Current Time": "Tempo", 5 | "Duration Time": "Duração", 6 | "Remaining Time": "Tempo Restante", 7 | "Stream Type": "Tipo de Stream", 8 | "LIVE": "AO VIVO", 9 | "Loaded": "Carregado", 10 | "Progress": "Progressão", 11 | "Fullscreen": "Tela Cheia", 12 | "Non-Fullscreen": "Tela Normal", 13 | "Mute": "Mudo", 14 | "Unmuted": "Habilitar Som", 15 | "Playback Rate": "Velocidade", 16 | "Subtitles": "Legendas", 17 | "subtitles off": "Sem Legendas", 18 | "Captions": "Anotações", 19 | "captions off": "Sem Anotações", 20 | "Chapters": "Capítulos", 21 | "You aborted the video playback": "Você parou a execução de vídeo.", 22 | "A network error caused the video download to fail part-way.": "Um erro na rede fez o vídeo parar parcialmente.", 23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "O vídeo não pode ser carregado, ou porque houve um problema com sua rede ou pelo formato do vídeo não ser suportado.", 24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "A Execução foi interrompida por um problema com o vídeo ou por seu navegador não dar suporte ao seu formato.", 25 | "No compatible source was found for this video.": "Não foi encontrada fonte de vídeo compatível." 26 | }); -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/videojs/lang/uk.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("uk",{ 2 | "Play": "Відтворити", 3 | "Pause": "Призупинити", 4 | "Current Time": "Поточний час", 5 | "Duration Time": "Тривалість", 6 | "Remaining Time": "Час, що залишився", 7 | "Stream Type": "Тип потоку", 8 | "LIVE": "НАЖИВО", 9 | "Loaded": "Завантаження", 10 | "Progress": "Прогрес", 11 | "Fullscreen": "Повноекранний режим", 12 | "Non-Fullscreen": "Неповноекранний режим", 13 | "Mute": "Без звуку", 14 | "Unmuted": "Зі звуком", 15 | "Playback Rate": "Швидкість відтворення", 16 | "Subtitles": "Субтитри", 17 | "subtitles off": "Без субтитрів", 18 | "Captions": "Підписи", 19 | "captions off": "Без підписів", 20 | "Chapters": "Розділи", 21 | "You aborted the video playback": "Ви припинили відтворення відео", 22 | "A network error caused the video download to fail part-way.": "Помилка мережі викликала збій під час завантаження відео.", 23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Неможливо завантажити відео через мережевий чи серверний збій або формат не підтримується.", 24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "Відтворення відео було припинено через пошкодження або у зв'язку з тим, що відео використовує функції, які не підтримуються вашим браузером.", 25 | "No compatible source was found for this video.": "Сумісні джерела для цього відео відсутні." 26 | }); -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/videojs/lang/zh.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("zh",{ 2 | "Play": "播放", 3 | "Pause": "暂停", 4 | "Current Time": "当前时间", 5 | "Duration Time": "时长", 6 | "Remaining Time": "剩余时间", 7 | "Stream Type": "媒体流类型", 8 | "LIVE": "直播", 9 | "Loaded": "加载完毕", 10 | "Progress": "进度", 11 | "Fullscreen": "全屏", 12 | "Non-Fullscreen": "退出全屏", 13 | "Mute": "静音", 14 | "Unmuted": "取消静音", 15 | "Playback Rate": "播放码率", 16 | "Subtitles": "字幕", 17 | "subtitles off": "字幕关闭", 18 | "Captions": "内嵌字幕", 19 | "captions off": "内嵌字幕关闭", 20 | "Chapters": "节目段落", 21 | "You aborted the video playback": "视频播放被终止", 22 | "A network error caused the video download to fail part-way.": "网络错误导致视频下载中途失败。", 23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "视频因格式不支持或者服务器或网络的问题无法加载。", 24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "由于视频文件损坏或是该视频使用了你的浏览器不支持的功能,播放终止。", 25 | "No compatible source was found for this video.": "无法找到此视频兼容的源。", 26 | "The video is encrypted and we do not have the keys to decrypt it.": "视频已加密,无法解密。" 27 | }); -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/js/videojs/video-js.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/js/videojs/video-js.swf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/template/perl.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/template/perl.pdf -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/template/question.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/template/question.xlsx -------------------------------------------------------------------------------- /portal/src/main/webapp/resources/template/user.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/portal/src/main/webapp/resources/template/user.xls -------------------------------------------------------------------------------- /scoreMarker/config/scoremaker.properties: -------------------------------------------------------------------------------- 1 | rabbitmq.host=localhost examstack.answersheet.posturi=http://localhost:8080/Management/api/answersheet 2 | examstack.exampaper.geturi=http://localhost:8080/Management/api/exampaper 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /scoreMarker/installService.bat: -------------------------------------------------------------------------------- 1 | set SERVICE_NAME=ScoreMarkerService 2 | 3 | set APP_HOME=D:\service 4 | set PR_INSTALL=%APP_HOME%\prunsrv.exe 5 | 6 | REM Service log configuration 7 | set PR_LOGPREFIX=%SERVICE_NAME% 8 | set PR_LOGPATH=d:\logs 9 | set PR_STDOUTPUT=d:\logs\stdout.txt 10 | set PR_STDERROR=d:\logs\stderr.txt 11 | set PR_LOGLEVEL=Error 12 | 13 | REM Path to java installation 14 | set PR_JVM=%JAVA_HOME%\jre\bin\server\jvm.dll 15 | set PR_CLASSPATH=%APP_HOME%\ScoreMarker-2.0.0.jar 16 | 17 | REM Startup configuration 18 | set PR_STARTUP=auto 19 | set PR_STARTMODE=jvm 20 | set PR_STARTCLASS=com.examstack.scoremarker.ScoreMarkerWin 21 | set PR_STARTMETHOD=start 22 | 23 | REM Shutdown configuration 24 | set PR_STOPMODE=jvm 25 | set PR_STOPCLASS=%PR_STARTCLASS% 26 | set PR_STOPMETHOD=stop 27 | 28 | REM JVM configuration 29 | set PR_JVMMS=256 30 | set PR_JVMMX=1024 31 | set PR_JVMSS=4000 32 | set PR_JVMOPTIONS=-Duser.language=DE;-Duser.region=de 33 | 34 | REM Install service 35 | prunsrv.exe //IS//%SERVICE_NAME% -------------------------------------------------------------------------------- /scoreMarker/prunsrv.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imalexyang/ExamStack/fea7fc069118bcc9ead67d8f37feda9ab1d72388/scoreMarker/prunsrv.exe -------------------------------------------------------------------------------- /scoreMarker/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | ### direct log messages to stdout ### 2 | log4j.appender.stdout = org.apache.log4j.ConsoleAppender 3 | log4j.appender.stdout.Target = System.out 4 | log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %-5p %-5C %M:%-L%x -> %m%n 6 | 7 | ### direct log messages to file ### 8 | log4j.appender.file = org.apache.log4j.RollingFileAppender 9 | log4j.appender.file.File = ./logs/scoremaker.log 10 | log4j.appender.file.MaxFileSize = 2000KB 11 | log4j.appender.file.MaxBackupIndex =1 12 | log4j.appender.file.layout = org.apache.log4j.PatternLayout 13 | log4j.appender.file.layout.ConversionPattern = %d %-5p %-5C:%L %x -> %m%n 14 | 15 | # Root logger level. 16 | log4j.rootLogger = info, file, stdout 17 | 18 | # Logging level for the framework packages: 19 | log4j.logger =info --------------------------------------------------------------------------------