From 15dfc6576b87fe6ac3266aad80399ba573f4a12e Mon Sep 17 00:00:00 2001 From: Gitea Date: Mon, 24 Jan 2022 10:43:35 +0800 Subject: [PATCH] init --- .htaccess | 10 + admin.php | 23 + api.php | 26 + apps/admin/controller/IndexController.php | 363 + .../controller/content/CompanyController.php | 70 + .../controller/content/ContentController.php | 551 + .../content/ContentSortController.php | 557 + .../controller/content/ExtFieldController.php | 231 + .../controller/content/FormController.php | 354 + .../controller/content/LabelController.php | 168 + .../controller/content/LinkController.php | 213 + .../controller/content/MessageController.php | 119 + .../controller/content/ModelController.php | 207 + .../controller/content/SingleController.php | 266 + .../controller/content/SiteController.php | 82 + .../controller/content/SlideController.php | 195 + .../controller/content/TagsController.php | 157 + .../member/MemberCommentController.php | 118 + .../controller/member/MemberController.php | 292 + .../member/MemberFieldController.php | 193 + .../member/MemberGroupController.php | 187 + .../controller/system/AreaController.php | 303 + .../controller/system/ConfigController.php | 226 + .../controller/system/DatabaseController.php | 248 + .../controller/system/MenuController.php | 275 + .../controller/system/RoleController.php | 249 + .../controller/system/SyslogController.php | 40 + .../controller/system/TypeController.php | 172 + .../controller/system/UpgradeController.php | 391 + .../controller/system/UserController.php | 227 + apps/admin/model/IndexModel.php | 225 + apps/admin/model/content/CompanyModel.php | 39 + apps/admin/model/content/ContentModel.php | 332 + apps/admin/model/content/ContentSortModel.php | 261 + apps/admin/model/content/ExtFieldModel.php | 87 + apps/admin/model/content/FormModel.php | 238 + apps/admin/model/content/LabelModel.php | 70 + apps/admin/model/content/LinkModel.php | 80 + apps/admin/model/content/MessageModel.php | 99 + apps/admin/model/content/ModelModel.php | 140 + apps/admin/model/content/SingleModel.php | 196 + apps/admin/model/content/SiteModel.php | 45 + apps/admin/model/content/SlideModel.php | 80 + apps/admin/model/content/TagsModel.php | 65 + .../admin/model/member/MemberCommentModel.php | 136 + apps/admin/model/member/MemberFieldModel.php | 79 + apps/admin/model/member/MemberGroupModel.php | 98 + apps/admin/model/member/MemberModel.php | 122 + apps/admin/model/system/AreaModel.php | 101 + apps/admin/model/system/ConfigModel.php | 66 + apps/admin/model/system/DatabaseModel.php | 102 + apps/admin/model/system/MenuModel.php | 161 + apps/admin/model/system/RoleModel.php | 169 + apps/admin/model/system/SyslogModel.php | 29 + apps/admin/model/system/TypeModel.php | 89 + apps/admin/model/system/UserModel.php | 166 + apps/admin/view/default/common/foot.html | 16 + apps/admin/view/default/common/head.html | 134 + apps/admin/view/default/common/ueditor.html | 36 + apps/admin/view/default/content/company.html | 113 + apps/admin/view/default/content/content.html | 925 + .../view/default/content/contentsort.html | 614 + apps/admin/view/default/content/exform.html | 68 + .../admin/view/default/content/exmessage.html | 76 + apps/admin/view/default/content/extfield.html | 224 + apps/admin/view/default/content/form.html | 327 + apps/admin/view/default/content/label.html | 255 + apps/admin/view/default/content/link.html | 174 + apps/admin/view/default/content/message.html | 119 + apps/admin/view/default/content/model.html | 191 + apps/admin/view/default/content/single.html | 430 + apps/admin/view/default/content/site.html | 107 + apps/admin/view/default/content/slide.html | 191 + apps/admin/view/default/content/tags.html | 105 + apps/admin/view/default/css/comm.css | 265 + .../view/default/css/jquery.treetable.css | 28 + apps/admin/view/default/css/login.css | 102 + .../view/default/font-awesome/HELP-US-OUT.txt | 7 + .../default/font-awesome/css/font-awesome.css | 2337 ++ .../font-awesome/css/font-awesome.min.css | 4 + .../font-awesome/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../fonts/fontawesome-webfont.svg | 2671 ++ .../fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../default/font-awesome/less/animated.less | 34 + .../font-awesome/less/bordered-pulled.less | 25 + .../view/default/font-awesome/less/core.less | 12 + .../font-awesome/less/fixed-width.less | 6 + .../font-awesome/less/font-awesome.less | 18 + .../view/default/font-awesome/less/icons.less | 789 + .../default/font-awesome/less/larger.less | 13 + .../view/default/font-awesome/less/list.less | 19 + .../default/font-awesome/less/mixins.less | 60 + .../view/default/font-awesome/less/path.less | 15 + .../font-awesome/less/rotated-flipped.less | 20 + .../font-awesome/less/screen-reader.less | 5 + .../default/font-awesome/less/stacked.less | 20 + .../default/font-awesome/less/variables.less | 800 + .../default/font-awesome/scss/_animated.scss | 34 + .../font-awesome/scss/_bordered-pulled.scss | 25 + .../view/default/font-awesome/scss/_core.scss | 12 + .../font-awesome/scss/_fixed-width.scss | 6 + .../default/font-awesome/scss/_icons.scss | 789 + .../default/font-awesome/scss/_larger.scss | 13 + .../view/default/font-awesome/scss/_list.scss | 19 + .../default/font-awesome/scss/_mixins.scss | 60 + .../view/default/font-awesome/scss/_path.scss | 15 + .../font-awesome/scss/_rotated-flipped.scss | 20 + .../font-awesome/scss/_screen-reader.scss | 5 + .../default/font-awesome/scss/_stacked.scss | 20 + .../default/font-awesome/scss/_variables.scss | 800 + .../font-awesome/scss/font-awesome.scss | 18 + apps/admin/view/default/images/bg.jpg | Bin 0 -> 110550 bytes apps/admin/view/default/images/logo.png | Bin 0 -> 19847 bytes apps/admin/view/default/index.html | 78 + apps/admin/view/default/js/comm.js | 166 + .../view/default/js/jquery-1.12.4.min.js | 5 + .../view/default/js/jquery-1.12.4.min.map | 1 + .../default/js/jquery.dragsort-0.5.2.min.js | 4 + .../admin/view/default/js/jquery.treetable.js | 631 + apps/admin/view/default/js/jscolor.js | 1855 + apps/admin/view/default/js/mylayui.js | 245 + apps/admin/view/default/layui/css/layui.css | 2 + .../view/default/layui/css/layui.mobile.css | 2 + .../view/default/layui/css/modules/code.css | 2 + .../css/modules/laydate/default/laydate.css | 2 + .../css/modules/layer/default/icon-ext.png | Bin 0 -> 5911 bytes .../layui/css/modules/layer/default/icon.png | Bin 0 -> 11493 bytes .../layui/css/modules/layer/default/layer.css | 2 + .../css/modules/layer/default/loading-0.gif | Bin 0 -> 5793 bytes .../css/modules/layer/default/loading-1.gif | Bin 0 -> 701 bytes .../css/modules/layer/default/loading-2.gif | Bin 0 -> 1787 bytes .../view/default/layui/font/iconfont.eot | Bin 0 -> 46684 bytes .../view/default/layui/font/iconfont.svg | 554 + .../view/default/layui/font/iconfont.ttf | Bin 0 -> 46508 bytes .../view/default/layui/font/iconfont.woff | Bin 0 -> 30628 bytes .../view/default/layui/font/iconfont.woff2 | Bin 0 -> 25964 bytes .../view/default/layui/images/face/0.gif | Bin 0 -> 2689 bytes .../view/default/layui/images/face/1.gif | Bin 0 -> 5514 bytes .../view/default/layui/images/face/10.gif | Bin 0 -> 2797 bytes .../view/default/layui/images/face/11.gif | Bin 0 -> 4121 bytes .../view/default/layui/images/face/12.gif | Bin 0 -> 3361 bytes .../view/default/layui/images/face/13.gif | Bin 0 -> 7425 bytes .../view/default/layui/images/face/14.gif | Bin 0 -> 2375 bytes .../view/default/layui/images/face/15.gif | Bin 0 -> 1793 bytes .../view/default/layui/images/face/16.gif | Bin 0 -> 6721 bytes .../view/default/layui/images/face/17.gif | Bin 0 -> 4439 bytes .../view/default/layui/images/face/18.gif | Bin 0 -> 3017 bytes .../view/default/layui/images/face/19.gif | Bin 0 -> 3040 bytes .../view/default/layui/images/face/2.gif | Bin 0 -> 3222 bytes .../view/default/layui/images/face/20.gif | Bin 0 -> 5144 bytes .../view/default/layui/images/face/21.gif | Bin 0 -> 5191 bytes .../view/default/layui/images/face/22.gif | Bin 0 -> 9823 bytes .../view/default/layui/images/face/23.gif | Bin 0 -> 3792 bytes .../view/default/layui/images/face/24.gif | Bin 0 -> 8096 bytes .../view/default/layui/images/face/25.gif | Bin 0 -> 3127 bytes .../view/default/layui/images/face/26.gif | Bin 0 -> 3291 bytes .../view/default/layui/images/face/27.gif | Bin 0 -> 4377 bytes .../view/default/layui/images/face/28.gif | Bin 0 -> 2793 bytes .../view/default/layui/images/face/29.gif | Bin 0 -> 4854 bytes .../view/default/layui/images/face/3.gif | Bin 0 -> 4017 bytes .../view/default/layui/images/face/30.gif | Bin 0 -> 2555 bytes .../view/default/layui/images/face/31.gif | Bin 0 -> 2002 bytes .../view/default/layui/images/face/32.gif | Bin 0 -> 3481 bytes .../view/default/layui/images/face/33.gif | Bin 0 -> 2454 bytes .../view/default/layui/images/face/34.gif | Bin 0 -> 3700 bytes .../view/default/layui/images/face/35.gif | Bin 0 -> 1800 bytes .../view/default/layui/images/face/36.gif | Bin 0 -> 2331 bytes .../view/default/layui/images/face/37.gif | Bin 0 -> 1513 bytes .../view/default/layui/images/face/38.gif | Bin 0 -> 3615 bytes .../view/default/layui/images/face/39.gif | Bin 0 -> 6495 bytes .../view/default/layui/images/face/4.gif | Bin 0 -> 5689 bytes .../view/default/layui/images/face/40.gif | Bin 0 -> 3154 bytes .../view/default/layui/images/face/41.gif | Bin 0 -> 3644 bytes .../view/default/layui/images/face/42.gif | Bin 0 -> 5305 bytes .../view/default/layui/images/face/43.gif | Bin 0 -> 2674 bytes .../view/default/layui/images/face/44.gif | Bin 0 -> 4126 bytes .../view/default/layui/images/face/45.gif | Bin 0 -> 3417 bytes .../view/default/layui/images/face/46.gif | Bin 0 -> 3007 bytes .../view/default/layui/images/face/47.gif | Bin 0 -> 2333 bytes .../view/default/layui/images/face/48.gif | Bin 0 -> 2689 bytes .../view/default/layui/images/face/49.gif | Bin 0 -> 2315 bytes .../view/default/layui/images/face/5.gif | Bin 0 -> 4567 bytes .../view/default/layui/images/face/50.gif | Bin 0 -> 5866 bytes .../view/default/layui/images/face/51.gif | Bin 0 -> 2785 bytes .../view/default/layui/images/face/52.gif | Bin 0 -> 777 bytes .../view/default/layui/images/face/53.gif | Bin 0 -> 2127 bytes .../view/default/layui/images/face/54.gif | Bin 0 -> 2196 bytes .../view/default/layui/images/face/55.gif | Bin 0 -> 1971 bytes .../view/default/layui/images/face/56.gif | Bin 0 -> 2034 bytes .../view/default/layui/images/face/57.gif | Bin 0 -> 2705 bytes .../view/default/layui/images/face/58.gif | Bin 0 -> 2258 bytes .../view/default/layui/images/face/59.gif | Bin 0 -> 10311 bytes .../view/default/layui/images/face/6.gif | Bin 0 -> 2213 bytes .../view/default/layui/images/face/60.gif | Bin 0 -> 3245 bytes .../view/default/layui/images/face/61.gif | Bin 0 -> 2495 bytes .../view/default/layui/images/face/62.gif | Bin 0 -> 2017 bytes .../view/default/layui/images/face/63.gif | Bin 0 -> 5871 bytes .../view/default/layui/images/face/64.gif | Bin 0 -> 6448 bytes .../view/default/layui/images/face/65.gif | Bin 0 -> 3576 bytes .../view/default/layui/images/face/66.gif | Bin 0 -> 3029 bytes .../view/default/layui/images/face/67.gif | Bin 0 -> 2701 bytes .../view/default/layui/images/face/68.gif | Bin 0 -> 1424 bytes .../view/default/layui/images/face/69.gif | Bin 0 -> 2431 bytes .../view/default/layui/images/face/7.gif | Bin 0 -> 3398 bytes .../view/default/layui/images/face/70.gif | Bin 0 -> 4590 bytes .../view/default/layui/images/face/71.gif | Bin 0 -> 5304 bytes .../view/default/layui/images/face/8.gif | Bin 0 -> 4050 bytes .../view/default/layui/images/face/9.gif | Bin 0 -> 4221 bytes .../default/layui/lay/modules/carousel.js | 2 + .../view/default/layui/lay/modules/code.js | 2 + .../default/layui/lay/modules/colorpicker.js | 2 + .../view/default/layui/lay/modules/element.js | 2 + .../view/default/layui/lay/modules/flow.js | 2 + .../view/default/layui/lay/modules/form.js | 2 + .../view/default/layui/lay/modules/jquery.js | 5 + .../view/default/layui/lay/modules/laydate.js | 2 + .../view/default/layui/lay/modules/layedit.js | 2 + .../view/default/layui/lay/modules/layer.js | 2 + .../view/default/layui/lay/modules/laypage.js | 2 + .../view/default/layui/lay/modules/laytpl.js | 2 + .../view/default/layui/lay/modules/mobile.js | 2 + .../view/default/layui/lay/modules/rate.js | 2 + .../view/default/layui/lay/modules/slider.js | 2 + .../view/default/layui/lay/modules/table.js | 2 + .../default/layui/lay/modules/transfer.js | 2 + .../view/default/layui/lay/modules/tree.js | 2 + .../view/default/layui/lay/modules/upload.js | 2 + .../view/default/layui/lay/modules/util.js | 2 + apps/admin/view/default/layui/layui.all.js | 5 + apps/admin/view/default/layui/layui.js | 2 + apps/admin/view/default/member/comment.html | 178 + apps/admin/view/default/member/field.html | 183 + apps/admin/view/default/member/group.html | 175 + apps/admin/view/default/member/member.html | 379 + apps/admin/view/default/system/area.html | 154 + apps/admin/view/default/system/config.html | 806 + apps/admin/view/default/system/database.html | 90 + apps/admin/view/default/system/home.html | 173 + apps/admin/view/default/system/menu.html | 226 + apps/admin/view/default/system/role.html | 142 + apps/admin/view/default/system/server.html | 115 + apps/admin/view/default/system/syslog.html | 45 + apps/admin/view/default/system/type.html | 184 + apps/admin/view/default/system/ucenter.html | 71 + apps/admin/view/default/system/upgrade.html | 294 + apps/admin/view/default/system/user.html | 215 + apps/api/config/config.php | 12 + apps/api/controller/AboutController.php | 61 + apps/api/controller/CmsController.php | 531 + apps/api/controller/ContentController.php | 65 + apps/api/controller/DoController.php | 48 + apps/api/controller/ListController.php | 117 + apps/api/model/CmsModel.php | 546 + apps/api/model/DoModel.php | 42 + apps/api/view/default/index.html | 1 + apps/common/AdminController.php | 196 + apps/common/ApiController.php | 69 + apps/common/HomeController.php | 105 + apps/common/function.php | 255 + apps/common/route.php | 50 + apps/common/version.php | 12 + apps/home/controller/CommentController.php | 151 + apps/home/controller/DoController.php | 90 + apps/home/controller/ExtLabelController.php | 36 + apps/home/controller/FormController.php | 105 + apps/home/controller/IndexController.php | 320 + apps/home/controller/MemberController.php | 509 + apps/home/controller/MessageController.php | 112 + apps/home/controller/ParserController.php | 3993 +++ apps/home/controller/SearchController.php | 46 + apps/home/controller/SitemapController.php | 90 + apps/home/controller/TagController.php | 50 + apps/home/model/DoModel.php | 42 + apps/home/model/MemberModel.php | 119 + apps/home/model/ParserModel.php | 985 + apps/home/model/SitemapModel.php | 79 + config/config.php | 52 + config/database.php | 25 + config/route.php | 9 + core/basic/Basic.php | 214 + core/basic/Cache.php | 57 + core/basic/Check.php | 137 + core/basic/Config.php | 174 + core/basic/Controller.php | 117 + core/basic/Db.php | 37 + core/basic/Kernel.php | 10 + core/basic/Log.php | 70 + core/basic/Model.php | 1435 + core/basic/Response.php | 56 + core/basic/Smtp.php | 545 + core/basic/Url.php | 156 + core/cacert.pem | 3314 ++ core/cache/Builder.php | 28 + core/cache/Memcache.php | 96 + core/code.php | 32 + core/convention.php | 124 + core/database/Builder.php | 50 + core/database/Mysqli.php | 263 + core/database/Pdo.php | 311 + core/database/Sqlite.php | 231 + core/extend/code/Code.php | 112 + core/extend/code/elephant.ttf | Bin 0 -> 51652 bytes core/extend/excel/excelreader.php | 1097 + core/extend/excel/oleread.php | 266 + core/extend/qrcode/phpqrcode.php | 3312 ++ .../extend/ueditor/dialogs/anchor/anchor.html | 40 + .../ueditor/dialogs/attachment/attachment.css | 681 + .../dialogs/attachment/attachment.html | 60 + .../ueditor/dialogs/attachment/attachment.js | 755 + .../attachment/fileTypeImages/icon_chm.gif | Bin 0 -> 923 bytes .../fileTypeImages/icon_default.png | Bin 0 -> 841 bytes .../attachment/fileTypeImages/icon_doc.gif | Bin 0 -> 1012 bytes .../attachment/fileTypeImages/icon_exe.gif | Bin 0 -> 949 bytes .../attachment/fileTypeImages/icon_jpg.gif | Bin 0 -> 950 bytes .../attachment/fileTypeImages/icon_mp3.gif | Bin 0 -> 986 bytes .../attachment/fileTypeImages/icon_mv.gif | Bin 0 -> 1001 bytes .../attachment/fileTypeImages/icon_pdf.gif | Bin 0 -> 996 bytes .../attachment/fileTypeImages/icon_ppt.gif | Bin 0 -> 1001 bytes .../attachment/fileTypeImages/icon_psd.gif | Bin 0 -> 1009 bytes .../attachment/fileTypeImages/icon_rar.gif | Bin 0 -> 1007 bytes .../attachment/fileTypeImages/icon_txt.gif | Bin 0 -> 970 bytes .../attachment/fileTypeImages/icon_xls.gif | Bin 0 -> 1005 bytes .../dialogs/attachment/images/alignicon.gif | Bin 0 -> 1051 bytes .../dialogs/attachment/images/alignicon.png | Bin 0 -> 3714 bytes .../ueditor/dialogs/attachment/images/bg.png | Bin 0 -> 2810 bytes .../dialogs/attachment/images/file-icons.gif | Bin 0 -> 20097 bytes .../dialogs/attachment/images/file-icons.png | Bin 0 -> 44070 bytes .../dialogs/attachment/images/icons.gif | Bin 0 -> 453 bytes .../dialogs/attachment/images/icons.png | Bin 0 -> 2678 bytes .../dialogs/attachment/images/image.png | Bin 0 -> 1672 bytes .../dialogs/attachment/images/progress.png | Bin 0 -> 1269 bytes .../dialogs/attachment/images/success.gif | Bin 0 -> 445 bytes .../dialogs/attachment/images/success.png | Bin 0 -> 1621 bytes .../ueditor/dialogs/background/background.css | 94 + .../dialogs/background/background.html | 56 + .../ueditor/dialogs/background/background.js | 376 + .../ueditor/dialogs/background/images/bg.png | Bin 0 -> 2810 bytes .../dialogs/background/images/success.png | Bin 0 -> 1621 bytes .../ueditor/dialogs/charts/chart.config.js | 65 + core/extend/ueditor/dialogs/charts/charts.css | 165 + .../extend/ueditor/dialogs/charts/charts.html | 89 + core/extend/ueditor/dialogs/charts/charts.js | 519 + .../ueditor/dialogs/charts/images/charts0.png | Bin 0 -> 25306 bytes .../ueditor/dialogs/charts/images/charts1.png | Bin 0 -> 19263 bytes .../ueditor/dialogs/charts/images/charts2.png | Bin 0 -> 23016 bytes .../ueditor/dialogs/charts/images/charts3.png | Bin 0 -> 7823 bytes .../ueditor/dialogs/charts/images/charts4.png | Bin 0 -> 8344 bytes .../ueditor/dialogs/charts/images/charts5.png | Bin 0 -> 47084 bytes .../ueditor/dialogs/emotion/emotion.css | 43 + .../ueditor/dialogs/emotion/emotion.html | 54 + .../extend/ueditor/dialogs/emotion/emotion.js | 186 + .../ueditor/dialogs/emotion/images/0.gif | Bin 0 -> 43 bytes .../ueditor/dialogs/emotion/images/bface.gif | Bin 0 -> 27167 bytes .../ueditor/dialogs/emotion/images/cface.gif | Bin 0 -> 8603 bytes .../ueditor/dialogs/emotion/images/fface.gif | Bin 0 -> 18479 bytes .../dialogs/emotion/images/jxface2.gif | Bin 0 -> 40706 bytes .../emotion/images/neweditor-tab-bg.png | Bin 0 -> 216 bytes .../ueditor/dialogs/emotion/images/tface.gif | Bin 0 -> 19805 bytes .../ueditor/dialogs/emotion/images/wface.gif | Bin 0 -> 49850 bytes .../ueditor/dialogs/emotion/images/yface.gif | Bin 0 -> 28409 bytes core/extend/ueditor/dialogs/gmap/gmap.html | 89 + core/extend/ueditor/dialogs/help/help.css | 7 + core/extend/ueditor/dialogs/help/help.html | 82 + core/extend/ueditor/dialogs/help/help.js | 56 + core/extend/ueditor/dialogs/image/image.css | 894 + core/extend/ueditor/dialogs/image/image.html | 120 + core/extend/ueditor/dialogs/image/image.js | 1143 + .../dialogs/image/images/alignicon.jpg | Bin 0 -> 16101 bytes .../ueditor/dialogs/image/images/bg.png | Bin 0 -> 2810 bytes .../ueditor/dialogs/image/images/icons.gif | Bin 0 -> 453 bytes .../ueditor/dialogs/image/images/icons.png | Bin 0 -> 2678 bytes .../ueditor/dialogs/image/images/image.png | Bin 0 -> 1672 bytes .../ueditor/dialogs/image/images/progress.png | Bin 0 -> 1269 bytes .../ueditor/dialogs/image/images/success.gif | Bin 0 -> 445 bytes .../ueditor/dialogs/image/images/success.png | Bin 0 -> 1621 bytes .../dialogs/insertframe/insertframe.html | 98 + core/extend/ueditor/dialogs/internal.js | 81 + core/extend/ueditor/dialogs/link/link.html | 126 + core/extend/ueditor/dialogs/map/map.html | 135 + core/extend/ueditor/dialogs/map/show.html | 118 + core/extend/ueditor/dialogs/music/music.css | 30 + core/extend/ueditor/dialogs/music/music.html | 32 + core/extend/ueditor/dialogs/music/music.js | 192 + .../ueditor/dialogs/preview/preview.html | 40 + .../ueditor/dialogs/scrawl/images/addimg.png | Bin 0 -> 628 bytes .../ueditor/dialogs/scrawl/images/brush.png | Bin 0 -> 608 bytes .../ueditor/dialogs/scrawl/images/delimg.png | Bin 0 -> 516 bytes .../ueditor/dialogs/scrawl/images/delimgH.png | Bin 0 -> 578 bytes .../ueditor/dialogs/scrawl/images/empty.png | Bin 0 -> 519 bytes .../ueditor/dialogs/scrawl/images/emptyH.png | Bin 0 -> 657 bytes .../ueditor/dialogs/scrawl/images/eraser.png | Bin 0 -> 43271 bytes .../ueditor/dialogs/scrawl/images/redo.png | Bin 0 -> 454 bytes .../ueditor/dialogs/scrawl/images/redoH.png | Bin 0 -> 536 bytes .../ueditor/dialogs/scrawl/images/scale.png | Bin 0 -> 435 bytes .../ueditor/dialogs/scrawl/images/scaleH.png | Bin 0 -> 330 bytes .../ueditor/dialogs/scrawl/images/size.png | Bin 0 -> 775 bytes .../ueditor/dialogs/scrawl/images/undo.png | Bin 0 -> 444 bytes .../ueditor/dialogs/scrawl/images/undoH.png | Bin 0 -> 511 bytes core/extend/ueditor/dialogs/scrawl/scrawl.css | 72 + .../extend/ueditor/dialogs/scrawl/scrawl.html | 95 + core/extend/ueditor/dialogs/scrawl/scrawl.js | 671 + .../dialogs/searchreplace/searchreplace.html | 102 + .../dialogs/searchreplace/searchreplace.js | 164 + .../dialogs/snapscreen/snapscreen.html | 58 + .../ueditor/dialogs/spechars/spechars.html | 21 + .../ueditor/dialogs/spechars/spechars.js | 57 + .../extend/ueditor/dialogs/table/dragicon.png | Bin 0 -> 304 bytes .../ueditor/dialogs/table/edittable.css | 84 + .../ueditor/dialogs/table/edittable.html | 64 + .../extend/ueditor/dialogs/table/edittable.js | 237 + core/extend/ueditor/dialogs/table/edittd.html | 61 + .../extend/ueditor/dialogs/table/edittip.html | 33 + .../extend/ueditor/dialogs/template/config.js | 42 + .../ueditor/dialogs/template/images/bg.gif | Bin 0 -> 84 bytes .../ueditor/dialogs/template/images/pre0.png | Bin 0 -> 250 bytes .../ueditor/dialogs/template/images/pre1.png | Bin 0 -> 291 bytes .../ueditor/dialogs/template/images/pre2.png | Bin 0 -> 394 bytes .../ueditor/dialogs/template/images/pre3.png | Bin 0 -> 485 bytes .../ueditor/dialogs/template/images/pre4.png | Bin 0 -> 393 bytes .../ueditor/dialogs/template/template.css | 18 + .../ueditor/dialogs/template/template.html | 26 + .../ueditor/dialogs/template/template.js | 53 + .../ueditor/dialogs/video/images/bg.png | Bin 0 -> 2810 bytes .../dialogs/video/images/center_focus.jpg | Bin 0 -> 11795 bytes .../dialogs/video/images/file-icons.gif | Bin 0 -> 20097 bytes .../dialogs/video/images/file-icons.png | Bin 0 -> 44070 bytes .../ueditor/dialogs/video/images/icons.gif | Bin 0 -> 453 bytes .../ueditor/dialogs/video/images/icons.png | Bin 0 -> 2678 bytes .../ueditor/dialogs/video/images/image.png | Bin 0 -> 1672 bytes .../dialogs/video/images/left_focus.jpg | Bin 0 -> 11423 bytes .../dialogs/video/images/none_focus.jpg | Bin 0 -> 11546 bytes .../ueditor/dialogs/video/images/progress.png | Bin 0 -> 1269 bytes .../dialogs/video/images/right_focus.jpg | Bin 0 -> 11334 bytes .../ueditor/dialogs/video/images/success.gif | Bin 0 -> 445 bytes .../ueditor/dialogs/video/images/success.png | Bin 0 -> 1621 bytes core/extend/ueditor/dialogs/video/video.css | 635 + core/extend/ueditor/dialogs/video/video.html | 86 + core/extend/ueditor/dialogs/video/video.js | 791 + .../extend/ueditor/dialogs/webapp/webapp.html | 53 + .../dialogs/wordimage/fClipboard_ueditor.swf | Bin 0 -> 1908 bytes .../dialogs/wordimage/imageUploader.swf | Bin 0 -> 62857 bytes .../ueditor/dialogs/wordimage/tangram.js | 1495 + .../ueditor/dialogs/wordimage/wordimage.html | 111 + .../ueditor/dialogs/wordimage/wordimage.js | 157 + core/extend/ueditor/lang/en/en.js | 684 + .../ueditor/lang/en/images/addimage.png | Bin 0 -> 3373 bytes .../lang/en/images/alldeletebtnhoverskin.png | Bin 0 -> 743 bytes .../lang/en/images/alldeletebtnupskin.png | Bin 0 -> 743 bytes .../ueditor/lang/en/images/background.png | Bin 0 -> 3854 bytes core/extend/ueditor/lang/en/images/button.png | Bin 0 -> 4929 bytes core/extend/ueditor/lang/en/images/copy.png | Bin 0 -> 1222 bytes .../ueditor/lang/en/images/deletedisable.png | Bin 0 -> 649 bytes .../ueditor/lang/en/images/deleteenable.png | Bin 0 -> 664 bytes .../ueditor/lang/en/images/listbackground.png | Bin 0 -> 3750 bytes .../ueditor/lang/en/images/localimage.png | Bin 0 -> 3083 bytes core/extend/ueditor/lang/en/images/music.png | Bin 0 -> 91561 bytes .../lang/en/images/rotateleftdisable.png | Bin 0 -> 719 bytes .../lang/en/images/rotateleftenable.png | Bin 0 -> 952 bytes .../lang/en/images/rotaterightdisable.png | Bin 0 -> 754 bytes .../lang/en/images/rotaterightenable.png | Bin 0 -> 1007 bytes core/extend/ueditor/lang/en/images/upload.png | Bin 0 -> 3941 bytes .../extend/ueditor/lang/zh-cn/images/copy.png | Bin 0 -> 4319 bytes .../ueditor/lang/zh-cn/images/localimage.png | Bin 0 -> 6979 bytes .../ueditor/lang/zh-cn/images/music.png | Bin 0 -> 23106 bytes .../ueditor/lang/zh-cn/images/upload.png | Bin 0 -> 6608 bytes core/extend/ueditor/lang/zh-cn/zh-cn.js | 669 + core/extend/ueditor/php/Uploader.class.php | 372 + core/extend/ueditor/php/action_crawler.php | 60 + core/extend/ueditor/php/action_list.php | 99 + core/extend/ueditor/php/action_upload.php | 82 + core/extend/ueditor/php/config.json | 94 + core/extend/ueditor/php/controller.php | 66 + .../ueditor/themes/default/css/ueditor.css | 1903 + .../themes/default/css/ueditor.min.css | 8 + .../ueditor/themes/default/dialogbase.css | 100 + .../ueditor/themes/default/images/anchor.gif | Bin 0 -> 184 bytes .../ueditor/themes/default/images/arrow.png | Bin 0 -> 1173 bytes .../themes/default/images/arrow_down.png | Bin 0 -> 1610 bytes .../themes/default/images/arrow_up.png | Bin 0 -> 1649 bytes .../themes/default/images/button-bg.gif | Bin 0 -> 1114 bytes .../themes/default/images/cancelbutton.gif | Bin 0 -> 1227 bytes .../ueditor/themes/default/images/charts.png | Bin 0 -> 518 bytes .../themes/default/images/cursor_h.gif | Bin 0 -> 253 bytes .../themes/default/images/cursor_h.png | Bin 0 -> 175 bytes .../themes/default/images/cursor_v.gif | Bin 0 -> 370 bytes .../themes/default/images/cursor_v.png | Bin 0 -> 177 bytes .../themes/default/images/dialog-title-bg.png | Bin 0 -> 938 bytes .../themes/default/images/filescan.png | Bin 0 -> 4282 bytes .../themes/default/images/highlighted.gif | Bin 0 -> 111 bytes .../themes/default/images/icons-all.gif | Bin 0 -> 3750 bytes .../ueditor/themes/default/images/icons.gif | Bin 0 -> 20947 bytes .../ueditor/themes/default/images/icons.png | Bin 0 -> 19694 bytes .../themes/default/images/loaderror.png | Bin 0 -> 3209 bytes .../ueditor/themes/default/images/loading.gif | Bin 0 -> 734 bytes .../ueditor/themes/default/images/lock.gif | Bin 0 -> 1062 bytes .../default/images/neweditor-tab-bg.png | Bin 0 -> 216 bytes .../themes/default/images/pagebreak.gif | Bin 0 -> 54 bytes .../ueditor/themes/default/images/scale.png | Bin 0 -> 167 bytes .../themes/default/images/sortable.png | Bin 0 -> 2851 bytes .../ueditor/themes/default/images/spacer.gif | Bin 0 -> 43 bytes .../themes/default/images/sparator_v.png | Bin 0 -> 122 bytes .../default/images/table-cell-align.png | Bin 0 -> 1847 bytes .../default/images/tangram-colorpicker.png | Bin 0 -> 17355 bytes .../themes/default/images/toolbar_bg.png | Bin 0 -> 170 bytes .../themes/default/images/unhighlighted.gif | Bin 0 -> 111 bytes .../ueditor/themes/default/images/upload.png | Bin 0 -> 6608 bytes .../themes/default/images/videologo.gif | Bin 0 -> 1604 bytes .../ueditor/themes/default/images/word.gif | Bin 0 -> 1019 bytes .../themes/default/images/wordpaste.png | Bin 0 -> 6467 bytes core/extend/ueditor/themes/iframe.css | 1 + .../third-party/SyntaxHighlighter/shCore.js | 3655 ++ .../SyntaxHighlighter/shCoreDefault.css | 1 + .../third-party/codemirror/codemirror.css | 104 + .../third-party/codemirror/codemirror.js | 3581 ++ .../highcharts/adapters/mootools-adapter.js | 13 + .../adapters/mootools-adapter.src.js | 313 + .../highcharts/adapters/prototype-adapter.js | 15 + .../adapters/prototype-adapter.src.js | 316 + .../adapters/standalone-framework.js | 17 + .../adapters/standalone-framework.src.js | 583 + .../third-party/highcharts/highcharts-more.js | 50 + .../highcharts/highcharts-more.src.js | 2430 ++ .../third-party/highcharts/highcharts.js | 283 + .../third-party/highcharts/highcharts.src.js | 16974 +++++++++ .../highcharts/modules/annotations.js | 7 + .../highcharts/modules/annotations.src.js | 401 + .../highcharts/modules/canvas-tools.js | 133 + .../highcharts/modules/canvas-tools.src.js | 3113 ++ .../third-party/highcharts/modules/data.js | 17 + .../highcharts/modules/data.src.js | 582 + .../highcharts/modules/drilldown.js | 11 + .../highcharts/modules/drilldown.src.js | 447 + .../highcharts/modules/exporting.js | 22 + .../highcharts/modules/exporting.src.js | 709 + .../third-party/highcharts/modules/funnel.js | 12 + .../highcharts/modules/funnel.src.js | 289 + .../third-party/highcharts/modules/heatmap.js | 1 + .../highcharts/modules/heatmap.src.js | 53 + .../third-party/highcharts/modules/map.js | 27 + .../third-party/highcharts/modules/map.src.js | 1002 + .../highcharts/modules/no-data-to-display.js | 12 + .../modules/no-data-to-display.src.js | 128 + .../highcharts/themes/dark-blue.js | 254 + .../highcharts/themes/dark-green.js | 255 + .../third-party/highcharts/themes/gray.js | 257 + .../third-party/highcharts/themes/grid.js | 103 + .../third-party/highcharts/themes/skies.js | 89 + .../ueditor/third-party/jquery-1.10.2.js | 9789 +++++ .../ueditor/third-party/jquery-1.10.2.min.js | 6 + .../ueditor/third-party/jquery-1.10.2.min.map | 1 + .../snapscreen/UEditorSnapscreen.exe | Bin 0 -> 519936 bytes .../ueditor/third-party/video-js/font/vjs.eot | Bin 0 -> 3536 bytes .../ueditor/third-party/video-js/font/vjs.svg | 65 + .../ueditor/third-party/video-js/font/vjs.ttf | Bin 0 -> 3372 bytes .../third-party/video-js/font/vjs.woff | Bin 0 -> 4228 bytes .../ueditor/third-party/video-js/video-js.css | 766 + .../third-party/video-js/video-js.min.css | 5 + .../ueditor/third-party/video-js/video-js.swf | Bin 0 -> 16745 bytes .../ueditor/third-party/video-js/video.dev.js | 7108 ++++ .../ueditor/third-party/video-js/video.js | 129 + .../third-party/webuploader/Uploader.swf | Bin 0 -> 49382 bytes .../third-party/webuploader/webuploader.css | 28 + .../webuploader/webuploader.custom.js | 5670 +++ .../webuploader/webuploader.custom.min.js | 2 + .../webuploader/webuploader.flashonly.js | 4176 +++ .../webuploader/webuploader.flashonly.min.js | 2 + .../webuploader/webuploader.html5only.js | 5559 +++ .../webuploader/webuploader.html5only.min.js | 2 + .../third-party/webuploader/webuploader.js | 6733 ++++ .../webuploader/webuploader.min.js | 2 + .../webuploader/webuploader.withoutimage.js | 4593 +++ .../webuploader.withoutimage.min.js | 2 + core/extend/ueditor/third-party/xss.min.js | 1 + .../zeroclipboard/ZeroClipboard.js | 1256 + .../zeroclipboard/ZeroClipboard.min.js | 9 + .../zeroclipboard/ZeroClipboard.swf | Bin 0 -> 3933 bytes core/extend/ueditor/ueditor.all.js | 29582 ++++++++++++++++ core/extend/ueditor/ueditor.all.min.js | 29 + core/extend/ueditor/ueditor.config.js | 501 + core/extend/ueditor/ueditor.parse.js | 1022 + core/extend/ueditor/ueditor.parse.min.js | 7 + core/function/file.php | 626 + core/function/handle.php | 976 + core/function/helper.php | 733 + core/init.php | 114 + core/log/Builder.php | 42 + core/log/LogDb.php | 60 + core/log/LogText.php | 50 + core/qrcode.php | 22 + core/start.php | 23 + core/template/error.html | 23 + core/template/face01.png | Bin 0 -> 7687 bytes core/template/face02.png | Bin 0 -> 7266 bytes core/template/success.html | 20 + core/view/Paging.php | 396 + core/view/Parser.php | 521 + core/view/View.php | 159 + core/weixin/WxAccessToken.php | 49 + core/weixin/WxJsSDK.php | 79 + core/weixin/WxTemplate.php | 147 + core/weixin/WxUser.php | 61 + core/weixin/WxWebAuth.php | 116 + data/42a7c160922cdd04f08438f03dd6d19b.db | Bin 0 -> 503808 bytes doc/ChangeLog.txt | 685 + favicon.ico | Bin 0 -> 1150 bytes index.php | 23 + jiaoyuguanwang.zip | Bin 0 -> 7932739 bytes rewrite/.htaccess | 10 + rewrite/nginx.txt | 8 + rewrite/readme.txt | 8 + rewrite/web.config | 17 + rewrite/伪静态说明.txt | 11 + robots.txt | 3 + .../277e9523d4d6851e0ecf0ad04788f7d6.html | 415 + .../40e5b4da5ee74dbd2d0018332571cef3.html | 95 + .../870e30927f49889d5494276b9c85efef.html | 201 + .../bf5c77296f4fbdcbb5735a2f8dacf5c9.html | 415 + .../31a11e9c85e6494ac3e3e34a677c4b9f.php | 116 + .../33b636322f1df2225e7552d3217d7f2c.php | 272 + .../583962598e2490c0e6648b24a0ba48d1.php | 1115 + .../cc91a7a32ea17ce62e3ad4760e3bc3e6.php | 88 + .../2245023265ae4cf87d02c8b6ba991139.php | 71 + .../4b82677b6c1408df4be21ada9a584fde.php | 20 + .../session/0/sess_0kq791oea1l0a24sj071td7dke | 1 + .../session/5/sess_53r4ibnckr73kq61536qgjmnff | 1 + .../session/6/sess_68q86nvhrr77f421f9jdbsm4fb | 1 + .../session/6/sess_6lsrhi2v4m8oct7rlaqnvphsu9 | 1 + .../session/b/sess_b63his5ohc9ev8vtuv1e52j9i7 | 1 + .../session/e/sess_ea7dp9t9t6ot3di6adjnb0iejc | 1 + .../session/i/sess_i50eqj7jdp711i4eubp39ksj6n | 1 + .../session/l/sess_llv0vd08uijto28id2hua0to63 | 1 + .../session/m/sess_m158i8mul9652qo4ojgducpf11 | 1 + .../session/m/sess_mbd0ja0lkihg7g4ioovf21g6r9 | 1 + .../session/n/sess_njur5g2af5bi8nkrnoftbd43il | 1 + .../session/o/sess_ogmmjknc7bct81vb29m4vsjsge | 1 + .../session/p/sess_pijjdllvhgrhotujhehsrpfsqb | 1 + .../session/s/sess_saqhrg3huai2vihc5232gsjbcs | 1 + .../session/s/sess_sthp9m9ot0mtajlu7238n9rrv2 | 1 + .../session/t/sess_tv01msdvqrmbh8tt9qfvvnmo8v | 1 + .../session/u/sess_udjbgnlbl05fl288po105i11di | 1 + .../session/u/sess_ufflhsg9vd1svqup3vr4jgthnf | 1 + skin/css/animate.min.css | 2676 ++ skin/css/global.css | 441 + skin/css/owl.carousel.min.css | 240 + skin/css/style.css | 2280 ++ skin/images/bg1.jpg | Bin 0 -> 190297 bytes skin/images/close.png | Bin 0 -> 1245 bytes skin/images/cur1.png | Bin 0 -> 1425 bytes skin/images/cur2.png | Bin 0 -> 1403 bytes skin/images/ft.jpg | Bin 0 -> 22665 bytes skin/images/icon1.png | Bin 0 -> 1086 bytes skin/images/icon10.png | Bin 0 -> 1162 bytes skin/images/icon11-1.png | Bin 0 -> 1140 bytes skin/images/icon11.png | Bin 0 -> 1125 bytes skin/images/icon12.png | Bin 0 -> 1412 bytes skin/images/icon13.png | Bin 0 -> 5533 bytes skin/images/icon14.png | Bin 0 -> 4684 bytes skin/images/icon15.png | Bin 0 -> 5748 bytes skin/images/icon16.png | Bin 0 -> 1737 bytes skin/images/icon17.png | Bin 0 -> 1134 bytes skin/images/icon18.png | Bin 0 -> 1398 bytes skin/images/icon2-1.png | Bin 0 -> 1115 bytes skin/images/icon2.png | Bin 0 -> 1105 bytes skin/images/icon21.png | Bin 0 -> 2730 bytes skin/images/icon23.png | Bin 0 -> 1317 bytes skin/images/icon3-1.png | Bin 0 -> 1116 bytes skin/images/icon3.png | Bin 0 -> 1087 bytes skin/images/icon4.png | Bin 0 -> 1117 bytes skin/images/icon5.png | Bin 0 -> 1198 bytes skin/images/icon6.png | Bin 0 -> 1275 bytes skin/images/icon7.png | Bin 0 -> 1198 bytes skin/images/icon8-1.png | Bin 0 -> 1194 bytes skin/images/icon8.png | Bin 0 -> 1191 bytes skin/images/icon9.png | Bin 0 -> 1141 bytes skin/images/img6.jpg | Bin 0 -> 99038 bytes skin/images/map.jpg | Bin 0 -> 76085 bytes skin/images/menu-1.png | Bin 0 -> 3707 bytes skin/images/menu.png | Bin 0 -> 1831 bytes skin/images/team.jpg | Bin 0 -> 148797 bytes skin/images/team_wap.jpg | Bin 0 -> 112238 bytes skin/images/work.jpg | Bin 0 -> 150216 bytes skin/js/html5.js | 8 + skin/js/jquery.min.js | 4 + skin/js/main.js | 186 + skin/js/owl.carousel.js | 3069 ++ skin/js/wow.js | 36 + ...54308f15d1121e_20210929223966_pbootcms.sql | 1689 + ...aa4b4fe116739cc0bb3fb1b2_20211014090433.db | Bin 0 -> 503808 bytes ...a7a2cad681612c2d423fc0dc_20211001201912.db | Bin 0 -> 503808 bytes .../apps/admin/controller/IndexController.php | 349 + .../content/ContentSortController.php | 557 + .../controller/content/SingleController.php | 259 + .../apps/admin/view/default/common/head.html | 132 + .../admin/view/default/content/company.html | 102 + .../admin/view/default/content/single.html | 425 + .../apps/admin/view/default/content/site.html | 101 + .../apps/admin/view/default/index.html | 78 + .../admin/view/default/system/config.html | 806 + .../apps/admin/view/default/system/home.html | 178 + .../apps/common/AdminController.php | 196 + .../20211009165821/apps/common/version.php | 12 + .../apps/home/controller/IndexController.php | 297 + .../apps/home/model/ParserModel.php | 982 + .../20211009165821/core/function/handle.php | 976 + .../20211009165821/core/template/error.html | 25 + .../upgrade/20211009165821/doc/ChangeLog.txt | 669 + .../admin/view/default/content/company.html | 113 + .../admin/view/default/system/config.html | 806 + .../20211009193645/apps/common/version.php | 12 + .../apps/home/controller/IndexController.php | 306 + .../controller/content/ContentController.php | 551 + .../content/ContentSortController.php | 557 + .../apps/admin/view/default/common/head.html | 134 + .../admin/view/default/content/company.html | 113 + .../view/default/content/contentsort.html | 615 + .../admin/view/default/content/single.html | 431 + .../apps/admin/view/default/content/site.html | 107 + .../apps/admin/view/default/index.html | 78 + .../admin/view/default/system/config.html | 806 + .../apps/admin/view/default/system/home.html | 173 + .../admin/view/default/system/server.html | 118 + .../apps/api/controller/AboutController.php | 62 + .../apps/common/AdminController.php | 197 + .../20211013183901/apps/common/version.php | 12 + .../apps/home/controller/IndexController.php | 317 + .../apps/home/controller/ParserController.php | 3988 +++ .../home/controller/SitemapController.php | 90 + .../20211013183901/core/basic/Kernel.php | 10 + .../upgrade/20211013183901/core/basic/Url.php | 157 + .../20211013183901/core/function/file.php | 626 + .../20211013183901/core/function/handle.php | 976 + .../20211013183901/core/function/helper.php | 733 + .../20211013183901/core/view/Paging.php | 396 + .../upgrade/20211013183901/core/view/View.php | 159 + .../upgrade/20211013183901/doc/ChangeLog.txt | 675 + .../backup/upgrade/20211013183901/index.php | 23 + static/images/nopic.png | Bin 0 -> 3434 bytes .../image/20211013/1634130652228573.jpg | Bin 0 -> 38889 bytes .../image/20211013/1634131153378364.jpg | Bin 0 -> 23005 bytes .../image/20211013/1634131859993377.jpg | Bin 0 -> 129391 bytes .../image/20211013/1634131895723626.jpg | Bin 0 -> 17919 bytes .../image/20211013/1634132541194381.jpg | Bin 0 -> 18005 bytes .../image/20211013/1634132567351474.jpg | Bin 0 -> 18005 bytes .../image/20211013/1634133015345091.jpg | Bin 0 -> 239252 bytes .../image/20211013/1634133028859093.jpg | Bin 0 -> 239252 bytes .../image/20211013/1634133034509917.jpg | Bin 0 -> 239252 bytes .../image/20211013/1634135110902907.jpg | Bin 0 -> 38889 bytes .../image/20211013/1634135334519650.jpg | Bin 0 -> 16564 bytes .../image/20211013/1634135389772953.jpg | Bin 0 -> 13448 bytes .../image/20211013/1634135435590138.jpg | Bin 0 -> 24339 bytes .../image/20211013/1634135472493965.jpg | Bin 0 -> 13448 bytes .../image/20211013/1634135495516394.jpg | Bin 0 -> 24339 bytes .../image/20211013/1634135687720863.jpg | Bin 0 -> 49126 bytes .../image/20211013/1634136016199894.jpg | Bin 0 -> 23005 bytes .../image/20211014/1634169826708461.jpg | Bin 0 -> 129391 bytes .../image/20211014/1634169856640355.jpg | Bin 0 -> 12330 bytes .../image/20211014/1634169891172224.jpg | Bin 0 -> 129391 bytes .../image/20211014/1634169920998625.jpg | Bin 0 -> 15419 bytes .../image/20211014/1634169952184203.jpg | Bin 0 -> 129391 bytes .../image/20211014/1634169963631413.jpg | Bin 0 -> 19527 bytes .../image/20211014/1634170177908012.jpg | Bin 0 -> 18005 bytes .../image/20211014/1634170206545969.jpg | Bin 0 -> 18005 bytes .../image/20211014/1634170265483909.png | Bin 0 -> 12350 bytes .../image/20220124/1642991992178625.png | Bin 0 -> 311282 bytes .../image/20220124/1642992067912272.jpg | Bin 0 -> 19176 bytes .../image/20220124/1642992112844044.png | Bin 0 -> 311282 bytes template/default/html/about.html | 63 + template/default/html/case.html | 49 + template/default/html/caselist.html | 85 + template/default/html/contact.html | 144 + template/default/html/course.html | 55 + template/default/html/courselist.html | 83 + template/default/html/foot.html | 13 + template/default/html/head.html | 16 + template/default/html/index.html | 239 + template/default/html/jobslist.html | 71 + template/default/html/news.html | 54 + template/default/html/newslist.html | 81 + template/default/html/teamlist.html | 85 + web.config | 17 + 仿站.url | 6 + 安装教程.txt | 16 + 站长资源.txt | 12 + 786 files changed, 219240 insertions(+) create mode 100644 .htaccess create mode 100644 admin.php create mode 100644 api.php create mode 100644 apps/admin/controller/IndexController.php create mode 100644 apps/admin/controller/content/CompanyController.php create mode 100644 apps/admin/controller/content/ContentController.php create mode 100644 apps/admin/controller/content/ContentSortController.php create mode 100644 apps/admin/controller/content/ExtFieldController.php create mode 100644 apps/admin/controller/content/FormController.php create mode 100644 apps/admin/controller/content/LabelController.php create mode 100644 apps/admin/controller/content/LinkController.php create mode 100644 apps/admin/controller/content/MessageController.php create mode 100644 apps/admin/controller/content/ModelController.php create mode 100644 apps/admin/controller/content/SingleController.php create mode 100644 apps/admin/controller/content/SiteController.php create mode 100644 apps/admin/controller/content/SlideController.php create mode 100644 apps/admin/controller/content/TagsController.php create mode 100644 apps/admin/controller/member/MemberCommentController.php create mode 100644 apps/admin/controller/member/MemberController.php create mode 100644 apps/admin/controller/member/MemberFieldController.php create mode 100644 apps/admin/controller/member/MemberGroupController.php create mode 100644 apps/admin/controller/system/AreaController.php create mode 100644 apps/admin/controller/system/ConfigController.php create mode 100644 apps/admin/controller/system/DatabaseController.php create mode 100644 apps/admin/controller/system/MenuController.php create mode 100644 apps/admin/controller/system/RoleController.php create mode 100644 apps/admin/controller/system/SyslogController.php create mode 100644 apps/admin/controller/system/TypeController.php create mode 100644 apps/admin/controller/system/UpgradeController.php create mode 100644 apps/admin/controller/system/UserController.php create mode 100644 apps/admin/model/IndexModel.php create mode 100644 apps/admin/model/content/CompanyModel.php create mode 100644 apps/admin/model/content/ContentModel.php create mode 100644 apps/admin/model/content/ContentSortModel.php create mode 100644 apps/admin/model/content/ExtFieldModel.php create mode 100644 apps/admin/model/content/FormModel.php create mode 100644 apps/admin/model/content/LabelModel.php create mode 100644 apps/admin/model/content/LinkModel.php create mode 100644 apps/admin/model/content/MessageModel.php create mode 100644 apps/admin/model/content/ModelModel.php create mode 100644 apps/admin/model/content/SingleModel.php create mode 100644 apps/admin/model/content/SiteModel.php create mode 100644 apps/admin/model/content/SlideModel.php create mode 100644 apps/admin/model/content/TagsModel.php create mode 100644 apps/admin/model/member/MemberCommentModel.php create mode 100644 apps/admin/model/member/MemberFieldModel.php create mode 100644 apps/admin/model/member/MemberGroupModel.php create mode 100644 apps/admin/model/member/MemberModel.php create mode 100644 apps/admin/model/system/AreaModel.php create mode 100644 apps/admin/model/system/ConfigModel.php create mode 100644 apps/admin/model/system/DatabaseModel.php create mode 100644 apps/admin/model/system/MenuModel.php create mode 100644 apps/admin/model/system/RoleModel.php create mode 100644 apps/admin/model/system/SyslogModel.php create mode 100644 apps/admin/model/system/TypeModel.php create mode 100644 apps/admin/model/system/UserModel.php create mode 100644 apps/admin/view/default/common/foot.html create mode 100644 apps/admin/view/default/common/head.html create mode 100644 apps/admin/view/default/common/ueditor.html create mode 100644 apps/admin/view/default/content/company.html create mode 100644 apps/admin/view/default/content/content.html create mode 100644 apps/admin/view/default/content/contentsort.html create mode 100644 apps/admin/view/default/content/exform.html create mode 100644 apps/admin/view/default/content/exmessage.html create mode 100644 apps/admin/view/default/content/extfield.html create mode 100644 apps/admin/view/default/content/form.html create mode 100644 apps/admin/view/default/content/label.html create mode 100644 apps/admin/view/default/content/link.html create mode 100644 apps/admin/view/default/content/message.html create mode 100644 apps/admin/view/default/content/model.html create mode 100644 apps/admin/view/default/content/single.html create mode 100644 apps/admin/view/default/content/site.html create mode 100644 apps/admin/view/default/content/slide.html create mode 100644 apps/admin/view/default/content/tags.html create mode 100644 apps/admin/view/default/css/comm.css create mode 100644 apps/admin/view/default/css/jquery.treetable.css create mode 100644 apps/admin/view/default/css/login.css create mode 100644 apps/admin/view/default/font-awesome/HELP-US-OUT.txt create mode 100644 apps/admin/view/default/font-awesome/css/font-awesome.css create mode 100644 apps/admin/view/default/font-awesome/css/font-awesome.min.css create mode 100644 apps/admin/view/default/font-awesome/fonts/FontAwesome.otf create mode 100644 apps/admin/view/default/font-awesome/fonts/fontawesome-webfont.eot create mode 100644 apps/admin/view/default/font-awesome/fonts/fontawesome-webfont.svg create mode 100644 apps/admin/view/default/font-awesome/fonts/fontawesome-webfont.ttf create mode 100644 apps/admin/view/default/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 apps/admin/view/default/font-awesome/fonts/fontawesome-webfont.woff2 create mode 100644 apps/admin/view/default/font-awesome/less/animated.less create mode 100644 apps/admin/view/default/font-awesome/less/bordered-pulled.less create mode 100644 apps/admin/view/default/font-awesome/less/core.less create mode 100644 apps/admin/view/default/font-awesome/less/fixed-width.less create mode 100644 apps/admin/view/default/font-awesome/less/font-awesome.less create mode 100644 apps/admin/view/default/font-awesome/less/icons.less create mode 100644 apps/admin/view/default/font-awesome/less/larger.less create mode 100644 apps/admin/view/default/font-awesome/less/list.less create mode 100644 apps/admin/view/default/font-awesome/less/mixins.less create mode 100644 apps/admin/view/default/font-awesome/less/path.less create mode 100644 apps/admin/view/default/font-awesome/less/rotated-flipped.less create mode 100644 apps/admin/view/default/font-awesome/less/screen-reader.less create mode 100644 apps/admin/view/default/font-awesome/less/stacked.less create mode 100644 apps/admin/view/default/font-awesome/less/variables.less create mode 100644 apps/admin/view/default/font-awesome/scss/_animated.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_bordered-pulled.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_core.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_fixed-width.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_icons.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_larger.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_list.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_mixins.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_path.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_rotated-flipped.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_screen-reader.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_stacked.scss create mode 100644 apps/admin/view/default/font-awesome/scss/_variables.scss create mode 100644 apps/admin/view/default/font-awesome/scss/font-awesome.scss create mode 100644 apps/admin/view/default/images/bg.jpg create mode 100644 apps/admin/view/default/images/logo.png create mode 100644 apps/admin/view/default/index.html create mode 100644 apps/admin/view/default/js/comm.js create mode 100644 apps/admin/view/default/js/jquery-1.12.4.min.js create mode 100644 apps/admin/view/default/js/jquery-1.12.4.min.map create mode 100644 apps/admin/view/default/js/jquery.dragsort-0.5.2.min.js create mode 100644 apps/admin/view/default/js/jquery.treetable.js create mode 100644 apps/admin/view/default/js/jscolor.js create mode 100644 apps/admin/view/default/js/mylayui.js create mode 100644 apps/admin/view/default/layui/css/layui.css create mode 100644 apps/admin/view/default/layui/css/layui.mobile.css create mode 100644 apps/admin/view/default/layui/css/modules/code.css create mode 100644 apps/admin/view/default/layui/css/modules/laydate/default/laydate.css create mode 100644 apps/admin/view/default/layui/css/modules/layer/default/icon-ext.png create mode 100644 apps/admin/view/default/layui/css/modules/layer/default/icon.png create mode 100644 apps/admin/view/default/layui/css/modules/layer/default/layer.css create mode 100644 apps/admin/view/default/layui/css/modules/layer/default/loading-0.gif create mode 100644 apps/admin/view/default/layui/css/modules/layer/default/loading-1.gif create mode 100644 apps/admin/view/default/layui/css/modules/layer/default/loading-2.gif create mode 100644 apps/admin/view/default/layui/font/iconfont.eot create mode 100644 apps/admin/view/default/layui/font/iconfont.svg create mode 100644 apps/admin/view/default/layui/font/iconfont.ttf create mode 100644 apps/admin/view/default/layui/font/iconfont.woff create mode 100644 apps/admin/view/default/layui/font/iconfont.woff2 create mode 100644 apps/admin/view/default/layui/images/face/0.gif create mode 100644 apps/admin/view/default/layui/images/face/1.gif create mode 100644 apps/admin/view/default/layui/images/face/10.gif create mode 100644 apps/admin/view/default/layui/images/face/11.gif create mode 100644 apps/admin/view/default/layui/images/face/12.gif create mode 100644 apps/admin/view/default/layui/images/face/13.gif create mode 100644 apps/admin/view/default/layui/images/face/14.gif create mode 100644 apps/admin/view/default/layui/images/face/15.gif create mode 100644 apps/admin/view/default/layui/images/face/16.gif create mode 100644 apps/admin/view/default/layui/images/face/17.gif create mode 100644 apps/admin/view/default/layui/images/face/18.gif create mode 100644 apps/admin/view/default/layui/images/face/19.gif create mode 100644 apps/admin/view/default/layui/images/face/2.gif create mode 100644 apps/admin/view/default/layui/images/face/20.gif create mode 100644 apps/admin/view/default/layui/images/face/21.gif create mode 100644 apps/admin/view/default/layui/images/face/22.gif create mode 100644 apps/admin/view/default/layui/images/face/23.gif create mode 100644 apps/admin/view/default/layui/images/face/24.gif create mode 100644 apps/admin/view/default/layui/images/face/25.gif create mode 100644 apps/admin/view/default/layui/images/face/26.gif create mode 100644 apps/admin/view/default/layui/images/face/27.gif create mode 100644 apps/admin/view/default/layui/images/face/28.gif create mode 100644 apps/admin/view/default/layui/images/face/29.gif create mode 100644 apps/admin/view/default/layui/images/face/3.gif create mode 100644 apps/admin/view/default/layui/images/face/30.gif create mode 100644 apps/admin/view/default/layui/images/face/31.gif create mode 100644 apps/admin/view/default/layui/images/face/32.gif create mode 100644 apps/admin/view/default/layui/images/face/33.gif create mode 100644 apps/admin/view/default/layui/images/face/34.gif create mode 100644 apps/admin/view/default/layui/images/face/35.gif create mode 100644 apps/admin/view/default/layui/images/face/36.gif create mode 100644 apps/admin/view/default/layui/images/face/37.gif create mode 100644 apps/admin/view/default/layui/images/face/38.gif create mode 100644 apps/admin/view/default/layui/images/face/39.gif create mode 100644 apps/admin/view/default/layui/images/face/4.gif create mode 100644 apps/admin/view/default/layui/images/face/40.gif create mode 100644 apps/admin/view/default/layui/images/face/41.gif create mode 100644 apps/admin/view/default/layui/images/face/42.gif create mode 100644 apps/admin/view/default/layui/images/face/43.gif create mode 100644 apps/admin/view/default/layui/images/face/44.gif create mode 100644 apps/admin/view/default/layui/images/face/45.gif create mode 100644 apps/admin/view/default/layui/images/face/46.gif create mode 100644 apps/admin/view/default/layui/images/face/47.gif create mode 100644 apps/admin/view/default/layui/images/face/48.gif create mode 100644 apps/admin/view/default/layui/images/face/49.gif create mode 100644 apps/admin/view/default/layui/images/face/5.gif create mode 100644 apps/admin/view/default/layui/images/face/50.gif create mode 100644 apps/admin/view/default/layui/images/face/51.gif create mode 100644 apps/admin/view/default/layui/images/face/52.gif create mode 100644 apps/admin/view/default/layui/images/face/53.gif create mode 100644 apps/admin/view/default/layui/images/face/54.gif create mode 100644 apps/admin/view/default/layui/images/face/55.gif create mode 100644 apps/admin/view/default/layui/images/face/56.gif create mode 100644 apps/admin/view/default/layui/images/face/57.gif create mode 100644 apps/admin/view/default/layui/images/face/58.gif create mode 100644 apps/admin/view/default/layui/images/face/59.gif create mode 100644 apps/admin/view/default/layui/images/face/6.gif create mode 100644 apps/admin/view/default/layui/images/face/60.gif create mode 100644 apps/admin/view/default/layui/images/face/61.gif create mode 100644 apps/admin/view/default/layui/images/face/62.gif create mode 100644 apps/admin/view/default/layui/images/face/63.gif create mode 100644 apps/admin/view/default/layui/images/face/64.gif create mode 100644 apps/admin/view/default/layui/images/face/65.gif create mode 100644 apps/admin/view/default/layui/images/face/66.gif create mode 100644 apps/admin/view/default/layui/images/face/67.gif create mode 100644 apps/admin/view/default/layui/images/face/68.gif create mode 100644 apps/admin/view/default/layui/images/face/69.gif create mode 100644 apps/admin/view/default/layui/images/face/7.gif create mode 100644 apps/admin/view/default/layui/images/face/70.gif create mode 100644 apps/admin/view/default/layui/images/face/71.gif create mode 100644 apps/admin/view/default/layui/images/face/8.gif create mode 100644 apps/admin/view/default/layui/images/face/9.gif create mode 100644 apps/admin/view/default/layui/lay/modules/carousel.js create mode 100644 apps/admin/view/default/layui/lay/modules/code.js create mode 100644 apps/admin/view/default/layui/lay/modules/colorpicker.js create mode 100644 apps/admin/view/default/layui/lay/modules/element.js create mode 100644 apps/admin/view/default/layui/lay/modules/flow.js create mode 100644 apps/admin/view/default/layui/lay/modules/form.js create mode 100644 apps/admin/view/default/layui/lay/modules/jquery.js create mode 100644 apps/admin/view/default/layui/lay/modules/laydate.js create mode 100644 apps/admin/view/default/layui/lay/modules/layedit.js create mode 100644 apps/admin/view/default/layui/lay/modules/layer.js create mode 100644 apps/admin/view/default/layui/lay/modules/laypage.js create mode 100644 apps/admin/view/default/layui/lay/modules/laytpl.js create mode 100644 apps/admin/view/default/layui/lay/modules/mobile.js create mode 100644 apps/admin/view/default/layui/lay/modules/rate.js create mode 100644 apps/admin/view/default/layui/lay/modules/slider.js create mode 100644 apps/admin/view/default/layui/lay/modules/table.js create mode 100644 apps/admin/view/default/layui/lay/modules/transfer.js create mode 100644 apps/admin/view/default/layui/lay/modules/tree.js create mode 100644 apps/admin/view/default/layui/lay/modules/upload.js create mode 100644 apps/admin/view/default/layui/lay/modules/util.js create mode 100644 apps/admin/view/default/layui/layui.all.js create mode 100644 apps/admin/view/default/layui/layui.js create mode 100644 apps/admin/view/default/member/comment.html create mode 100644 apps/admin/view/default/member/field.html create mode 100644 apps/admin/view/default/member/group.html create mode 100644 apps/admin/view/default/member/member.html create mode 100644 apps/admin/view/default/system/area.html create mode 100644 apps/admin/view/default/system/config.html create mode 100644 apps/admin/view/default/system/database.html create mode 100644 apps/admin/view/default/system/home.html create mode 100644 apps/admin/view/default/system/menu.html create mode 100644 apps/admin/view/default/system/role.html create mode 100644 apps/admin/view/default/system/server.html create mode 100644 apps/admin/view/default/system/syslog.html create mode 100644 apps/admin/view/default/system/type.html create mode 100644 apps/admin/view/default/system/ucenter.html create mode 100644 apps/admin/view/default/system/upgrade.html create mode 100644 apps/admin/view/default/system/user.html create mode 100644 apps/api/config/config.php create mode 100644 apps/api/controller/AboutController.php create mode 100644 apps/api/controller/CmsController.php create mode 100644 apps/api/controller/ContentController.php create mode 100644 apps/api/controller/DoController.php create mode 100644 apps/api/controller/ListController.php create mode 100644 apps/api/model/CmsModel.php create mode 100644 apps/api/model/DoModel.php create mode 100644 apps/api/view/default/index.html create mode 100644 apps/common/AdminController.php create mode 100644 apps/common/ApiController.php create mode 100644 apps/common/HomeController.php create mode 100644 apps/common/function.php create mode 100644 apps/common/route.php create mode 100644 apps/common/version.php create mode 100644 apps/home/controller/CommentController.php create mode 100644 apps/home/controller/DoController.php create mode 100644 apps/home/controller/ExtLabelController.php create mode 100644 apps/home/controller/FormController.php create mode 100644 apps/home/controller/IndexController.php create mode 100644 apps/home/controller/MemberController.php create mode 100644 apps/home/controller/MessageController.php create mode 100644 apps/home/controller/ParserController.php create mode 100644 apps/home/controller/SearchController.php create mode 100644 apps/home/controller/SitemapController.php create mode 100644 apps/home/controller/TagController.php create mode 100644 apps/home/model/DoModel.php create mode 100644 apps/home/model/MemberModel.php create mode 100644 apps/home/model/ParserModel.php create mode 100644 apps/home/model/SitemapModel.php create mode 100644 config/config.php create mode 100644 config/database.php create mode 100644 config/route.php create mode 100644 core/basic/Basic.php create mode 100644 core/basic/Cache.php create mode 100644 core/basic/Check.php create mode 100644 core/basic/Config.php create mode 100644 core/basic/Controller.php create mode 100644 core/basic/Db.php create mode 100644 core/basic/Kernel.php create mode 100644 core/basic/Log.php create mode 100644 core/basic/Model.php create mode 100644 core/basic/Response.php create mode 100644 core/basic/Smtp.php create mode 100644 core/basic/Url.php create mode 100644 core/cacert.pem create mode 100644 core/cache/Builder.php create mode 100644 core/cache/Memcache.php create mode 100644 core/code.php create mode 100644 core/convention.php create mode 100644 core/database/Builder.php create mode 100644 core/database/Mysqli.php create mode 100644 core/database/Pdo.php create mode 100644 core/database/Sqlite.php create mode 100644 core/extend/code/Code.php create mode 100644 core/extend/code/elephant.ttf create mode 100644 core/extend/excel/excelreader.php create mode 100644 core/extend/excel/oleread.php create mode 100644 core/extend/qrcode/phpqrcode.php create mode 100644 core/extend/ueditor/dialogs/anchor/anchor.html create mode 100644 core/extend/ueditor/dialogs/attachment/attachment.css create mode 100644 core/extend/ueditor/dialogs/attachment/attachment.html create mode 100644 core/extend/ueditor/dialogs/attachment/attachment.js create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_chm.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_default.png create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_doc.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_exe.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_jpg.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_mp3.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_mv.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_pdf.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_ppt.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_psd.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif create mode 100644 core/extend/ueditor/dialogs/attachment/fileTypeImages/icon_xls.gif create mode 100644 core/extend/ueditor/dialogs/attachment/images/alignicon.gif create mode 100644 core/extend/ueditor/dialogs/attachment/images/alignicon.png create mode 100644 core/extend/ueditor/dialogs/attachment/images/bg.png create mode 100644 core/extend/ueditor/dialogs/attachment/images/file-icons.gif create mode 100644 core/extend/ueditor/dialogs/attachment/images/file-icons.png create mode 100644 core/extend/ueditor/dialogs/attachment/images/icons.gif create mode 100644 core/extend/ueditor/dialogs/attachment/images/icons.png create mode 100644 core/extend/ueditor/dialogs/attachment/images/image.png create mode 100644 core/extend/ueditor/dialogs/attachment/images/progress.png create mode 100644 core/extend/ueditor/dialogs/attachment/images/success.gif create mode 100644 core/extend/ueditor/dialogs/attachment/images/success.png create mode 100644 core/extend/ueditor/dialogs/background/background.css create mode 100644 core/extend/ueditor/dialogs/background/background.html create mode 100644 core/extend/ueditor/dialogs/background/background.js create mode 100644 core/extend/ueditor/dialogs/background/images/bg.png create mode 100644 core/extend/ueditor/dialogs/background/images/success.png create mode 100644 core/extend/ueditor/dialogs/charts/chart.config.js create mode 100644 core/extend/ueditor/dialogs/charts/charts.css create mode 100644 core/extend/ueditor/dialogs/charts/charts.html create mode 100644 core/extend/ueditor/dialogs/charts/charts.js create mode 100644 core/extend/ueditor/dialogs/charts/images/charts0.png create mode 100644 core/extend/ueditor/dialogs/charts/images/charts1.png create mode 100644 core/extend/ueditor/dialogs/charts/images/charts2.png create mode 100644 core/extend/ueditor/dialogs/charts/images/charts3.png create mode 100644 core/extend/ueditor/dialogs/charts/images/charts4.png create mode 100644 core/extend/ueditor/dialogs/charts/images/charts5.png create mode 100644 core/extend/ueditor/dialogs/emotion/emotion.css create mode 100644 core/extend/ueditor/dialogs/emotion/emotion.html create mode 100644 core/extend/ueditor/dialogs/emotion/emotion.js create mode 100644 core/extend/ueditor/dialogs/emotion/images/0.gif create mode 100644 core/extend/ueditor/dialogs/emotion/images/bface.gif create mode 100644 core/extend/ueditor/dialogs/emotion/images/cface.gif create mode 100644 core/extend/ueditor/dialogs/emotion/images/fface.gif create mode 100644 core/extend/ueditor/dialogs/emotion/images/jxface2.gif create mode 100644 core/extend/ueditor/dialogs/emotion/images/neweditor-tab-bg.png create mode 100644 core/extend/ueditor/dialogs/emotion/images/tface.gif create mode 100644 core/extend/ueditor/dialogs/emotion/images/wface.gif create mode 100644 core/extend/ueditor/dialogs/emotion/images/yface.gif create mode 100644 core/extend/ueditor/dialogs/gmap/gmap.html create mode 100644 core/extend/ueditor/dialogs/help/help.css create mode 100644 core/extend/ueditor/dialogs/help/help.html create mode 100644 core/extend/ueditor/dialogs/help/help.js create mode 100644 core/extend/ueditor/dialogs/image/image.css create mode 100644 core/extend/ueditor/dialogs/image/image.html create mode 100644 core/extend/ueditor/dialogs/image/image.js create mode 100644 core/extend/ueditor/dialogs/image/images/alignicon.jpg create mode 100644 core/extend/ueditor/dialogs/image/images/bg.png create mode 100644 core/extend/ueditor/dialogs/image/images/icons.gif create mode 100644 core/extend/ueditor/dialogs/image/images/icons.png create mode 100644 core/extend/ueditor/dialogs/image/images/image.png create mode 100644 core/extend/ueditor/dialogs/image/images/progress.png create mode 100644 core/extend/ueditor/dialogs/image/images/success.gif create mode 100644 core/extend/ueditor/dialogs/image/images/success.png create mode 100644 core/extend/ueditor/dialogs/insertframe/insertframe.html create mode 100644 core/extend/ueditor/dialogs/internal.js create mode 100644 core/extend/ueditor/dialogs/link/link.html create mode 100644 core/extend/ueditor/dialogs/map/map.html create mode 100644 core/extend/ueditor/dialogs/map/show.html create mode 100644 core/extend/ueditor/dialogs/music/music.css create mode 100644 core/extend/ueditor/dialogs/music/music.html create mode 100644 core/extend/ueditor/dialogs/music/music.js create mode 100644 core/extend/ueditor/dialogs/preview/preview.html create mode 100644 core/extend/ueditor/dialogs/scrawl/images/addimg.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/brush.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/delimg.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/delimgH.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/empty.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/emptyH.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/eraser.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/redo.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/redoH.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/scale.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/scaleH.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/size.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/undo.png create mode 100644 core/extend/ueditor/dialogs/scrawl/images/undoH.png create mode 100644 core/extend/ueditor/dialogs/scrawl/scrawl.css create mode 100644 core/extend/ueditor/dialogs/scrawl/scrawl.html create mode 100644 core/extend/ueditor/dialogs/scrawl/scrawl.js create mode 100644 core/extend/ueditor/dialogs/searchreplace/searchreplace.html create mode 100644 core/extend/ueditor/dialogs/searchreplace/searchreplace.js create mode 100644 core/extend/ueditor/dialogs/snapscreen/snapscreen.html create mode 100644 core/extend/ueditor/dialogs/spechars/spechars.html create mode 100644 core/extend/ueditor/dialogs/spechars/spechars.js create mode 100644 core/extend/ueditor/dialogs/table/dragicon.png create mode 100644 core/extend/ueditor/dialogs/table/edittable.css create mode 100644 core/extend/ueditor/dialogs/table/edittable.html create mode 100644 core/extend/ueditor/dialogs/table/edittable.js create mode 100644 core/extend/ueditor/dialogs/table/edittd.html create mode 100644 core/extend/ueditor/dialogs/table/edittip.html create mode 100644 core/extend/ueditor/dialogs/template/config.js create mode 100644 core/extend/ueditor/dialogs/template/images/bg.gif create mode 100644 core/extend/ueditor/dialogs/template/images/pre0.png create mode 100644 core/extend/ueditor/dialogs/template/images/pre1.png create mode 100644 core/extend/ueditor/dialogs/template/images/pre2.png create mode 100644 core/extend/ueditor/dialogs/template/images/pre3.png create mode 100644 core/extend/ueditor/dialogs/template/images/pre4.png create mode 100644 core/extend/ueditor/dialogs/template/template.css create mode 100644 core/extend/ueditor/dialogs/template/template.html create mode 100644 core/extend/ueditor/dialogs/template/template.js create mode 100644 core/extend/ueditor/dialogs/video/images/bg.png create mode 100644 core/extend/ueditor/dialogs/video/images/center_focus.jpg create mode 100644 core/extend/ueditor/dialogs/video/images/file-icons.gif create mode 100644 core/extend/ueditor/dialogs/video/images/file-icons.png create mode 100644 core/extend/ueditor/dialogs/video/images/icons.gif create mode 100644 core/extend/ueditor/dialogs/video/images/icons.png create mode 100644 core/extend/ueditor/dialogs/video/images/image.png create mode 100644 core/extend/ueditor/dialogs/video/images/left_focus.jpg create mode 100644 core/extend/ueditor/dialogs/video/images/none_focus.jpg create mode 100644 core/extend/ueditor/dialogs/video/images/progress.png create mode 100644 core/extend/ueditor/dialogs/video/images/right_focus.jpg create mode 100644 core/extend/ueditor/dialogs/video/images/success.gif create mode 100644 core/extend/ueditor/dialogs/video/images/success.png create mode 100644 core/extend/ueditor/dialogs/video/video.css create mode 100644 core/extend/ueditor/dialogs/video/video.html create mode 100644 core/extend/ueditor/dialogs/video/video.js create mode 100644 core/extend/ueditor/dialogs/webapp/webapp.html create mode 100644 core/extend/ueditor/dialogs/wordimage/fClipboard_ueditor.swf create mode 100644 core/extend/ueditor/dialogs/wordimage/imageUploader.swf create mode 100644 core/extend/ueditor/dialogs/wordimage/tangram.js create mode 100644 core/extend/ueditor/dialogs/wordimage/wordimage.html create mode 100644 core/extend/ueditor/dialogs/wordimage/wordimage.js create mode 100644 core/extend/ueditor/lang/en/en.js create mode 100644 core/extend/ueditor/lang/en/images/addimage.png create mode 100644 core/extend/ueditor/lang/en/images/alldeletebtnhoverskin.png create mode 100644 core/extend/ueditor/lang/en/images/alldeletebtnupskin.png create mode 100644 core/extend/ueditor/lang/en/images/background.png create mode 100644 core/extend/ueditor/lang/en/images/button.png create mode 100644 core/extend/ueditor/lang/en/images/copy.png create mode 100644 core/extend/ueditor/lang/en/images/deletedisable.png create mode 100644 core/extend/ueditor/lang/en/images/deleteenable.png create mode 100644 core/extend/ueditor/lang/en/images/listbackground.png create mode 100644 core/extend/ueditor/lang/en/images/localimage.png create mode 100644 core/extend/ueditor/lang/en/images/music.png create mode 100644 core/extend/ueditor/lang/en/images/rotateleftdisable.png create mode 100644 core/extend/ueditor/lang/en/images/rotateleftenable.png create mode 100644 core/extend/ueditor/lang/en/images/rotaterightdisable.png create mode 100644 core/extend/ueditor/lang/en/images/rotaterightenable.png create mode 100644 core/extend/ueditor/lang/en/images/upload.png create mode 100644 core/extend/ueditor/lang/zh-cn/images/copy.png create mode 100644 core/extend/ueditor/lang/zh-cn/images/localimage.png create mode 100644 core/extend/ueditor/lang/zh-cn/images/music.png create mode 100644 core/extend/ueditor/lang/zh-cn/images/upload.png create mode 100644 core/extend/ueditor/lang/zh-cn/zh-cn.js create mode 100644 core/extend/ueditor/php/Uploader.class.php create mode 100644 core/extend/ueditor/php/action_crawler.php create mode 100644 core/extend/ueditor/php/action_list.php create mode 100644 core/extend/ueditor/php/action_upload.php create mode 100644 core/extend/ueditor/php/config.json create mode 100644 core/extend/ueditor/php/controller.php create mode 100644 core/extend/ueditor/themes/default/css/ueditor.css create mode 100644 core/extend/ueditor/themes/default/css/ueditor.min.css create mode 100644 core/extend/ueditor/themes/default/dialogbase.css create mode 100644 core/extend/ueditor/themes/default/images/anchor.gif create mode 100644 core/extend/ueditor/themes/default/images/arrow.png create mode 100644 core/extend/ueditor/themes/default/images/arrow_down.png create mode 100644 core/extend/ueditor/themes/default/images/arrow_up.png create mode 100644 core/extend/ueditor/themes/default/images/button-bg.gif create mode 100644 core/extend/ueditor/themes/default/images/cancelbutton.gif create mode 100644 core/extend/ueditor/themes/default/images/charts.png create mode 100644 core/extend/ueditor/themes/default/images/cursor_h.gif create mode 100644 core/extend/ueditor/themes/default/images/cursor_h.png create mode 100644 core/extend/ueditor/themes/default/images/cursor_v.gif create mode 100644 core/extend/ueditor/themes/default/images/cursor_v.png create mode 100644 core/extend/ueditor/themes/default/images/dialog-title-bg.png create mode 100644 core/extend/ueditor/themes/default/images/filescan.png create mode 100644 core/extend/ueditor/themes/default/images/highlighted.gif create mode 100644 core/extend/ueditor/themes/default/images/icons-all.gif create mode 100644 core/extend/ueditor/themes/default/images/icons.gif create mode 100644 core/extend/ueditor/themes/default/images/icons.png create mode 100644 core/extend/ueditor/themes/default/images/loaderror.png create mode 100644 core/extend/ueditor/themes/default/images/loading.gif create mode 100644 core/extend/ueditor/themes/default/images/lock.gif create mode 100644 core/extend/ueditor/themes/default/images/neweditor-tab-bg.png create mode 100644 core/extend/ueditor/themes/default/images/pagebreak.gif create mode 100644 core/extend/ueditor/themes/default/images/scale.png create mode 100644 core/extend/ueditor/themes/default/images/sortable.png create mode 100644 core/extend/ueditor/themes/default/images/spacer.gif create mode 100644 core/extend/ueditor/themes/default/images/sparator_v.png create mode 100644 core/extend/ueditor/themes/default/images/table-cell-align.png create mode 100644 core/extend/ueditor/themes/default/images/tangram-colorpicker.png create mode 100644 core/extend/ueditor/themes/default/images/toolbar_bg.png create mode 100644 core/extend/ueditor/themes/default/images/unhighlighted.gif create mode 100644 core/extend/ueditor/themes/default/images/upload.png create mode 100644 core/extend/ueditor/themes/default/images/videologo.gif create mode 100644 core/extend/ueditor/themes/default/images/word.gif create mode 100644 core/extend/ueditor/themes/default/images/wordpaste.png create mode 100644 core/extend/ueditor/themes/iframe.css create mode 100644 core/extend/ueditor/third-party/SyntaxHighlighter/shCore.js create mode 100644 core/extend/ueditor/third-party/SyntaxHighlighter/shCoreDefault.css create mode 100644 core/extend/ueditor/third-party/codemirror/codemirror.css create mode 100644 core/extend/ueditor/third-party/codemirror/codemirror.js create mode 100644 core/extend/ueditor/third-party/highcharts/adapters/mootools-adapter.js create mode 100644 core/extend/ueditor/third-party/highcharts/adapters/mootools-adapter.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/adapters/prototype-adapter.js create mode 100644 core/extend/ueditor/third-party/highcharts/adapters/prototype-adapter.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/adapters/standalone-framework.js create mode 100644 core/extend/ueditor/third-party/highcharts/adapters/standalone-framework.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/highcharts-more.js create mode 100644 core/extend/ueditor/third-party/highcharts/highcharts-more.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/highcharts.js create mode 100644 core/extend/ueditor/third-party/highcharts/highcharts.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/annotations.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/annotations.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/canvas-tools.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/canvas-tools.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/data.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/data.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/drilldown.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/drilldown.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/exporting.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/exporting.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/funnel.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/funnel.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/heatmap.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/heatmap.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/map.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/map.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/no-data-to-display.js create mode 100644 core/extend/ueditor/third-party/highcharts/modules/no-data-to-display.src.js create mode 100644 core/extend/ueditor/third-party/highcharts/themes/dark-blue.js create mode 100644 core/extend/ueditor/third-party/highcharts/themes/dark-green.js create mode 100644 core/extend/ueditor/third-party/highcharts/themes/gray.js create mode 100644 core/extend/ueditor/third-party/highcharts/themes/grid.js create mode 100644 core/extend/ueditor/third-party/highcharts/themes/skies.js create mode 100644 core/extend/ueditor/third-party/jquery-1.10.2.js create mode 100644 core/extend/ueditor/third-party/jquery-1.10.2.min.js create mode 100644 core/extend/ueditor/third-party/jquery-1.10.2.min.map create mode 100644 core/extend/ueditor/third-party/snapscreen/UEditorSnapscreen.exe create mode 100644 core/extend/ueditor/third-party/video-js/font/vjs.eot create mode 100644 core/extend/ueditor/third-party/video-js/font/vjs.svg create mode 100644 core/extend/ueditor/third-party/video-js/font/vjs.ttf create mode 100644 core/extend/ueditor/third-party/video-js/font/vjs.woff create mode 100644 core/extend/ueditor/third-party/video-js/video-js.css create mode 100644 core/extend/ueditor/third-party/video-js/video-js.min.css create mode 100644 core/extend/ueditor/third-party/video-js/video-js.swf create mode 100644 core/extend/ueditor/third-party/video-js/video.dev.js create mode 100644 core/extend/ueditor/third-party/video-js/video.js create mode 100644 core/extend/ueditor/third-party/webuploader/Uploader.swf create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.css create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.custom.js create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.custom.min.js create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.flashonly.js create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.flashonly.min.js create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.html5only.js create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.html5only.min.js create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.js create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.min.js create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.withoutimage.js create mode 100644 core/extend/ueditor/third-party/webuploader/webuploader.withoutimage.min.js create mode 100644 core/extend/ueditor/third-party/xss.min.js create mode 100644 core/extend/ueditor/third-party/zeroclipboard/ZeroClipboard.js create mode 100644 core/extend/ueditor/third-party/zeroclipboard/ZeroClipboard.min.js create mode 100644 core/extend/ueditor/third-party/zeroclipboard/ZeroClipboard.swf create mode 100644 core/extend/ueditor/ueditor.all.js create mode 100644 core/extend/ueditor/ueditor.all.min.js create mode 100644 core/extend/ueditor/ueditor.config.js create mode 100644 core/extend/ueditor/ueditor.parse.js create mode 100644 core/extend/ueditor/ueditor.parse.min.js create mode 100644 core/function/file.php create mode 100644 core/function/handle.php create mode 100644 core/function/helper.php create mode 100644 core/init.php create mode 100644 core/log/Builder.php create mode 100644 core/log/LogDb.php create mode 100644 core/log/LogText.php create mode 100644 core/qrcode.php create mode 100644 core/start.php create mode 100644 core/template/error.html create mode 100644 core/template/face01.png create mode 100644 core/template/face02.png create mode 100644 core/template/success.html create mode 100644 core/view/Paging.php create mode 100644 core/view/Parser.php create mode 100644 core/view/View.php create mode 100644 core/weixin/WxAccessToken.php create mode 100644 core/weixin/WxJsSDK.php create mode 100644 core/weixin/WxTemplate.php create mode 100644 core/weixin/WxUser.php create mode 100644 core/weixin/WxWebAuth.php create mode 100644 data/42a7c160922cdd04f08438f03dd6d19b.db create mode 100644 doc/ChangeLog.txt create mode 100644 favicon.ico create mode 100644 index.php create mode 100644 jiaoyuguanwang.zip create mode 100644 rewrite/.htaccess create mode 100644 rewrite/nginx.txt create mode 100644 rewrite/readme.txt create mode 100644 rewrite/web.config create mode 100644 rewrite/伪静态说明.txt create mode 100644 robots.txt create mode 100644 runtime/cache/277e9523d4d6851e0ecf0ad04788f7d6.html create mode 100644 runtime/cache/40e5b4da5ee74dbd2d0018332571cef3.html create mode 100644 runtime/cache/870e30927f49889d5494276b9c85efef.html create mode 100644 runtime/cache/bf5c77296f4fbdcbb5735a2f8dacf5c9.html create mode 100644 runtime/complile/31a11e9c85e6494ac3e3e34a677c4b9f.php create mode 100644 runtime/complile/33b636322f1df2225e7552d3217d7f2c.php create mode 100644 runtime/complile/583962598e2490c0e6648b24a0ba48d1.php create mode 100644 runtime/complile/cc91a7a32ea17ce62e3ad4760e3bc3e6.php create mode 100644 runtime/config/2245023265ae4cf87d02c8b6ba991139.php create mode 100644 runtime/config/4b82677b6c1408df4be21ada9a584fde.php create mode 100644 runtime/session/0/sess_0kq791oea1l0a24sj071td7dke create mode 100644 runtime/session/5/sess_53r4ibnckr73kq61536qgjmnff create mode 100644 runtime/session/6/sess_68q86nvhrr77f421f9jdbsm4fb create mode 100644 runtime/session/6/sess_6lsrhi2v4m8oct7rlaqnvphsu9 create mode 100644 runtime/session/b/sess_b63his5ohc9ev8vtuv1e52j9i7 create mode 100644 runtime/session/e/sess_ea7dp9t9t6ot3di6adjnb0iejc create mode 100644 runtime/session/i/sess_i50eqj7jdp711i4eubp39ksj6n create mode 100644 runtime/session/l/sess_llv0vd08uijto28id2hua0to63 create mode 100644 runtime/session/m/sess_m158i8mul9652qo4ojgducpf11 create mode 100644 runtime/session/m/sess_mbd0ja0lkihg7g4ioovf21g6r9 create mode 100644 runtime/session/n/sess_njur5g2af5bi8nkrnoftbd43il create mode 100644 runtime/session/o/sess_ogmmjknc7bct81vb29m4vsjsge create mode 100644 runtime/session/p/sess_pijjdllvhgrhotujhehsrpfsqb create mode 100644 runtime/session/s/sess_saqhrg3huai2vihc5232gsjbcs create mode 100644 runtime/session/s/sess_sthp9m9ot0mtajlu7238n9rrv2 create mode 100644 runtime/session/t/sess_tv01msdvqrmbh8tt9qfvvnmo8v create mode 100644 runtime/session/u/sess_udjbgnlbl05fl288po105i11di create mode 100644 runtime/session/u/sess_ufflhsg9vd1svqup3vr4jgthnf create mode 100644 skin/css/animate.min.css create mode 100644 skin/css/global.css create mode 100644 skin/css/owl.carousel.min.css create mode 100644 skin/css/style.css create mode 100644 skin/images/bg1.jpg create mode 100644 skin/images/close.png create mode 100644 skin/images/cur1.png create mode 100644 skin/images/cur2.png create mode 100644 skin/images/ft.jpg create mode 100644 skin/images/icon1.png create mode 100644 skin/images/icon10.png create mode 100644 skin/images/icon11-1.png create mode 100644 skin/images/icon11.png create mode 100644 skin/images/icon12.png create mode 100644 skin/images/icon13.png create mode 100644 skin/images/icon14.png create mode 100644 skin/images/icon15.png create mode 100644 skin/images/icon16.png create mode 100644 skin/images/icon17.png create mode 100644 skin/images/icon18.png create mode 100644 skin/images/icon2-1.png create mode 100644 skin/images/icon2.png create mode 100644 skin/images/icon21.png create mode 100644 skin/images/icon23.png create mode 100644 skin/images/icon3-1.png create mode 100644 skin/images/icon3.png create mode 100644 skin/images/icon4.png create mode 100644 skin/images/icon5.png create mode 100644 skin/images/icon6.png create mode 100644 skin/images/icon7.png create mode 100644 skin/images/icon8-1.png create mode 100644 skin/images/icon8.png create mode 100644 skin/images/icon9.png create mode 100644 skin/images/img6.jpg create mode 100644 skin/images/map.jpg create mode 100644 skin/images/menu-1.png create mode 100644 skin/images/menu.png create mode 100644 skin/images/team.jpg create mode 100644 skin/images/team_wap.jpg create mode 100644 skin/images/work.jpg create mode 100644 skin/js/html5.js create mode 100644 skin/js/jquery.min.js create mode 100644 skin/js/main.js create mode 100644 skin/js/owl.carousel.js create mode 100644 skin/js/wow.js create mode 100644 static/backup/sql/0cb2353f8ea80b398754308f15d1121e_20210929223966_pbootcms.sql create mode 100644 static/backup/sql/2bb03ef5aa4b4fe116739cc0bb3fb1b2_20211014090433.db create mode 100644 static/backup/sql/9a663f20a7a2cad681612c2d423fc0dc_20211001201912.db create mode 100644 static/backup/upgrade/20211009165821/apps/admin/controller/IndexController.php create mode 100644 static/backup/upgrade/20211009165821/apps/admin/controller/content/ContentSortController.php create mode 100644 static/backup/upgrade/20211009165821/apps/admin/controller/content/SingleController.php create mode 100644 static/backup/upgrade/20211009165821/apps/admin/view/default/common/head.html create mode 100644 static/backup/upgrade/20211009165821/apps/admin/view/default/content/company.html create mode 100644 static/backup/upgrade/20211009165821/apps/admin/view/default/content/single.html create mode 100644 static/backup/upgrade/20211009165821/apps/admin/view/default/content/site.html create mode 100644 static/backup/upgrade/20211009165821/apps/admin/view/default/index.html create mode 100644 static/backup/upgrade/20211009165821/apps/admin/view/default/system/config.html create mode 100644 static/backup/upgrade/20211009165821/apps/admin/view/default/system/home.html create mode 100644 static/backup/upgrade/20211009165821/apps/common/AdminController.php create mode 100644 static/backup/upgrade/20211009165821/apps/common/version.php create mode 100644 static/backup/upgrade/20211009165821/apps/home/controller/IndexController.php create mode 100644 static/backup/upgrade/20211009165821/apps/home/model/ParserModel.php create mode 100644 static/backup/upgrade/20211009165821/core/function/handle.php create mode 100644 static/backup/upgrade/20211009165821/core/template/error.html create mode 100644 static/backup/upgrade/20211009165821/doc/ChangeLog.txt create mode 100644 static/backup/upgrade/20211009193645/apps/admin/view/default/content/company.html create mode 100644 static/backup/upgrade/20211009193645/apps/admin/view/default/system/config.html create mode 100644 static/backup/upgrade/20211009193645/apps/common/version.php create mode 100644 static/backup/upgrade/20211009193645/apps/home/controller/IndexController.php create mode 100644 static/backup/upgrade/20211013183901/apps/admin/controller/content/ContentController.php create mode 100644 static/backup/upgrade/20211013183901/apps/admin/controller/content/ContentSortController.php create mode 100644 static/backup/upgrade/20211013183901/apps/admin/view/default/common/head.html create mode 100644 static/backup/upgrade/20211013183901/apps/admin/view/default/content/company.html create mode 100644 static/backup/upgrade/20211013183901/apps/admin/view/default/content/contentsort.html create mode 100644 static/backup/upgrade/20211013183901/apps/admin/view/default/content/single.html create mode 100644 static/backup/upgrade/20211013183901/apps/admin/view/default/content/site.html create mode 100644 static/backup/upgrade/20211013183901/apps/admin/view/default/index.html create mode 100644 static/backup/upgrade/20211013183901/apps/admin/view/default/system/config.html create mode 100644 static/backup/upgrade/20211013183901/apps/admin/view/default/system/home.html create mode 100644 static/backup/upgrade/20211013183901/apps/admin/view/default/system/server.html create mode 100644 static/backup/upgrade/20211013183901/apps/api/controller/AboutController.php create mode 100644 static/backup/upgrade/20211013183901/apps/common/AdminController.php create mode 100644 static/backup/upgrade/20211013183901/apps/common/version.php create mode 100644 static/backup/upgrade/20211013183901/apps/home/controller/IndexController.php create mode 100644 static/backup/upgrade/20211013183901/apps/home/controller/ParserController.php create mode 100644 static/backup/upgrade/20211013183901/apps/home/controller/SitemapController.php create mode 100644 static/backup/upgrade/20211013183901/core/basic/Kernel.php create mode 100644 static/backup/upgrade/20211013183901/core/basic/Url.php create mode 100644 static/backup/upgrade/20211013183901/core/function/file.php create mode 100644 static/backup/upgrade/20211013183901/core/function/handle.php create mode 100644 static/backup/upgrade/20211013183901/core/function/helper.php create mode 100644 static/backup/upgrade/20211013183901/core/view/Paging.php create mode 100644 static/backup/upgrade/20211013183901/core/view/View.php create mode 100644 static/backup/upgrade/20211013183901/doc/ChangeLog.txt create mode 100644 static/backup/upgrade/20211013183901/index.php create mode 100644 static/images/nopic.png create mode 100644 static/upload/image/20211013/1634130652228573.jpg create mode 100644 static/upload/image/20211013/1634131153378364.jpg create mode 100644 static/upload/image/20211013/1634131859993377.jpg create mode 100644 static/upload/image/20211013/1634131895723626.jpg create mode 100644 static/upload/image/20211013/1634132541194381.jpg create mode 100644 static/upload/image/20211013/1634132567351474.jpg create mode 100644 static/upload/image/20211013/1634133015345091.jpg create mode 100644 static/upload/image/20211013/1634133028859093.jpg create mode 100644 static/upload/image/20211013/1634133034509917.jpg create mode 100644 static/upload/image/20211013/1634135110902907.jpg create mode 100644 static/upload/image/20211013/1634135334519650.jpg create mode 100644 static/upload/image/20211013/1634135389772953.jpg create mode 100644 static/upload/image/20211013/1634135435590138.jpg create mode 100644 static/upload/image/20211013/1634135472493965.jpg create mode 100644 static/upload/image/20211013/1634135495516394.jpg create mode 100644 static/upload/image/20211013/1634135687720863.jpg create mode 100644 static/upload/image/20211013/1634136016199894.jpg create mode 100644 static/upload/image/20211014/1634169826708461.jpg create mode 100644 static/upload/image/20211014/1634169856640355.jpg create mode 100644 static/upload/image/20211014/1634169891172224.jpg create mode 100644 static/upload/image/20211014/1634169920998625.jpg create mode 100644 static/upload/image/20211014/1634169952184203.jpg create mode 100644 static/upload/image/20211014/1634169963631413.jpg create mode 100644 static/upload/image/20211014/1634170177908012.jpg create mode 100644 static/upload/image/20211014/1634170206545969.jpg create mode 100644 static/upload/image/20211014/1634170265483909.png create mode 100644 static/upload/image/20220124/1642991992178625.png create mode 100644 static/upload/image/20220124/1642992067912272.jpg create mode 100644 static/upload/image/20220124/1642992112844044.png create mode 100644 template/default/html/about.html create mode 100644 template/default/html/case.html create mode 100644 template/default/html/caselist.html create mode 100644 template/default/html/contact.html create mode 100644 template/default/html/course.html create mode 100644 template/default/html/courselist.html create mode 100644 template/default/html/foot.html create mode 100644 template/default/html/head.html create mode 100644 template/default/html/index.html create mode 100644 template/default/html/jobslist.html create mode 100644 template/default/html/news.html create mode 100644 template/default/html/newslist.html create mode 100644 template/default/html/teamlist.html create mode 100644 web.config create mode 100644 仿站.url create mode 100644 安装教程.txt create mode 100644 站长资源.txt diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..81dfed3 --- /dev/null +++ b/.htaccess @@ -0,0 +1,10 @@ + + Options +FollowSymlinks + RewriteEngine On + + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + + RewriteRule ^(.*)$ index.php?p=$1 [QSA,PT,L] + + \ No newline at end of file diff --git a/admin.php b/admin.php new file mode 100644 index 0000000..bb45180 --- /dev/null +++ b/admin.php @@ -0,0 +1,23 @@ + 0, + 'data' => 'The version of your server PHP is too low, and the program requires PHP version not less than 5.3.' + )); + exit(); +} + +// 引用内核启动文件 +require dirname(__FILE__) . '/core/start.php'; diff --git a/apps/admin/controller/IndexController.php b/apps/admin/controller/IndexController.php new file mode 100644 index 0000000..3e73006 --- /dev/null +++ b/apps/admin/controller/IndexController.php @@ -0,0 +1,363 @@ +model = new IndexModel(); + } + + // 登录页面 + public function index() + { + if (session('sid')) { + location(url('admin/Index/home')); + } + $this->assign('admin_check_code', $this->config('admin_check_code')); + $this->display('index.html'); + } + + // 主页面 + public function home() + { + // 手动修改数据名称 + if (get('action') == 'moddb') { + if ($this->modDB()) { + alert_back('修改成功!'); + } else { + alert_back('修改失败!'); + } + } + + // 删除修改后老数据库(上一步无法直接修改删除) + if (issetSession('deldb')) { + @unlink(ROOT_PATH . session('deldb')); + unset($_SESSION['deldb']); + } + + $dbsecurity = true; + // 如果是sqlite数据库,并且路径为默认的,则标记为不安全 + if (get_db_type() == 'sqlite') { + if (strpos($this->config('database.dbname'), 'pbootcms') !== false) { + if (get_user_ip() != '127.0.0.1' && $this->modDB()) { // 非本地测试时尝试自动修改数据库名称 + $dbsecurity = true; + } else { + $dbsecurity = false; + } + } + } elseif (file_exists(ROOT_PATH . '/data/pbootcms.db')) { + rename(ROOT_PATH . '/data/pbootcms.db', ROOT_PATH . '/data/' . get_uniqid() . '.db'); + } + + $this->assign('dbsecurity', $dbsecurity); + + if (! session('pwsecurity')) { + location(url('/admin/Index/ucenter')); + } + + $this->assign('server', get_server_info()); + $this->assign('branch', $this->config('upgrade_branch') == '3.X.dev' ? '3.X.dev' : '3.X'); + $this->assign('revise', $this->config('revise_version') ?: '0'); + $this->assign('snuser', $this->config('sn_user') ?: '0'); + $this->assign('site', get_http_url()); + + $this->assign('user_info', $this->model->getUserInfo(session('ucode'))); + + $this->assign('sum_msg', model('admin.content.Message')->getCount()); + + // 内容模型菜单 + $model = model('admin.content.Model'); + $models = $model->getModelMenu(); + foreach ($models as $key => $value) { + $models[$key]->count = $model->getModelCount($value->mcode)->count; + } + + $this->assign('model_msg', $models); + $this->display('system/home.html'); + } + + // 异步登录验证 + public function login() + { + if (! $_POST) { + return; + } + + // 在安装了gd库时才执行验证码验证 + if (extension_loaded("gd") && $this->config('admin_check_code') && strtolower(post('checkcode', 'var')) != session('checkcode')) { + json(0, '验证码错误!'); + } + + // 就收数据 + $username = post('username'); + $password = post('password'); + + if (! preg_match('/^[\x{4e00}-\x{9fa5}\w\-\.@]+$/u', $username)) { + json(0, '用户名含有不允许的特殊字符!'); + } + + if (! $username) { + json(0, '用户名不能为空!'); + } + + if (! $password) { + json(0, '密码不能为空!'); + } + + if (! ! $time = $this->checkLoginBlack()) { + $this->log('登录锁定!'); + json(0, '您登录失败次数太多已被锁定,请' . $time . '秒后再试!'); + } + + // 执行用户登录 + $where = array( + 'username' => $username, + 'password' => encrypt_string($password) + ); + + // 判断数据库写入权限 + if ((get_db_type() == 'sqlite') && ! is_writable(ROOT_PATH . $this->config('database.dbname'))) { + json(0, '数据库目录写入权限不足!'); + } + + if (! ! $login = $this->model->login($where)) { + + session_regenerate_id(true); + session('sid', encrypt_string(session_id() . $login->id)); // 会话标识 + session('M', M); + + session('id', $login->id); // 用户id + session('ucode', $login->ucode); // 用户编码 + session('username', $login->username); // 用户名 + session('realname', $login->realname); // 真实名字 + + if ($where['password'] != '14e1b600b1fd579f47433b88e8d85291') { + session('pwsecurity', true); + } + + session('acodes', $login->acodes); // 用户管理区域 + if ($login->acodes) { // 当前显示区域 + session('acode', $login->acodes[0]); + } else { + session('acode', ''); + } + + session('rcodes', $login->rcodes); // 用户角色代码表 + session('levels', $login->levels); // 用户权限URL列表 + session('menu_tree', $login->menus); // 菜单树 + session('area_map', $login->area_map); // 区域代码名称映射表 + session('area_tree', $login->area_tree); // 用户区域树 + + $this->log('登录成功!'); + json(1, url('admin/Index/home')); + } else { + $this->setLoginBlack(); + $this->log('登录失败!'); + session('checkcode', mt_rand(10000, 99999)); // 登录失败,随机打乱原有验证码 + json(0, '用户名或密码错误!'); + } + } + + // 退出登录 + public function loginOut() + { + session_unset(); + location(url('/admin/Index/index')); + } + + // 用户中心,修改密码 + public function ucenter() + { + if ($_POST) { + $username = post('username'); // 用户名 + $realname = post('realname'); // 真实姓名 + $cpassword = post('cpassword'); // 现在密码 + $password = post('password'); // 新密码 + $rpassword = post('rpassword'); // 确认密码 + + if (! $username) { + alert_back('用户名不能为空!'); + } + if (! $cpassword) { + alert_back('当前密码不能为空!'); + } + + if (! preg_match('/^[\x{4e00}-\x{9fa5}\w\-\.@]+$/u', $username)) { + alert_back('用户名含有不允许的特殊字符!'); + } + + $data = array( + 'username' => $username, + 'realname' => $realname, + 'update_user' => $username + ); + + // 如果有修改密码,则添加数据 + if ($password) { + if ($password != $rpassword) { + alert_back('确认密码不正确!'); + } + $data['password'] = encrypt_string($password); + if ($data['password'] != '14e1b600b1fd579f47433b88e8d85291') { + session('pwsecurity', true); + } else { + session('pwsecurity', false); + } + } + + // 检查现有密码 + if ($this->model->checkUserPwd(encrypt_string($cpassword))) { + if ($this->model->modUserInfo($data)) { + session('username', post('username')); + session('realname', post('realname')); + $this->log('用户资料成功!'); + success('用户资料修改成功!', - 1); + } + } else { + $this->log('用户资料修改时当前密码错误!'); + alert_location('当前密码错误!', - 1); + } + } + $this->display('system/ucenter.html'); + } + + // 切换显示的数据区域 + public function area() + { + if ($_POST) { + $acode = post('acode'); + if (in_array($acode, session('acodes'))) { + session('acode', $acode); + cookie('lg', $acode); // 同步切换前台语言 + } + location(url('admin/Index/home')); + } + } + + // 清理缓存 + public function clearCache() + { + if (get('delall')) { + $rs = path_delete(RUN_PATH); + } else { + $rs = (path_delete(RUN_PATH . '/cache') && path_delete(RUN_PATH . '/complile') && path_delete(RUN_PATH . '/config') && path_delete(RUN_PATH . '/upgrade') && path_delete(RUN_PATH . '/image')); + } + if ($rs) { + if (extension_loaded('Zend OPcache')) { + opcache_reset(); // 在启用了OPcache加速器时同时清理 + } + $this->log('清理缓存成功!'); + alert_back('清理缓存成功!'); + } else { + $this->log('清理缓存失败!'); + alert_back('清理缓存失败!'); + } + } + + // 清理会话 + public function clearSession() + { + $rs = path_delete(RUN_PATH . '/session'); + + if ($rs) { + $this->log('清理会话成功!'); + alert_back('清理会话成功!'); + } else { + $this->log('清理会话失败!'); + alert_back('清理会话失败!'); + } + } + + // 文件上传方法 + public function upload() + { + $upload = upload('upload'); + if (is_array($upload)) { + json(1, $upload); + } else { + json(0, $upload); + } + } + + // 检查是否在黑名单 + private function checkLoginBlack() + { + // 读取黑名单 + $ip_black = RUN_PATH . '/data/' . md5('login_black') . '.php'; + if (file_exists($ip_black)) { + $data = require $ip_black; + $user_ip = get_user_ip(); + $lock_time = $this->config('lock_time') ?: 900; + $lock_count = $this->config('lock_count') ?: 5; + if (isset($data[$user_ip]) && $data[$user_ip]['count'] >= $lock_count && time() - $data[$user_ip]['time'] < $lock_time) { + return $lock_time - (time() - $data[$user_ip]['time']); // 返回剩余秒数 + } + } + return false; + } + + // 添加登录黑名单 + private function setLoginBlack() + { + // 读取黑名单 + $ip_black = RUN_PATH . '/data/' . md5('login_black') . '.php'; + if (file_exists($ip_black)) { + $data = require $ip_black; + } else { + $data = array(); + } + + // 添加IP + $user_ip = get_user_ip(); + $lock_time = $this->config('lock_time') ?: 900; + $lock_count = $this->config('lock_count') ?: 5; + if (isset($data[$user_ip]) && $data[$user_ip]['count'] < $lock_count && time() - $data[$user_ip]['time'] < $lock_time) { + $data[$user_ip] = array( + 'time' => time(), + 'count' => $data[get_user_ip()]['count'] + 1 + ); + } else { + $data[$user_ip] = array( + 'time' => time(), + 'count' => 1 + ); + } + + // 写入黑名单 + check_file($ip_black, true); + return file_put_contents($ip_black, "config('database.dbname'); + $dname = '/data/' . get_uniqid() . '.db'; + $sconfig = file_get_contents($file); + $dconfig = str_replace($sname, $dname, $sconfig); + if (file_put_contents($file, $dconfig)) { + if (! copy(ROOT_PATH . $sname, ROOT_PATH . $dname)) { + file_put_contents($file, $sconfig); // 回滚配置 + } else { + session('deldb', $sname); + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/CompanyController.php b/apps/admin/controller/content/CompanyController.php new file mode 100644 index 0000000..857f83f --- /dev/null +++ b/apps/admin/controller/content/CompanyController.php @@ -0,0 +1,70 @@ +model = new CompanyModel(); + } + + // 显示公司设置 + public function index() + { + // 获取公司配置 + $this->assign('companys', $this->model->getList()); + $this->display('content/company.html'); + } + + // 修改公司设置 + public function mod() + { + if (! $_POST) { + return; + } + $data = array( + 'name' => post('name'), + 'address' => post('address'), + 'postcode' => post('postcode'), + 'contact' => post('contact'), + 'mobile' => post('mobile'), + 'phone' => post('phone'), + 'fax' => post('fax'), + 'email' => post('email'), + 'qq' => post('qq'), + 'weixin' => post('weixin'), + 'blicense' => post('blicense'), + 'other' => post('other') + ); + + if ($this->model->checkCompany()) { + if ($this->model->modCompany($data)) { + $this->log('修改公司信息成功!'); + success('修改成功!', - 1); + } else { + location(- 1); + } + } else { + $data['acode'] = session('acode'); + if ($this->model->addCompany($data)) { + $this->log('修改公司信息成功!'); + success('修改成功!', - 1); + } else { + location(- 1); + } + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/ContentController.php b/apps/admin/controller/content/ContentController.php new file mode 100644 index 0000000..d7815f6 --- /dev/null +++ b/apps/admin/controller/content/ContentController.php @@ -0,0 +1,551 @@ +model = new ContentModel(); + } + + // 文章列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getContent($id)) { + $this->assign('more', true); + $this->assign('content', $result); + } else { + $this->assign('list', true); + if (! $mcode = get('mcode', 'var')) { + error('传递的模型编码参数有误,请核对后重试!'); + } + + if (isset($_GET['keyword'])) { + if (! ! $scode = get('scode', 'var')) { + $result = $this->model->findContent($mcode, $scode, get('keyword', 'vars')); + } else { + $result = $this->model->findContentAll($mcode, get('keyword', 'vars')); + } + } else { + $result = $this->model->getList($mcode); + } + $this->assign('contents', $result); + + // 文章分类下拉列表 + $sort_model = model('admin.content.ContentSort'); + $sort_select = $sort_model->getListSelect($mcode); + $this->assign('search_select', $this->makeSortSelect($sort_select, get('scode'))); + $this->assign('sort_select', $this->makeSortSelect($sort_select, session('addscode'))); + $this->assign('subsort_select', $this->makeSortSelect($sort_select)); + + // 模型名称 + $this->assign('model_name', model('admin.content.Model')->getName($mcode)); + + // 扩展字段 + $this->assign('extfield', model('admin.content.ExtField')->getModelField($mcode)); + + $this->assign('baidu_zz_token', $this->config('baidu_zz_token')); + $this->assign('baidu_ks_token', $this->config('baidu_ks_token')); + + // 前端地址连接符判断 + $url_break_char = $this->config('url_break_char') ?: '_'; + $this->assign('url_break_char', $url_break_char); + + // 获取会员分组 + $this->assign('groups', model('admin.member.MemberGroup')->getSelect()); + } + + $this->display('content/content.html'); + } + + // 文章增加 + public function add() + { + if ($_POST) { + + // 获取数据 + $scode = post('scode'); + $subscode = post('subscode'); + $title = post('title'); + $titlecolor = post('titlecolor'); + $subtitle = post('subtitle'); + $filename = trim(post('filename'), '/'); + $author = post('author'); + $source = post('source'); + $outlink = post('outlink'); + $date = post('date'); + $ico = post('ico'); + $pics = post('pics'); + + // 获取多图标题 + $picstitle = post('picstitle'); + if ($picstitle) { + $picstitle = implode(',', $picstitle); + } + + $content = post('content'); + $tags = str_replace(',', ',', post('tags')); + $enclosure = post('enclosure'); + $keywords = post('keywords'); + $description = post('description'); + $status = post('status', 'int'); + $istop = post('istop', 'int', '', '', 0); + $isrecommend = post('isrecommend', 'int', '', '', 0); + $isheadline = post('isheadline', 'int', '', '', 0); + + $gid = post('gid', 'int') ?: 0; + $gtype = post('gtype', 'int') ?: 4; + $gnote = post('gnote'); + + if (! $scode) { + alert_back('内容分类不能为空!'); + } + + if (! $title) { + alert_back('文章标题不能为空!'); + } + + if ($filename && ! preg_match('/^[a-zA-Z0-9\-]+$/', $filename)) { + alert_back('内容URL名称只允许字母、数字、横线组成!'); + } + + // 自动提起前一百个字符为描述 + if (! $description && isset($_POST['content'])) { + $description = escape_string(clear_html_blank(substr_both(strip_tags($_POST['content']), 0, 150))); + } + + // 缩放缩略图 + if ($ico) { + resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height')); + } + + // 检查自定义URL名称 + if ($filename) { + while ($this->model->checkFilename($filename)) { + $filename = $filename . '-' . mt_rand(1, 20); + } + } + + // 记住新增栏目 + session('addscode', $scode); + + // 构建数据 + $data = array( + 'acode' => session('acode'), + 'scode' => $scode, + 'subscode' => $subscode, + 'title' => $title, + 'titlecolor' => $titlecolor, + 'subtitle' => $subtitle, + 'filename' => $filename, + 'author' => $author, + 'source' => $source, + 'outlink' => $outlink, + 'date' => $date, + 'ico' => $ico, + 'pics' => $pics, + 'picstitle' => $picstitle, + 'content' => $content, + 'tags' => $tags, + 'enclosure' => $enclosure, + 'keywords' => $keywords, + 'description' => clear_html_blank($description), + 'sorting' => 255, + 'status' => $status, + 'istop' => $istop, + 'isrecommend' => $isrecommend, + 'isheadline' => $isheadline, + 'gid' => $gid, + 'gtype' => $gtype, + 'gnote' => $gnote, + 'visits' => 0, + 'likes' => 0, + 'oppose' => 0, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行添加 + if (! ! $id = $this->model->addContent($data)) { + // 扩展内容添加 + foreach ($_POST as $key => $value) { + if (preg_match('/^ext_[\w\-]+$/', $key)) { + if (! isset($data2['contentid'])) { + $data2['contentid'] = $id; + } + $temp = post($key); + if (is_array($temp)) { + $data2[$key] = implode(',', $temp); + } else { + $data2[$key] = str_replace("\r\n", '
', $temp); + } + } + } + if (isset($data2)) { + if (! $this->model->addContentExt($data2)) { + $this->model->delContent($id); + $this->log('新增文章失败!'); + error('新增失败!', - 1); + } + } + + $this->log('新增文章成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/Content/index/mcode/' . get('mcode'))); + } + } else { + $this->log('新增文章失败!'); + error('新增失败!', - 1); + } + } + } + + // 生成分类选择 + private function makeSortSelect($tree, $selectid = null) + { + $list_html = ''; + foreach ($tree as $value) { + // 默认选择项 + if ($selectid == $value->scode) { + $select = "selected='selected'"; + } else { + $select = ''; + } + $list_html .= ""; + } + // 子菜单处理 + if ($value->son) { + $this->blank .= '  '; + $list_html .= $this->makeSortSelect($value->son, $selectid); + } + } + // 循环完后回归位置 + $this->blank = substr($this->blank, 0, - 6); + return $list_html; + } + + // 内容栏目删除 + public function del() + { + // 执行批量删除 + if ($_POST) { + if (! ! $list = post('list')) { + if ($this->model->delSortList($list)) { + $this->log('批量删除栏目成功!'); + success('批量删除成功!', - 1); + } else { + $this->log('批量删除栏目失败!'); + error('批量删除失败!', - 1); + } + } else { + alert_back('请选择要删除的栏目!'); + } + } + + if (! $scode = get('scode', 'var')) { + error('传递的参数值错误!', - 1); + } + if ($this->model->delSort($scode)) { + $this->log('删除数据内容栏目' . $scode . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除数据内容栏目' . $scode . '失败!'); + error('删除失败!', - 1); + } + } + + // 内容栏目修改 + public function mod() + { + if (! ! $submit = post('submit')) { + switch ($submit) { + case 'sorting': // 修改列表排序 + $listall = post('listall'); + if ($listall) { + $sorting = post('sorting'); + foreach ($listall as $key => $value) { + if ($sorting[$key] === '' || ! is_numeric($sorting[$key])) + $sorting[$key] = 255; + $this->model->modSortSorting($value, "sorting=" . $sorting[$key]); + } + $this->log('批量修改栏目排序成功!'); + success('修改成功!', - 1); + } else { + alert_back('排序失败,无任何内容!'); + } + break; + } + } + + if (! $scode = get('scode', 'var')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modSort($scode, "$field='$value',update_user='" . session('username') . "'")) { + $this->log('修改数据内容栏目' . $scode . '状态' . $value . '成功!'); + location(- 1); + } else { + $this->log('修改数据内容栏目' . $scode . '状态' . $value . '失败!'); + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $pcode = post('pcode', 'var'); + $name = post('name'); + $mcode = post('mcode'); + $type = post('type'); + $listtpl = basename(post('listtpl')); + $contenttpl = basename(post('contenttpl')); + $status = post('status'); + $subname = post('subname'); + $filename = trim(post('filename'), '/'); + $outlink = post('outlink'); + $ico = post('ico'); + $pic = post('pic'); + $title = post('title'); + $keywords = post('keywords'); + $description = post('description'); + $modsub = post('modsub', 'int'); + + $gid = post('gid', 'int') ?: 0; + $gtype = post('gtype', 'int') ?: 4; + $gnote = post('gnote'); + + $def1 = post('def1'); + $def2 = post('def2'); + $def3 = post('def3'); + + if (! $pcode) { // 父编码默认为0 + $pcode = 0; + } + + if (! $name) { + alert_back('栏目名不能为空!'); + } + + if (! $mcode) { + alert_back('栏目模型必须选择!'); + } + + if (! $type) { + alert_back('栏目类型不能为空!'); + } + + if ($filename && ! preg_match('/^[a-zA-Z0-9\-\/]+$/', $filename)) { + alert_back('URL名称只允许字母、数字、横线、斜线组成!'); + } + + if ($filename && $this->model->checkUrlname($filename)) { + alert_back('URL名称与模型URL名称冲突,请换一个名称!'); + } + + // 缩放缩略图 + if ($ico) { + resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height')); + } + + if ($filename) { + while ($this->model->checkFilename($filename, "scode<>'$scode'")) { + $filename = $filename . '-' . mt_rand(1, 20); + } + } + + // 构建数据 + $data = array( + 'pcode' => $pcode, + 'name' => $name, + 'mcode' => $mcode, + 'listtpl' => $listtpl, + 'contenttpl' => $contenttpl, + 'status' => $status, + 'gid' => $gid, + 'gtype' => $gtype, + 'gnote' => $gnote, + 'subname' => $subname, + 'def1' => $def1, + 'def2' => $def2, + 'def3' => $def3, + 'filename' => $filename, + 'outlink' => $outlink, + 'ico' => $ico, + 'pic' => $pic, + 'title' => $title, + 'keywords' => $keywords, + 'description' => $description, + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->modSort($scode, $data, $modsub)) { + // 如果修改为单页并且跳转,则删除单页内容,否则判断是否存在内容,不存在则添加 + if ($type == 1 && $outlink) { + $this->model->delContent($scode); + } elseif ($type == 1 && ! $this->model->findContent($scode)) { + $this->addSingle($scode, $name); + } + + $this->log('修改数据内容栏目' . $scode . '成功!'); + success('修改成功!', url('/admin/ContentSort/index')); + } else { + location(- 1); + } + } else { // 调取修改内容 + $this->assign('mod', true); + + $sort = $this->model->getSort($scode); + if (! $sort) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('sort', $sort); + + // 父编码下拉选择 + $sort_tree = $this->model->getSelect(); + $sort_select = $this->makeSortSelect($sort_tree, $sort->pcode); + $this->assign('sort_select', $sort_select); + + // 模板文件 + $htmldir = $this->config('tpl_html_dir') ? '/' . $this->config('tpl_html_dir') : ''; + $this->assign('tpls', file_list(ROOT_PATH . current($this->config('tpl_dir')) . '/' . $this->model->getTheme() . $htmldir)); + + // 内容模型 + $models = model('admin.content.Model'); + $this->assign('models', $models->getSelect()); + + // 获取会员分组 + $this->assign('groups', model('admin.member.MemberGroup')->getSelect()); + + $this->display('content/contentsort.html'); + } + } + + // 添加栏目时执行单页内容增加 + public function addSingle($scode, $title) + { + // 构建数据 + $data = array( + 'acode' => session('acode'), + 'scode' => $scode, + 'subscode' => '', + 'title' => $title, + 'titlecolor' => '#333333', + 'subtitle' => '', + 'filename' => '', + 'author' => session('realname'), + 'source' => '本站', + 'outlink' => '', + 'date' => date('Y-m-d H:i:s'), + 'ico' => '', + 'pics' => '', + 'content' => '', + 'tags' => '', + 'enclosure' => '', + 'keywords' => '', + 'description' => '', + 'sorting' => 255, + 'status' => 1, + 'istop' => 0, + 'isrecommend' => 0, + 'isheadline' => 0, + 'gid' => 0, + 'gtype' => 4, + 'gnote' => '', + 'visits' => 0, + 'likes' => 0, + 'oppose' => 0, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->addSingle($data)) { + return true; + } else { + return false; + } + } +} diff --git a/apps/admin/controller/content/ExtFieldController.php b/apps/admin/controller/content/ExtFieldController.php new file mode 100644 index 0000000..a8f5840 --- /dev/null +++ b/apps/admin/controller/content/ExtFieldController.php @@ -0,0 +1,231 @@ +model = new ExtFieldModel(); + } + + // 扩展字段列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getExtField($id)) { + $this->assign('more', true); + $this->assign('extfield', $result); + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findExtField($field, $keyword); + } else { + $result = $this->model->getList(); + } + + // 内容模型 + $models = model('admin.content.Model'); + $this->assign('models', $models->getSelect()); + + $this->assign('extfields', $result); + } + $this->display('content/extfield.html'); + } + + // 扩展字段增加 + public function add() + { + if ($_POST) { + // 获取数据 + $mcode = post('mcode'); + $name = post('name', 'var'); + $type = post('type', 'int'); + if (! ! $value = post('value')) { + $value = str_replace("\r\n", ",", $value); // 替换回车 + $value = str_replace(",", ",", $value); // 替换中文逗号分割符 + } + $description = post('description'); + $sorting = post('sorting', 'int'); + + if (! $mcode) { + alert_back('内容模型不能为空!'); + } + + if (! $name) { + alert_back('字段名称不能为空!'); + } else { + $name = "ext_" . $name; + } + + if (! $type) { + alert_back('字段类型不能为空!'); + } + + if (! $description) { + alert_back('字段描述不能为空!'); + } + + // 构建数据 + $data = array( + 'mcode' => $mcode, + 'name' => $name, + 'type' => $type, + 'value' => $value, + 'description' => $description, + 'sorting' => $sorting + ); + + // 字段类型及长度 + switch ($type) { + case '2': // 多行 + $mysql = 'varchar(1000)'; + $sqlite = 'TEXT(1000)'; + break; + case '7': // 时间日期 + $mysql = 'datetime'; + $sqlite = 'TEXT'; + break; + case '8': // 编辑器 + $mysql = 'TEXT'; + $sqlite = 'TEXT(10000)'; + break; + default: + $mysql = 'varchar(200)'; + $sqlite = 'TEXT(200)'; + } + + // 字段不存在时创建 + if (! $this->model->isExistField($name)) { + if (get_db_type() == 'sqlite') { + $result = $this->model->amd("ALTER TABLE ay_content_ext ADD COLUMN $name $sqlite NULL"); + } else { + $result = $this->model->amd("ALTER TABLE ay_content_ext ADD $name $mysql NULL COMMENT '$description'"); + } + } elseif ($this->model->checkExtField($name)) { // 字段存在且已使用则 报错 + alert_back('字段已经存在,不能重复添加!'); + } + + // 执行扩展字段记录添加 + if ($this->model->addExtField($data)) { + $this->log('新增扩展字段成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/ExtField/index')); + } + } else { + $this->log('新增扩展字段失败!'); + error('新增失败!', - 1); + } + } + } + + // 扩展字段删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + $name = $this->model->getExtFieldName($id); + if ($this->model->delExtField($id)) { + // mysql数据库执行字段删除,sqlite暂时不支持 + if (! ! $name) { + if (get_db_type() == 'mysql') { + $result = $this->model->amd("ALTER TABLE ay_content_ext DROP COLUMN $name"); + } + } + $this->log('删除扩展字段' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除扩展字段' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 扩展字段修改 + public function mod() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modExtField($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $mcode = post('mcode'); + $type = post('type'); + if (! ! $value = post('value')) { + $value = str_replace("\r\n", ",", $value); // 替换回车 + $value = str_replace(",", ",", $value); // 替换中文逗号分割符 + } + $description = post('description'); + $sorting = post('sorting', 'int'); + + if (! $mcode) { + alert_back('内容模型不能为空!'); + } + + if (! $description) { + alert_back('字段描述不能为空!'); + } + + // 构建数据 + $data = array( + 'mcode' => $mcode, + 'type' => $type, + 'value' => $value, + 'description' => $description, + 'sorting' => $sorting + ); + + // 执行修改 + if ($this->model->modExtField($id, $data)) { + $this->log('修改扩展字段' . $id . '成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/ExtField/index')); + } + } else { + location(- 1); + } + } else { + + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getExtField($id)) { + error('编辑的内容已经不存在!', - 1); + } + + // 内容模型 + $models = model('admin.content.Model'); + $this->assign('models', $models->getSelect()); + + $this->assign('extfield', $result); + $this->display('content/extfield.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/FormController.php b/apps/admin/controller/content/FormController.php new file mode 100644 index 0000000..4cf12e7 --- /dev/null +++ b/apps/admin/controller/content/FormController.php @@ -0,0 +1,354 @@ +model = new FormModel(); + } + + // 自定义表单列表 + public function index() + { + if ((! ! $fcode = get('fcode', 'var')) && $form = $this->model->getFormByCode($fcode)) { + $this->assign('form', $form); + if (get('action') == 'showdata') { + $this->assign('showdata', true); + $this->assign('fields', $this->model->getFormFieldByCode($fcode)); // 获取字段 + $table = $this->model->getFormTableByCode($fcode); + if (get('export')) { + $this->assign('formdata', $this->model->getFormData($table, false)); + header('Content-Type:application/vnd.ms-excel'); + header('Cache-Control: max-age=0'); + header("Content-Disposition:filename=" . $form->form_name . "-" . date("YmdHis") . ".xls"); + $this->display('content/exform.html'); + } else { + $this->assign('formdata', $this->model->getFormData($table, true)); + } + } + if (get('action') == 'showfield') { + $this->assign('showfield', true); + $this->assign('fields', $this->model->getFormFieldByCode($fcode)); + } + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findForm($field, $keyword); + } else { + $result = $this->model->getList(); + } + + $this->assign('forms', $result); + } + $this->display('content/form.html'); + } + + // 自定义表单增加 + public function add() + { + if ($_POST) { + if (get('action') == 'addform') { + $fcode = get_auto_code($this->model->getLastCode()); + $form_name = post('form_name'); + $table_name = 'ay_diy_' . post('table_name', 'var'); + + if (! $form_name) { + alert_back('表单名称不能为空!'); + } + + if (! $table_name) { + alert_back('表单数据表不能为空!'); + } + + $data = array( + 'fcode' => $fcode, + 'form_name' => $form_name, + 'table_name' => $table_name, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + if (get_db_type() == 'sqlite') { + $result = $this->model->amd("CREATE TABLE `$table_name` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,`create_time` TEXT NOT NULL)"); + } else { + $result = $this->model->amd("CREATE TABLE `$table_name` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`create_time` datetime NOT NULL,PRIMARY KEY (`id`))ENGINE=MyISAM DEFAULT CHARSET=utf8"); + } + + if ($this->model->addForm($data)) { + $this->log('新增自定义表单成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/Form/index')); + } + } else { + $this->log('新增自定义表单失败!'); + error('新增失败!', - 1); + } + } else { + // 获取数据 + $fcode = post('fcode', 'var'); + $name = post('name', 'var'); + $length = post('length', 'int') ?: 20; + $required = post('required', 'int') ?: 0; + $description = post('description'); + $sorting = post('sorting', 'int') ?: 255; + + if (! $fcode) { + alert_back('表单编码不能为空!'); + } + + if (! $name) { + alert_back('字段名称不能为空!'); + } + + if (! $description) { + alert_back('字段描述不能为空!'); + } + + // 构建数据 + $data = array( + 'fcode' => $fcode, + 'name' => $name, + 'length' => $length, + 'required' => $required, + 'description' => $description, + 'sorting' => $sorting, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 获取表名称 + $table = $this->model->getFormTableByCode($fcode); + + // 字段类型及长度 + $mysql = "varchar($length)"; + $sqlite = "TEXT($length)"; + + // 字段不存在时创建 + if (! $this->model->isExistField($table, $name)) { + if (get_db_type() == 'sqlite') { + $result = $this->model->amd("ALTER TABLE $table ADD COLUMN $name $sqlite NULL"); + } else { + $result = $this->model->amd("ALTER TABLE $table ADD $name $mysql NULL COMMENT '$description'"); + } + } elseif ($this->model->checkFormField($fcode, $name)) { + alert_back('字段已经存在,不能重复添加!'); + } + + // 执行自定义表单记录添加 + if ($this->model->addFormField($data)) { + $this->log('新增表单字段成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/Form/index/fcode/' . $fcode . '/action/showfield')); + } + } else { + $this->log('新增表单字段失败!'); + error('新增失败!', - 1); + } + } + } + } + + // 自定义表单删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 删除表单 + if (get('action') == 'delform') { + if ($id == 1) { + alert_back('留言表单不允许删除'); + } + $table = $this->model->getFormTable($id); + $fcode = $this->model->getFormCode($id); + if ($this->model->delForm($id)) { + $this->model->delFormFieldByCode($fcode); // 删除字段记录 + $this->model->amd("DROP TABLE IF EXISTS $table"); // 删除表 + $this->log('删除自定义表单' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除自定义表单' . $id . '失败!'); + error('删除失败!', - 1); + } + } elseif (get('action') == 'deldata') { + // 获取表单 + if (! $fcode = get('fcode', 'var')) { + error('传递的参数值fcode错误!', - 1); + } + $table = $this->model->getFormTableByCode($fcode); + if ($this->model->delFormData($table, $id)) { + $this->log('删除表单数据' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除表单数据' . $id . '失败!'); + error('删除失败!', - 1); + } + } else { + + // 获取表单 + if (! $fcode = get('fcode', 'var')) { + error('传递的参数值fcode错误!', - 1); + } + + // 获取操作表 + $table = $this->model->getFormTableByCode($fcode); + $name = $this->model->getFormFieldName($id); + + if ($this->model->delFormField($id)) { + // mysql数据库执行字段删除,sqlite暂时不支持 + if (! ! $name) { + if (get_db_type() == 'mysql') { + $result = $this->model->amd("ALTER TABLE $table DROP COLUMN $name"); + } + } + $this->log('删除自定义表单' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除自定义表单' . $id . '失败!'); + error('删除失败!', - 1); + } + } + } + + // 自定义表单修改 + public function mod() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modFormField($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + if (get('action') == 'addmenu') { + if ($this->model->addFormMenu($id)) { + $this->log('添加自定义表单' . $id . '到菜单成功!'); + if (! ! $backurl = get('backurl')) { + success('添加成功!', base64_decode($backurl)); + } else { + success('添加成功!', url('/admin/Form/index')); + } + } else { + location(- 1); + } + } + + // 修改操作 + if ($_POST) { + + // 修改表单 + if (get('action') == 'modform') { + $form_name = post('form_name'); + + if (! $form_name) { + alert_back('表单名称不能为空!'); + } + $data = array( + 'form_name' => $form_name, + 'update_user' => session('username') + ); + + // 执行修改 + if ($this->model->modForm($id, $data)) { + $this->log('修改自定义表单' . $id . '成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Form/index')); + } + } else { + location(- 1); + } + } else { + + // 获取数据 + $description = post('description'); + $required = post('required', 'int') ?: 0; + $sorting = post('sorting', 'int') ?: 255; + + if (! $description) { + alert_back('字段描述不能为空!'); + } + + // 构建数据 + $data = array( + 'description' => $description, + 'required' => $required, + 'sorting' => $sorting, + 'update_user' => session('username') + ); + + // 执行修改 + if ($this->model->modFormField($id, $data)) { + $this->log('修改表单字段' . $id . '成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Form/index')); + } + } else { + location(- 1); + } + } + } else { + + // 调取修改内容 + $this->assign('mod', true); + + if (get('action') == 'modform') { + if (! $result = $this->model->getForm($id)) { + error('编辑的内容已经不存在!', - 1); + } + + $this->assign('form', $result); + } else { + if (! $result = $this->model->getFormField($id)) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('field', $result); + } + $this->display('content/form.html'); + } + } + + // 清空 + public function clear() + { + // 获取表单 + if (! $fcode = get('fcode', 'var')) { + error('传递的参数值fcode错误!', - 1); + } + $table = $this->model->getFormTableByCode($fcode); + + if ($this->model->clearFormData($table)) { + alert_location('清空成功!', - 1); + } else { + alert_location('清空失败!', - 1); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/LabelController.php b/apps/admin/controller/content/LabelController.php new file mode 100644 index 0000000..1fd4ca6 --- /dev/null +++ b/apps/admin/controller/content/LabelController.php @@ -0,0 +1,168 @@ +model = new LabelModel(); + } + + // 自定义标签列表 + public function index() + { + // 修改参数配置 + if ($_POST) { + foreach ($_POST as $key => $value) { + if (preg_match('/^[\w\-]+$/', $key)) { // 带有违规字符时不带入查询 + $data = post($key); + $data = str_replace("\r\n", "
", $data); // 多行文本时替换回车 + $this->model->modValue($key, $data); + } + } + success('修改成功!', url('admin/Label/index')); + } + $this->assign('list', true); + $this->assign('labels', $this->model->getList()); + $this->display('content/label.html'); + } + + // 自定义标签字段增加 + public function add() + { + if ($_POST) { + // 获取数据 + $name = post('name', 'var'); + $description = post('description'); + $type = post('type'); + + if (! $name) { + alert_back('标签名称不能为空!'); + } + + if (! $description) { + alert_back('标题描述不能为空!'); + } + + if (! $type) { + alert_back('标签类型不能为空!'); + } + + // 检查标签名称 + if ($this->model->checkLabel("name='$name'")) { + alert_back('该自定义标签称已经存在,不能再使用!'); + } + + // 构建数据 + $data = array( + 'name' => $name, + 'description' => $description, + 'value' => '', // 添加时设置为空 + 'type' => $type, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->addLabel($data)) { + $this->log('修改自定义标签' . $name . '成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('admin/Label/index' . get_tab('t2'), false)); + } + } else { + $this->log('新增自定义标签' . $name . '失败!'); + error('新增失败!', url('admin/Label/index' . get_tab('t2'), false)); + } + } + } + + // 自定义标签字段删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + if ($this->model->delLabel($id)) { + $this->log('删除自定义标签' . $id . '成功!'); + success('删除成功!', url('admin/Label/index' . get_tab('t2'), false)); + } else { + $this->log('删除自定义标签' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 自定义标签字段修改 + public function mod() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 修改操作 + if ($_POST) { + // 获取数据 + $name = post('name', 'var'); + $description = post('description'); + $type = post('type'); + + if (! $name) { + alert_back('标签名称不能为空!'); + } + + if (! $description) { + alert_back('标签描述不能为空!'); + } + + if (! $type) { + alert_back('标签类型不能为空!'); + } + + // 检查标签名称 + if ($this->model->checkLabel("name='$name' AND id<>$id")) { + alert_back('该自定义标签名称已经存在,不能再使用!'); + } + + // 构建数据 + $data = array( + 'name' => $name, + 'description' => $description, + 'type' => $type, + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->modLabel($id, $data)) { + $this->log('修改自定义标签字段' . $id . '成功!'); + success('修改成功!', url('admin/Label/index' . get_tab('t2'), false)); + } else { + location(- 1); + } + } else { + $this->assign('mod', true); + + // 调取修改内容 + $result = $this->model->getLabel($id); + if (! $result) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('label', $result); + + $this->display('content/label.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/LinkController.php b/apps/admin/controller/content/LinkController.php new file mode 100644 index 0000000..7e6d766 --- /dev/null +++ b/apps/admin/controller/content/LinkController.php @@ -0,0 +1,213 @@ +model = new LinkModel(); + } + + // 友情链接列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getLink($id)) { + $this->assign('more', true); + $this->assign('link', $result); + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findLink($field, $keyword); + } else { + $result = $this->model->getList(); + } + $this->assign('gids', $this->model->getGid()); + $this->assign('links', $result); + } + $this->display('content/link.html'); + } + + // 友情链接增加 + public function add() + { + if ($_POST) { + // 获取数据 + $gid = post('gid', 'int'); + $name = post('name'); + $link = post('link'); + $logo = post('logo'); + $sorting = post('sorting'); + + if (! $gid) { + $gid = $this->model->getMaxGid() + 1; + } + + if (! $name) { + alert_back('名称不能为空!'); + } + + if (! $link) { + alert_back('链接不能为空!'); + } + + if (! $sorting) { + $sorting = 255; + } + + // logo图缩放 + if ($logo) { + resize_img(ROOT_PATH . $logo, '', $this->config('ico.max_width'), $this->config('ico.max_height')); + } + + // 构建数据 + $data = array( + 'acode' => session('acode'), + 'gid' => $gid, + 'name' => $name, + 'link' => $link, + 'logo' => $logo, + 'sorting' => $sorting, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->addLink($data)) { + $this->log('新增友情链接成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/Link/index')); + } + } else { + $this->log('新增友情链接失败!'); + error('新增失败!', - 1); + } + } + } + + // 友情链接删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + if ($this->model->delLink($id)) { + $this->log('删除友情链接' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除友情链接' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 友情链接修改 + public function mod() + { + if (! ! $submit = post('submit')) { + switch ($submit) { + case 'sorting': // 修改列表排序 + $listall = post('listall'); + if ($listall) { + $sorting = post('sorting'); + foreach ($listall as $key => $value) { + if ($sorting[$key] === '' || ! is_numeric($sorting[$key])) + $sorting[$key] = 255; + $this->model->modLink($value, "sorting=" . $sorting[$key]); + } + $this->log('批量修改链接排序成功!'); + success('修改成功!', - 1); + } else { + alert_back('排序失败,无任何内容!'); + } + break; + } + } + + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modLink($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $gid = post('gid', 'int'); + $name = post('name'); + $link = post('link'); + $logo = post('logo'); + $sorting = post('sorting'); + + if (! $gid) { + $gid = $this->model->getMaxGid() + 1; + } + + if (! $name) { + alert_back('名称不能为空!'); + } + + if (! $link) { + alert_back('链接不能为空!'); + } + + // logo图缩放 + if ($logo) { + resize_img(ROOT_PATH . $logo, '', $this->config('ico.max_width'), $this->config('ico.max_height')); + } + + // 构建数据 + $data = array( + 'gid' => $gid, + 'name' => $name, + 'link' => $link, + 'logo' => $logo, + 'sorting' => $sorting, + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->modLink($id, $data)) { + $this->log('修改友情链接' . $id . '成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Link/index')); + } + } else { + location(- 1); + } + } else { + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getLink($id)) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('gids', $this->model->getGid()); + $this->assign('link', $result); + $this->display('content/link.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/MessageController.php b/apps/admin/controller/content/MessageController.php new file mode 100644 index 0000000..e6206b8 --- /dev/null +++ b/apps/admin/controller/content/MessageController.php @@ -0,0 +1,119 @@ +model = new MessageModel(); + } + + // 列表 + public function index() + { + $this->assign('list', true); + $this->assign('fields', $this->model->getFormFieldByCode(1)); // 获取字段 + + if (get('export')) { + $this->assign('messages', $this->model->getList(false)); + header("Content-Type:application/vnd.ms-excel"); + header('Cache-Control: max-age=0'); + header("Content-Disposition:filename=留言记录-" . date("YmdHis") . ".xls"); + $this->display('content/exmessage.html'); + } else { + $this->assign('messages', $this->model->getList(true)); + $this->display('content/message.html'); + } + } + + // 删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + if ($this->model->delMessage($id)) { + $this->log('删除留言' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除留言' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 修改 + public function mod() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modMessage($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + // 获取数据 + $recontent = post('recontent'); + $status = post('status'); + + // 构建数据 + $data = array( + 'recontent' => $recontent, + 'status' => $status, + 'update_user' => session('username') + ); + + // 执行修改 + if ($this->model->modMessage($id, $data)) { + $this->log('修改留言' . $id . '成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Message/index')); + } + } else { + location(- 1); + } + } else { + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getMessage($id)) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('message', $result); + + $this->display('content/message.html'); + } + } + + // 清空 + public function clear() + { + if ($this->model->clearMessage()) { + alert_location('清空成功!', url('/admin/Message/index')); + } else { + alert_location('清空失败!', url('/admin/Message/index')); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/ModelController.php b/apps/admin/controller/content/ModelController.php new file mode 100644 index 0000000..2a0b141 --- /dev/null +++ b/apps/admin/controller/content/ModelController.php @@ -0,0 +1,207 @@ +model = new ModelModel(); + } + + // 内容模型列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getModel($id)) { + $this->assign('more', true); + $this->assign('model', $result); + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findModel($field, $keyword); + } else { + $result = $this->model->getList(); + } + $this->assign('models', $result); + } + $this->display('content/model.html'); + } + + // 内容模型增加 + public function add() + { + if ($_POST) { + // 获取数据 + $mcode = get_auto_code($this->model->getLastCode()); + $name = post('name'); + $type = post('type'); + $urlname = post('urlname'); + $listtpl = basename(post('listtpl')); + $contenttpl = basename(post('contenttpl')); + $status = post('status'); + + if (! $name) { + alert_back('模型名称不能为空!'); + } + + if ($type == 1) { + if (! $urlname) + $urlname = 'about'; + } else { + if (! $urlname) + $urlname = 'list'; + } + + if ($urlname && ! preg_match('/^[a-zA-Z0-9\-]+$/', $urlname)) { + alert_back('模型URL名称只允许字母、数字、横线组成!'); + } + + if ($this->model->checkUrlname($urlname, $type)) { + alert_back('模型URL名称与其他模型冲突,请换一个名称!'); + } + + if ($this->model->checkSortFilename($urlname)) { + alert_back('模型URL名称与栏目URL名称冲突,请换一个名称!'); + } + + // 构建数据 + $data = array( + 'mcode' => $mcode, + 'name' => $name, + 'type' => $type, + 'urlname' => $urlname, + 'listtpl' => $listtpl, + 'contenttpl' => $contenttpl, + 'status' => $status, + 'issystem' => 0, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->addModel($data)) { + $this->log('新增内容模型成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/Model/index')); + } + } else { + $this->log('新增内容模型失败!'); + error('新增失败!', - 1); + } + } + } + + // 内容模型删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + if ($this->model->delModel($id)) { + $this->log('删除内容模型' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除内容模型' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 内容模型修改 + public function mod() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modModel($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $name = post('name'); + $type = post('type'); + $urlname = post('urlname'); + $listtpl = basename(post('listtpl')); + $contenttpl = basename(post('contenttpl')); + $status = post('status'); + + if (! $name) { + alert_back('模型名称不能为空!'); + } + + if ($type == 1) { + if (! $urlname) + $urlname = 'about'; + } else { + if (! $urlname) + $urlname = 'list'; + } + + if ($urlname && ! preg_match('/^[a-zA-Z0-9\-]+$/', $urlname)) { + alert_back('模型URL名称只允许字母、数字、横线组成!'); + } + + if ($this->model->checkUrlname($urlname, $type, "id<>$id")) { + alert_back('模型URL名称与其他模型冲突,请换一个名称!'); + } + + if ($this->model->checkSortFilename($urlname)) { + alert_back('模型URL名称与栏目URL名称冲突,请换一个名称!'); + } + + // 构建数据 + $data = array( + 'name' => $name, + 'type' => $type, + 'urlname' => $urlname, + 'listtpl' => $listtpl, + 'contenttpl' => $contenttpl, + 'status' => $status, + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->modModel($id, $data)) { + $this->log('修改内容模型' . $id . '成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Model/index')); + } + } else { + location(- 1); + } + } else { + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getModel($id)) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('model', $result); + $this->display('content/model.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/SingleController.php b/apps/admin/controller/content/SingleController.php new file mode 100644 index 0000000..75ee829 --- /dev/null +++ b/apps/admin/controller/content/SingleController.php @@ -0,0 +1,266 @@ +model = new SingleModel(); + } + + // 单页内容列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getSingle($id)) { + $this->assign('more', true); + $this->assign('content', $result); + } else { + $this->assign('list', true); + if (! $mcode = get('mcode', 'var')) { + error('传递的模型编码参数有误,请核对后重试!'); + } + + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findSingle($mcode, $field, $keyword); + } else { + $result = $this->model->getList($mcode); + } + $this->assign('baidu_zz_token', $this->config('baidu_zz_token')); + $this->assign('baidu_ks_token', $this->config('baidu_ks_token')); + + // 模型名称 + $this->assign('model_name', model('admin.content.Model')->getName($mcode)); + + // 前端地址连接符判断 + $url_break_char = $this->config('url_break_char') ?: '_'; + $this->assign('url_break_char', $url_break_char); + + $this->assign('contents', $result); + } + $this->display('content/single.html'); + } + + // 单页内容删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + if ($this->model->delSingle($id)) { + $this->log('删除单页内容' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除单页内容' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 单页内容修改 + public function mod() + { + // 前端地址连接符判断 + if (get('baiduzz') || get('baiduxzh')) { + $url_break_char = $this->config('url_break_char') ?: '_'; + $url_rule_sort_suffix = $this->config('url_rule_sort_suffix') ? true : false; + } + + // 站长普通推送 + if (! ! $id = get('baiduzz')) { + $domain = get_http_url(); + if (! $token = $this->config('baidu_zz_token')) { + alert_back('请先到系统配置中填写百度普通收录推送token值!'); + } + + $api = "http://data.zz.baidu.com/urls?site=$domain&token=$token"; + $data = $this->model->getSingle($id); + $data->urlname = $data->urlname ?: 'about'; + if ($data->outlink) { + alert_back('链接类型不允许推送!'); + } + if ($data->filename) { + $urls[] = $domain . homeurl('/home/Index/' . $data->filename, $url_rule_sort_suffix); + } else { + $urls[] = $domain . homeurl('/home/Index/' . $data->urlname . $url_break_char . $data->scode, $url_rule_sort_suffix); + } + $result = post_baidu($api, $urls); + if (isset($result->error)) { + $this->log('百度普通收录推送失败:' . $urls[0]); + alert_back('推送发生错误:' . $result->message); + } elseif (isset($result->success)) { + $this->log('百度普通收录推送成功:' . $urls[0]); + alert_back('成功推送' . $result->success . '条,今天剩余可推送' . $result->remain . '条数!'); + } else { + alert_back('发生未知错误!'); + } + } + + // 站长快速推送 + if (! ! $id = get('baiduks')) { + $domain = get_http_url(); + if (! $token = $this->config('baidu_ks_token')) { + alert_back('请先到系统配置中填写百度快速收录推送token值!'); + } + + $api = "http://data.zz.baidu.com/urls?site=$domain&token=$token&type=daily"; + $data = $this->model->getSingle($id); + $data->urlname = $data->urlname ?: 'about'; + if ($data->outlink) { + alert_back('链接类型不允许推送!'); + } + if ($data->filename) { + $urls[] = $domain . homeurl('/home/Index/' . $data->filename, $url_rule_sort_suffix); + } else { + $urls[] = $domain . homeurl('/home/Index/' . $data->urlname . $url_break_char . $data->scode, $url_rule_sort_suffix); + } + $result = post_baidu($api, $urls); + if (isset($result->error)) { + $this->log('百度快速收录推送失败:' . $urls[0]); + alert_back('推送发生错误:' . $result->message); + } elseif (isset($result->success_daily)) { + $this->log('百度快速收录推送成功:' . $urls[0]); + alert_back('成功推送' . $result->success_daily . '条,今天剩余可推送' . $result->remain_daily . '条数!'); + } else { + alert_back('发生未知错误!'); + } + } + + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modSingle($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $title = post('title'); + $author = post('author'); + $source = post('source'); + $ico = post('ico'); + $pics = post('pics'); + $content = post('content'); + $tags = str_replace(',', ',', post('tags')); + $titlecolor = post('titlecolor'); + $subtitle = post('subtitle'); + $outlink = post('outlink'); + $date = post('date'); + $enclosure = post('enclosure'); + $keywords = post('keywords'); + $description = post('description'); + $status = post('status', 'int'); + + // 获取多图标题 + $picstitle = post('picstitle'); + if ($picstitle) { + $picstitle = implode(',', $picstitle); + } + + if (! $title) { + alert_back('单页内容标题不能为空!'); + } + + // 自动提起前一百个字符为描述 + if (! $description && isset($_POST['content'])) { + $description = escape_string(clear_html_blank(substr_both(strip_tags($_POST['content']), 0, 150))); + } + + // 缩放缩略图 + if ($ico) { + resize_img(ROOT_PATH . $ico, '', $this->config('ico.max_width'), $this->config('ico.max_height')); + } + + // 构建数据 + $data = array( + 'title' => $title, + 'content' => $content, + 'tags' => $tags, + 'author' => $author, + 'source' => $source, + 'ico' => $ico, + 'pics' => $pics, + 'picstitle' => $picstitle, + 'titlecolor' => $titlecolor, + 'subtitle' => $subtitle, + 'outlink' => $outlink, + 'date' => $date, + 'enclosure' => $enclosure, + 'keywords' => $keywords, + 'description' => clear_html_blank($description), + 'status' => $status, + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->modSingle($id, $data)) { + + // 扩展内容修改 + foreach ($_POST as $key => $value) { + if (preg_match('/^ext_[\w\-]+$/', $key)) { + $temp = post($key); + if (is_array($temp)) { + $data2[$key] = implode(',', $temp); + } else { + $data2[$key] = str_replace("\r\n", '
', $temp); + } + } + } + if (isset($data2)) { + if ($this->model->findContentExt($id)) { + $this->model->modContentExt($id, $data2); + } else { + $data2['contentid'] = $id; + $this->model->addContentExt($data2); + } + } + + $this->log('修改单页内容' . $id . '成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Single/index/mcode/1')); + } + } else { + location(- 1); + } + } else { + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getSingle($id)) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('content', $result); + + // 扩展字段 + if (! $mcode = get('mcode', 'var')) { + error('传递的模型编码参数有误,请核对后重试!'); + } + $this->assign('extfield', model('admin.content.ExtField')->getModelField($mcode)); + + $this->display('content/single.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/SiteController.php b/apps/admin/controller/content/SiteController.php new file mode 100644 index 0000000..9b7d0c7 --- /dev/null +++ b/apps/admin/controller/content/SiteController.php @@ -0,0 +1,82 @@ +model = new SiteModel(); + } + + // 显示站点信息 + public function index() + { + // 获取主题列表 + $themes = dir_list(ROOT_PATH . current($this->config('tpl_dir'))); + $this->assign('themes', $themes); + + // 获取系统配置 + $this->assign('sites', $this->model->getList()); + + // 显示 + $this->display('content/site.html'); + } + + // 修改站点信息 + public function mod() + { + if (! $_POST) { + return; + } + + $data = array( + 'title' => post('title'), + 'subtitle' => post('subtitle'), + 'domain' => post('domain'), + 'logo' => post('logo'), + 'keywords' => post('keywords'), + 'description' => post('description'), + 'icp' => post('icp'), + 'theme' => basename(post('theme')) ?: 'default', + 'statistical' => post('statistical'), + 'copyright' => post('copyright') + ); + + path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件 + if ($this->model->checkSite()) { + if ($this->model->modSite($data)) { + $this->log('修改站点信息成功!'); + success('修改成功!', - 1); + } else { + location(- 1); + } + } else { + $data['acode'] = session('acode'); + if ($this->model->addSite($data)) { + $this->log('修改站点信息成功!'); + success('修改成功!', - 1); + } else { + location(- 1); + } + } + } + + // 服务器基础信息 + public function server() + { + $this->assign('server', get_server_info()); + $this->display('system/server.html'); + } +} + diff --git a/apps/admin/controller/content/SlideController.php b/apps/admin/controller/content/SlideController.php new file mode 100644 index 0000000..c92eb0d --- /dev/null +++ b/apps/admin/controller/content/SlideController.php @@ -0,0 +1,195 @@ +model = new SlideModel(); + } + + // 轮播图列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getSlide($id)) { + $this->assign('more', true); + $this->assign('slide', $result); + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findSlide($field, $keyword); + } else { + $result = $this->model->getList(); + } + $this->assign('gids', $this->model->getGid()); + $this->assign('slides', $result); + } + $this->display('content/slide.html'); + } + + // 轮播图增加 + public function add() + { + if ($_POST) { + // 获取数据 + $gid = post('gid', 'int'); + $pic = post('pic'); + $link = post('link'); + $title = post('title'); + $subtitle = post('subtitle'); + $sorting = post('sorting', 'int'); + + if (! $gid) { + $gid = $this->model->getMaxGid() + 1; + } + + if (! $pic) { + alert_back('图片不能为空!'); + } + + // 构建数据 + $data = array( + 'acode' => session('acode'), + 'gid' => $gid, + 'pic' => $pic, + 'link' => $link, + 'title' => $title, + 'subtitle' => $subtitle, + 'sorting' => $sorting, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->addSlide($data)) { + $this->log('新增轮播图成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/Slide/index')); + } + } else { + $this->log('新增轮播图失败!'); + error('新增失败!', - 1); + } + } + } + + // 轮播图删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + if ($this->model->delSlide($id)) { + $this->log('删除轮播图' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除轮播图' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 轮播图修改 + public function mod() + { + if (! ! $submit = post('submit')) { + switch ($submit) { + case 'sorting': // 修改列表排序 + $listall = post('listall'); + if ($listall) { + $sorting = post('sorting'); + foreach ($listall as $key => $value) { + if ($sorting[$key] === '' || ! is_numeric($sorting[$key])) + $sorting[$key] = 255; + $this->model->modSlide($value, "sorting=" . $sorting[$key]); + } + $this->log('批量修改轮播图排序成功!'); + success('修改成功!', - 1); + } else { + alert_back('排序失败,无任何内容!'); + } + break; + } + } + + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modSlide($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $gid = post('gid', 'int'); + $pic = post('pic'); + $link = post('link'); + $title = post('title'); + $subtitle = post('subtitle'); + $sorting = post('sorting', 'int'); + + if (! $gid) { + $gid = $this->model->getMaxGid() + 1; + } + + if (! $pic) { + alert_back('图片不能为空!'); + } + + // 构建数据 + $data = array( + 'gid' => $gid, + 'pic' => $pic, + 'link' => $link, + 'title' => $title, + 'subtitle' => $subtitle, + 'sorting' => $sorting, + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->modSlide($id, $data)) { + $this->log('修改轮播图' . $id . '成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Slide/index')); + } + } else { + location(- 1); + } + } else { + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getSlide($id)) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('gids', $this->model->getGid()); + $this->assign('slide', $result); + $this->display('content/slide.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/content/TagsController.php b/apps/admin/controller/content/TagsController.php new file mode 100644 index 0000000..90c968b --- /dev/null +++ b/apps/admin/controller/content/TagsController.php @@ -0,0 +1,157 @@ +model = new TagsModel(); + } + + // 文章内链列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getTags($id)) { + $this->assign('more', true); + $this->assign('tags', $result); + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findTags($field, $keyword); + } else { + $result = $this->model->getList(); + } + $this->assign('tags', $result); + } + $this->display('content/tags.html'); + } + + // 文章内链增加 + public function add() + { + if ($_POST) { + // 获取数据 + $name = post('name'); + $link = post('link'); + + if (! $name) { + alert_back('名称不能为空!'); + } + + if (! $link) { + alert_back('链接不能为空!'); + } + + // 构建数据 + $data = array( + 'acode' => session('acode'), + 'name' => $name, + 'link' => $link, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->addTags($data)) { + $this->log('新增文章内链成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/Tags/index')); + } + } else { + $this->log('新增文章内链失败!'); + error('新增失败!', - 1); + } + } + } + + // 文章内链删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + if ($this->model->delTags($id)) { + $this->log('删除文章内链' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除文章内链' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 文章内链修改 + public function mod() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modTags($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $name = post('name'); + $link = post('link'); + + if (! $name) { + alert_back('名称不能为空!'); + } + + if (! $link) { + alert_back('链接不能为空!'); + } + + // 构建数据 + $data = array( + 'name' => $name, + 'link' => $link, + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->modTags($id, $data)) { + $this->log('修改文章内链' . $id . '成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Tags/index')); + } + } else { + location(- 1); + } + } else { + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getTags($id)) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('tags', $result); + $this->display('content/tags.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/member/MemberCommentController.php b/apps/admin/controller/member/MemberCommentController.php new file mode 100644 index 0000000..b9fc3b6 --- /dev/null +++ b/apps/admin/controller/member/MemberCommentController.php @@ -0,0 +1,118 @@ +model = new MemberCommentModel(); + } + + // 文章评论列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getComment($id)) { + $this->assign('more', true); + $this->assign('comment', $result); + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findComment($field, $keyword); + } else { + $result = $this->model->getList(); + } + $this->assign('comments', $result); + } + $this->display('member/comment.html'); + } + + // 文章评论删除 + public function del() + { + // 执行批量删除 + if ($_POST) { + if (! ! $list = post('list')) { + if ($this->model->delCommentList($list)) { + $this->log('批量删除评论成功!'); + success('删除成功!', - 1); + } else { + $this->log('批量删除评论失败!'); + error('删除失败!', - 1); + } + } else { + alert_back('请选择要删除的评论!'); + } + } + + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + if ($this->model->delComment($id)) { + $this->log('删除文章评论' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除文章评论' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 字段修改 + public function mod() + { + if (! ! $submit = post('submit')) { + switch ($submit) { + case 'verify1': + $list = post('list'); + if (! $list) { + alert_back('请选择要操作的评论!'); + } + if ($this->model->modCommentList($list, "status=1")) { + $this->log('评论批量审核成功!'); + success('审核成功!', - 1); + } else { + alert_back('审核失败!'); + } + break; + case 'verify0': + $list = post('list'); + if (! $list) { + alert_back('请选择要操作的评论!'); + } + if ($this->model->modCommentList($list, "status=0")) { + $this->log('评论批量禁用成功!'); + success('禁用成功!', - 1); + } else { + alert_back('禁用失败!'); + } + break; + } + } + + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modComment($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/member/MemberController.php b/apps/admin/controller/member/MemberController.php new file mode 100644 index 0000000..30d756f --- /dev/null +++ b/apps/admin/controller/member/MemberController.php @@ -0,0 +1,292 @@ +model = new MemberModel(); + } + + // 会员列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getMember($id)) { + $this->assign('more', true); + $this->assign('fields', $this->model->getFields()); + $this->assign('member', $result); + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findMember($field, $keyword); + } else { + $result = $this->model->getList(); + } + + // 会员等级 + $this->assign('groups', model('admin.member.MemberGroup')->getSelect()); + $this->assign('members', $result); + } + $this->display('member/member.html'); + } + + // 会员增加 + public function add() + { + if ($_POST) { + // 获取数据 + $ucode = get_auto_code($this->model->getLastCode(), 1); + $username = post('username'); + $useremail = post('useremail'); + $usermobile = post('usermobile'); + $nickname = post('nickname'); + $password = post('password'); + $headpic = post('headpic'); + $status = post('status') ?: 1; + $gid = post('gid'); + $score = post('score'); + $register_time = get_datetime(); + + if (! $username) { + alert_back('用户账号不能为空!'); + } + + if (! preg_match('/^[\w\@\.]+$/', $username)) { + alert_back('用户账号含有不允许的特殊字符!'); + } + + if ($useremail && ! preg_match('/^[\w]+@[\w\.]+\.[a-zA-Z]+$/', $useremail)) { + alert_back('邮箱账号格式不正确!'); + } + + if ($usermobile && ! preg_match('/^1[0-9]{10}$/', $usermobile)) { + alert_back('手机号码格式不正确!'); + } + + if ($username && $this->model->checkMember("username='$username' OR useremail='$username' OR usermobile='$username'")) { + alert_back('用户名已经存在!'); + } + + if ($useremail && $this->model->checkMember("username='$useremail' OR useremail='$useremail' OR usermobile='$useremail'")) { + alert_back('邮箱账号已经存在!'); + } + + if ($usermobile && $this->model->checkMember("username='$usermobile' OR useremail='$usermobile' OR usermobile='$usermobile'")) { + alert_back('手机号码已经存在!'); + } + + if (! $password) { + alert_back('密码不能为空!'); + } else { + $password = md5(md5($password)); + } + + // 构建数据 + $data = array( + 'ucode' => $ucode, + 'username' => $username, + 'useremail' => $useremail, + 'usermobile' => $usermobile, + 'nickname' => $nickname, + 'password' => $password, + 'headpic' => $headpic, + 'status' => $status, + 'gid' => $gid, + 'wxid' => '', + 'qqid' => '', + 'wbid' => '', + 'activation' => 1, + 'score' => $score, + 'register_time' => $register_time, + 'login_count' => 0, + 'last_login_ip' => 0, + 'last_login_time' => 0 + ); + + // 执行添加 + if ($this->model->addMember($data)) { + $this->log('新增会员成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/Member/index')); + } + } else { + $this->log('新增会员失败!'); + error('新增失败!', - 1); + } + } + } + + // 会员删除 + public function del() + { + // 执行批量删除 + if ($_POST) { + if (! ! $list = post('list')) { + if ($this->model->delMemberList($list)) { + $this->log('批量删除会员成功!'); + success('删除成功!', - 1); + } else { + $this->log('批量删除会员失败!'); + error('删除失败!', - 1); + } + } else { + alert_back('请选择要删除的会员!'); + } + } + + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + if ($this->model->delMember($id)) { + $this->log('删除会员' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除会员' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 会员修改 + public function mod() + { + if (! ! $submit = post('submit')) { + switch ($submit) { + case 'verify1': + $list = post('list'); + if (! $list) { + alert_back('请选择要操作的会员!'); + } + if ($this->model->modMemberList($list, "status=1")) { + $this->log('会员批量启用成功!'); + success('启用成功!', - 1); + } else { + alert_back('启用失败!'); + } + break; + case 'verify0': + $list = post('list'); + if (! $list) { + alert_back('请选择要操作的会员!'); + } + if ($this->model->modMemberList($list, "status=0")) { + $this->log('会员批量禁用成功!'); + success('禁用成功!', - 1); + } else { + alert_back('禁用失败!'); + } + break; + } + } + + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modMember($id, "$field='$value'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $username = post('username'); + $useremail = post('useremail'); + $usermobile = post('usermobile'); + $nickname = post('nickname'); + $password = post('password'); + $headpic = post('headpic'); + $status = post('status') ?: 1; + $gid = post('gid'); + $score = post('score'); + + if (! $username) { + alert_back('用户账号不能为空!'); + } + + if (! preg_match('/^[\w\@\.]+$/', $username)) { + alert_back('用户账号含有不允许的特殊字符!'); + } + + if ($useremail && ! preg_match('/^[\w]+@[\w\.]+\.[a-zA-Z]+$/', $useremail)) { + alert_back('邮箱账号格式不正确!'); + } + + if ($usermobile && ! preg_match('/^1[0-9]{10}$/', $usermobile)) { + alert_back('手机号码格式不正确!'); + } + + if ($username && $this->model->checkMember("(username='$username' OR useremail='$username' OR usermobile='$username') AND id<>$id")) { + alert_back('用户名已经存在!'); + } + + if ($useremail && $this->model->checkMember("(username='$useremail' OR useremail='$useremail' OR usermobile='$useremail') AND id<>$id")) { + alert_back('邮箱账号已经存在!'); + } + + if ($usermobile && $this->model->checkMember("(username='$usermobile' OR useremail='$usermobile' OR usermobile='$usermobile') AND id<>$id")) { + alert_back('手机号码已经存在!'); + } + + // 构建数据 + $data = array( + 'username' => $username, + 'useremail' => $useremail, + 'usermobile' => $usermobile, + 'nickname' => $nickname, + 'headpic' => $headpic, + 'status' => $status, + 'gid' => $gid, + 'score' => $score + ); + + if ($password) { + $data['password'] = md5(md5($password)); + } + + // 执行添加 + if ($this->model->modMember($id, $data)) { + $this->log('修改会员成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Member/index')); + } + } else { + $this->log('修改会员失败!'); + error('修改失败!', - 1); + } + } else { + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getMember($id)) { + error('编辑的内容已经不存在!', - 1); + } + // 会员等级 + $this->assign('groups', model('admin.member.MemberGroup')->getSelect()); + $this->assign('member', $result); + $this->display('member/member.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/member/MemberFieldController.php b/apps/admin/controller/member/MemberFieldController.php new file mode 100644 index 0000000..ce498e2 --- /dev/null +++ b/apps/admin/controller/member/MemberFieldController.php @@ -0,0 +1,193 @@ +model = new MemberFieldModel(); + } + + // 会员字段列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getField($id)) { + $this->assign('more', true); + $this->assign('field', $result); + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findField($field, $keyword); + } else { + $result = $this->model->getList(); + } + $this->assign('fields', $result); + } + $this->display('member/field.html'); + } + + // 会员字段增加 + public function add() + { + if ($_POST) { + + // 获取数据 + $name = post('name', 'var'); + $length = post('length', 'int') ?: 20; + $required = post('required', 'int') ?: 0; + $description = post('description'); + $sorting = post('sorting', 'int') ?: 255; + $status = post('status') ?: 1; + + if (! $name) { + alert_back('字段名称不能为空!'); + } + + if (! preg_match('/^[a-zA-Z][\w]+$/', $name)) { + alert_back('字段名称必须以字母开头!'); + } + + if (! $description) { + alert_back('字段描述不能为空!'); + } + + // 构建数据 + $data = array( + 'name' => $name, + 'length' => $length, + 'required' => $required, + 'description' => $description, + 'sorting' => $sorting, + 'status' => $status, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 字段类型及长度 + $mysql = "varchar($length)"; + $sqlite = "TEXT($length)"; + + // 字段不存在时创建 + if (! $this->model->isExistField($name)) { + if (get_db_type() == 'sqlite') { + $result = $this->model->amd("ALTER TABLE ay_member ADD COLUMN $name $sqlite NULL"); + } else { + $result = $this->model->amd("ALTER TABLE ay_member ADD $name $mysql NULL COMMENT '$description'"); + } + } elseif ($this->model->checkField($name)) { // 字段存在且已使用则报错 + alert_back('字段已经存在,不能重复添加!'); + } + + // 执行会员字段添加 + if ($this->model->addField($data)) { + $this->log('新增会员字段成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/MemberField/index')); + } + } else { + $this->log('新增会员字段失败!'); + error('新增失败!', - 1); + } + } + } + + // 会员字段删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + $name = $this->model->getFieldName($id); + if ($this->model->delField($id)) { + // mysql数据库执行字段删除,sqlite暂时不支持 + if (! ! $name) { + if (get_db_type() == 'mysql') { + $result = $this->model->amd("ALTER TABLE ay_member DROP COLUMN $name"); + } + } + $this->log('删除会员字段' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除会员字段' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 会员字段修改 + public function mod() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modField($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $required = post('required', 'int') ?: 0; + $description = post('description'); + $sorting = post('sorting', 'int') ?: 255; + $status = post('status') ?: 1; + + if (! $description) { + alert_back('字段描述不能为空!'); + } + + // 构建数据 + $data = array( + 'required' => $required, + 'description' => $description, + 'sorting' => $sorting, + 'status' => $status, + 'update_user' => session('username') + ); + + // 执行会员字段修改 + if ($this->model->modField($id, $data)) { + $this->log('修改会员字段成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/MemberField/index')); + } + } else { + $this->log('修改会员字段失败!'); + error('修改失败!', - 1); + } + } else { + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getField($id)) { + error('编辑的内容已经不存在!', - 1); + } + + $this->assign('field', $result); + $this->display('member/field.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/member/MemberGroupController.php b/apps/admin/controller/member/MemberGroupController.php new file mode 100644 index 0000000..bb21de9 --- /dev/null +++ b/apps/admin/controller/member/MemberGroupController.php @@ -0,0 +1,187 @@ +model = new MemberGroupModel(); + } + + // 会员等级列表 + public function index() + { + if ((! ! $id = get('id', 'int')) && $result = $this->model->getGroup($id)) { + $this->assign('more', true); + $this->assign('group', $result); + } else { + $this->assign('list', true); + if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) { + $result = $this->model->findGroup($field, $keyword); + } else { + $result = $this->model->getList(); + } + $this->assign('groups', $result); + } + $this->display('member/group.html'); + } + + // 会员等级增加 + public function add() + { + if ($_POST) { + + // 获取数据 + $gcode = post('gcode', 'int') ?: get_auto_code($this->model->getLastGid(), 1); + $gname = post('gname'); + $description = post('description'); + $status = post('status') ?: 1; + $lscore = post('lscore', 'int') ?: 0; + $uscore = post('uscore', 'int') ?: 9999999999; + + if (! $gcode) { + alert_back('等级编号不能为空!'); + } + + if (! $gname) { + alert_back('等级名称不能为空!'); + } + + if ($this->model->findGroupCode($gcode)) { + alert_back('等级编码不能重复!'); + } + + // 构建数据 + $data = array( + 'gcode' => $gcode, + 'gname' => $gname, + 'description' => $description, + 'status' => $status, + 'lscore' => $lscore, + 'uscore' => $uscore, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行会员等级添加 + if ($this->model->addGroup($data)) { + $this->log('新增会员等级成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/MemberGroup/index')); + } + } else { + $this->log('新增会员等级失败!'); + error('新增失败!', - 1); + } + } + } + + // 会员等级删除 + public function del() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + if ($this->model->findGroupUser($id)) { + error('会员等级下存在用户,无法直接删除!', - 1); + } + + if ($this->model->delGroup($id)) { + $this->log('删除会员等级' . $id . '成功!'); + success('删除成功!', - 1); + } else { + $this->log('删除会员等级' . $id . '失败!'); + error('删除失败!', - 1); + } + } + + // 会员等级修改 + public function mod() + { + if (! $id = get('id', 'int')) { + error('传递的参数值错误!', - 1); + } + + // 单独修改状态 + if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) { + if ($this->model->modGroup($id, "$field='$value',update_user='" . session('username') . "'")) { + location(- 1); + } else { + alert_back('修改失败!'); + } + } + + // 修改操作 + if ($_POST) { + + // 获取数据 + $gcode = post('gcode', 'int') ?: get_auto_code($this->model->getLastGid(), 1); + $gname = post('gname'); + $description = post('description'); + $status = post('status') ?: 1; + $lscore = post('lscore', 'int') ?: 0; + $uscore = post('uscore', 'int') ?: 9999999999; + + if (! $gcode) { + alert_back('等级编号不能为空!'); + } + + if (! $gname) { + alert_back('等级名称不能为空!'); + } + + if ($this->model->findGroupCode($gcode, $id)) { + alert_back('等级编码不能重复!'); + } + + // 构建数据 + $data = array( + 'gcode' => $gcode, + 'gname' => $gname, + 'description' => $description, + 'status' => $status, + 'lscore' => $lscore, + 'uscore' => $uscore, + 'update_user' => session('username') + ); + + // 执行会员等级修改 + if ($this->model->modGroup($id, $data)) { + $this->log('修改会员等级成功!'); + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/MemberGroup/index')); + } + } else { + $this->log('修改会员等级失败!'); + error('修改失败!', - 1); + } + } else { + // 调取修改内容 + $this->assign('mod', true); + if (! $result = $this->model->getGroup($id)) { + error('编辑的内容已经不存在!', - 1); + } + + $this->assign('group', $result); + $this->display('member/group.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/system/AreaController.php b/apps/admin/controller/system/AreaController.php new file mode 100644 index 0000000..89d2f80 --- /dev/null +++ b/apps/admin/controller/system/AreaController.php @@ -0,0 +1,303 @@ +model = new AreaModel(); + } + + // 区域列表 + public function index() + { + $this->assign('list', true); + $area_tree = $this->model->getList(); + $areas = $this->makeAreaList($area_tree); + $this->assign('areas', $areas); + + // 区域下拉表 + $area_tree = $this->model->getSelect(); + $area_select = $this->makeAreaSelect($area_tree); + $this->assign('area_select', $area_select); + + $this->display('system/area.html'); + } + + // 生成无限级区域列表 + private function makeAreaList($tree) + { + // 循环生成 + foreach ($tree as $value) { + $this->count ++; + $this->outData[$this->count] = new \stdClass(); + $this->outData[$this->count]->id = $value->id; + $this->outData[$this->count]->blank = $this->blank; + $this->outData[$this->count]->name = $value->name; + $this->outData[$this->count]->domain = $value->domain; + $this->outData[$this->count]->acode = $value->acode; + $this->outData[$this->count]->pcode = $value->pcode; + $this->outData[$this->count]->is_default = $value->is_default; + $this->outData[$this->count]->create_user = $value->create_user; + $this->outData[$this->count]->update_user = $value->update_user; + $this->outData[$this->count]->create_time = $value->create_time; + $this->outData[$this->count]->update_time = $value->update_time; + + if ($value->son) { + $this->outData[$this->count]->son = true; + } else { + $this->outData[$this->count]->son = false; + } + + // 子菜单处理 + if ($value->son) { + $this->blank .= '  '; + $this->makeAreaList($value->son); + } + } + + // 循环完后回归缩进位置 + $this->blank = substr($this->blank, 6); + return $this->outData; + } + + // 区域增加 + public function add() + { + if ($_POST) { + // 获取数据 + $acode = post('acode', 'var'); + $pcode = post('pcode', 'var'); + $name = post('name'); + $domain = post('domain'); + $is_default = post('is_default'); + + if (! $acode) { + alert_back('编码不能为空!'); + } + + if (! $pcode) { // 父编码默认为0 + $pcode = 0; + } + + if (! $name) { + alert_back('区域名称不能为空!'); + } + + if ($domain) { + $reg = '{^(https://|http://)?([\w\-.]+)([\/]+)?$}'; + if (preg_match($reg, $domain)) { + $domain = preg_replace($reg, '$2', $domain); + } else { + alert_back('要绑定的域名输入有错!'); + } + + // 检查绑定 + if ($this->model->checkArea("domain='$domain'")) { + alert_back('该域名已经绑定其他区域,不能再使用!'); + } + } + + // 检查编码 + if ($this->model->checkArea("acode='$acode'")) { + alert_back('该区域编号已经存在,不能再使用!'); + } + + // 构建数据 + $data = array( + 'acode' => $acode, + 'pcode' => $pcode, + 'name' => $name, + 'domain' => $domain, + 'is_default' => $is_default, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->addArea($data)) { + if (session('ucode') == '10001') { + $acodes = session('acodes'); + $acodes[] = $acode; + session('acodes', $acodes); // 更新管理员管理区域 + $model = model('Index'); + $areas = $model->getAreas(); + session('area_map', get_mapping($areas, 'name', 'acode')); // 更新区域代码名称映射表 + session('area_tree', $model->getUserAreaTree($areas, 0, 'acode', 'pcode', 'son', $acodes)); // 更新当前用户的区域树 + } + $this->log('新增数据区域' . $acode . '成功!'); + path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件 + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('/admin/Area/index')); + } + } else { + $this->log('新增数据区域' . $acode . '失败!'); + error('新增失败!', - 1); + } + } + } + + // 生成区域选择 + private function makeAreaSelect($tree, $selectid = null) + { + $list_html = ''; + foreach ($tree as $value) { + // 默认选择项 + if ($selectid == $value->acode) { + $select = "selected='selected'"; + } else { + $select = ''; + } + if (get('acode') != $value->acode) { // 不显示本身,避免出现自身为自己的父节点 + $list_html .= ""; + } + // 子菜单处理 + if ($value->son) { + $this->blank .= '  '; + $list_html .= $this->makeAreaSelect($value->son, $selectid); + } + } + // 循环完后回归位置 + $this->blank = substr($this->blank, 0, - 6); + return $list_html; + } + + // 区域删除 + public function del() + { + if (! $acode = get('acode', 'var')) { + error('传递的参数值错误!', - 1); + } + + if ($acode == 'cn') { + error('系统内置区域不允许删除!', - 1); + } + + if ($this->model->delArea($acode)) { + path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件 + $this->log('删除数据区域' . $acode . '成功!'); + session_unset(); + success('删除成功,请重新登录', url('/admin/Index/index')); + } else { + $this->log('删除数据区域' . $acode . '失败!'); + error('删除失败,请核对是否为默认区域!', - 1); + } + } + + // 区域修改 + public function mod() + { + if (! $acode = get('acode', 'var')) { + error('传递的参数值错误!', - 1); + } + + // 修改操作 + if ($_POST) { + // 获取数据 + $acode_new = post('acode', 'var'); + $pcode = post('pcode', 'var'); + $name = post('name'); + $domain = post('domain'); + $is_default = post('is_default'); + + if (! $acode_new) { + alert_back('编码不能为空!'); + } + + if (! $pcode) { // 父编码默认为0 + $pcode = 0; + } + + if (! $name) { + alert_back('区域名称不能为空!'); + } + + if ($domain) { + $reg = '{^(https://|http://)?([\w\-.]+)([\/]+)?$}'; + if (preg_match($reg, $domain)) { + $domain = preg_replace($reg, '$2', $domain); + } else { + alert_back('要绑定的域名输入有错!'); + } + + // 检查绑定 + if ($this->model->checkArea("domain='$domain' AND acode<>'$acode'")) { + alert_back('该域名已经绑定其他区域,不能再使用!'); + } + } + + // 检查编码 + if ($this->model->checkArea("acode='$acode_new' AND acode<>'$acode'")) { + alert_back('该区域编号已经存在,不能再使用!'); + } + + // 构建数据 + $data = array( + 'acode' => $acode_new, + 'pcode' => $pcode, + 'name' => $name, + 'domain' => $domain, + 'is_default' => $is_default, + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->modArea($acode, $data)) { + if (session('ucode') == '10001') { + $acodes = session('acodes'); + $acodes[] = $acode_new; + session('acodes', $acodes); // 更新管理员管理区域 + $model = model('Index'); + $areas = $model->getAreas(); + session('area_map', get_mapping($areas, 'name', 'acode')); // 更新区域代码名称映射表 + session('area_tree', $model->getUserAreaTree($areas, 0, 'acode', 'pcode', 'son', $acodes)); // 更新当前用户的区域树 + } + $this->log('修改数据区域' . $acode . '成功!'); + path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件 + if (! ! $backurl = get('backurl')) { + success('修改成功!', base64_decode($backurl)); + } else { + success('修改成功!', url('/admin/Area/index')); + } + } else { + location(- 1); + } + } else { // 调取修改内容 + $this->assign('mod', true); + + $area = $this->model->getArea($acode); + if (! $area) { + error('编辑的内容已经不存在!', - 1); + } + $this->assign('area', $area); + + // 父编码下拉选择 + $area_tree = $this->model->getSelect(); + $area_select = $this->makeAreaSelect($area_tree, $area->pcode); + $this->assign('area_select', $area_select); + + $this->display('system/area.html'); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/system/ConfigController.php b/apps/admin/controller/system/ConfigController.php new file mode 100644 index 0000000..cc9a06f --- /dev/null +++ b/apps/admin/controller/system/ConfigController.php @@ -0,0 +1,226 @@ +model = new ConfigModel(); + } + + // 应用配置列表 + public function index() + { + if (! ! $action = get('action')) { + switch ($action) { + case 'sendemail': + $rs = sendmail($this->config(), get('to'), '【PbootCMS】测试邮件', '欢迎您使用PbootCMS网站开发管理系统!'); + if ($rs === true) { + alert_back('测试邮件发送成功!'); + } else { + error('发送失败:' . $rs); + } + break; + } + } + + // 修改参数配置 + if ($_POST) { + unset($_POST['upload']); // 去除上传组件 + foreach ($_POST as $key => $value) { + if (! preg_match('/^[\w\-]+$/', $key)) { + continue; + } + $config = array( + 'debug', + 'sn', + 'sn_user', + 'pagenum', + 'tpl_html_cache', + 'tpl_html_cache_time', + 'session_in_sitepath' + ); + if (in_array($key, $config)) { + if ($key == 'tpl_html_cache_time' && ! $value) { + $value = 900; + } else { + $value = post($key); + } + $this->modConfig($key, $value); + } else { + $this->modDbConfig($key); + } + } + + $this->log('修改参数配置成功!'); + path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件 + + switch (post('submit')) { + case 'email': + success('修改成功!', url('/admin/Config/index' . get_tab('t2'), false)); + break; + case 'baidu': + success('修改成功!', url('/admin/Config/index' . get_tab('t3'), false)); + break; + case 'api': + success('修改成功!', url('/admin/Config/index' . get_tab('t4'), false)); + break; + case 'watermark': + success('修改成功!', url('/admin/Config/index' . get_tab('t5'), false)); + break; + case 'security': + success('修改成功!', url('/admin/Config/index' . get_tab('t6'), false)); + break; + case 'urlrule': + success('修改成功!', url('/admin/Config/index' . get_tab('t7'), false)); + break; + case 'pagetitle': + success('修改成功!', url('/admin/Config/index' . get_tab('t8'), false)); + break; + case 'member': + success('修改成功!', url('/admin/Config/index' . get_tab('t9'), false)); + break; + case 'upgrade': + success('修改成功!', url('/admin/Upgrade/index' . get_tab('t2'), false)); + break; + default: + success('修改成功!', url('/admin/Config/index', false)); + } + } + $configs = $this->model->getList(); + $configs['debug']['value'] = $this->config('debug'); + $configs['sn']['value'] = $this->config('sn'); + $configs['sn_user']['value'] = $this->config('sn_user'); + $configs['session_in_sitepath']['value'] = $this->config('session_in_sitepath'); + $configs['pagenum']['value'] = $this->config('pagenum'); + $configs['url_type']['value'] = $this->config('url_type'); + $configs['tpl_html_cache']['value'] = $this->config('tpl_html_cache'); + $configs['tpl_html_cache_time']['value'] = $this->config('tpl_html_cache_time'); + $this->assign('configs', $configs); + + $this->assign('groups', model('admin.member.MemberGroup')->getSelect()); + + $this->display('system/config.html'); + } + + // 修改配置文件 + private function modConfig($key, $value) + { + $value = str_replace(' ', '', $value); // 去除空格 + $value = str_replace(',', ',', $value); // 转换可能输入的中文逗号 + if (! preg_match('/^[\w\s\,\-]+$/', $value)) { + return; + } + + $config = file_get_contents(CONF_PATH . '/config.php'); + if (preg_match("'$key'", $config)) { + if (preg_match('/^[0-9]+$/', $value)) { + $config = preg_replace('/(\'' . $key . '\'([\s]+)?=>([\s]+)?)[\w\'\"\s,]+,/', '${1}' . $value . ',', $config); + } else { + $config = preg_replace('/(\'' . $key . '\'([\s]+)?=>([\s]+)?)[\w\'\"\s,]+,/', '${1}\'' . $value . '\',', $config); + } + } else { + $config = preg_replace('/(return array\()/', "$1\r\n\r\n\t'$key' => '$value',", $config); // 自动新增配置 + } + return file_put_contents(CONF_PATH . '/config.php', $config); + } + + // 修改数据库配置 + private function modDbConfig($key) + { + $value = post($key); + + // 如果开启伪静态时自动拷贝文件 + if ($key == 'url_rule_type' && $value == 2) { + $soft = get_server_soft(); + if ($soft == 'iis') { + if (! file_exists(ROOT_PATH . '/web.config')) { + copy(ROOT_PATH . '/rewrite/web.config', ROOT_PATH . '/web.config'); + } + } elseif ($soft == 'apache') { + if (! file_exists(ROOT_PATH . '/web.config')) { + copy(ROOT_PATH . '/rewrite/.htaccess', ROOT_PATH . '/.htaccess'); + } + } + } + + // 模板目录修改 + if (($key == 'tpl_html_dir') && $value) { + + // 不允许特殊字符 + if (! preg_match('/^\w+$/', $value)) { + return; + } + + $value = basename($value); + $htmldir = $this->config('tpl_html_dir'); + $tpl_path = ROOT_PATH . current($this->config('tpl_dir')) . '/' . model('admin.content.ContentSort')->getTheme(); + + if (! $htmldir || ! file_exists($tpl_path . '/' . $htmldir)) { + if (! check_dir($tpl_path . '/' . $value, true)) { + return; + } // 原来没有目录时只创建目录,创建失败时直接不修改 + } else { + if ($value != $htmldir) { + if (file_exists($tpl_path . '/' . $value)) { + if (dir_copy($tpl_path . '/' . $htmldir, $tpl_path . '/' . $value)) { + path_delete($tpl_path . '/' . $htmldir, true); // 删除原来的 + } else { + return; // 修改失败 + } + } else { + if (! rename($tpl_path . '/' . $htmldir, $tpl_path . '/' . $value)) { + return; // 修改失败 + } + } + } + } + } + + if ($key == 'home_upload_ext') { + // 不允许特殊扩展 + if (preg_match('/(php|jsp|asp|exe|sh|cmd|vb|vbs|phtml)/i', $value)) { + return; + } + } + + // 数据分割处理 + $hander = array( + 'content_keyword_replace', + 'ip_deny', + 'ip_allow' + ); + if (in_array($key, $hander) && $value) { + $value = str_replace("\r\n", ",", $value); // 替换回车 + $value = str_replace(",", ",", $value); // 替换中文逗号分割符 + } + + if ($this->model->checkConfig("name='$key'")) { + $this->model->modValue($key, $value); + } elseif ($key != 'submit' && $key != 'formcheck') { + // 自动新增配置项 + $data = array( + 'name' => $key, + 'value' => $value, + 'type' => 2, + 'sorting' => 255, + 'description' => '' + ); + return $this->model->addConfig($data); + } + } +} \ No newline at end of file diff --git a/apps/admin/controller/system/DatabaseController.php b/apps/admin/controller/system/DatabaseController.php new file mode 100644 index 0000000..2a94293 --- /dev/null +++ b/apps/admin/controller/system/DatabaseController.php @@ -0,0 +1,248 @@ +model = new DatabaseModel(); + $this->dbauth = $this->config('database'); + } + + // 数据库管理 + public function index() + { + switch ($this->dbauth['type']) { + case 'mysqli': + case 'pdo_mysql': + $this->assign('db', 'mysql'); + $this->assign('tables', $this->model->getList()); + break; + case 'sqlite': + case 'pdo_sqlite': + $this->assign('db', 'sqlite'); + break; + default: + error('当前配置的数据库类型不支持在线管理!'); + } + $this->display('system/database.html'); + } + + // 数据库修改 + public function mod() + { + if (! $_POST) { + alert_back('非法访问!', - 1); + } + + $submit = post('submit', 'letter', true); + + switch ($submit) { + case 'yh': + $tables = self::getTableList(); + if (! $tables) + alert_back('请选择数据表!'); + if ($this->model->optimize(implode(',', $tables))) { + // $this->log('优化数据库表成功!'); + success('优化成功!', - 1); + } else { + // $this->log('优化数据库表失败!'); + error('优化失败!', - 1); + } + break; + case 'xf': + $tables = self::getTableList(); + if (! $tables) + alert_back('请选择数据表!'); + if ($this->model->repair(implode(',', $tables))) { + // $this->log('修复数据库表成功!'); + success('修复成功!', - 1); + } else { + // $this->log('修复数据库表失败!'); + error('修复失败!', - 1); + } + break; + case 'bf': + $tables = self::getTableList(); + if (! $tables) + alert_back('请选择数据表!'); + if ($this->backupTable($tables)) { + $this->log('备份数据库表成功!'); + success('备份表成功!', - 1); + } else { + $this->log('备份数据库表失败!'); + error('备份失败!', - 1); + } + break; + case 'bfdb': + if ($this->backupDB()) { + $this->log('备份数据库成功!'); + success('备份数据库成功!', - 1); + } else { + $this->log('备份数据库失败!'); + error('备份失败!', - 1); + } + break; + case 'bfsqlite': + if (copy(DOC_PATH . $this->dbauth['dbname'], DOC_PATH . STATIC_DIR . '/backup/sql/' . get_uniqid() . '_' . date('YmdHis') . '.db')) { + $this->log('备份数据库成功!'); + success('备份数据库成功!', - 1); + } else { + $this->log('备份数据库失败!'); + error('备份失败!', - 1); + } + break; + } + } + + // 备份数据表 + public function backupTable($tables) + { + $backdir = date('YmdHis'); + foreach ($tables as $table) { + $sql = ''; + $sql .= $this->header(); // 备份文件头部说明 + $sql .= $this->tableSql($table); // 表结构信息 + $fields = $this->model->getFields($table); // 表字段 + $field_num = $this->model->getFieldNum($table); // 字段数量 + $all_data = $this->model->getAll($table); // 读取全部数据 + $sql .= $this->dataSql($table, $fields, $field_num, $all_data); // 生成语句 + $filename = $backdir . "/" . get_uniqid() . "_" . $backdir . "_" . $table . '.sql'; // 写入文件 + $result = $this->writeFile($filename, $sql); + } + return $result; + } + + // 备份整个数据库 + public function backupDB() + { + $sql = ''; + $sql .= $this->header(); // 备份文件头部说明 + $sql .= $this->dbSql(); // 数据库创建语句 + + $tables = $this->model->getTables(); // 获取所有表 + foreach ($tables as $table) { // 表结构及数据 + $sql .= $this->tableSql($table); // 表结构信息 + $fields = $this->model->getFields($table); // 表字段 + $field_num = $this->model->getFieldNum($table); // 字段数量 + $all_data = $this->model->getAll($table); // 读取全部数据 + if ($all_data) { + $sql .= $this->dataSql($table, $fields, $field_num, $all_data); // 生成数据语句 + } + $sql .= '-- --------------------------------------------------------' . PHP_EOL . PHP_EOL; + } + // 写入文件 + $filename = get_uniqid() . '_' . date('YmdHis') . '_' . $this->dbauth['dbname'] . '.sql'; + return $this->writeFile($filename, $sql); + } + + // 插入数据库备份基础信息 + private function header() + { + $sql = '-- Online Database Management SQL Dump' . PHP_EOL; + $sql .= '-- 数据库名: ' . $this->dbauth['dbname'] . PHP_EOL; + $sql .= '-- 生成日期: ' . date('Y-m-d H:i:s') . PHP_EOL; + $sql .= '-- PHP 版本: ' . phpversion() . PHP_EOL . PHP_EOL; + + $sql .= 'SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";' . PHP_EOL; + $sql .= 'SET time_zone = "+08:00";' . PHP_EOL; + $sql .= 'SET NAMES utf8;' . PHP_EOL . PHP_EOL; + + $sql .= '-- --------------------------------------------------------' . PHP_EOL . PHP_EOL; + return $sql; + } + + // 数据库创建语句 + private function dbSql() + { + $sql = ''; + $sql .= "--" . PHP_EOL; + $sql .= "-- 数据库名 `" . $this->dbauth['dbname'] . '`' . PHP_EOL; + $sql .= "--" . PHP_EOL . PHP_EOL; + + // 如果数据库不存在则创建 + $sql .= "CREATE DATABASE IF NOT EXISTS `" . $this->dbauth['dbname'] . '` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;' . PHP_EOL; + // 选择数据库 + $sql .= "USE `" . $this->dbauth['dbname'] . "`;" . PHP_EOL . PHP_EOL; + $sql .= '-- --------------------------------------------------------' . PHP_EOL . PHP_EOL; + return $sql; + } + + // 表结构语句 + private function tableSql($table) + { + $sql = ''; + $sql .= "--" . PHP_EOL; + $sql .= "-- 表的结构 `" . $table . '`' . PHP_EOL; + $sql .= "--" . PHP_EOL . PHP_EOL; + + $sql .= $this->model->tableStru($table); // 表创建语句 + return $sql; + } + + // 数据语句 + private function dataSql($table, $fields, $fieldNnum, $data) + { + if (! $data) + return; + $sql = ''; + $sql .= "--" . PHP_EOL; + $sql .= "-- 转存表中的数据 `" . $table . "`" . PHP_EOL; + $sql .= "--" . PHP_EOL; + $sql .= PHP_EOL; + + // 循环每个字段下面的内容 + + $sql .= "INSERT INTO `" . $table . "` (" . implode(',', $fields) . ") VALUES" . PHP_EOL; + $brackets = "("; + foreach ($data as $value) { + $sql .= $brackets; + $comma = ""; + for ($i = 0; $i < $fieldNnum; $i ++) { + $sql .= ($comma . "'" . decode_string($value[$i]) . "'"); + $comma = ","; + } + $sql .= ")"; + $brackets = "," . PHP_EOL . "("; + } + $sql .= ';' . PHP_EOL . PHP_EOL; + return $sql; + } + + // 写入文件 + private function writeFile($filename, $content) + { + $sqlfile = DOC_PATH . STATIC_DIR . '/backup/sql/' . $filename; + check_file($sqlfile, true); + if (file_put_contents($sqlfile, $content)) { + return true; + } + } + + // 获取并检查表名称 + private function getTableList() + { + $list = post('list'); + foreach ($list as $key => $value) { + if (! preg_match('/^[\w]+$/', $value)) { + unset($list[$key]); + } + } + return $list; + } +} \ No newline at end of file diff --git a/apps/admin/controller/system/MenuController.php b/apps/admin/controller/system/MenuController.php new file mode 100644 index 0000000..1fa448f --- /dev/null +++ b/apps/admin/controller/system/MenuController.php @@ -0,0 +1,275 @@ +model = new MenuModel(); + } + + // 菜单列表 + public function index() + { + $this->assign('list', true); + $menus = $this->model->getList(); + $this->assign('menus', $this->makeMenuList($menus)); + + // 菜单下拉列表 + $menus = $this->model->getSelect(); + $this->assign('menu_select', $this->makeMenuSelect($menus)); + + // 获取菜单按钮 + $this->assign('actions', get_type('T101')); + + $this->display('system/menu.html'); + } + + // 生成无限级菜单管理列表 + private function makeMenuList($tree) + { + // 循环生成 + foreach ($tree as $value) { + $this->count ++; + $this->outData[$this->count] = new \stdClass(); + $this->outData[$this->count]->id = $value->id; + $this->outData[$this->count]->blank = $this->blank; + $this->outData[$this->count]->name = $value->name; + $this->outData[$this->count]->mcode = $value->mcode; + $this->outData[$this->count]->pcode = $value->pcode; + $this->outData[$this->count]->sorting = $value->sorting; + $this->outData[$this->count]->url = $value->url; + $this->outData[$this->count]->status = $value->status; + $this->outData[$this->count]->shortcut = $value->shortcut; + $this->outData[$this->count]->ico = $value->ico; + $this->outData[$this->count]->create_user = $value->create_user; + $this->outData[$this->count]->update_user = $value->update_user; + $this->outData[$this->count]->create_time = $value->create_time; + $this->outData[$this->count]->update_time = $value->update_time; + + if ($value->son) { + $this->outData[$this->count]->son = true; + } else { + $this->outData[$this->count]->son = false; + } + // 子菜单处理 + if ($value->son) { + $this->blank .= '  '; + $this->makeMenuList($value->son); + } + } + // 循环完后回归缩进位置 + $this->blank = substr($this->blank, 0, - 6); + return $this->outData; + } + + // 菜单增加 + public function add() + { + if ($_POST) { + // 获取数据 + $mcode = get_auto_code($this->model->getLastCode()); // 自动编码 + $pcode = post('pcode', 'var'); + $name = post('name'); + $url = post('url'); + $sorting = post('sorting', 'int'); + $status = post('status', 'int'); + $shortcut = post('shortcut', 'int'); + $ico = post('ico'); + $actions = post('actions', 'array', false, '菜单按钮', array()); + + if (! $mcode) { + alert_back('编码不能为空!'); + } + if (! $pcode) { + $pcode = 0; // 父编码默认为0 + } + if (! $name) { + alert_back('菜单名称不能为空!'); + } + + if ($this->model->checkMenu("mcode='$mcode'")) { + alert_back('该菜单编号已经存在,不能再使用!'); + } + + // 菜单地址自动填充 + if (! $url) { + $url = '/' . M . '/' . $mcode . '/index'; + } + + // 构建数据 + $data = array( + 'mcode' => $mcode, + 'pcode' => $pcode, + 'name' => $name, + 'url' => $url, + 'sorting' => $sorting, + 'status' => $status, + 'shortcut' => $shortcut, + 'ico' => $ico, + 'create_user' => session('username'), + 'update_user' => session('username') + ); + + // 执行添加 + if ($this->model->addMenu($data, $actions)) { + $this->log('新增菜单' . $mcode . '成功!'); + if (! ! $backurl = get('backurl')) { + success('新增成功!', base64_decode($backurl)); + } else { + success('新增成功!', url('admin/Menu/index')); + } + } else { + $this->log('新增菜单' . $mcode . '失败!'); + error('新增失败!', - 1); + } + } + } + + // 生成菜单下拉列表 + private function makeMenuSelect($tree, $selectid = null) + { + // 初始化 + $menu_html = ''; + // 循环生成 + foreach ($tree as $value) { + // 默认选择项 + if ($selectid == $value->mcode) { + $select = "selected='selected'"; + } else { + $select = ''; + } + if (get('mcode') != $value->mcode) { // 不显示本身,避免出现自身为自己的父节点 + $menu_html .= "